@asciiz/atoolkit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/ReadMe.md +198 -0
- package/dist/acircuit/chip.d.ts +46 -0
- package/dist/acircuit/chip.d.ts.map +1 -0
- package/dist/acircuit/chip.js +104 -0
- package/dist/acircuit/chip.js.map +1 -0
- package/dist/acircuit/circuit.d.ts +86 -0
- package/dist/acircuit/circuit.d.ts.map +1 -0
- package/dist/acircuit/circuit.js +606 -0
- package/dist/acircuit/circuit.js.map +1 -0
- package/dist/acircuit/composite.d.ts +32 -0
- package/dist/acircuit/composite.d.ts.map +1 -0
- package/dist/acircuit/composite.js +88 -0
- package/dist/acircuit/composite.js.map +1 -0
- package/dist/acircuit/index.d.ts +7 -0
- package/dist/acircuit/index.d.ts.map +1 -0
- package/dist/acircuit/index.js +6 -0
- package/dist/acircuit/index.js.map +1 -0
- package/dist/acircuit/socket.d.ts +20 -0
- package/dist/acircuit/socket.d.ts.map +1 -0
- package/dist/acircuit/socket.js +23 -0
- package/dist/acircuit/socket.js.map +1 -0
- package/dist/acircuit/types.d.ts +94 -0
- package/dist/acircuit/types.d.ts.map +1 -0
- package/dist/acircuit/types.js +2 -0
- package/dist/acircuit/types.js.map +1 -0
- package/dist/acircuit/wire.d.ts +26 -0
- package/dist/acircuit/wire.d.ts.map +1 -0
- package/dist/acircuit/wire.js +23 -0
- package/dist/acircuit/wire.js.map +1 -0
- package/dist/adiag/bus.d.ts +65 -0
- package/dist/adiag/bus.d.ts.map +1 -0
- package/dist/adiag/bus.js +225 -0
- package/dist/adiag/bus.js.map +1 -0
- package/dist/adiag/index.d.ts +3 -0
- package/dist/adiag/index.d.ts.map +1 -0
- package/dist/adiag/index.js +2 -0
- package/dist/adiag/index.js.map +1 -0
- package/dist/aecs/ComponentSet.d.ts +33 -0
- package/dist/aecs/ComponentSet.d.ts.map +1 -0
- package/dist/aecs/ComponentSet.js +127 -0
- package/dist/aecs/ComponentSet.js.map +1 -0
- package/dist/aecs/Entity.d.ts +43 -0
- package/dist/aecs/Entity.d.ts.map +1 -0
- package/dist/aecs/Entity.js +82 -0
- package/dist/aecs/Entity.js.map +1 -0
- package/dist/aecs/FloatSet.d.ts +34 -0
- package/dist/aecs/FloatSet.d.ts.map +1 -0
- package/dist/aecs/FloatSet.js +147 -0
- package/dist/aecs/FloatSet.js.map +1 -0
- package/dist/aecs/Query.d.ts +90 -0
- package/dist/aecs/Query.d.ts.map +1 -0
- package/dist/aecs/Query.js +304 -0
- package/dist/aecs/Query.js.map +1 -0
- package/dist/aecs/index.d.ts +6 -0
- package/dist/aecs/index.d.ts.map +1 -0
- package/dist/aecs/index.js +6 -0
- package/dist/aecs/index.js.map +1 -0
- package/dist/aecs/join.d.ts +2 -0
- package/dist/aecs/join.d.ts.map +1 -0
- package/dist/aecs/join.js +2 -0
- package/dist/aecs/join.js.map +1 -0
- package/dist/alm/constants.d.ts +11 -0
- package/dist/alm/constants.d.ts.map +1 -0
- package/dist/alm/constants.js +17 -0
- package/dist/alm/constants.js.map +1 -0
- package/dist/alm/index.d.ts +9 -0
- package/dist/alm/index.d.ts.map +1 -0
- package/dist/alm/index.js +12 -0
- package/dist/alm/index.js.map +1 -0
- package/dist/alm/mat3.d.ts +63 -0
- package/dist/alm/mat3.d.ts.map +1 -0
- package/dist/alm/mat3.js +393 -0
- package/dist/alm/mat3.js.map +1 -0
- package/dist/alm/mat4.d.ts +157 -0
- package/dist/alm/mat4.d.ts.map +1 -0
- package/dist/alm/mat4.js +1448 -0
- package/dist/alm/mat4.js.map +1 -0
- package/dist/alm/quat.d.ts +89 -0
- package/dist/alm/quat.d.ts.map +1 -0
- package/dist/alm/quat.js +543 -0
- package/dist/alm/quat.js.map +1 -0
- package/dist/alm/spatial.d.ts +102 -0
- package/dist/alm/spatial.d.ts.map +1 -0
- package/dist/alm/spatial.js +389 -0
- package/dist/alm/spatial.js.map +1 -0
- package/dist/alm/vec2.d.ts +97 -0
- package/dist/alm/vec2.d.ts.map +1 -0
- package/dist/alm/vec2.js +369 -0
- package/dist/alm/vec2.js.map +1 -0
- package/dist/alm/vec3.d.ts +117 -0
- package/dist/alm/vec3.d.ts.map +1 -0
- package/dist/alm/vec3.js +547 -0
- package/dist/alm/vec3.js.map +1 -0
- package/dist/alm/vec4.d.ts +95 -0
- package/dist/alm/vec4.d.ts.map +1 -0
- package/dist/alm/vec4.js +452 -0
- package/dist/alm/vec4.js.map +1 -0
- package/dist/atempo/cadence.d.ts +58 -0
- package/dist/atempo/cadence.d.ts.map +1 -0
- package/dist/atempo/cadence.js +110 -0
- package/dist/atempo/cadence.js.map +1 -0
- package/dist/atempo/clip.d.ts +37 -0
- package/dist/atempo/clip.d.ts.map +1 -0
- package/dist/atempo/clip.js +92 -0
- package/dist/atempo/clip.js.map +1 -0
- package/dist/atempo/curve.d.ts +6 -0
- package/dist/atempo/curve.d.ts.map +1 -0
- package/dist/atempo/curve.js +2 -0
- package/dist/atempo/curve.js.map +1 -0
- package/dist/atempo/curves/bezier.d.ts +7 -0
- package/dist/atempo/curves/bezier.d.ts.map +1 -0
- package/dist/atempo/curves/bezier.js +46 -0
- package/dist/atempo/curves/bezier.js.map +1 -0
- package/dist/atempo/curves/bounce.d.ts +6 -0
- package/dist/atempo/curves/bounce.d.ts.map +1 -0
- package/dist/atempo/curves/bounce.js +22 -0
- package/dist/atempo/curves/bounce.js.map +1 -0
- package/dist/atempo/curves/cubic.d.ts +14 -0
- package/dist/atempo/curves/cubic.d.ts.map +1 -0
- package/dist/atempo/curves/cubic.js +22 -0
- package/dist/atempo/curves/cubic.js.map +1 -0
- package/dist/atempo/curves/elastic.d.ts +6 -0
- package/dist/atempo/curves/elastic.d.ts.map +1 -0
- package/dist/atempo/curves/elastic.js +12 -0
- package/dist/atempo/curves/elastic.js.map +1 -0
- package/dist/atempo/curves/expo.d.ts +14 -0
- package/dist/atempo/curves/expo.d.ts.map +1 -0
- package/dist/atempo/curves/expo.js +26 -0
- package/dist/atempo/curves/expo.js.map +1 -0
- package/dist/atempo/curves/holdSnap.d.ts +6 -0
- package/dist/atempo/curves/holdSnap.d.ts.map +1 -0
- package/dist/atempo/curves/holdSnap.js +15 -0
- package/dist/atempo/curves/holdSnap.js.map +1 -0
- package/dist/atempo/curves/index.d.ts +14 -0
- package/dist/atempo/curves/index.d.ts.map +1 -0
- package/dist/atempo/curves/index.js +14 -0
- package/dist/atempo/curves/index.js.map +1 -0
- package/dist/atempo/curves/linear.d.ts +6 -0
- package/dist/atempo/curves/linear.d.ts.map +1 -0
- package/dist/atempo/curves/linear.js +5 -0
- package/dist/atempo/curves/linear.js.map +1 -0
- package/dist/atempo/curves/overshoot.d.ts +6 -0
- package/dist/atempo/curves/overshoot.d.ts.map +1 -0
- package/dist/atempo/curves/overshoot.js +16 -0
- package/dist/atempo/curves/overshoot.js.map +1 -0
- package/dist/atempo/curves/quad.d.ts +14 -0
- package/dist/atempo/curves/quad.d.ts.map +1 -0
- package/dist/atempo/curves/quad.js +22 -0
- package/dist/atempo/curves/quad.js.map +1 -0
- package/dist/atempo/curves/step.d.ts +6 -0
- package/dist/atempo/curves/step.d.ts.map +1 -0
- package/dist/atempo/curves/step.js +11 -0
- package/dist/atempo/curves/step.js.map +1 -0
- package/dist/atempo/index.d.ts +17 -0
- package/dist/atempo/index.d.ts.map +1 -0
- package/dist/atempo/index.js +18 -0
- package/dist/atempo/index.js.map +1 -0
- package/dist/atempo/phase.d.ts +66 -0
- package/dist/atempo/phase.d.ts.map +1 -0
- package/dist/atempo/phase.js +121 -0
- package/dist/atempo/phase.js.map +1 -0
- package/dist/atempo/spring.d.ts +20 -0
- package/dist/atempo/spring.d.ts.map +1 -0
- package/dist/atempo/spring.js +71 -0
- package/dist/atempo/spring.js.map +1 -0
- package/dist/atempo/track.d.ts +69 -0
- package/dist/atempo/track.d.ts.map +1 -0
- package/dist/atempo/track.js +184 -0
- package/dist/atempo/track.js.map +1 -0
- package/dist/atempo/tracks/color.d.ts +20 -0
- package/dist/atempo/tracks/color.d.ts.map +1 -0
- package/dist/atempo/tracks/color.js +52 -0
- package/dist/atempo/tracks/color.js.map +1 -0
- package/dist/atempo/tracks/float.d.ts +9 -0
- package/dist/atempo/tracks/float.d.ts.map +1 -0
- package/dist/atempo/tracks/float.js +13 -0
- package/dist/atempo/tracks/float.js.map +1 -0
- package/dist/atempo/tracks/index.d.ts +8 -0
- package/dist/atempo/tracks/index.d.ts.map +1 -0
- package/dist/atempo/tracks/index.js +8 -0
- package/dist/atempo/tracks/index.js.map +1 -0
- package/dist/atempo/tracks/quat.d.ts +16 -0
- package/dist/atempo/tracks/quat.d.ts.map +1 -0
- package/dist/atempo/tracks/quat.js +72 -0
- package/dist/atempo/tracks/quat.js.map +1 -0
- package/dist/atempo/tracks/vec.d.ts +11 -0
- package/dist/atempo/tracks/vec.d.ts.map +1 -0
- package/dist/atempo/tracks/vec.js +27 -0
- package/dist/atempo/tracks/vec.js.map +1 -0
- package/dist/awasm/abi/index.d.ts +4 -0
- package/dist/awasm/abi/index.d.ts.map +1 -0
- package/dist/awasm/abi/index.js +4 -0
- package/dist/awasm/abi/index.js.map +1 -0
- package/dist/awasm/abi/layout.d.ts +40 -0
- package/dist/awasm/abi/layout.d.ts.map +1 -0
- package/dist/awasm/abi/layout.js +100 -0
- package/dist/awasm/abi/layout.js.map +1 -0
- package/dist/awasm/abi/slice.d.ts +28 -0
- package/dist/awasm/abi/slice.d.ts.map +1 -0
- package/dist/awasm/abi/slice.js +68 -0
- package/dist/awasm/abi/slice.js.map +1 -0
- package/dist/awasm/abi/string-buffer.d.ts +23 -0
- package/dist/awasm/abi/string-buffer.d.ts.map +1 -0
- package/dist/awasm/abi/string-buffer.js +52 -0
- package/dist/awasm/abi/string-buffer.js.map +1 -0
- package/dist/awasm/index.d.ts +5 -0
- package/dist/awasm/index.d.ts.map +1 -0
- package/dist/awasm/index.js +8 -0
- package/dist/awasm/index.js.map +1 -0
- package/dist/awasm/memory/block-pool.d.ts +31 -0
- package/dist/awasm/memory/block-pool.d.ts.map +1 -0
- package/dist/awasm/memory/block-pool.js +98 -0
- package/dist/awasm/memory/block-pool.js.map +1 -0
- package/dist/awasm/memory/index.d.ts +5 -0
- package/dist/awasm/memory/index.d.ts.map +1 -0
- package/dist/awasm/memory/index.js +5 -0
- package/dist/awasm/memory/index.js.map +1 -0
- package/dist/awasm/memory/linear-arena.d.ts +36 -0
- package/dist/awasm/memory/linear-arena.d.ts.map +1 -0
- package/dist/awasm/memory/linear-arena.js +94 -0
- package/dist/awasm/memory/linear-arena.js.map +1 -0
- package/dist/awasm/memory/memory-view.d.ts +51 -0
- package/dist/awasm/memory/memory-view.d.ts.map +1 -0
- package/dist/awasm/memory/memory-view.js +110 -0
- package/dist/awasm/memory/memory-view.js.map +1 -0
- package/dist/awasm/memory/wasm-memory.d.ts +40 -0
- package/dist/awasm/memory/wasm-memory.d.ts.map +1 -0
- package/dist/awasm/memory/wasm-memory.js +88 -0
- package/dist/awasm/memory/wasm-memory.js.map +1 -0
- package/dist/awasm/runtime/host-bridge.d.ts +30 -0
- package/dist/awasm/runtime/host-bridge.d.ts.map +1 -0
- package/dist/awasm/runtime/host-bridge.js +57 -0
- package/dist/awasm/runtime/host-bridge.js.map +1 -0
- package/dist/awasm/runtime/index.d.ts +5 -0
- package/dist/awasm/runtime/index.d.ts.map +1 -0
- package/dist/awasm/runtime/index.js +5 -0
- package/dist/awasm/runtime/index.js.map +1 -0
- package/dist/awasm/runtime/module-inspector.d.ts +32 -0
- package/dist/awasm/runtime/module-inspector.d.ts.map +1 -0
- package/dist/awasm/runtime/module-inspector.js +43 -0
- package/dist/awasm/runtime/module-inspector.js.map +1 -0
- package/dist/awasm/runtime/module-loader.d.ts +17 -0
- package/dist/awasm/runtime/module-loader.d.ts.map +1 -0
- package/dist/awasm/runtime/module-loader.js +99 -0
- package/dist/awasm/runtime/module-loader.js.map +1 -0
- package/dist/awasm/runtime/wasm-instance.d.ts +25 -0
- package/dist/awasm/runtime/wasm-instance.d.ts.map +1 -0
- package/dist/awasm/runtime/wasm-instance.js +60 -0
- package/dist/awasm/runtime/wasm-instance.js.map +1 -0
- package/dist/awasm/thread/atomic-queue.d.ts +33 -0
- package/dist/awasm/thread/atomic-queue.d.ts.map +1 -0
- package/dist/awasm/thread/atomic-queue.js +78 -0
- package/dist/awasm/thread/atomic-queue.js.map +1 -0
- package/dist/awasm/thread/index.d.ts +4 -0
- package/dist/awasm/thread/index.d.ts.map +1 -0
- package/dist/awasm/thread/index.js +4 -0
- package/dist/awasm/thread/index.js.map +1 -0
- package/dist/awasm/thread/shared-memory.d.ts +38 -0
- package/dist/awasm/thread/shared-memory.d.ts.map +1 -0
- package/dist/awasm/thread/shared-memory.js +74 -0
- package/dist/awasm/thread/shared-memory.js.map +1 -0
- package/dist/awasm/thread/worker-pool.d.ts +43 -0
- package/dist/awasm/thread/worker-pool.d.ts.map +1 -0
- package/dist/awasm/thread/worker-pool.js +118 -0
- package/dist/awasm/thread/worker-pool.js.map +1 -0
- package/dist/awgpu/binding.d.ts +108 -0
- package/dist/awgpu/binding.d.ts.map +1 -0
- package/dist/awgpu/binding.js +251 -0
- package/dist/awgpu/binding.js.map +1 -0
- package/dist/awgpu/device.d.ts +68 -0
- package/dist/awgpu/device.d.ts.map +1 -0
- package/dist/awgpu/device.js +150 -0
- package/dist/awgpu/device.js.map +1 -0
- package/dist/awgpu/graph.d.ts +77 -0
- package/dist/awgpu/graph.d.ts.map +1 -0
- package/dist/awgpu/graph.js +288 -0
- package/dist/awgpu/graph.js.map +1 -0
- package/dist/awgpu/index.d.ts +10 -0
- package/dist/awgpu/index.d.ts.map +1 -0
- package/dist/awgpu/index.js +19 -0
- package/dist/awgpu/index.js.map +1 -0
- package/dist/awgpu/memory.d.ts +231 -0
- package/dist/awgpu/memory.d.ts.map +1 -0
- package/dist/awgpu/memory.js +547 -0
- package/dist/awgpu/memory.js.map +1 -0
- package/dist/awgpu/pipeline.d.ts +114 -0
- package/dist/awgpu/pipeline.d.ts.map +1 -0
- package/dist/awgpu/pipeline.js +335 -0
- package/dist/awgpu/pipeline.js.map +1 -0
- package/dist/awgpu/sequence.d.ts +83 -0
- package/dist/awgpu/sequence.d.ts.map +1 -0
- package/dist/awgpu/sequence.js +273 -0
- package/dist/awgpu/sequence.js.map +1 -0
- package/dist/awgpu/state.d.ts +27 -0
- package/dist/awgpu/state.d.ts.map +1 -0
- package/dist/awgpu/state.js +43 -0
- package/dist/awgpu/state.js.map +1 -0
- package/dist/awgpu/stream.d.ts +57 -0
- package/dist/awgpu/stream.d.ts.map +1 -0
- package/dist/awgpu/stream.js +139 -0
- package/dist/awgpu/stream.js.map +1 -0
- package/dist/awgpu/target.d.ts +98 -0
- package/dist/awgpu/target.d.ts.map +1 -0
- package/dist/awgpu/target.js +357 -0
- package/dist/awgpu/target.js.map +1 -0
- package/dist/awgpu_old/buffer.d.ts +78 -0
- package/dist/awgpu_old/buffer.d.ts.map +1 -0
- package/dist/awgpu_old/buffer.js +220 -0
- package/dist/awgpu_old/buffer.js.map +1 -0
- package/dist/awgpu_old/device.d.ts +69 -0
- package/dist/awgpu_old/device.d.ts.map +1 -0
- package/dist/awgpu_old/device.js +121 -0
- package/dist/awgpu_old/device.js.map +1 -0
- package/dist/awgpu_old/frame.d.ts +17 -0
- package/dist/awgpu_old/frame.d.ts.map +1 -0
- package/dist/awgpu_old/frame.js +29 -0
- package/dist/awgpu_old/frame.js.map +1 -0
- package/dist/awgpu_old/index.d.ts +8 -0
- package/dist/awgpu_old/index.d.ts.map +1 -0
- package/dist/awgpu_old/index.js +18 -0
- package/dist/awgpu_old/index.js.map +1 -0
- package/dist/awgpu_old/layout.d.ts +70 -0
- package/dist/awgpu_old/layout.d.ts.map +1 -0
- package/dist/awgpu_old/layout.js +137 -0
- package/dist/awgpu_old/layout.js.map +1 -0
- package/dist/awgpu_old/pass.d.ts +97 -0
- package/dist/awgpu_old/pass.d.ts.map +1 -0
- package/dist/awgpu_old/pass.js +302 -0
- package/dist/awgpu_old/pass.js.map +1 -0
- package/dist/awgpu_old/pipeline.d.ts +73 -0
- package/dist/awgpu_old/pipeline.d.ts.map +1 -0
- package/dist/awgpu_old/pipeline.js +226 -0
- package/dist/awgpu_old/pipeline.js.map +1 -0
- package/dist/awgpu_old/target.d.ts +186 -0
- package/dist/awgpu_old/target.d.ts.map +1 -0
- package/dist/awgpu_old/target.js +428 -0
- package/dist/awgpu_old/target.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { type Device } from "./device.js";
|
|
2
|
+
import type { StreamSet } from "./stream.js";
|
|
3
|
+
import type { BindLayout } from "./binding.js";
|
|
4
|
+
export interface ShaderMessage {
|
|
5
|
+
type: "error" | "warning" | "info";
|
|
6
|
+
stage: "vertex" | "fragment" | "compute";
|
|
7
|
+
message: string;
|
|
8
|
+
lineNum: number;
|
|
9
|
+
linePos: number;
|
|
10
|
+
offset: number;
|
|
11
|
+
length: number;
|
|
12
|
+
}
|
|
13
|
+
export interface RasterPipelineDesc {
|
|
14
|
+
label?: string;
|
|
15
|
+
vertex: {
|
|
16
|
+
code: string;
|
|
17
|
+
entryPoint?: string;
|
|
18
|
+
buffers?: (GPUVertexBufferLayout | null)[];
|
|
19
|
+
};
|
|
20
|
+
fragment?: {
|
|
21
|
+
code?: string;
|
|
22
|
+
entryPoint?: string;
|
|
23
|
+
targets: GPUColorTargetState[];
|
|
24
|
+
};
|
|
25
|
+
streamSet?: StreamSet;
|
|
26
|
+
layouts?: (GPUBindGroupLayout | BindLayout | null)[];
|
|
27
|
+
depthStencil?: GPUDepthStencilState;
|
|
28
|
+
primitive?: GPUPrimitiveState;
|
|
29
|
+
multisample?: GPUMultisampleState;
|
|
30
|
+
onShaderMessage?: (msg: ShaderMessage) => void;
|
|
31
|
+
}
|
|
32
|
+
export interface ComputePipelineDesc {
|
|
33
|
+
label?: string;
|
|
34
|
+
code: string;
|
|
35
|
+
entryPoint?: string;
|
|
36
|
+
layouts?: (GPUBindGroupLayout | BindLayout | null)[];
|
|
37
|
+
onShaderMessage?: (msg: ShaderMessage) => void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* WebGPU render pipeline wrapper for rasterization and depth prepasses.
|
|
41
|
+
*/
|
|
42
|
+
export declare class RasterPipeline {
|
|
43
|
+
readonly native: GPURenderPipeline;
|
|
44
|
+
readonly layout?: GPUPipelineLayout;
|
|
45
|
+
readonly hasFragmentStage: boolean;
|
|
46
|
+
readonly label: string;
|
|
47
|
+
constructor(native: GPURenderPipeline, hasFragmentStage: boolean, layout?: GPUPipelineLayout, label?: string);
|
|
48
|
+
private static _buildDescriptor;
|
|
49
|
+
/**
|
|
50
|
+
* Factory: Compiles shaders and instantiates GPURenderPipeline with automatic layout derivation.
|
|
51
|
+
*/
|
|
52
|
+
static create(device: Device | GPUDevice, desc: RasterPipelineDesc): RasterPipeline;
|
|
53
|
+
/**
|
|
54
|
+
* Factory: Asynchronously compiles shaders and instantiates GPURenderPipeline.
|
|
55
|
+
*/
|
|
56
|
+
static createAsync(device: Device | GPUDevice, desc: RasterPipelineDesc): Promise<RasterPipeline>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* WebGPU compute pipeline wrapper.
|
|
60
|
+
*/
|
|
61
|
+
export declare class ComputePipeline {
|
|
62
|
+
readonly native: GPUComputePipeline;
|
|
63
|
+
readonly layout?: GPUPipelineLayout;
|
|
64
|
+
readonly label: string;
|
|
65
|
+
constructor(native: GPUComputePipeline, layout?: GPUPipelineLayout, label?: string);
|
|
66
|
+
private static _buildDescriptor;
|
|
67
|
+
/**
|
|
68
|
+
* Factory: Compiles compute shader and instantiates GPUComputePipeline.
|
|
69
|
+
*/
|
|
70
|
+
static create(device: Device | GPUDevice, desc: ComputePipelineDesc): ComputePipeline;
|
|
71
|
+
/**
|
|
72
|
+
* Factory: Asynchronously compiles compute shader and instantiates GPUComputePipeline.
|
|
73
|
+
*/
|
|
74
|
+
static createAsync(device: Device | GPUDevice, desc: ComputePipelineDesc): Promise<ComputePipeline>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Cache preventing redundant driver recompilation of identical pipelines.
|
|
78
|
+
*/
|
|
79
|
+
export declare class PipelineCache {
|
|
80
|
+
private static _defaultInstance?;
|
|
81
|
+
static get default(): PipelineCache;
|
|
82
|
+
private _rasterPipelines;
|
|
83
|
+
private _computePipelines;
|
|
84
|
+
/**
|
|
85
|
+
* Computes deterministic hash key for RasterPipelineDesc.
|
|
86
|
+
*/
|
|
87
|
+
static hashRasterDesc(desc: RasterPipelineDesc): string;
|
|
88
|
+
/**
|
|
89
|
+
* Computes deterministic hash key for ComputePipelineDesc.
|
|
90
|
+
*/
|
|
91
|
+
static hashComputeDesc(desc: ComputePipelineDesc): string;
|
|
92
|
+
getRaster(key: string): RasterPipeline | undefined;
|
|
93
|
+
setRaster(key: string, pipeline: RasterPipeline): void;
|
|
94
|
+
getCompute(key: string): ComputePipeline | undefined;
|
|
95
|
+
setCompute(key: string, pipeline: ComputePipeline): void;
|
|
96
|
+
/**
|
|
97
|
+
* Retrieves existing cached RasterPipeline or compiles new instance.
|
|
98
|
+
*/
|
|
99
|
+
getOrCreateRaster(device: Device | GPUDevice, desc: RasterPipelineDesc): RasterPipeline;
|
|
100
|
+
/**
|
|
101
|
+
* Retrieves existing cached RasterPipeline or asynchronously compiles new instance.
|
|
102
|
+
*/
|
|
103
|
+
getOrCreateRasterAsync(device: Device | GPUDevice, desc: RasterPipelineDesc): Promise<RasterPipeline>;
|
|
104
|
+
/**
|
|
105
|
+
* Retrieves existing cached ComputePipeline or compiles new instance.
|
|
106
|
+
*/
|
|
107
|
+
getOrCreateCompute(device: Device | GPUDevice, desc: ComputePipelineDesc): ComputePipeline;
|
|
108
|
+
/**
|
|
109
|
+
* Retrieves existing cached ComputePipeline or asynchronously compiles new instance.
|
|
110
|
+
*/
|
|
111
|
+
getOrCreateComputeAsync(device: Device | GPUDevice, desc: ComputePipelineDesc): Promise<ComputePipeline>;
|
|
112
|
+
clear(): void;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../awgpu/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
// ================================================================
|
|
2
|
+
// Awgpu - Level 4: Hardware Pipelines (RasterPipeline, ComputePipeline)
|
|
3
|
+
// ================================================================
|
|
4
|
+
import { resolveDevice } from "./device.js";
|
|
5
|
+
function reportShaderMessages(module, stage, onMessage) {
|
|
6
|
+
if (!onMessage)
|
|
7
|
+
return;
|
|
8
|
+
module.getCompilationInfo().then((info) => {
|
|
9
|
+
for (const msg of info.messages) {
|
|
10
|
+
onMessage({
|
|
11
|
+
type: msg.type,
|
|
12
|
+
stage,
|
|
13
|
+
message: msg.message,
|
|
14
|
+
lineNum: msg.lineNum,
|
|
15
|
+
linePos: msg.linePos,
|
|
16
|
+
offset: msg.offset,
|
|
17
|
+
length: msg.length,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* WebGPU render pipeline wrapper for rasterization and depth prepasses.
|
|
24
|
+
*/
|
|
25
|
+
export class RasterPipeline {
|
|
26
|
+
native;
|
|
27
|
+
layout;
|
|
28
|
+
hasFragmentStage;
|
|
29
|
+
label;
|
|
30
|
+
constructor(native, hasFragmentStage, layout, label = "RasterPipeline") {
|
|
31
|
+
this.native = native;
|
|
32
|
+
this.hasFragmentStage = hasFragmentStage;
|
|
33
|
+
this.layout = layout;
|
|
34
|
+
this.label = label;
|
|
35
|
+
}
|
|
36
|
+
static _buildDescriptor(gpu, desc) {
|
|
37
|
+
const label = desc.label ?? "RasterPipeline";
|
|
38
|
+
// 1. Vertex Shader Module
|
|
39
|
+
const vsModule = gpu.createShaderModule({
|
|
40
|
+
label: `${label}_VS`,
|
|
41
|
+
code: desc.vertex.code,
|
|
42
|
+
});
|
|
43
|
+
reportShaderMessages(vsModule, "vertex", desc.onShaderMessage);
|
|
44
|
+
// 2. Vertex Buffer Layouts
|
|
45
|
+
let vertexBuffers = desc.vertex.buffers ?? [];
|
|
46
|
+
if (desc.streamSet) {
|
|
47
|
+
vertexBuffers = desc.streamSet.deriveVertexLayouts();
|
|
48
|
+
}
|
|
49
|
+
// 3. Pipeline Layout with Automatic Empty Slot Sanitization
|
|
50
|
+
let pipelineLayout = "auto";
|
|
51
|
+
if (desc.layouts && desc.layouts.length > 0) {
|
|
52
|
+
let emptyLayout = null;
|
|
53
|
+
const sanitizedLayouts = desc.layouts.map((l) => {
|
|
54
|
+
if (!l) {
|
|
55
|
+
if (!emptyLayout) {
|
|
56
|
+
emptyLayout = gpu.createBindGroupLayout({
|
|
57
|
+
label: `${label}_EmptySlot`,
|
|
58
|
+
entries: [],
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return emptyLayout;
|
|
62
|
+
}
|
|
63
|
+
return "native" in l ? l.native : l;
|
|
64
|
+
});
|
|
65
|
+
pipelineLayout = gpu.createPipelineLayout({
|
|
66
|
+
label: `${label}_Layout`,
|
|
67
|
+
bindGroupLayouts: sanitizedLayouts,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
// 4. Native Pipeline Descriptor
|
|
71
|
+
const nativeDesc = {
|
|
72
|
+
label,
|
|
73
|
+
layout: pipelineLayout,
|
|
74
|
+
vertex: {
|
|
75
|
+
module: vsModule,
|
|
76
|
+
entryPoint: desc.vertex.entryPoint ?? "vs_main",
|
|
77
|
+
buffers: vertexBuffers,
|
|
78
|
+
},
|
|
79
|
+
primitive: desc.primitive ?? {
|
|
80
|
+
topology: "triangle-list",
|
|
81
|
+
cullMode: "none",
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
if (desc.depthStencil) {
|
|
85
|
+
nativeDesc.depthStencil = desc.depthStencil;
|
|
86
|
+
}
|
|
87
|
+
if (desc.multisample) {
|
|
88
|
+
nativeDesc.multisample = desc.multisample;
|
|
89
|
+
}
|
|
90
|
+
// 5. Fragment Stage (Optional for depth-only passes)
|
|
91
|
+
const hasFragmentStage = !!desc.fragment;
|
|
92
|
+
if (desc.fragment) {
|
|
93
|
+
const fsCode = desc.fragment.code ?? desc.vertex.code;
|
|
94
|
+
const fsModule = fsCode === desc.vertex.code
|
|
95
|
+
? vsModule
|
|
96
|
+
: gpu.createShaderModule({
|
|
97
|
+
label: `${label}_FS`,
|
|
98
|
+
code: fsCode,
|
|
99
|
+
});
|
|
100
|
+
if (fsModule !== vsModule) {
|
|
101
|
+
reportShaderMessages(fsModule, "fragment", desc.onShaderMessage);
|
|
102
|
+
}
|
|
103
|
+
nativeDesc.fragment = {
|
|
104
|
+
module: fsModule,
|
|
105
|
+
entryPoint: desc.fragment.entryPoint ?? "fs_main",
|
|
106
|
+
targets: desc.fragment.targets,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return { nativeDesc, hasFragmentStage, pipelineLayout, label };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Factory: Compiles shaders and instantiates GPURenderPipeline with automatic layout derivation.
|
|
113
|
+
*/
|
|
114
|
+
static create(device, desc) {
|
|
115
|
+
const gpu = resolveDevice(device);
|
|
116
|
+
const { nativeDesc, hasFragmentStage, pipelineLayout, label } = RasterPipeline._buildDescriptor(gpu, desc);
|
|
117
|
+
const native = gpu.createRenderPipeline(nativeDesc);
|
|
118
|
+
return new RasterPipeline(native, hasFragmentStage, pipelineLayout === "auto" ? undefined : pipelineLayout, label);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Factory: Asynchronously compiles shaders and instantiates GPURenderPipeline.
|
|
122
|
+
*/
|
|
123
|
+
static async createAsync(device, desc) {
|
|
124
|
+
const gpu = resolveDevice(device);
|
|
125
|
+
const { nativeDesc, hasFragmentStage, pipelineLayout, label } = RasterPipeline._buildDescriptor(gpu, desc);
|
|
126
|
+
const native = await gpu.createRenderPipelineAsync(nativeDesc);
|
|
127
|
+
return new RasterPipeline(native, hasFragmentStage, pipelineLayout === "auto" ? undefined : pipelineLayout, label);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* WebGPU compute pipeline wrapper.
|
|
132
|
+
*/
|
|
133
|
+
export class ComputePipeline {
|
|
134
|
+
native;
|
|
135
|
+
layout;
|
|
136
|
+
label;
|
|
137
|
+
constructor(native, layout, label = "ComputePipeline") {
|
|
138
|
+
this.native = native;
|
|
139
|
+
this.layout = layout;
|
|
140
|
+
this.label = label;
|
|
141
|
+
}
|
|
142
|
+
static _buildDescriptor(gpu, desc) {
|
|
143
|
+
const label = desc.label ?? "ComputePipeline";
|
|
144
|
+
const csModule = gpu.createShaderModule({
|
|
145
|
+
label: `${label}_CS`,
|
|
146
|
+
code: desc.code,
|
|
147
|
+
});
|
|
148
|
+
reportShaderMessages(csModule, "compute", desc.onShaderMessage);
|
|
149
|
+
let pipelineLayout = "auto";
|
|
150
|
+
if (desc.layouts && desc.layouts.length > 0) {
|
|
151
|
+
let emptyLayout = null;
|
|
152
|
+
const sanitizedLayouts = desc.layouts.map((l) => {
|
|
153
|
+
if (!l) {
|
|
154
|
+
if (!emptyLayout) {
|
|
155
|
+
emptyLayout = gpu.createBindGroupLayout({
|
|
156
|
+
label: `${label}_EmptySlot`,
|
|
157
|
+
entries: [],
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
return emptyLayout;
|
|
161
|
+
}
|
|
162
|
+
return "native" in l ? l.native : l;
|
|
163
|
+
});
|
|
164
|
+
pipelineLayout = gpu.createPipelineLayout({
|
|
165
|
+
label: `${label}_Layout`,
|
|
166
|
+
bindGroupLayouts: sanitizedLayouts,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
const nativeDesc = {
|
|
170
|
+
label,
|
|
171
|
+
layout: pipelineLayout,
|
|
172
|
+
compute: {
|
|
173
|
+
module: csModule,
|
|
174
|
+
entryPoint: desc.entryPoint ?? "cs_main",
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
return { nativeDesc, pipelineLayout, label };
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Factory: Compiles compute shader and instantiates GPUComputePipeline.
|
|
181
|
+
*/
|
|
182
|
+
static create(device, desc) {
|
|
183
|
+
const gpu = resolveDevice(device);
|
|
184
|
+
const { nativeDesc, pipelineLayout, label } = ComputePipeline._buildDescriptor(gpu, desc);
|
|
185
|
+
const native = gpu.createComputePipeline(nativeDesc);
|
|
186
|
+
return new ComputePipeline(native, pipelineLayout === "auto" ? undefined : pipelineLayout, label);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Factory: Asynchronously compiles compute shader and instantiates GPUComputePipeline.
|
|
190
|
+
*/
|
|
191
|
+
static async createAsync(device, desc) {
|
|
192
|
+
const gpu = resolveDevice(device);
|
|
193
|
+
const { nativeDesc, pipelineLayout, label } = ComputePipeline._buildDescriptor(gpu, desc);
|
|
194
|
+
const native = await gpu.createComputePipelineAsync(nativeDesc);
|
|
195
|
+
return new ComputePipeline(native, pipelineLayout === "auto" ? undefined : pipelineLayout, label);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function hashPipelineString(str) {
|
|
199
|
+
let h = 2166136261 >>> 0;
|
|
200
|
+
for (let i = 0; i < str.length; i++) {
|
|
201
|
+
h = Math.imul(h ^ str.charCodeAt(i), 16777619) >>> 0;
|
|
202
|
+
}
|
|
203
|
+
return h.toString(36);
|
|
204
|
+
}
|
|
205
|
+
let _nextPipelineLayoutId = 1;
|
|
206
|
+
const _pipelineLayoutIdMap = new WeakMap();
|
|
207
|
+
function getBindGroupLayoutId(layout) {
|
|
208
|
+
if (!layout)
|
|
209
|
+
return 0;
|
|
210
|
+
const raw = "native" in layout ? layout.native : layout;
|
|
211
|
+
let id = _pipelineLayoutIdMap.get(raw);
|
|
212
|
+
if (id === undefined) {
|
|
213
|
+
id = _nextPipelineLayoutId++;
|
|
214
|
+
_pipelineLayoutIdMap.set(raw, id);
|
|
215
|
+
}
|
|
216
|
+
return id;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Cache preventing redundant driver recompilation of identical pipelines.
|
|
220
|
+
*/
|
|
221
|
+
export class PipelineCache {
|
|
222
|
+
static _defaultInstance;
|
|
223
|
+
static get default() {
|
|
224
|
+
if (!PipelineCache._defaultInstance) {
|
|
225
|
+
PipelineCache._defaultInstance = new PipelineCache();
|
|
226
|
+
}
|
|
227
|
+
return PipelineCache._defaultInstance;
|
|
228
|
+
}
|
|
229
|
+
_rasterPipelines = new Map();
|
|
230
|
+
_computePipelines = new Map();
|
|
231
|
+
/**
|
|
232
|
+
* Computes deterministic hash key for RasterPipelineDesc.
|
|
233
|
+
*/
|
|
234
|
+
static hashRasterDesc(desc) {
|
|
235
|
+
const vsHash = hashPipelineString(desc.vertex.code);
|
|
236
|
+
const vsEp = desc.vertex.entryPoint ?? "vs_main";
|
|
237
|
+
let vBuffers = "";
|
|
238
|
+
if (desc.vertex.buffers) {
|
|
239
|
+
vBuffers = JSON.stringify(desc.vertex.buffers);
|
|
240
|
+
}
|
|
241
|
+
else if (desc.streamSet) {
|
|
242
|
+
vBuffers = JSON.stringify(desc.streamSet.deriveVertexLayouts());
|
|
243
|
+
}
|
|
244
|
+
let fsKey = "none";
|
|
245
|
+
if (desc.fragment) {
|
|
246
|
+
const fsCode = desc.fragment.code ?? desc.vertex.code;
|
|
247
|
+
const fsHash = hashPipelineString(fsCode);
|
|
248
|
+
const fsEp = desc.fragment.entryPoint ?? "fs_main";
|
|
249
|
+
fsKey = `${fsHash}:${fsEp}:${JSON.stringify(desc.fragment.targets)}`;
|
|
250
|
+
}
|
|
251
|
+
const layoutsKey = desc.layouts
|
|
252
|
+
? desc.layouts.map(getBindGroupLayoutId).join(",")
|
|
253
|
+
: "auto";
|
|
254
|
+
const dsKey = desc.depthStencil ? JSON.stringify(desc.depthStencil) : "";
|
|
255
|
+
const primKey = desc.primitive ? JSON.stringify(desc.primitive) : "";
|
|
256
|
+
const msKey = desc.multisample ? JSON.stringify(desc.multisample) : "";
|
|
257
|
+
return `r:${vsHash}:${vsEp};b:${vBuffers};f:${fsKey};l:${layoutsKey};d:${dsKey};p:${primKey};m:${msKey}`;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Computes deterministic hash key for ComputePipelineDesc.
|
|
261
|
+
*/
|
|
262
|
+
static hashComputeDesc(desc) {
|
|
263
|
+
const csHash = hashPipelineString(desc.code);
|
|
264
|
+
const csEp = desc.entryPoint ?? "cs_main";
|
|
265
|
+
const layoutsKey = desc.layouts
|
|
266
|
+
? desc.layouts.map(getBindGroupLayoutId).join(",")
|
|
267
|
+
: "auto";
|
|
268
|
+
return `c:${csHash}:${csEp};l:${layoutsKey}`;
|
|
269
|
+
}
|
|
270
|
+
getRaster(key) {
|
|
271
|
+
return this._rasterPipelines.get(key);
|
|
272
|
+
}
|
|
273
|
+
setRaster(key, pipeline) {
|
|
274
|
+
this._rasterPipelines.set(key, pipeline);
|
|
275
|
+
}
|
|
276
|
+
getCompute(key) {
|
|
277
|
+
return this._computePipelines.get(key);
|
|
278
|
+
}
|
|
279
|
+
setCompute(key, pipeline) {
|
|
280
|
+
this._computePipelines.set(key, pipeline);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Retrieves existing cached RasterPipeline or compiles new instance.
|
|
284
|
+
*/
|
|
285
|
+
getOrCreateRaster(device, desc) {
|
|
286
|
+
const key = PipelineCache.hashRasterDesc(desc);
|
|
287
|
+
let pipeline = this._rasterPipelines.get(key);
|
|
288
|
+
if (!pipeline) {
|
|
289
|
+
pipeline = RasterPipeline.create(device, desc);
|
|
290
|
+
this._rasterPipelines.set(key, pipeline);
|
|
291
|
+
}
|
|
292
|
+
return pipeline;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Retrieves existing cached RasterPipeline or asynchronously compiles new instance.
|
|
296
|
+
*/
|
|
297
|
+
async getOrCreateRasterAsync(device, desc) {
|
|
298
|
+
const key = PipelineCache.hashRasterDesc(desc);
|
|
299
|
+
let pipeline = this._rasterPipelines.get(key);
|
|
300
|
+
if (!pipeline) {
|
|
301
|
+
pipeline = await RasterPipeline.createAsync(device, desc);
|
|
302
|
+
this._rasterPipelines.set(key, pipeline);
|
|
303
|
+
}
|
|
304
|
+
return pipeline;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Retrieves existing cached ComputePipeline or compiles new instance.
|
|
308
|
+
*/
|
|
309
|
+
getOrCreateCompute(device, desc) {
|
|
310
|
+
const key = PipelineCache.hashComputeDesc(desc);
|
|
311
|
+
let pipeline = this._computePipelines.get(key);
|
|
312
|
+
if (!pipeline) {
|
|
313
|
+
pipeline = ComputePipeline.create(device, desc);
|
|
314
|
+
this._computePipelines.set(key, pipeline);
|
|
315
|
+
}
|
|
316
|
+
return pipeline;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Retrieves existing cached ComputePipeline or asynchronously compiles new instance.
|
|
320
|
+
*/
|
|
321
|
+
async getOrCreateComputeAsync(device, desc) {
|
|
322
|
+
const key = PipelineCache.hashComputeDesc(desc);
|
|
323
|
+
let pipeline = this._computePipelines.get(key);
|
|
324
|
+
if (!pipeline) {
|
|
325
|
+
pipeline = await ComputePipeline.createAsync(device, desc);
|
|
326
|
+
this._computePipelines.set(key, pipeline);
|
|
327
|
+
}
|
|
328
|
+
return pipeline;
|
|
329
|
+
}
|
|
330
|
+
clear() {
|
|
331
|
+
this._rasterPipelines.clear();
|
|
332
|
+
this._computePipelines.clear();
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../awgpu/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { type Device } from "./device.js";
|
|
2
|
+
import { type Buffer } from "./memory.js";
|
|
3
|
+
import type { Target } from "./target.js";
|
|
4
|
+
import type { StreamSet } from "./stream.js";
|
|
5
|
+
import type { BindTable } from "./binding.js";
|
|
6
|
+
import type { RasterPipeline, ComputePipeline } from "./pipeline.js";
|
|
7
|
+
export type DynamicOffsetRecord = Record<number, Iterable<number>> | (Iterable<number> | undefined)[];
|
|
8
|
+
export interface DrawBatch {
|
|
9
|
+
pipeline: RasterPipeline;
|
|
10
|
+
streamSet?: StreamSet;
|
|
11
|
+
bindTables?: (BindTable | GPUBindGroup | null | undefined)[];
|
|
12
|
+
vertexCount?: number;
|
|
13
|
+
indexCount?: number;
|
|
14
|
+
instanceCount?: number;
|
|
15
|
+
firstVertex?: number;
|
|
16
|
+
firstInstance?: number;
|
|
17
|
+
firstIndex?: number;
|
|
18
|
+
baseVertex?: number;
|
|
19
|
+
dynamicOffsets?: DynamicOffsetRecord;
|
|
20
|
+
indirect?: {
|
|
21
|
+
buffer: GPUBuffer | Buffer;
|
|
22
|
+
offset?: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface ComputeBatch {
|
|
26
|
+
pipeline: ComputePipeline;
|
|
27
|
+
workgroups?: [number, number, number];
|
|
28
|
+
bindTables?: (BindTable | GPUBindGroup | null | undefined)[];
|
|
29
|
+
dynamicOffsets?: DynamicOffsetRecord;
|
|
30
|
+
indirect?: {
|
|
31
|
+
buffer: GPUBuffer | Buffer;
|
|
32
|
+
offset?: number;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Encapsulates a self-contained render pass with redundant driver state filtering.
|
|
37
|
+
*/
|
|
38
|
+
export declare class RenderPassNode {
|
|
39
|
+
readonly label: string;
|
|
40
|
+
target: Target;
|
|
41
|
+
readonly draws: DrawBatch[];
|
|
42
|
+
private _customRecorder?;
|
|
43
|
+
private _activeBindGroups;
|
|
44
|
+
private _activeHasDynamicOffsets;
|
|
45
|
+
private _activeVbos;
|
|
46
|
+
private _activeVboOffsets;
|
|
47
|
+
private _scratchResolved;
|
|
48
|
+
constructor(target: Target, label?: string);
|
|
49
|
+
addDraw(batch: DrawBatch): this;
|
|
50
|
+
/**
|
|
51
|
+
* Registers custom imperative hardware recording callback, bypassing queued batch list.
|
|
52
|
+
*/
|
|
53
|
+
record(recorder: (pass: GPURenderPassEncoder) => void): this;
|
|
54
|
+
clear(): void;
|
|
55
|
+
execute(encoder: GPUCommandEncoder): void;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Encapsulates a compute pass dispatching compute batches.
|
|
59
|
+
*/
|
|
60
|
+
export declare class ComputePassNode {
|
|
61
|
+
readonly label: string;
|
|
62
|
+
readonly dispatches: ComputeBatch[];
|
|
63
|
+
private _customRecorder?;
|
|
64
|
+
private _activeBindGroups;
|
|
65
|
+
private _activeHasDynamicOffsets;
|
|
66
|
+
private _scratchResolved;
|
|
67
|
+
constructor(label?: string);
|
|
68
|
+
addDispatch(batch: ComputeBatch): this;
|
|
69
|
+
record(recorder: (pass: GPUComputePassEncoder) => void): this;
|
|
70
|
+
clear(): void;
|
|
71
|
+
execute(encoder: GPUCommandEncoder): void;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Linear pass execution orchestrator.
|
|
75
|
+
* Records passes into a single GPUCommandEncoder and submits to queue in one command buffer.
|
|
76
|
+
*/
|
|
77
|
+
export declare class PassSequence {
|
|
78
|
+
readonly passes: (RenderPassNode | ComputePassNode)[];
|
|
79
|
+
add(pass: RenderPassNode | ComputePassNode): this;
|
|
80
|
+
clear(): void;
|
|
81
|
+
execute(device: Device | GPUDevice, label?: string): void;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=sequence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../../awgpu/sequence.ts"],"names":[],"mappings":"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"}
|