import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSCopying } from "../Foundation/NSCopying.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { _MTLFunction } from "./MTLFunction.js";
import type { _MTLLinkedFunctions } from "./MTLLinkedFunctions.js";
import type { _MTLPipelineBufferDescriptorArray } from "./MTLPipelineBufferDescriptorArray.js";
import type { _MTLStageInputOutputDescriptor } from "./MTLStageInputOutputDescriptor.js";
import type { MTLSize } from "../structs/MTLSize.js";
import type { MTLShaderValidation } from "./MTLShaderValidation.js";
export declare class _MTLComputePipelineDescriptor extends _NSObject {
    static alloc(): _MTLComputePipelineDescriptor;
    static new(): _MTLComputePipelineDescriptor;
    init(): _MTLComputePipelineDescriptor;
    /**
     * @method reset @abstract Restore all compute pipeline descriptor properties to their default values.
     */
    reset(): void;
    /** @property label @abstract A string to help identify this object. */
    label(): _NSString | null;
    setLabel$(value: _NSString | null): void;
    /**
     * @property computeFunction @abstract The function to use with the MTLComputePipelineState
     */
    computeFunction(): _MTLFunction | null;
    setComputeFunction$(value: _MTLFunction | null): void;
    /**
     * @property threadGroupSizeIsMultipleOfThreadExecutionWidth @abstract An optimization flag, set if the thread group size will always be a multiple of thread execution width
     */
    threadGroupSizeIsMultipleOfThreadExecutionWidth(): boolean;
    setThreadGroupSizeIsMultipleOfThreadExecutionWidth$(value: boolean): void;
    /**
     * @property maxTotalThreadsPerThreadgroup @abstract Optional property. Set the maxTotalThreadsPerThreadgroup. If it is not set, returns zero.
     */
    maxTotalThreadsPerThreadgroup(): number;
    setMaxTotalThreadsPerThreadgroup$(value: number): void;
    /**
     * @property computeDataDescriptor @abstract An MTLStageInputOutputDescriptor to fetch data from buffers
     */
    stageInputDescriptor(): _MTLStageInputOutputDescriptor | null;
    setStageInputDescriptor$(value: _MTLStageInputOutputDescriptor | null): void;
    /**
     * @property buffers @abstract Optional properties for each buffer binding used by the compute function.
     */
    buffers(): _MTLPipelineBufferDescriptorArray;
    /**
     * @property supportIndirectCommandBuffers @abstract This flag makes this pipeline usable with indirect command buffers.
     */
    supportIndirectCommandBuffers(): boolean;
    setSupportIndirectCommandBuffers$(value: boolean): void;
    /**
     * @property insertLibraries @abstract The set of MTLDynamicLibrary to use to resolve external symbols before considering symbols from dependent MTLDynamicLibrary. @discussion Typical workflows use the libraries property of MTLCompileOptions to record dependent libraries at compile time without having to use insertLibraries. This property can be used to override symbols from dependent libraries for experimentation or evaluating alternative implementations. It can also be used to provide dynamic libraries that are dynamically created (for example, from source) that have no stable installName that can be used to automatically load from the file system. @see MTLDynamicLibrary
     * @deprecated preloadedLibraries
     */
    insertLibraries(): _NSArray | null;
    setInsertLibraries$(value: _NSArray | null): void;
    /**
     * @property preloadedLibraries @abstract The set of MTLDynamicLibrary to use to resolve external symbols before considering symbols from dependent MTLDynamicLibrary. @discussion Typical workflows use the libraries property of MTLCompileOptions to record dependent libraries at compile time without having to use preloadedLibraries. This property can be used to override symbols from dependent libraries for experimentation or evaluating alternative implementations. It can also be used to provide dynamic libraries that are dynamically created (for example, from source) that have no stable installName that can be used to automatically load from the file system. @see MTLDynamicLibrary
     */
    preloadedLibraries(): _NSArray;
    setPreloadedLibraries$(value: _NSArray): void;
    /**
     * @property binaryArchives @abstract The set of MTLBinaryArchive to search for compiled code when creating the pipeline state. @discussion Accelerate pipeline state creation by providing archives of compiled code such that no compilation needs to happen on the fast path. @see MTLBinaryArchive
     */
    binaryArchives(): _NSArray | null;
    setBinaryArchives$(value: _NSArray | null): void;
    /**
     * @property linkedFunctions @abstract The set of functions to be linked with the pipeline state and accessed from the compute function. @see MTLLinkedFunctions
     */
    linkedFunctions(): _MTLLinkedFunctions | null;
    setLinkedFunctions$(value: _MTLLinkedFunctions | null): void;
    /**
     * @property supportAddingBinaryFunctions @abstract This flag makes this pipeline support creating a new pipeline by adding binary functions.
     */
    supportAddingBinaryFunctions(): boolean;
    setSupportAddingBinaryFunctions$(value: boolean): void;
    /**
     * @property maxCallStackDepth @abstract The maximum depth of the call stack in stack frames from the kernel. Defaults to 1 additional stack frame.
     */
    maxCallStackDepth(): number;
    setMaxCallStackDepth$(value: number): void;
    /**
     * @property shaderValidation @abstract Toggle that determines whether Metal Shader Validation should be enabled or disabled for the pipeline. @discussion The value can be overridden using `MTL_SHADER_VALIDATION_ENABLE_PIPELINES` or `MTL_SHADER_VALIDATION_DISABLE_PIPELINES` Environment Variables.
     */
    shaderValidation(): MTLShaderValidation;
    setShaderValidation$(value: MTLShaderValidation): void;
    /**
     * @property requiredThreadsPerThreadgroup @abstract Sets the required threads-per-threadgroup during dispatches. The `threadsPerThreadgroup` argument of any dispatch must match this value if it is set. Optional, unless the pipeline is going to use CooperativeTensors in which case this must be set. Setting this to a size of 0 in every dimension disables this property
     */
    requiredThreadsPerThreadgroup(): MTLSize;
    setRequiredThreadsPerThreadgroup$(value: MTLSize): void;
}
export interface _MTLComputePipelineDescriptor extends _NSCopying {
}
