///
import { HasReactive } from "@reactively/decorate";
import { Cache, ComposableShader } from "../util/Util.js";
import { BinOpModule } from "../util/BinOpModules.js";
/** @internal */
export interface ApplyScanBlocksArgs {
device: GPUDevice;
partialScan: GPUBuffer;
blockSums: GPUBuffer;
forceWorkgroupLength?: number;
forceMaxWorkgroups?: number | undefined;
label?: string;
binOps?: BinOpModule;
exclusiveLarge?: boolean;
initialValue?: number;
partialScanOffset?: number;
blockSumsOffset?: number;
scanOffset?: number;
pipelineCache?: () => Cache;
}
/** Shader stage used in a prefix scan, applies block summaries to block elements
* @internal
*/
export declare class ApplyScanBlocks extends HasReactive implements ComposableShader {
partialScan: GPUBuffer;
blockSums: GPUBuffer;
forceWorkgroupLength?: number;
binOps: BinOpModule;
label: string;
exclusiveLarge: boolean;
initialValue: number;
partialScanOffset: number;
blockSumsOffset: number;
scanOffset: number;
private forceMaxWorkgroups?;
private device;
private usageContext;
private pipelineCache?;
constructor(params: ApplyScanBlocksArgs);
commands(commandEncoder: GPUCommandEncoder): void;
destroy(): void;
private get partialScanSize();
/** Return enough dispatches to cover the source
* `(multiple dispatches are needed for large sources) */
private get dispatchSizes();
private get maxWorkgroups();
private get registry();
private get pipeline();
private get bindGroups();
private createBindGroup;
get result(): GPUBuffer;
private get workgroupLength();
get debugBuffer(): GPUBuffer;
private get uniforms();
private uniformsBuffer;
private updateUniforms;
private writeUniforms;
}