import type { NobjcObject } from "objc-js";
import type { _MTLDevice } from "./MTLDevice.js";
import type { _MTLFunction } from "./MTLFunction.js";
import type { _MTLFunctionConstantValues } from "./MTLFunctionConstantValues.js";
import type { _MTLFunctionDescriptor } from "./MTLFunctionDescriptor.js";
import type { _MTLFunctionReflection } from "./MTLFunctionReflection.js";
import type { _MTLIntersectionFunctionDescriptor } from "./MTLIntersectionFunctionDescriptor.js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSError } from "../Foundation/NSError.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { MTLLibraryType } from "./MTLLibraryType.js";
export interface _MTLLibrary {
    /**
     * @method newFunctionWithName @abstract Returns a pointer to a function object, return nil if the function is not found in the library.
     */
    newFunctionWithName$?(functionName: _NSString): _MTLFunction | null;
    /**
     * @method newFunctionWithName:constantValues:error: @abstract Returns a pointer to a function object obtained by applying the constant values to the named function. @discussion This method will call the compiler. Use newFunctionWithName:constantValues:completionHandler: to avoid waiting on the compiler.
     */
    newFunctionWithName$constantValues$error$?(name: _NSString, constantValues: _MTLFunctionConstantValues, error: NobjcObject | null): _MTLFunction | null;
    /**
     * @method newFunctionWithName:constantValues:completionHandler: @abstract Returns a pointer to a function object obtained by applying the constant values to the named function. @discussion This method is asynchronous since it is will call the compiler.
     */
    newFunctionWithName$constantValues$completionHandler$?(name: _NSString, constantValues: _MTLFunctionConstantValues, completionHandler: ((function_: _MTLFunction, error: _NSError) => void) | null): void;
    /**
     * Retrieves reflection information for a function in the library. - Parameters: - functionName: The name of a GPU function in the library. The name needs to match one of the elements in the string array of library's ``functionNames`` property. - Returns: An `MTLFunctionReflection` instance when the method succeeds; otherwise `nil`. The reflection instance contains metadata information about a specific GPU function, which can include: * Function parameters * Return types * Bindings * Annotations from a developer, if available - Note: The Metal compiler generates the function's reflection information when you or Xcode build the library. The method only returns reflection information if all of the following conditions apply: * The library has a function with a name that matches `functionName`. * The deployment target is macOS 13.0 or later, or iOS 16.0 or later, or visionOS 2.0 or later.
     */
    reflectionForFunctionWithName$?(functionName: _NSString): _MTLFunctionReflection | null;
    /**
     * @method newFunctionWithDescriptor:completionHandler: @abstract Create a new MTLFunction object asynchronously.
     */
    newFunctionWithDescriptor$completionHandler$?(descriptor: _MTLFunctionDescriptor, completionHandler: ((function_: _MTLFunction, error: _NSError) => void) | null): void;
    /**
     * @method newFunctionWithDescriptor:error: @abstract Create a new MTLFunction object synchronously.
     */
    newFunctionWithDescriptor$error$?(descriptor: _MTLFunctionDescriptor, error: NobjcObject | null): _MTLFunction | null;
    /**
     * @method newIntersectionFunctionWithDescriptor:completionHandler: @abstract Create a new MTLFunction object asynchronously.
     */
    newIntersectionFunctionWithDescriptor$completionHandler$?(descriptor: _MTLIntersectionFunctionDescriptor, completionHandler: ((function_: _MTLFunction, error: _NSError) => void) | null): void;
    /**
     * @method newIntersectionFunctionWithDescriptor:error: @abstract Create a new MTLFunction object synchronously.
     */
    newIntersectionFunctionWithDescriptor$error$?(descriptor: _MTLIntersectionFunctionDescriptor, error: NobjcObject | null): _MTLFunction | null;
    /** @property label @abstract A string to help identify this object. */
    label?(): _NSString | null;
    setLabel$?(value: _NSString | null): void;
    /**
     * @property device @abstract The device this resource was created against. This resource can only be used with this device.
     */
    device?(): _MTLDevice;
    /**
     * @property functionNames @abstract The array contains NSString objects, with the name of each function in library.
     */
    functionNames?(): _NSArray;
    /**
     * @property type @abstract The library type provided when this MTLLibrary was created. Libraries with MTLLibraryTypeExecutable can be used to obtain MTLFunction from. Libraries with MTLLibraryTypeDynamic can be used to resolve external references in other MTLLibrary from. @see MTLCompileOptions
     */
    type?(): MTLLibraryType;
    /**
     * @property installName @abstract The installName provided when this MTLLibrary was created. @discussion Always nil if the type of the library is not MTLLibraryTypeDynamic. @see MTLCompileOptions
     */
    installName?(): _NSString | null;
}
