import '../../../../assert/js/assert.js';
import '../../../../globals.js';
/**
 * TODO: doc
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import { BindGroup, BindGroupLayout, DeviceContext, Executor, ExecutorOptions, Resource, ResourceSlot, Routine, TextureViewResource, TextureViewSlot } from '../../imports.js';
import IntentionalAny from '../../../../phet-core/js/types/IntentionalAny.js';
export type ProcedureExecuteOptions = {
    separateComputePasses?: boolean;
};
export type ProcedureStandaloneExecuteOptions = {
    procedureExecuteOptions?: ProcedureExecuteOptions;
    executorOptions?: ExecutorOptions;
};
export default class Procedure<In, Out> {
    readonly routine: Routine<IntentionalAny, In, Out>;
    readonly resourceMap: Map<ResourceSlot, Resource>;
    readonly bindGroupMap: Map<BindGroupLayout, BindGroup>;
    private readonly selfBuffers;
    constructor(routine: Routine<IntentionalAny, In, Out>, resourceMap?: Map<ResourceSlot, Resource>, bindGroupMap?: Map<BindGroupLayout, BindGroup>);
    bind(slot: ResourceSlot, resource: Resource): this;
    bindTexture(textureSlot: TextureViewSlot, resource: TextureViewResource): this;
    bindRemainingBuffers(): this;
    createChild(): Procedure<In, Out>;
    execute(executor: Executor, data: In, options?: ProcedureExecuteOptions): Promise<Out>;
    standaloneExecute(deviceContext: DeviceContext, data: In, options?: ProcedureStandaloneExecuteOptions): Promise<Out>;
    getLogBuffer(): GPUBuffer | null;
    dispose(): void;
}
//# sourceMappingURL=Procedure.d.ts.map