///
import { Device } from "./device";
import { ATypedArray, Dtype } from "./dtype";
import { ExprCode, CompiledExpr, EvalEnv } from "./expr";
export type ShaderType = "u8" | "array" | "i32" | "array" | "u32" | "array" | "f32" | "array" | "vec3" | "vec3" | "vec3";
export interface KernelSpec {
name: string;
config: KernelConfigSpec[];
workgroupSize: [ExprCode, ExprCode, ExprCode];
parameters: KernelParamSpec[];
workgroupCount: [ExprCode, ExprCode, ExprCode];
inputs: KernelInputSpec[];
outputs: KernelOutputSpec[];
shader: string;
}
export interface KernelInputSpec {
name: string;
shaderType: ShaderType;
}
export interface KernelOutputSpec {
name: string;
shaderType: ShaderType;
size: ExprCode;
}
export interface KernelParamSpec {
name: string;
shaderType: "u32" | "f32";
}
export interface KernelConfigSpec {
name: string;
}
export type KernelConfigInput = {
[name: string]: string | number;
};
export type KernelParamsInput = {
[name: string]: number;
};
export type KernelConfig = (string | number)[];
export type KernelKey = string;
export declare abstract class Kernel {
private _key;
private _spec;
private _config;
private _device;
private _workgroupCountXFunc;
private _workgroupCountYFunc;
private _workgroupCountZFunc;
protected _outputSizeFuncs: CompiledExpr[];
get key(): KernelKey;
get spec(): KernelSpec;
get config(): KernelConfig;
get device(): Device;
constructor(spec: KernelSpec, config: KernelConfig, device: Device);
abstract run(inputs: (GPUBuffer | ATypedArray)[], parameters: KernelParamsInput, outputs?: (GPUBuffer | ATypedArray)[]): (GPUBuffer | ATypedArray)[];
protected getRunEnv(parameters: KernelParamsInput): EvalEnv;
getWorkgroupCounts(env: EvalEnv): [number, number, number];
}
export declare function getKernelConfig(spec: KernelSpec, config: KernelConfigInput): KernelConfig;
export declare function getKernelKey(spec: KernelSpec, config: KernelConfig): KernelKey;
export declare function getShaderTypeElementByteSize(shaderType: ShaderType): number;
export declare function shaderTypeToDtype(shaderType: ShaderType): Dtype;
export declare function getKernelShaderCode(spec: KernelSpec, config: KernelConfig): string;
export declare function getKernelJavaScriptCode(spec: KernelSpec, config: KernelConfig): string;