import type { NobjcObject } from "objc-js";
import type { _MTL4BinaryFunction } from "./MTL4BinaryFunction.js";
import type { _MTLAllocation } from "./MTLAllocation.js";
import type { _MTLComputePipelineReflection } from "./MTLComputePipelineReflection.js";
import type { _MTLDevice } from "./MTLDevice.js";
import type { _MTLFunction } from "./MTLFunction.js";
import type { _MTLFunctionHandle } from "./MTLFunctionHandle.js";
import type { _MTLIntersectionFunctionTable } from "./MTLIntersectionFunctionTable.js";
import type { _MTLIntersectionFunctionTableDescriptor } from "./MTLIntersectionFunctionTableDescriptor.js";
import type { _MTLVisibleFunctionTable } from "./MTLVisibleFunctionTable.js";
import type { _MTLVisibleFunctionTableDescriptor } from "./MTLVisibleFunctionTableDescriptor.js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { MTLResourceID } from "../structs/MTLResourceID.js";
import type { MTLSize } from "../structs/MTLSize.js";
import type { MTLShaderValidation } from "./MTLShaderValidation.js";
export interface _MTLComputePipelineState extends _MTLAllocation {
    /**
     * Gets the function handle for a function this pipeline links at the Metal IR level by name. - Parameters: - name: A string representing the name of the function. - Returns: A function handle corresponding to the function if the name matches a function in this pipeline state, otherwise `nil`.
     */
    functionHandleWithName$?(name: _NSString): _MTLFunctionHandle | null;
    /**
     * Gets the function handle for a function this pipeline links at the binary level. - Parameters: - function: A binary function object representing the function binary to find. - Returns: A function handle corresponding to the function if the binary function mathces a function in this pipeline state, otherwise `nil`.
     */
    functionHandleWithBinaryFunction$?(function_: _MTL4BinaryFunction): _MTLFunctionHandle | null;
    /**
     * Allocates a new compute pipeline state by adding binary functions to this pipeline state. - Parameters: - additionalBinaryFunctions: A non-`nil` array containing binary functions to add to this pipeline. - error: An optional parameter into which Metal stores information in case of an error. - Returns: A new compute pipeline state upon success, otherwise `nil`.
     */
    newComputePipelineStateWithBinaryFunctions$error$?(additionalBinaryFunctions: _NSArray, error: NobjcObject | null): _MTLComputePipelineState | null;
    /**
     * @method imageblockMemoryLengthForDimensions: @brief Returns imageblock memory length for given image block dimensions.
     */
    imageblockMemoryLengthForDimensions$?(imageblockDimensions: MTLSize): number;
    /**
     * @method functionHandleWithFunction: @brief Get the function handle for the specified function from the pipeline state.
     */
    functionHandleWithFunction$?(function_: _MTLFunction): _MTLFunctionHandle | null;
    /**
     * @method newRenderPipelineStateWithAdditionalBinaryFunctions:stage: @brief Allocate a new compute pipeline state by adding binary functions to this pipeline state.
     */
    newComputePipelineStateWithAdditionalBinaryFunctions$error$?(functions: _NSArray, error: NobjcObject | null): _MTLComputePipelineState | null;
    /**
     * @method newVisibleFunctionTableWithDescriptor: @brief Allocate a visible function table for the pipeline with the provided descriptor.
     */
    newVisibleFunctionTableWithDescriptor$?(descriptor: _MTLVisibleFunctionTableDescriptor): _MTLVisibleFunctionTable | null;
    /**
     * @method newIntersectionFunctionTableWithDescriptor: @brief Allocate an intersection function table for the pipeline with the provided descriptor.
     */
    newIntersectionFunctionTableWithDescriptor$?(descriptor: _MTLIntersectionFunctionTableDescriptor): _MTLIntersectionFunctionTable | null;
    label?(): _NSString | null;
    /**
     * Provides access to this compute pipeline's reflection. Reflection is `nil` if you create the pipeline state object directly from the ``MTLDevice`` protocol.
     */
    reflection?(): _MTLComputePipelineReflection | null;
    /**
     * @property device @abstract The device this resource was created against. This resource can only be used with this device.
     */
    device?(): _MTLDevice;
    /**
     * @property maxTotalThreadsPerThreadgroup @abstract The maximum total number of threads that can be in a single compute threadgroup.
     */
    maxTotalThreadsPerThreadgroup?(): number;
    /**
     * @property threadExecutionWidth @abstract For most efficient execution, the threadgroup size should be a multiple of this when executing the kernel.
     */
    threadExecutionWidth?(): number;
    /**
     * @property staticThreadgroupMemoryLength @abstract The length in bytes of threadgroup memory that is statically allocated.
     */
    staticThreadgroupMemoryLength?(): number;
    /**
     * @property supportIndirectCommandBuffers @abstract Tells whether this pipeline state is usable through an Indirect Command Buffer.
     */
    supportIndirectCommandBuffers?(): boolean;
    /**
     * @property gpuResourceID @abstract Handle of the GPU resource suitable for storing in an Argument Buffer
     */
    gpuResourceID?(): MTLResourceID;
    /**
     * @property shaderValidation @abstract Current state of Shader Validation for the pipeline.
     */
    shaderValidation?(): MTLShaderValidation;
    /**
     * @property requiredThreadsPerThreadgroup @abstract The required size of every compute threadgroup.
     */
    requiredThreadsPerThreadgroup?(): MTLSize;
}
