/// <reference types="dist" />
import type { ProgramLayout, ProgramPipelineLayoutDescription } from '../../gl/shader/GlProgram';
import type { StructsAndGroups } from './extractStructAndGroups';
export interface ProgramSource {
    source: string;
    entryPoint?: string;
}
export interface GpuProgramOptions {
    name?: string;
    fragment?: ProgramSource;
    vertex?: ProgramSource;
    layout?: ProgramLayout;
    gpuLayout?: ProgramPipelineLayoutDescription;
}
export interface SimpleShaderOptions {
    fragment?: string;
    vertex?: string;
}
export declare class GpuProgram {
    fragment?: ProgramSource;
    vertex?: ProgramSource;
    layout: ProgramLayout;
    gpuLayout: ProgramPipelineLayoutDescription;
    /** @internal */
    _layoutKey: number;
    /** @internal */
    _gpuLayout: {
        bindGroups: GPUBindGroupLayout[];
        pipeline: GPUPipelineLayout | 'auto';
    };
    structsAndGroups: StructsAndGroups;
    name: string;
    constructor({ fragment, vertex, layout, gpuLayout, name }: GpuProgramOptions);
    destroy(): void;
    static programCached: Record<string, GpuProgram>;
    static from(options: GpuProgramOptions): GpuProgram;
}
