import type { NobjcObject } from "objc-js";
import type { _MTL4BinaryFunction } from "./MTL4BinaryFunction.js";
import type { _MTL4PipelineDescriptor } from "./MTL4PipelineDescriptor.js";
import type { _MTL4RenderPipelineBinaryFunctionsDescriptor } from "./MTL4RenderPipelineBinaryFunctionsDescriptor.js";
import type { _MTLAllocation } from "./MTLAllocation.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 { _MTLRenderPipelineFunctionsDescriptor } from "./MTLRenderPipelineFunctionsDescriptor.js";
import type { _MTLRenderPipelineReflection } from "./MTLRenderPipelineReflection.js";
import type { _MTLVisibleFunctionTable } from "./MTLVisibleFunctionTable.js";
import type { _MTLVisibleFunctionTableDescriptor } from "./MTLVisibleFunctionTableDescriptor.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { MTLResourceID } from "../structs/MTLResourceID.js";
import type { MTLSize } from "../structs/MTLSize.js";
import type { MTLRenderStages } from "./MTLRenderStages.js";
import type { MTLShaderValidation } from "./MTLShaderValidation.js";
export interface _MTLRenderPipelineState extends _MTLAllocation {
    /**
     * Obtains a function handle for the a specific function this pipeline links at the Metal IR level. - Parameters: - name: A string containing the name of the function. - stage: The shader stage that uses the function. - Returns: a function handle representing the function if present, otherwise `nil`.
     */
    functionHandleWithName$stage$?(name: _NSString, stage: MTLRenderStages): _MTLFunctionHandle | null;
    /**
     * Obtains the function handle for a specific function this pipeline state links at the binary level. - Parameters: - function: a binary function to retrieve the handle. - stage: The shader stage that uses the function. - Returns: a function handle representing the function if present, otherwise `nil`.
     */
    functionHandleWithBinaryFunction$stage$?(function_: _MTL4BinaryFunction, stage: MTLRenderStages): _MTLFunctionHandle | null;
    /**
     * Creates a new render pipeline state by adding binary functions to each stage of this pipeline state. - Parameters: - binaryFunctionsDescriptor: A non-`nil` dynamic linking descriptor. - error: An optional pointer that Metal populates with information in case of an error. - Returns: A new render pipeline state upon success, otherwise `nil`.
     */
    newRenderPipelineStateWithBinaryFunctions$error$?(binaryFunctionsDescriptor: _MTL4RenderPipelineBinaryFunctionsDescriptor, error: NobjcObject | null): _MTLRenderPipelineState | null;
    /**
     * Creates a render pipeline descriptor from this pipeline that you can use for pipeline specialization. Use this method to obtain a new ``MTL4PipelineDescriptor`` instance that you can use to specialize any unspecialized properties in this pipeline state object. The returned descriptor contains every unspecialized field in the current pipeline state object, set to unspecialized. It may, however, not contain valid or accurate properties in any other field. This descriptor is only valid for the purpose of calling specialization functions on the ``MTL4Compiler`` to specialize this pipeline, for example: ``MTL4Compiler/newRenderPipelineStateBySpecializationWithDescriptor:pipeline:error:``. Although this method returns the ``MTL4PipelineDescriptor`` base class, the concrete instance this method returns corresponds to the specific descriptor type for the creation of this pipeline state, for example if a ``MTL4Compiler`` instance creates this current pipeline form a ``MTLTileRenderPipelineDescriptor``, this method returns a concrete ``MTLTileRenderPipelineDescriptor`` instance. - Returns: a new pipeline descriptor that you use for pipeline state specialization.
     */
    newRenderPipelineDescriptorForSpecialization?(): _MTL4PipelineDescriptor;
    /**
     * Returns imageblock memory length for given image block dimensions. Dimensions must be valid tile dimensions.
     */
    imageblockMemoryLengthForDimensions$?(imageblockDimensions: MTLSize): number;
    /**
     * Gets the function handle for the specified function on the specified stage of the pipeline.
     */
    functionHandleWithFunction$stage$?(function_: _MTLFunction, stage: MTLRenderStages): _MTLFunctionHandle | null;
    /**
     * Allocate a visible function table for the specified stage of the pipeline with the provided descriptor.
     */
    newVisibleFunctionTableWithDescriptor$stage$?(descriptor: _MTLVisibleFunctionTableDescriptor, stage: MTLRenderStages): _MTLVisibleFunctionTable | null;
    /**
     * Allocate an intersection function table for the specified stage of the pipeline with the provided descriptor.
     */
    newIntersectionFunctionTableWithDescriptor$stage$?(descriptor: _MTLIntersectionFunctionTableDescriptor, stage: MTLRenderStages): _MTLIntersectionFunctionTable | null;
    /**
     * Allocate a new render pipeline state by adding binary functions for each stage of this pipeline state.
     */
    newRenderPipelineStateWithAdditionalBinaryFunctions$error$?(additionalBinaryFunctions: _MTLRenderPipelineFunctionsDescriptor, error: NobjcObject | null): _MTLRenderPipelineState | null;
    label?(): _NSString | null;
    device?(): _MTLDevice;
    /**
     * Obtains a reflection object for this render pipeline. When you create the pipeline through an ``MTLDevice`` instance, reflection is `nil`.
     */
    reflection?(): _MTLRenderPipelineReflection | null;
    /**
     * The maximum total number of threads that can be in a single tile shader threadgroup.
     */
    maxTotalThreadsPerThreadgroup?(): number;
    /**
     * Returns true when the pipeline state requires a tile shader threadgroup size equal to the tile size
     */
    threadgroupSizeMatchesTileSize?(): boolean;
    /**
     * Returns imageblock memory length used by a single sample when rendered using this pipeline.
     */
    imageblockSampleLength?(): number;
    supportIndirectCommandBuffers?(): boolean;
    /**
     * The maximum total number of threads that can be in a single object shader threadgroup. This value is set in MTLMeshRenderPipelineDescriptor.
     */
    maxTotalThreadsPerObjectThreadgroup?(): number;
    /**
     * The maximum total number of threads that can be in a single mesh shader threadgroup. This value is set in MTLMeshRenderPipelineDescriptor.
     */
    maxTotalThreadsPerMeshThreadgroup?(): number;
    /**
     * The number of threads in a SIMD group of the object shader. This value is also available in the shader with the [[threads_per_simdgroup]] attribute.
     */
    objectThreadExecutionWidth?(): number;
    /**
     * The number of threads in a SIMD group of the mesh shader. This value is also available in the shader with the [[threads_per_simdgroup]] attribute.
     */
    meshThreadExecutionWidth?(): number;
    /**
     * The maximum total number of threadgroups that can be in a single mesh shader grid. This value is set in MTLMeshRenderPipelineDescriptor.
     */
    maxTotalThreadgroupsPerMeshGrid?(): number;
    /** Handle of the GPU resource suitable for storing in an Argument Buffer */
    gpuResourceID?(): MTLResourceID;
    /** Current state of Shader Validation for the pipeline. */
    shaderValidation?(): MTLShaderValidation;
    /** The required size of every tile shader threadgroup. */
    requiredThreadsPerTileThreadgroup?(): MTLSize;
    /**
     * The required size of every object shader threadgroup. This value is set in MTLMeshRenderPipelineDescriptor.
     */
    requiredThreadsPerObjectThreadgroup?(): MTLSize;
    /**
     * The required size of every mesh shader threadgroup. This value is set in MTLMeshRenderPipelineDescriptor.
     */
    requiredThreadsPerMeshThreadgroup?(): MTLSize;
}
