import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSCopying } from "../Foundation/NSCopying.js";
import type { _NSDictionary } from "../Foundation/NSDictionary.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { MTLSize } from "../structs/MTLSize.js";
import type { MTLCompileSymbolVisibility } from "./MTLCompileSymbolVisibility.js";
import type { MTLLanguageVersion } from "./MTLLanguageVersion.js";
import type { MTLLibraryOptimizationLevel } from "./MTLLibraryOptimizationLevel.js";
import type { MTLLibraryType } from "./MTLLibraryType.js";
import type { MTLMathFloatingPointFunctions } from "./MTLMathFloatingPointFunctions.js";
import type { MTLMathMode } from "./MTLMathMode.js";
export declare class _MTLCompileOptions extends _NSObject {
    static alloc(): _MTLCompileOptions;
    static new(): _MTLCompileOptions;
    init(): _MTLCompileOptions;
    /**
     * @property preprocessorNames @abstract List of preprocessor macros to consider to when compiling this program. Specified as key value pairs, using a NSDictionary. The keys must be NSString objects and values can be either NSString or NSNumber objects. @discussion The default value is nil.
     */
    preprocessorMacros(): _NSDictionary | null;
    setPreprocessorMacros$(value: _NSDictionary | null): void;
    /**
     * @property fastMathEnabled @abstract If YES, enables the compiler to perform optimizations for floating-point arithmetic that may violate the IEEE 754 standard. It also enables the high precision variant of math functions for single precision floating-point scalar and vector types. fastMathEnabled defaults to YES.
     * @deprecated Use mathMode instead
     */
    fastMathEnabled(): boolean;
    setFastMathEnabled$(value: boolean): void;
    /**
     * @property mathMode @abstract Sets the floating-point arithmetic optimizations. Default depends on the language standard version.
     */
    mathMode(): MTLMathMode;
    setMathMode$(value: MTLMathMode): void;
    /**
     * @property mathFloatingPointFunctions @abstract Sets the default math functions for single precision floating-point. Default is `MTLMathFloatingPointFunctionsFast`.
     */
    mathFloatingPointFunctions(): MTLMathFloatingPointFunctions;
    setMathFloatingPointFunctions$(value: MTLMathFloatingPointFunctions): void;
    /**
     * @property languageVersion @abstract set the metal language version used to interpret the source.
     */
    languageVersion(): MTLLanguageVersion;
    setLanguageVersion$(value: MTLLanguageVersion): void;
    /**
     * @property type @abstract Which type the library should be compiled as. The default value is MTLLibraryTypeExecutable. @discussion MTLLibraryTypeExecutable is suitable to build a library of "kernel", "vertex" and "fragment" qualified functions. MTLLibraryType is suitable when the compilation result will instead be used to instantiate a MTLDynamicLibrary. MTLDynamicLibrary contains no qualified functions, but it's unqualified functions and variables can be used as an external dependency for compiling other libraries.
     */
    libraryType(): MTLLibraryType;
    setLibraryType$(value: MTLLibraryType): void;
    /**
     * @property installName @abstract The install name of this dynamic library. @discussion The install name is used when a pipeline state is created that depends, directly or indirectly, on a dynamic library. The installName is embedded into any other MTLLibrary that links against the compilation result. This property should be set such that the dynamic library can be found in the file system at the time a pipeline state is created. Specify one of: - an absolute path to a file from which the dynamic library can be loaded, or - a path relative to \@executable_path, where \@executable_path is substituted with the directory name from which the MTLLibrary containing the MTLFunction entrypoint used to create the pipeline state is loaded, or - a path relative to \@loader_path, where \@loader_path is substituted with the directory name from which the MTLLibrary with the reference to this installName embedded is loaded. The first is appropriate for MTLDynamicLibrary written to the file-system using its serializeToURL:error: method on the current device. The others are appropriate when the MTLDynamicLibrary is installed as part of a bundle or app, where the absolute path is not known. This property is ignored when the type property is not set to MTLLibraryTypeDynamic. This propery should not be null if the property type is set to MTLLibraryTypeDynamic: the compilation will fail in that scenario.
     */
    installName(): _NSString | null;
    setInstallName$(value: _NSString | null): void;
    /**
     * @property libraries @abstract A set of MTLDynamicLibrary instances to link against. The installName of the provided MTLDynamicLibrary is embedded into the compilation result. When a function from the resulting MTLLibrary is used (either as an MTLFunction, or as an to create a pipeline state, the embedded install names are used to automatically load the MTLDynamicLibrary instances. This property can be null if no libraries should be automatically loaded, either because the MTLLibrary has no external dependencies, or because you will use preloadedLibraries to specify the libraries to use at pipeline creation time.
     */
    libraries(): _NSArray | null;
    setLibraries$(value: _NSArray | null): void;
    /**
     * @property preserveInvariance @abstract If YES, set the compiler to compile shaders to preserve invariance. The default is false.
     */
    preserveInvariance(): boolean;
    setPreserveInvariance$(value: boolean): void;
    /** @property optimizationLevel @abstract Sets the compiler optimization level. */
    optimizationLevel(): MTLLibraryOptimizationLevel;
    setOptimizationLevel$(value: MTLLibraryOptimizationLevel): void;
    /**
     * @property @abstract Adds a compiler command to force the default visibility of symbols to be hidden
     */
    compileSymbolVisibility(): MTLCompileSymbolVisibility;
    setCompileSymbolVisibility$(value: MTLCompileSymbolVisibility): void;
    /**
     * @property allowReferencingUndefinedSymbols @abstract Adds a compiler command to allow the reference of undefined symbols
     */
    allowReferencingUndefinedSymbols(): boolean;
    setAllowReferencingUndefinedSymbols$(value: boolean): void;
    /**
     * @property maxTotalThreadsPerThreadgroup @abstract Adds a compiler command to specify the total threads per threadgroup
     */
    maxTotalThreadsPerThreadgroup(): number;
    setMaxTotalThreadsPerThreadgroup$(value: number): 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;
    /**
     * @property enableLogging @abstract If YES, set the compiler to enable any logging in the shader. The default is false.
     */
    enableLogging(): boolean;
    setEnableLogging$(value: boolean): void;
}
export interface _MTLCompileOptions extends _NSCopying {
}
