import '../../../../assert/js/assert.js';
import '../../../../globals.js';
/**
 * TODO: doc
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import IntentionalAny from '../../../../phet-core/js/types/IntentionalAny.js';
import { BindGroupLayout, BufferSlot, BufferSlotSlice, ComputePipeline, DeviceContext, ExecutionContext, Module, PipelineBlueprint, PipelineLayout, ResourceSlot } from '../../imports.js';
export default class Routine<T, In, Out> {
    readonly deviceContext: DeviceContext;
    readonly module: Module<T>;
    readonly nonBufferSlots: ResourceSlot[];
    readonly rootBufferSlots: BufferSlot[];
    readonly bufferSliceMap: Map<BufferSlot<IntentionalAny>, BufferSlotSlice>;
    readonly pipelineLayoutMap: Map<PipelineBlueprint, PipelineLayout>;
    readonly computePipelineMap: Map<PipelineBlueprint, ComputePipeline>;
    readonly executeWrapper: (context: ExecutionContext, execute: (context: ExecutionContext, value: T) => void, input: In) => Promise<Out>;
    readonly pipelineBlueprints: PipelineBlueprint[];
    readonly rootResourceSlots: ResourceSlot[];
    readonly bindGroupLayouts: BindGroupLayout[];
    private constructor();
    execute(context: ExecutionContext, data: In): Promise<Out>;
    static create<T, In, Out>(deviceContext: DeviceContext, module: Module<T>, sharedBufferSlots: BufferSlot<IntentionalAny>[], layoutStrategy: (deviceContext: DeviceContext, pipelineBlueprints: PipelineBlueprint[]) => Map<PipelineBlueprint, PipelineLayout>, executeWrapper: (context: ExecutionContext, execute: (context: ExecutionContext, value: T) => void, value: In) => Promise<Out>): Promise<Routine<T, In, Out>>;
    static readonly INDIVIDUAL_LAYOUT_STRATEGY: (deviceContext: DeviceContext, pipelineBlueprints: PipelineBlueprint[]) => Map<PipelineBlueprint, PipelineLayout>;
    static readonly COMBINE_ALL_LAYOUT_STRATEGY: (deviceContext: DeviceContext, pipelineBlueprints: PipelineBlueprint[]) => Map<PipelineBlueprint, PipelineLayout>;
}
//# sourceMappingURL=Routine.d.ts.map