import type { NobjcObject } from "objc-js";
import type { _MTL4BinaryFunction } from "./MTL4BinaryFunction.js";
import type { _MTL4BinaryFunctionDescriptor } from "./MTL4BinaryFunctionDescriptor.js";
import type { _MTL4CompilerTask } from "./MTL4CompilerTask.js";
import type { _MTL4CompilerTaskOptions } from "./MTL4CompilerTaskOptions.js";
import type { _MTL4ComputePipelineDescriptor } from "./MTL4ComputePipelineDescriptor.js";
import type { _MTL4LibraryDescriptor } from "./MTL4LibraryDescriptor.js";
import type { _MTL4MachineLearningPipelineDescriptor } from "./MTL4MachineLearningPipelineDescriptor.js";
import type { _MTL4MachineLearningPipelineState } from "./MTL4MachineLearningPipelineState.js";
import type { _MTL4PipelineDataSetSerializer } from "./MTL4PipelineDataSetSerializer.js";
import type { _MTL4PipelineDescriptor } from "./MTL4PipelineDescriptor.js";
import type { _MTL4PipelineStageDynamicLinkingDescriptor } from "./MTL4PipelineStageDynamicLinkingDescriptor.js";
import type { _MTL4RenderPipelineDynamicLinkingDescriptor } from "./MTL4RenderPipelineDynamicLinkingDescriptor.js";
import type { _MTLComputePipelineState } from "./MTLComputePipelineState.js";
import type { _MTLDevice } from "./MTLDevice.js";
import type { _MTLDynamicLibrary } from "./MTLDynamicLibrary.js";
import type { _MTLLibrary } from "./MTLLibrary.js";
import type { _MTLRenderPipelineState } from "./MTLRenderPipelineState.js";
import type { _NSError } from "../Foundation/NSError.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { _NSURL } from "../Foundation/NSURL.js";
export interface _MTL4Compiler {
    /**
     * Creates a new Metal library synchronously. - Parameters: - descriptor: A description of the library to create. - error: An optional parameter into which Metal stores information in case of an error. - Returns: a Metal library instance upon success, `nil` otherwise.
     */
    newLibraryWithDescriptor$error$?(descriptor: _MTL4LibraryDescriptor, error: NobjcObject | null): _MTLLibrary | null;
    /**
     * Creates a new dynamic library from a library containing Metal IR code synchronously. - Parameters: - library: A library from which this compiler creates the new a dynamic library - error: An optional parameter into which Metal stores information in case of an error. - Returns: A new dynamic Metal library upon success, `nil` otherwise.
     */
    newDynamicLibrary$error$?(library: _MTLLibrary, error: NobjcObject | null): _MTLDynamicLibrary | null;
    /**
     * Creates a new dynamic library from the contents of a file at an URL location synchronously. - Parameters: - url: An URL referencing a file whose contents this compiler uses to build a dynamic library. - error: An optional parameter into which Metal stores information in case of an error. - Returns: A new dynamic Metal library upon success, `nil` otherwise.
     */
    newDynamicLibraryWithURL$error$?(url: _NSURL, error: NobjcObject | null): _MTLDynamicLibrary | null;
    /**
     * Creates a new compute pipeline state object synchronously. - Parameters: - descriptor: A compute pipeline state descriptor describing the pipeline this compiler creates. - compilerTaskOptions: A description of the compilation process itself, providing parameters that influence execution of the compilation process. - error: An optional parameter into which Metal stores information in case of an error. - Returns: A new compute pipeline state object upon success, `nil` otherwise.
     */
    newComputePipelineStateWithDescriptor$compilerTaskOptions$error$?(descriptor: _MTL4ComputePipelineDescriptor, compilerTaskOptions: _MTL4CompilerTaskOptions | null, error: NobjcObject | null): _MTLComputePipelineState | null;
    /**
     * Creates a new compute pipeline state synchronously. - Parameters: - descriptor: A compute pipeline state descriptor describing the pipeline this compiler creates. - dynamicLinkingDescriptor: An optional parameter that provides additional configuration for linking the pipeline state object. - compilerTaskOptions: A description of the compilation process itself, providing parameters that influence execution of the compilation process. - error: An optional parameter into which Metal stores information in case of an error. - Returns: A new compute pipeline state object upon success, `nil` otherwise.
     */
    newComputePipelineStateWithDescriptor$dynamicLinkingDescriptor$compilerTaskOptions$error$?(descriptor: _MTL4ComputePipelineDescriptor, dynamicLinkingDescriptor: _MTL4PipelineStageDynamicLinkingDescriptor | null, compilerTaskOptions: _MTL4CompilerTaskOptions | null, error: NobjcObject | null): _MTLComputePipelineState | null;
    /**
     * Creates a new render pipeline state synchronously. Use this method to build any render pipeline type, including render, tile, and mesh render pipeline states. The type of the descriptor you pass indicates the pipeline type this method builds. Passing in a compute pipeline descriptor to the `descriptor` parameter produces an error. - Parameters: - descriptor: A render, tile, or mesh pipeline state descriptor that describes the pipeline to create. - compilerTaskOptions: A description of the compilation process itself, providing parameters that influence execution of the compilation process. - error: An optional parameter into which Metal stores information in case of an error. - Returns: A new render pipeline state object upon success, `nil` otherwise.
     */
    newRenderPipelineStateWithDescriptor$compilerTaskOptions$error$?(descriptor: _MTL4PipelineDescriptor, compilerTaskOptions: _MTL4CompilerTaskOptions | null, error: NobjcObject | null): _MTLRenderPipelineState | null;
    /**
     * Creates a new render pipeline state synchronously. Use this method to build any render pipeline type, including render, tile, and mesh render pipeline states. The type of the descriptor you pass indicates the pipeline type this method builds. Passing in a compute pipeline descriptor to the `descriptor` parameter produces an error. - Parameters: - descriptor: A render, tile, or mesh pipeline state descriptor that describes the pipeline to create. - dynamicLinkingDescriptor: An optional parameter that provides additional configuration for linking the pipeline state object. - compilerTaskOptions: A description of the compilation process itself, providing parameters that influence execution of the compilation process. - error: An optional parameter into which Metal stores information in case of an error. - Returns: A new render pipeline state object upon success, `nil` otherwise.
     */
    newRenderPipelineStateWithDescriptor$dynamicLinkingDescriptor$compilerTaskOptions$error$?(descriptor: _MTL4PipelineDescriptor, dynamicLinkingDescriptor: _MTL4RenderPipelineDynamicLinkingDescriptor | null, compilerTaskOptions: _MTL4CompilerTaskOptions | null, error: NobjcObject | null): _MTLRenderPipelineState | null;
    /**
     * Creates a new render pipeline state from another, previously unspecialized, pipeline state. Metal specializes the pipeline state with new state values the descriptor provides, observing the following rules: * The compiler only updates properties that were originally specified as *unspecialized*. It doesn't modify other already-specialized properties * The compiler sets to their default behavior any unspecialized properties that your passed-in descriptor doesn't specialize Additionally, there are some cases where the Metal can't specialize a pipeline: * If the original pipeline state object doesn't have any unspecialized properties * You can't re-specialize a previously specialized pipeline state object - Parameters: - descriptor: A render pipeline state descriptor or any type: default, tile, or mesh render pipeline descriptor. - pipeline: A render pipeline state containing unspecialized substate. - error: An optional parameter into which Metal stores information in case of an error. - Returns: a fully-specialized pipeline state object.
     */
    newRenderPipelineStateBySpecializationWithDescriptor$pipeline$error$?(descriptor: _MTL4PipelineDescriptor, pipeline: _MTLRenderPipelineState, error: NobjcObject | null): _MTLRenderPipelineState | null;
    /**
     * Creates a new binary visible or intersection function synchronously. - Parameters: - descriptor: A binary function descriptor to use for creating the binary function. - compilerTaskOptions: A descriptor of the compilation itself, providing parameters that influence execution of the compilation process. - error: An optional parameter into which Metal stores information in case of an error. - Returns: a new binary function upon success, `nil` otherwise.
     */
    newBinaryFunctionWithDescriptor$compilerTaskOptions$error$?(descriptor: _MTL4BinaryFunctionDescriptor, compilerTaskOptions: _MTL4CompilerTaskOptions | null, error: NobjcObject | null): _MTL4BinaryFunction | null;
    /**
     * Creates a new Metal library instance asynchronously. - Parameters: - descriptor: A description of the library to create. - completionHandler: A block Metal calls when it finishes the build task. - Returns: a compiler task representing the asynchronous compilation task.
     */
    newLibraryWithDescriptor$completionHandler$?(descriptor: _MTL4LibraryDescriptor, completionHandler: (arg0: _MTLLibrary, arg1: _NSError) => void): _MTL4CompilerTask;
    /**
     * Creates a new dynamic Metal library instance asynchronously. - Parameters: - library: A library from which this compiler creates the new a dynamic library - completionHandler: A block Metal calls when it finishes the build task. - Returns: A compiler task representing the asynchronous compilation task.
     */
    newDynamicLibrary$completionHandler$?(library: _MTLLibrary, completionHandler: (arg0: _MTLDynamicLibrary, arg1: _NSError) => void): _MTL4CompilerTask;
    /**
     * Creates a new dynamic library from the contents of a file at an URL location synchronously. - Parameters: - url: An URL referencing a file whose contents this compiler uses to build a dynamic library. - completionHandler: A block Metal calls when it finishes the build task. - Returns: a compiler task representing the asynchronous compilation task.
     */
    newDynamicLibraryWithURL$completionHandler$?(url: _NSURL, completionHandler: (arg0: _MTLDynamicLibrary, arg1: _NSError) => void): _MTL4CompilerTask;
    /**
     * Creates a new compute pipeline state asynchronously. - Parameters: - descriptor: A compute pipeline state descriptor, describing the compute pipeline to create. - compilerTaskOptions: A descriptor of the compilation itself, providing parameters that influence execution of the compilation process. - completionHandler: A block Metal calls when it finishes the build task. - Returns: a compiler task representing the asynchronous compilation task.
     */
    newComputePipelineStateWithDescriptor$compilerTaskOptions$completionHandler$?(descriptor: _MTL4ComputePipelineDescriptor, compilerTaskOptions: _MTL4CompilerTaskOptions | null, completionHandler: (arg0: _MTLComputePipelineState, arg1: _NSError) => void): _MTL4CompilerTask;
    /**
     * Creates a new compute pipeline state asynchronously. - Parameters: - descriptor: A compute pipeline state descriptor, describing the compute pipeline to create. - dynamicLinkingDescriptor: An optional parameter that provides additional configuration for linking the pipeline state object. - compilerTaskOptions: A description of the compilation process itself, providing parameters that influence execution of the compilation process. - completionHandler: A block Metal calls when it finishes the build task. - Returns: a compiler task representing the asynchronous compilation task.
     */
    newComputePipelineStateWithDescriptor$dynamicLinkingDescriptor$compilerTaskOptions$completionHandler$?(descriptor: _MTL4ComputePipelineDescriptor, dynamicLinkingDescriptor: _MTL4PipelineStageDynamicLinkingDescriptor | null, compilerTaskOptions: _MTL4CompilerTaskOptions | null, completionHandler: (arg0: _MTLComputePipelineState, arg1: _NSError) => void): _MTL4CompilerTask;
    /**
     * Creates a new render pipeline state asynchronously. Use this method to build any render pipeline type, including render, tile, and mesh render pipeline states. The type of the descriptor you pass indicates the pipeline type this method builds. Passing in a compute pipeline descriptor to the `descriptor` parameter produces an error. - Parameters: - descriptor: A render, tile, or mesh pipeline state descriptor that describes the pipeline to create. - compilerTaskOptions: A description of the compilation process itself, providing parameters that influence execution of the compilation process. - completionHandler: A block Metal calls when it finishes the build task. - Returns: a compiler task representing the asynchronous compilation task.
     */
    newRenderPipelineStateWithDescriptor$compilerTaskOptions$completionHandler$?(descriptor: _MTL4PipelineDescriptor, compilerTaskOptions: _MTL4CompilerTaskOptions | null, completionHandler: (arg0: _MTLRenderPipelineState, arg1: _NSError) => void): _MTL4CompilerTask;
    /**
     * Creates a new render pipeline state asynchronously. Use this method to build any render pipeline type, including render, tile, and mesh render pipeline states. The type of the descriptor you pass indicates the pipeline type this method builds. Passing in a compute pipeline descriptor to the `descriptor` parameter produces an error. - Parameters: - descriptor: A render, tile, or mesh pipeline state descriptor that describes the pipeline to create. - dynamicLinkingDescriptor: An optional parameter that provides additional configuration for linking the pipeline state object. - compilerTaskOptions: A description of the compilation process itself, providing parameters that influence execution of the compilation process. - completionHandler: A block Metal calls when it finishes the build task. - Returns: a compiler task representing the asynchronous compilation task.
     */
    newRenderPipelineStateWithDescriptor$dynamicLinkingDescriptor$compilerTaskOptions$completionHandler$?(descriptor: _MTL4PipelineDescriptor, dynamicLinkingDescriptor: _MTL4RenderPipelineDynamicLinkingDescriptor | null, compilerTaskOptions: _MTL4CompilerTaskOptions | null, completionHandler: (arg0: _MTLRenderPipelineState, arg1: _NSError) => void): _MTL4CompilerTask;
    /**
     * Creates a new render pipeline state from another, previously unspecialized, pipeline state Metal specializes the pipeline state with new state values the descriptor provides, observing the following rules: * The compiler only updates properties that were originally specified as *unspecialized*. It doesn't modify other already-specialized properties * The compiler sets to their default behavior any unspecialized properties that your passed-in descriptor doesn't specialize Additionally, there are some cases where the Metal can't specialize a pipeline: * If the original pipeline state object doesn't have any unspecialized properties * You can't re-specialize a previously specialized pipeline state object - Parameters: - descriptor: A render pipeline state descriptor or any type: default, tile, or mesh render pipeline descriptor. - pipeline: A render pipeline state containing unspecialized substate. - completionHandler: A block Metal calls when it finishes the build task. - Returns: a compiler task representing the asynchronous compilation task.
     */
    newRenderPipelineStateBySpecializationWithDescriptor$pipeline$completionHandler$?(descriptor: _MTL4PipelineDescriptor, pipeline: _MTLRenderPipelineState, completionHandler: (arg0: _MTLRenderPipelineState, arg1: _NSError) => void): _MTL4CompilerTask;
    /**
     * Returns a new compiler task that asyncrhonously creates a binary version of a GPU visible function or GPU intersection function. - Parameters: - descriptor: A configuration that tells the method which GPU function to make into a binary function and which options to apply when compiling it. - compilerTaskOptions: A configuration for the compiler task. - completionHandler: A completetion handler that you provide, which the task calls when it finishes compiling the binary function.
     */
    newBinaryFunctionWithDescriptor$compilerTaskOptions$completionHandler$?(descriptor: _MTL4BinaryFunctionDescriptor, compilerTaskOptions: _MTL4CompilerTaskOptions | null, completionHandler: (arg0: _MTL4BinaryFunction, arg1: _NSError) => void): _MTL4CompilerTask;
    /**
     * Creates a new ML pipeline state with descriptor. - Parameters: - descriptor: A machine learning pipeline state descriptor to use for creating the new pipeline state. - error: An optional parameter into which Metal stores information in case of an error. - Returns: A machine learning pipeline state if operation is successful, otherwise `nil`.
     */
    newMachineLearningPipelineStateWithDescriptor$error$?(descriptor: _MTL4MachineLearningPipelineDescriptor, error: NobjcObject | null): _MTL4MachineLearningPipelineState | null;
    /**
     * Creates a new machine learning pipeline state asynchronously. - Parameters: - descriptor: A machine learning pipeline state descriptor to use for creating the new pipeline state. - completionHandler: A block Metal calls when it finishes the build task. - Returns: a compiler task representing the asynchronous compilation task.
     */
    newMachineLearningPipelineStateWithDescriptor$completionHandler$?(descriptor: _MTL4MachineLearningPipelineDescriptor, completionHandler: (arg0: _MTL4MachineLearningPipelineState, arg1: _NSError) => void): _MTL4CompilerTask;
    /** Returns the device that this compiler belongs to. */
    device?(): _MTLDevice;
    /** Returns the optional label you specify at creation time. */
    label?(): _NSString | null;
    /**
     * Returns the pipeline data set serializer into which this compiler stores data for all pipelines it creates.
     */
    pipelineDataSetSerializer?(): _MTL4PipelineDataSetSerializer | null;
}
