@forgeax/engine-render 0.1.32 → 0.1.33
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/README.md +379 -33
- package/dist/assembly/analytic-fog-registration.d.ts +3 -0
- package/dist/assembly/analytic-fog-registration.d.ts.map +1 -0
- package/dist/assembly/fxaa-registration.d.ts +4 -0
- package/dist/assembly/fxaa-registration.d.ts.map +1 -0
- package/dist/assembly/lod-observation.d.ts +4 -0
- package/dist/assembly/lod-observation.d.ts.map +1 -0
- package/dist/assembly/motion-blur-registration.d.ts +3 -0
- package/dist/assembly/motion-blur-registration.d.ts.map +1 -0
- package/dist/assembly/renderer-facade.d.ts.map +1 -1
- package/dist/assembly/temporal-post-process-prewarm.d.ts +13 -0
- package/dist/assembly/temporal-post-process-prewarm.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready-contract.d.ts +4 -3
- package/dist/assembly/webgpu-ready-contract.d.ts.map +1 -1
- package/dist/assembly/webgpu-ready.d.ts +1 -1
- package/dist/assembly/webgpu-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
- package/dist/bloom-admission.d.ts +13 -0
- package/dist/bloom-admission.d.ts.map +1 -0
- package/dist/{chunk-DRR7D3KX.mjs → chunk-3RTCJTH4.mjs} +12 -9
- package/dist/chunk-3RTCJTH4.mjs.map +1 -0
- package/dist/{chunk-S665NJNF.mjs → chunk-LEAXOMYJ.mjs} +3 -3
- package/dist/{chunk-S665NJNF.mjs.map → chunk-LEAXOMYJ.mjs.map} +1 -1
- package/dist/{chunk-6TFBXLRJ.mjs → chunk-NB2S7ZRX.mjs} +155 -11
- package/dist/chunk-NB2S7ZRX.mjs.map +1 -0
- package/dist/{chunk-LULCA3OF.mjs → chunk-NNQL7CB3.mjs} +4 -4
- package/dist/{chunk-LULCA3OF.mjs.map → chunk-NNQL7CB3.mjs.map} +1 -1
- package/dist/{chunk-4NNZQCL3.mjs → chunk-OO3DRYK7.mjs} +66 -200
- package/dist/chunk-OO3DRYK7.mjs.map +1 -0
- package/dist/{chunk-GWCEMDVR.mjs → chunk-PLAXOOX5.mjs} +232 -7
- package/dist/chunk-PLAXOOX5.mjs.map +1 -0
- package/dist/{chunk-JRIPCMYC.mjs → chunk-VOZWDM3L.mjs} +283 -193
- package/dist/chunk-VOZWDM3L.mjs.map +1 -0
- package/dist/{chunk-JCIRYQ4V.mjs → chunk-ZDQWGQW7.mjs} +10 -4
- package/dist/chunk-ZDQWGQW7.mjs.map +1 -0
- package/dist/components/atmosphere.d.ts +2 -0
- package/dist/components/atmosphere.d.ts.map +1 -1
- package/dist/components/camera.d.ts +20 -4
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/mesh-filter.d.ts +6 -5
- package/dist/components/mesh-filter.d.ts.map +1 -1
- package/dist/components/motion-blur.d.ts +1 -0
- package/dist/components/motion-blur.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +2865 -526
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/gpu-residency.d.ts +6 -0
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/environment/analytic-fog.d.ts +6 -0
- package/dist/environment/analytic-fog.d.ts.map +1 -0
- package/dist/errors/render.d.ts +6 -2
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/camera.d.ts.map +1 -1
- package/dist/extract/contracts.d.ts +7 -0
- package/dist/extract/contracts.d.ts.map +1 -1
- package/dist/extract/environment.d.ts +2 -0
- package/dist/extract/environment.d.ts.map +1 -1
- package/dist/features/error-reporting.d.ts +13 -0
- package/dist/features/error-reporting.d.ts.map +1 -0
- package/dist/features/host.d.ts +5 -0
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/motion-blur/motion-blur-feature.d.ts +20 -2
- package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -1
- package/dist/features/motion-blur/motion-blur-params.d.ts +21 -0
- package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -1
- package/dist/features/motion-blur/motion-blur-runtime.d.ts +54 -0
- package/dist/features/motion-blur/motion-blur-runtime.d.ts.map +1 -0
- package/dist/features/plan.d.ts +7 -4
- package/dist/features/plan.d.ts.map +1 -1
- package/dist/features/prepared-gpu-work.d.ts +9 -5
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/render-graph-compute.d.ts.map +1 -1
- package/dist/features/render-graph-contribution.d.ts.map +1 -1
- package/dist/gpu-driven/material-artifacts.d.ts.map +1 -1
- package/dist/gpu-driven/prepared-draw.d.ts +7 -0
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +3 -1
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/view-gpu.d.ts +9 -0
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +6 -1
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/inspection-types.d.ts +43 -2
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/instances.d.ts +8 -1
- package/dist/instances.d.ts.map +1 -1
- package/dist/internal.mjs +6 -6
- package/dist/pipeline/standard-post.d.ts +28 -19
- package/dist/pipeline/standard-post.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts +2 -2
- package/dist/record/frame-snapshot.d.ts +3 -0
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame-targets.d.ts.map +1 -1
- package/dist/record/frame.d.ts +5 -2
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts +6 -5
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +12 -28
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts +5 -3
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +1 -1
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/recovery/render-system-candidate.d.ts.map +1 -1
- package/dist/render-contract.d.ts +24 -4
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +3 -1
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +8 -1
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +7 -1
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +2 -0
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/temporal/frame-coordinator.d.ts.map +1 -1
- package/dist/temporal/frame.d.ts +7 -0
- package/dist/temporal/frame.d.ts.map +1 -1
- package/dist/temporal/index.mjs +5 -5
- package/dist/temporal/view.d.ts +6 -1
- package/dist/temporal/view.d.ts.map +1 -1
- package/dist/typed-render-graph-primitives.d.ts +10 -7
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/volume/component.d.ts +0 -1
- package/dist/volume/component.d.ts.map +1 -1
- package/dist/volume/passes.d.ts.map +1 -1
- package/dist/volume/temporal.d.ts +3 -1
- package/dist/volume/temporal.d.ts.map +1 -1
- package/package.json +21 -21
- package/src/__tests__/analytic-fog-graph.unit.test.ts +199 -0
- package/src/__tests__/analytic-fog-optics.unit.test.ts +38 -0
- package/src/__tests__/bloom-exact-zero.unit.test.ts +112 -18
- package/src/__tests__/bloom-lifecycle.integration.test.ts +17 -4
- package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +20 -0
- package/src/__tests__/environment-fog-lanes.integration.test.ts +14 -0
- package/src/__tests__/environment-selection.unit.test.ts +12 -0
- package/src/__tests__/factory-contract.integration.test.ts +331 -68
- package/src/__tests__/frame-camera-selection.unit.test.ts +39 -1
- package/src/__tests__/frame-plan-contract.unit.test.ts +2 -0
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +2 -1
- package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +1 -1
- package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +1 -1
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +11 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +12 -0
- package/src/__tests__/gpu-scene.unit.test.ts +91 -0
- package/src/__tests__/instances-store.unit.test.ts +75 -0
- package/src/__tests__/mesh-submission-lifetime.unit.test.ts +31 -0
- package/src/__tests__/motion-blur-compute.dawn.test.ts +583 -0
- package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +21 -0
- package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +86 -0
- package/src/__tests__/public-surface.test-d.ts +8 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +2 -0
- package/src/__tests__/render-feature-error-reporting.unit.test.ts +24 -0
- package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +23 -0
- package/src/__tests__/render-scene-temporal-retry.unit.test.ts +31 -0
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +7 -1
- package/src/__tests__/shader-manifest-fixture.ts +4 -4
- package/src/__tests__/skinned-shadow-caster.test.ts +2 -0
- package/src/__tests__/standard-lighting-write.unit.test.ts +2 -1
- package/src/__tests__/standard-pipeline.dawn.test.ts +1 -1
- package/src/__tests__/standard-pipeline.integration.test.ts +18 -8
- package/src/__tests__/temporal-reset-matrix.unit.test.ts +10 -0
- package/src/__tests__/temporal-view.unit.test.ts +2 -1
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +20 -4
- package/src/__tests__/volume-optics-oracle.unit.test.ts +3 -1
- package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +177 -13
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +447 -61
- package/src/__tests__/volumetric-fog-temporal.unit.test.ts +27 -0
- package/src/__tests__/volumetric-fog-topology.unit.test.ts +19 -3
- package/src/assembly/analytic-fog-registration.ts +14 -0
- package/src/assembly/fxaa-registration.ts +17 -0
- package/src/assembly/lod-observation.ts +12 -0
- package/src/assembly/motion-blur-registration.ts +17 -0
- package/src/assembly/renderer-facade.ts +2 -0
- package/src/assembly/temporal-post-process-prewarm.ts +40 -0
- package/src/assembly/webgpu-ready-contract.ts +8 -3
- package/src/assembly/webgpu-ready.ts +181 -245
- package/src/assembly/webgpu-renderer.ts +16 -31
- package/src/bloom-admission.ts +21 -0
- package/src/components/__tests__/motion-blur.unit.test.ts +1 -0
- package/src/components/atmosphere.ts +4 -0
- package/src/components/camera.ts +66 -10
- package/src/components/mesh-filter.ts +11 -9
- package/src/components/motion-blur.ts +1 -0
- package/src/device/gpu-residency.ts +56 -12
- package/src/environment/analytic-fog.ts +44 -0
- package/src/environment/background.ts +2 -2
- package/src/errors/render.ts +14 -1
- package/src/extract/camera.ts +20 -7
- package/src/extract/contracts.ts +7 -0
- package/src/extract/environment.ts +4 -0
- package/src/features/error-reporting.ts +78 -0
- package/src/features/host.ts +25 -12
- package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +111 -1
- package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +58 -3
- package/src/features/motion-blur/motion-blur-feature.ts +1519 -15
- package/src/features/motion-blur/motion-blur-params.ts +70 -2
- package/src/features/motion-blur/motion-blur-runtime.ts +176 -0
- package/src/features/plan.ts +25 -8
- package/src/features/prepared-gpu-work.ts +86 -35
- package/src/features/render-graph-compute.ts +13 -5
- package/src/features/render-graph-contribution.ts +2 -0
- package/src/gpu-driven/material-artifacts.ts +2 -7
- package/src/gpu-driven/prepared-draw.ts +15 -10
- package/src/gpu-driven/production-raster.ts +83 -7
- package/src/gpu-driven/view-gpu.ts +17 -0
- package/src/gpu-scene.ts +188 -21
- package/src/index.ts +32 -0
- package/src/inspection-types.ts +60 -2
- package/src/instances.ts +80 -1
- package/src/pipeline/standard-post.ts +307 -78
- package/src/pipeline-spec.ts +5 -5
- package/src/points-lines/__tests__/view-ubo.unit.test.ts +2 -1
- package/src/record/__tests__/temporal-payload.unit.test.ts +2 -1
- package/src/record/frame-snapshot.ts +5 -1
- package/src/record/frame-targets.ts +10 -6
- package/src/record/frame.ts +163 -22
- package/src/record/main-pass-geometry.ts +30 -1
- package/src/record/main-pass-sprite-draws.ts +6 -1
- package/src/record/mesh-ssbo.ts +43 -6
- package/src/record/render-context.ts +12 -28
- package/src/record/shadow-pass.ts +6 -1
- package/src/record/skybox-post-pass.ts +122 -196
- package/src/record/typed-frame-graph.ts +153 -9
- package/src/recovery/render-system-candidate.ts +22 -10
- package/src/render-contract.ts +23 -4
- package/src/render-pipeline.ts +6 -1
- package/src/render-system-extract-tail.ts +16 -0
- package/src/render-system-extract.ts +45 -13
- package/src/render-system.ts +255 -120
- package/src/scene/render-scene.ts +85 -4
- package/src/temporal/__tests__/temporal-frame-transaction.unit.test.ts +36 -0
- package/src/temporal/frame-coordinator.ts +8 -1
- package/src/temporal/frame.ts +20 -0
- package/src/temporal/view.ts +13 -2
- package/src/typed-render-graph-primitives.ts +121 -48
- package/src/volume/component.ts +0 -1
- package/src/volume/passes.ts +8 -4
- package/src/volume/resources.ts +1 -1
- package/src/volume/temporal.ts +11 -0
- package/dist/chunk-4NNZQCL3.mjs.map +0 -1
- package/dist/chunk-6TFBXLRJ.mjs.map +0 -1
- package/dist/chunk-DRR7D3KX.mjs.map +0 -1
- package/dist/chunk-GWCEMDVR.mjs.map +0 -1
- package/dist/chunk-JCIRYQ4V.mjs.map +0 -1
- package/dist/chunk-JRIPCMYC.mjs.map +0 -1
|
@@ -10,7 +10,25 @@ export declare function addMotionBlurPass(graph: RenderGraphBuilder<RenderPipeli
|
|
|
10
10
|
export interface MotionBlurFeatureFrame {
|
|
11
11
|
readonly params: MotionBlurParams | undefined;
|
|
12
12
|
readonly demanded: boolean;
|
|
13
|
+
/** Raw accepted-submit interval; it is never replaced by ECS clamp time. */
|
|
14
|
+
readonly frameDeltaSeconds: number;
|
|
15
|
+
/** Temporal reset already admitted by the shared renderer transaction. */
|
|
16
|
+
readonly reset: boolean;
|
|
13
17
|
}
|
|
14
|
-
export
|
|
15
|
-
|
|
18
|
+
export interface MotionBlurFeatureInput {
|
|
19
|
+
readonly params: Partial<MotionBlurParams> | undefined;
|
|
20
|
+
readonly frameDeltaSeconds?: number;
|
|
21
|
+
readonly reset?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Compute owner for the long-vector lane. The summary is one 32-byte record
|
|
25
|
+
* per 16x16 tile and the reconstruction is fused: a long vector reuses an
|
|
26
|
+
* even-pixel (half-resolution) source lattice and performs depth-guided
|
|
27
|
+
* acceptance in the same dispatch. There is no scatter, atomic, or
|
|
28
|
+
* radius-squared neighbourhood work.
|
|
29
|
+
*/
|
|
30
|
+
export declare const MOTION_BLUR_COMPUTE_WGSL = "struct MotionBlurComputeParams {\n shutterAngle : f32,\n maxRadiusPixels : f32,\n sampleCount : u32,\n reset : u32,\n targetFps : f32,\n exposureScale : f32,\n frameDeltaSeconds : f32,\n flags : u32,\n};\n\nstruct MotionBlurTileSummary {\n // The two motion lanes retain the source pixel that supplied the direction.\n // Those anchors let a bounded midpoint tap hit a sparse source without\n // adding a color read or growing the 32-byte per-tile summary.\n maxMotionAndLength : vec4<f32>,\n secondaryMotionAndDepth : vec4<f32>,\n};\n\nstruct TemporalSample {\n motion : vec2<f32>,\n depth : f32,\n reactive : f32,\n validDepth : bool,\n motionValid : bool,\n};\n\nstruct MotionBlurSupport {\n primaryMotion : vec2<f32>,\n secondaryMotion : vec2<f32>,\n primaryAnchor : vec2<i32>,\n secondaryAnchor : vec2<i32>,\n primaryRadius : f32,\n secondaryRadius : f32,\n valid : bool,\n longVector : bool,\n};\n\nstruct MotionBlurTap {\n pixel : vec2<i32>,\n fallbackPixel : vec2<i32>,\n valid : bool,\n fallbackValid : bool,\n};\n\nstruct MotionBlurFilter {\n color0 : vec4<f32>,\n color1 : vec4<f32>,\n color2 : vec4<f32>,\n color3 : vec4<f32>,\n depth0 : f32,\n depth1 : f32,\n depth2 : f32,\n depth3 : f32,\n coverage0 : f32,\n coverage1 : f32,\n coverage2 : f32,\n coverage3 : f32,\n receiver : vec2<i32>,\n motion : vec2<f32>,\n radius : f32,\n receiverMask : u32,\n validMask : u32,\n valid : bool,\n};\n\nstruct MotionBlurCacheSample {\n color : vec4<f32>,\n coverage : f32,\n valid : bool,\n};\n\nstruct MotionBlurSource {\n pixel : vec2<i32>,\n motion : vec2<f32>,\n depth : f32,\n radius : f32,\n coverage0 : f32,\n coverage1 : f32,\n coverage2 : f32,\n coverage3 : f32,\n receiverMask : u32,\n valid : bool,\n};\n\n@group(0) @binding(0) var currentColor : texture_2d<f32>;\n@group(0) @binding(1) var sceneTemporal : texture_2d<f32>;\n@group(0) @binding(2) var<storage, read_write> tileSummary : array<MotionBlurTileSummary>;\n@group(0) @binding(3) var outputColor : texture_storage_2d<rgba16float, write>;\n@group(0) @binding(4) var<uniform> params : MotionBlurComputeParams;\n\n// Reconstruct a bounded part of a partially covered opaque edge and fund it\n// by attenuating the matching empty-background trail. The fixed factor keeps\n// the work and the energy adjustment independent of the blur radius.\nconst EDGE_FILL_FACTOR : f32 = 0.99;\n\n// One 8x8 workgroup covers a 16x16 tile. Each invocation reads a 2x2\n// footprint, then the workgroup reduction combines the values without\n// write contention or a serial 256-pixel loop.\nvar<workgroup> tileMotionScratch : array<vec2<f32>, 64>;\nvar<workgroup> tileLengthScratch : array<f32, 64>;\nvar<workgroup> tileSourceScratch : array<vec2<i32>, 64>;\nvar<workgroup> tileSecondaryMotionScratch : array<vec2<f32>, 64>;\nvar<workgroup> tileSecondaryLengthScratch : array<f32, 64>;\nvar<workgroup> tileSecondarySourceScratch : array<vec2<i32>, 64>;\n// The reconstruction workgroup owns a 4x4 half-resolution result cache for\n// its 8x8 output footprint. Each owner computes the complete bounded support\n// filter once. Full-resolution lanes only select a depth-compatible cached\n// result after the uniform barrier, with no cross-workgroup dependency.\n// Four quadrants are kept per half-cell. Each owner pays four receiver\n// center-color reads and at most supportCount (<=15) accepted source-color\n// reads; midpoint anchor recovery reuses an existing slot and adds no read\n// budget. The shared result retains odd/even coverage instead of spreading an\n// odd row across both rows.\nvar<workgroup> halfFilteredColor : array<vec4<f32>, 64>;\nvar<workgroup> halfFilteredDepth : array<f32, 64>;\nvar<workgroup> halfFilteredCoverage : array<f32, 64>;\nvar<workgroup> halfFilteredReceiver : array<vec2<i32>, 16>;\nvar<workgroup> halfFilteredMotion : array<vec2<f32>, 16>;\nvar<workgroup> halfFilteredRadius : array<f32, 16>;\nvar<workgroup> halfFilteredValid : array<u32, 64>;\nvar<workgroup> longVectorScratch : array<u32, 64>;\n// A reconstruct workgroup covers one 8x8 output footprint. Its first lane\n// derives the complete bounded tile neighbourhood once and publishes the top\n// two source directions for all lanes and all designated half-resolution\n// owners. This keeps summary work O(P/T^2), rather than repeating a tile walk\n// per output pixel.\nvar<workgroup> neighbourhoodPrimaryMotion : vec2<f32>;\nvar<workgroup> neighbourhoodPrimaryLength : f32;\nvar<workgroup> neighbourhoodPrimaryAnchor : vec2<i32>;\nvar<workgroup> neighbourhoodSecondaryMotion : vec2<f32>;\nvar<workgroup> neighbourhoodSecondaryLength : f32;\nvar<workgroup> neighbourhoodSecondaryAnchor : vec2<i32>;\n\n// maxRadiusPixels is authored at [0,64], so a 16-pixel tile support reaches\n// at most four tiles. The fixed 9x9 lattice is geometrically derived from its\n// index, then intersected with the circular/AABB support. It is a constant\n// bounded metadata walk: no loop scales with the requested radius and no\n// radius-squared per-pixel storage or write path is introduced.\nconst MAX_TILE_REACH : i32 = 4;\nconst TILE_NEIGHBORHOOD_SIDE : u32 = 9u;\nconst TILE_NEIGHBORHOOD_COUNT : u32 = 81u;\n\nfn finite(value : f32) -> bool {\n return value == value && abs(value) < 3.402823e+38;\n}\n\nfn pixelInBounds(pixel : vec2<i32>, dimensions : vec2<i32>) -> bool {\n return pixel.x >= 0 && pixel.y >= 0 && pixel.x < dimensions.x && pixel.y < dimensions.y;\n}\n\nfn decodeDepth(packed : f32) -> f32 {\n if (packed < 0.0) { return 0.0; }\n return exp2(packed) - 1.0;\n}\n\nfn temporalAt(pixel : vec2<i32>, dimensions : vec2<i32>) -> TemporalSample {\n let samplePixel = clamp(pixel, vec2<i32>(0), dimensions - vec2<i32>(1));\n let packed = textureLoad(sceneTemporal, samplePixel, 0);\n let invalidMotion = packed.w >= 2.0;\n return TemporalSample(\n packed.xy,\n decodeDepth(packed.z),\n clamp(packed.w - select(0.0, 2.0, invalidMotion), 0.0, 1.0),\n packed.z >= 0.0,\n !invalidMotion,\n );\n}\n\nfn depthReject(center : f32, sample : f32) -> bool {\n return sample > center + max(0.01, center * 0.01);\n}\n\nfn distinctDirection(a : vec2<f32>, b : vec2<f32>) -> bool {\n let aLength = length(a);\n let bLength = length(b);\n if (aLength <= 1e-5 || bLength <= 1e-5) { return false; }\n // Keep only genuinely different directions. Opposite signs still carry\n // separate source segments, while nearly parallel candidates do not spend\n // the bounded second-direction slot.\n return abs(dot(a / aLength, b / bLength)) < 0.94;\n}\n\nfn sourceVelocitySegmentCovers(\n receiverPixel : vec2<i32>,\n sourcePixel : vec2<i32>,\n motionPixels : vec2<f32>,\n radius : f32,\n) -> bool {\n let delta = vec2<f32>(receiverPixel - sourcePixel);\n let motionLength = length(motionPixels);\n if (motionLength <= 1e-5 || radius <= 1e-5) { return false; }\n let direction = motionPixels / motionLength;\n let along = dot(delta, direction);\n let perpendicular = abs(delta.x * direction.y - delta.y * direction.x);\n // A source segment owns a one-pixel coverage tube. This is a bounded\n // geometric test, not a radius-sized source scan, and lets a sparse mover\n // cover a static receiver without accepting a far/orthogonal source.\n return abs(along) <= radius + 0.75 && perpendicular <= 0.75;\n}\n\nfn symmetricOffset(index : u32, count : u32, motion : vec2<f32>) -> vec2<f32> {\n let denominator = max(f32(count), 1.0);\n return motion * (2.0 * (f32(index) + 0.5) / denominator - 1.0);\n}\n\nfn tileNeighborhoodOffset(index : u32) -> vec2<i32> {\n let x = i32(index % TILE_NEIGHBORHOOD_SIDE) - MAX_TILE_REACH;\n let y = i32(index / TILE_NEIGHBORHOOD_SIDE) - MAX_TILE_REACH;\n return vec2<i32>(x, y);\n}\n\nfn tileOffsetWithinSupport(offset : vec2<i32>, tileReach : i32) -> bool {\n if (offset.x == 0 && offset.y == 0) { return false; }\n let boundedReach = min(max(tileReach, 1), MAX_TILE_REACH);\n // The bounded lattice is a square around the receiver tile. The precise\n // AABB/circle intersection below decides whether a diagonal tile really\n // intersects the support; a circular pre-filter here would drop the\n // (\u00B12,\u00B12) and boundary cases before that exact test can run.\n return abs(offset.x) <= boundedReach && abs(offset.y) <= boundedReach;\n}\n\nfn tileIntersectsSupport(\n receiverPixel : vec2<i32>,\n candidateTile : vec2<i32>,\n dimensions : vec2<i32>,\n supportRadius : f32,\n) -> bool {\n // Use the receiver-to-tile-AABB lower bound. This includes every tile whose\n // contents can intersect the support, including signs and diagonals, while\n // rejecting an outside-support tile before loading its summary.\n let tileMin = vec2<f32>(candidateTile * 16);\n let tileMax = min(tileMin + vec2<f32>(16.0), vec2<f32>(dimensions));\n let receiver = vec2<f32>(receiverPixel) + vec2<f32>(0.5);\n let dx = max(max(tileMin.x - receiver.x, 0.0), receiver.x - tileMax.x);\n let dy = max(max(tileMin.y - receiver.y, 0.0), receiver.y - tileMax.y);\n let distance = vec2<f32>(dx, dy);\n return dot(distance, distance) <= supportRadius * supportRadius + 1.0;\n}\n\nfn tileIntersectsWorkgroupSupport(\n workgroupBase : vec2<i32>,\n candidateTile : vec2<i32>,\n dimensions : vec2<i32>,\n supportRadius : f32,\n) -> bool {\n // A workgroup's 8x8 rectangle is the conservative receiver domain for one\n // shared metadata walk. The AABB lower bound includes every pixel in that\n // rectangle that can reach the candidate tile, including diagonal/sign\n // variants, while rejecting a tile fully outside the support.\n let tileMin = vec2<f32>(candidateTile * 16);\n let tileMax = min(tileMin + vec2<f32>(16.0), vec2<f32>(dimensions));\n let groupMin = vec2<f32>(workgroupBase) + vec2<f32>(0.5);\n let groupMax = min(groupMin + vec2<f32>(8.0), vec2<f32>(dimensions));\n let dx = max(max(tileMin.x - groupMax.x, 0.0), groupMin.x - tileMax.x);\n let dy = max(max(tileMin.y - groupMax.y, 0.0), groupMin.y - tileMax.y);\n let distance = vec2<f32>(dx, dy);\n return dot(distance, distance) <= supportRadius * supportRadius + 1.0;\n}\n\nfn scanTileNeighbourhood(\n workgroupBase : vec2<i32>,\n dimensions : vec2<i32>,\n) {\n let tiles = (vec2<u32>(dimensions) + vec2<u32>(15)) / vec2<u32>(16);\n let tileCoordinate = workgroupBase / vec2<i32>(16);\n let currentIndex = u32(tileCoordinate.y) * tiles.x + u32(tileCoordinate.x);\n let current = tileSummary[currentIndex];\n var primary = current.maxMotionAndLength.xy * vec2<f32>(dimensions) * params.exposureScale;\n var primaryLength = length(primary);\n var primaryAnchor = vec2<i32>(\n i32(current.maxMotionAndLength.z),\n i32(current.maxMotionAndLength.w),\n );\n var secondary = current.secondaryMotionAndDepth.xy * vec2<f32>(dimensions) * params.exposureScale;\n var secondaryLength = length(secondary);\n var secondaryAnchor = vec2<i32>(\n i32(current.secondaryMotionAndDepth.z),\n i32(current.secondaryMotionAndDepth.w),\n );\n let supportRadius = min(max(params.maxRadiusPixels, 1.0), 64.0);\n let tileReach = min(MAX_TILE_REACH, max(1, i32(ceil(supportRadius / 16.0))));\n for (var tileCandidateIndex = 0u; tileCandidateIndex < TILE_NEIGHBORHOOD_COUNT; tileCandidateIndex += 1u) {\n let offset = tileNeighborhoodOffset(tileCandidateIndex);\n if (!tileOffsetWithinSupport(offset, tileReach)) { continue; }\n let candidateTile = tileCoordinate + offset;\n if (\n candidateTile.x < 0 ||\n candidateTile.y < 0 ||\n candidateTile.x >= i32(tiles.x) ||\n candidateTile.y >= i32(tiles.y) ||\n !tileIntersectsWorkgroupSupport(workgroupBase, candidateTile, dimensions, supportRadius)\n ) { continue; }\n let candidate = tileSummary[u32(candidateTile.y) * tiles.x + u32(candidateTile.x)];\n let candidatePrimary = candidate.maxMotionAndLength.xy * vec2<f32>(dimensions) * params.exposureScale;\n let candidatePrimaryLength = length(candidatePrimary);\n let candidatePrimaryAnchor = vec2<i32>(\n i32(candidate.maxMotionAndLength.z),\n i32(candidate.maxMotionAndLength.w),\n );\n if (candidatePrimaryLength > primaryLength) {\n let previousPrimary = primary;\n let previousLength = primaryLength;\n let previousAnchor = primaryAnchor;\n primary = candidatePrimary;\n primaryLength = candidatePrimaryLength;\n primaryAnchor = candidatePrimaryAnchor;\n if (previousLength > 1e-5 && distinctDirection(primary, previousPrimary) && previousLength > secondaryLength) {\n secondary = previousPrimary;\n secondaryLength = previousLength;\n secondaryAnchor = previousAnchor;\n }\n } else if (\n candidatePrimaryLength > secondaryLength &&\n distinctDirection(primary, candidatePrimary)\n ) {\n secondary = candidatePrimary;\n secondaryLength = candidatePrimaryLength;\n secondaryAnchor = candidatePrimaryAnchor;\n }\n let candidateSecondary = candidate.secondaryMotionAndDepth.xy * vec2<f32>(dimensions) * params.exposureScale;\n let candidateSecondaryLength = length(candidateSecondary);\n let candidateSecondaryAnchor = vec2<i32>(\n i32(candidate.secondaryMotionAndDepth.z),\n i32(candidate.secondaryMotionAndDepth.w),\n );\n if (candidateSecondaryLength > secondaryLength && distinctDirection(primary, candidateSecondary)) {\n secondary = candidateSecondary;\n secondaryLength = candidateSecondaryLength;\n secondaryAnchor = candidateSecondaryAnchor;\n }\n }\n neighbourhoodPrimaryMotion = primary;\n neighbourhoodPrimaryLength = primaryLength;\n neighbourhoodPrimaryAnchor = primaryAnchor;\n neighbourhoodSecondaryMotion = secondary;\n neighbourhoodSecondaryLength = secondaryLength;\n neighbourhoodSecondaryAnchor = secondaryAnchor;\n}\n\nfn validMotionParameters() -> bool {\n return\n finite(params.frameDeltaSeconds) &&\n params.frameDeltaSeconds > 0.0 &&\n params.frameDeltaSeconds <= 0.1 &&\n finite(params.exposureScale) &&\n params.exposureScale > 0.0 &&\n finite(params.targetFps) &&\n params.targetFps >= 0.0 &&\n params.targetFps <= 240.0 &&\n params.targetFps == floor(params.targetFps) &&\n params.sampleCount >= 4u &&\n params.maxRadiusPixels > 0.0 &&\n finite(params.maxRadiusPixels) &&\n params.shutterAngle > 0.0;\n}\n\nfn sourceMotionPixels(sample : TemporalSample, dimensions : vec2<i32>) -> vec2<f32> {\n return sample.motion * vec2<f32>(dimensions) * params.exposureScale;\n}\n\nfn sourceRadius(motionPixels : vec2<f32>, shutter : f32) -> f32 {\n return min(length(motionPixels) * shutter * 0.5, params.maxRadiusPixels);\n}\n\nfn resolveMotionBlurSupport(\n pixel : vec2<i32>,\n dimensions : vec2<i32>,\n) -> MotionBlurSupport {\n var empty = MotionBlurSupport(\n vec2<f32>(0.0),\n vec2<f32>(0.0),\n vec2<i32>(0),\n vec2<i32>(0),\n 0.0,\n 0.0,\n false,\n false,\n );\n if (!pixelInBounds(pixel, dimensions) || !validMotionParameters() || params.reset != 0u) {\n return empty;\n }\n let center = temporalAt(pixel, dimensions);\n if (!center.validDepth || !center.motionValid) { return empty; }\n let shutter = clamp(params.shutterAngle / 360.0, 0.0, 1.0);\n let centerMotion = sourceMotionPixels(center, dimensions);\n let centerLength = length(centerMotion);\n var primaryMotion = centerMotion;\n var primaryLength = centerLength;\n var primaryAnchor = pixel;\n var secondaryMotion = neighbourhoodSecondaryMotion;\n var secondaryLength = neighbourhoodSecondaryLength;\n var secondaryAnchor = neighbourhoodSecondaryAnchor;\n if (neighbourhoodPrimaryLength > primaryLength) {\n if (distinctDirection(primaryMotion, neighbourhoodPrimaryMotion)) {\n secondaryMotion = primaryMotion;\n secondaryLength = primaryLength;\n secondaryAnchor = pixel;\n }\n primaryMotion = neighbourhoodPrimaryMotion;\n primaryLength = neighbourhoodPrimaryLength;\n primaryAnchor = neighbourhoodPrimaryAnchor;\n } else if (\n neighbourhoodPrimaryLength > secondaryLength &&\n distinctDirection(primaryMotion, neighbourhoodPrimaryMotion)\n ) {\n secondaryMotion = neighbourhoodPrimaryMotion;\n secondaryLength = neighbourhoodPrimaryLength;\n secondaryAnchor = neighbourhoodPrimaryAnchor;\n }\n if (\n secondaryLength <= 1e-5 ||\n !distinctDirection(primaryMotion, secondaryMotion)\n ) {\n secondaryMotion = vec2<f32>(0.0);\n secondaryLength = 0.0;\n }\n empty.primaryMotion = primaryMotion;\n empty.secondaryMotion = secondaryMotion;\n empty.primaryAnchor = primaryAnchor;\n empty.secondaryAnchor = secondaryAnchor;\n empty.primaryRadius = sourceRadius(primaryMotion, shutter);\n empty.secondaryRadius = sourceRadius(secondaryMotion, shutter);\n empty.valid = empty.primaryRadius > 1e-5 || empty.secondaryRadius > 1e-5;\n empty.longVector = max(empty.primaryRadius, empty.secondaryRadius) > 8.0;\n return empty;\n}\n\nfn sourceAnchorForReceiver(\n receiverPixel : vec2<i32>,\n anchor : vec2<i32>,\n motion : vec2<f32>,\n dimensions : vec2<i32>,\n) -> vec2<i32> {\n // A tile summary has one source anchor, while a horizontal source may span\n // the tile's perpendicular axis. Project that anchor onto the receiver's\n // motion line before the midpoint read. The following source footprint\n // validates the projected pixel, so a thin or off-axis source cannot be\n // invented by the projection.\n let motionLength = length(motion);\n if (motionLength <= 1e-5) { return anchor; }\n let direction = motion / motionLength;\n let delta = vec2<f32>(receiverPixel - anchor);\n let perpendicular = delta - direction * dot(delta, direction);\n let projected = vec2<f32>(anchor) + perpendicular;\n let candidate = vec2<i32>(floor(projected + vec2<f32>(0.5)));\n return clamp(candidate, vec2<i32>(0), dimensions - vec2<i32>(1));\n}\n\nfn supportTap(\n receiverPixel : vec2<i32>,\n index : u32,\n count : u32,\n motion : vec2<f32>,\n radius : f32,\n anchor : vec2<i32>,\n dimensions : vec2<i32>,\n) -> MotionBlurTap {\n // Preserve the geometric midpoint as the primary sample. The source anchor\n // is a recovery coordinate for a sparse tile summary, not a replacement for\n // the receiver's authored support. It is tried only when this midpoint has\n // no valid source, and therefore never adds a color read or a tap.\n var fallbackPixel = vec2<i32>(0);\n var fallbackValid = false;\n if (index == count / 2u) {\n fallbackPixel = sourceAnchorForReceiver(receiverPixel, anchor, motion, dimensions);\n fallbackValid = pixelInBounds(fallbackPixel, dimensions);\n }\n let direction = motion / max(length(motion), 1e-5);\n let offset = symmetricOffset(index, count, direction * radius);\n let dimensionsF = vec2<f32>(dimensions);\n let uv = (vec2<f32>(receiverPixel) + vec2<f32>(0.5) + offset) / dimensionsF;\n if (uv.x < 0.0 || uv.y < 0.0 || uv.x >= 1.0 || uv.y >= 1.0) {\n return MotionBlurTap(vec2<i32>(0), fallbackPixel, false, fallbackValid);\n }\n let candidate = vec2<i32>(floor(uv * dimensionsF));\n return MotionBlurTap(candidate, fallbackPixel, pixelInBounds(candidate, dimensions), fallbackValid);\n}\n\nfn sourceAt(\n receiverPixel : vec2<i32>,\n sourcePixel : vec2<i32>,\n centerDepth : f32,\n shutter : f32,\n dimensions : vec2<i32>,\n) -> MotionBlurSource {\n let empty = MotionBlurSource(\n vec2<i32>(0),\n vec2<f32>(0.0),\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0u,\n false,\n );\n if (!pixelInBounds(sourcePixel, dimensions)) { return empty; }\n let source = temporalAt(sourcePixel, dimensions);\n if (!source.validDepth || !source.motionValid || depthReject(centerDepth, source.depth)) {\n return empty;\n }\n let motionPixels = sourceMotionPixels(source, dimensions);\n let radius = sourceRadius(motionPixels, shutter);\n if (!sourceVelocitySegmentCovers(receiverPixel, sourcePixel, motionPixels, radius)) {\n return empty;\n }\n return MotionBlurSource(\n sourcePixel,\n motionPixels,\n source.depth,\n radius,\n 1.0,\n 1.0,\n 1.0,\n 1.0,\n 0u,\n true,\n );\n}\n\n// A half-resolution owner represents a complete 2x2 receiving footprint. The\n// source motion test is evaluated against every receiving pixel in that\n// footprint, so odd/even rows and columns remain visible without a second\n// filter pass or an unbounded neighbourhood walk.\nfn sourceAtFootprint(\n receiverPixel : vec2<i32>,\n sourcePixel : vec2<i32>,\n centerDepth : f32,\n shutter : f32,\n dimensions : vec2<i32>,\n) -> MotionBlurSource {\n var selected = MotionBlurSource(\n vec2<i32>(0),\n vec2<f32>(0.0),\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0u,\n false,\n );\n var selectedDepth = 3.402823e+38;\n var coverage0 = 0.0;\n var coverage1 = 0.0;\n var coverage2 = 0.0;\n var coverage3 = 0.0;\n var selectedReceiverMask = 0u;\n for (var y = 0u; y < 2u; y += 1u) {\n for (var x = 0u; x < 2u; x += 1u) {\n let candidatePixel = sourcePixel + vec2<i32>(i32(x), i32(y));\n if (!pixelInBounds(candidatePixel, dimensions)) { continue; }\n let temporal = temporalAt(candidatePixel, dimensions);\n if (!temporal.validDepth || !temporal.motionValid || depthReject(centerDepth, temporal.depth)) {\n continue;\n }\n let motionPixels = sourceMotionPixels(temporal, dimensions);\n let radius = sourceRadius(motionPixels, shutter);\n var receiverMask = 0u;\n // A source half-cell and a receiver half-cell share the same integer\n // displacement. This one-to-one correspondence keeps a diagonal source\n // from being counted for all four receiver quadrants just because its\n // tube crosses the quadrant. The segment test still supplies the motion\n // support and depth/validity checks remain source-owned.\n let receiver = receiverPixel + vec2<i32>(i32(x), i32(y));\n if (\n pixelInBounds(receiver, dimensions) &&\n sourceVelocitySegmentCovers(receiver, candidatePixel, motionPixels, radius)\n ) {\n receiverMask = receiverMask | (1u << (y * 2u + x));\n }\n if (receiverMask == 0u) { continue; }\n if (!selected.valid || temporal.depth < selectedDepth) {\n selected = MotionBlurSource(\n candidatePixel,\n motionPixels,\n temporal.depth,\n radius,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n receiverMask,\n true,\n );\n selectedDepth = temporal.depth;\n coverage0 = 0.0;\n coverage1 = 0.0;\n coverage2 = 0.0;\n coverage3 = 0.0;\n selectedReceiverMask = receiverMask;\n }\n if (abs(temporal.depth - selectedDepth) <= 1e-4) {\n // The common integer displacement above gives each source cell one\n // receiver quadrant. The matching footprint therefore contributes its\n // full unit overlap to that one owner.\n if ((receiverMask & 1u) != 0u) { coverage0 += 1.0; }\n if ((receiverMask & 2u) != 0u) { coverage1 += 1.0; }\n if ((receiverMask & 4u) != 0u) { coverage2 += 1.0; }\n if ((receiverMask & 8u) != 0u) { coverage3 += 1.0; }\n selectedReceiverMask = selectedReceiverMask | receiverMask;\n }\n }\n }\n if (selected.valid) {\n // The owner samples a 2x2 source footprint but pays for one color read.\n // Each receiving quadrant keeps the fraction of that footprint that is\n // covered at the selected depth. This preserves energy at boundaries and\n // carries a one-pixel odd-row feature into its real row only.\n selected.coverage0 = min(coverage0, 1.0) * select(0.0, 1.0, (selectedReceiverMask & 1u) != 0u);\n selected.coverage1 = min(coverage1, 1.0) * select(0.0, 1.0, (selectedReceiverMask & 2u) != 0u);\n selected.coverage2 = min(coverage2, 1.0) * select(0.0, 1.0, (selectedReceiverMask & 4u) != 0u);\n selected.coverage3 = min(coverage3, 1.0) * select(0.0, 1.0, (selectedReceiverMask & 8u) != 0u);\n selected.receiverMask = selectedReceiverMask;\n }\n return selected;\n}\n\nfn midpointTileOwnership(\n receiverPixel : vec2<i32>,\n source : MotionBlurSource,\n) -> f32 {\n // A recovered tile anchor represents one two-pixel source footprint. The\n // footprint is split across the finite, geometrically derived tile bands of\n // the support segment. One half-cell owner per band claims the represented\n // midpoint slot, rather than painting every receiver in the interval.\n let sourcePixel = source.pixel;\n let motionLength = length(source.motion);\n if (motionLength <= 1e-5 || source.radius <= 1e-5) { return 0.0; }\n let receiverTile = receiverPixel / vec2<i32>(16);\n let sourceTile = sourcePixel / vec2<i32>(16);\n let tileDelta = vec2<f32>(sourceTile - receiverTile);\n let direction = source.motion / motionLength;\n let along = abs(dot(tileDelta, direction));\n let perpendicular = abs(tileDelta.x * direction.y - tileDelta.y * direction.x);\n let tileReach = min(4, max(1, i32(ceil(source.radius / 16.0))));\n if (along < 1.0 || ceil(along) > f32(tileReach) || perpendicular > 1.0) { return 0.0; }\n let groupBase = (receiverPixel / vec2<i32>(8)) * vec2<i32>(8);\n let local = receiverPixel - groupBase;\n let ownerX = select(\n clamp(((sourcePixel.x - groupBase.x) / 2) * 2, 0, 6),\n select(0, 6, sourcePixel.x > receiverPixel.x),\n sourcePixel.x != receiverPixel.x,\n );\n let ownerY = select(\n clamp(((sourcePixel.y - groupBase.y) / 2) * 2, 0, 6),\n select(0, 6, sourcePixel.y > receiverPixel.y),\n sourcePixel.y != receiverPixel.y,\n );\n if (local.x != ownerX || local.y != ownerY) { return 0.0; }\n let sourceFootprintLength = 2.0;\n let supportLength = max(2.0 * source.radius, sourceFootprintLength);\n // Divide the finite footprint ownership over every reachable tile band.\n // This keeps the total recovery mass bounded when the support grows from\n // 32 to 64 pixels while retaining a nonzero owner at any in-view band.\n return min(1.0, sourceFootprintLength / (supportLength * f32(tileReach)));\n}\n\nfn integrateLongColor(\n filtered : vec4<f32>,\n validCount : f32,\n hasAcceptedSource : bool,\n uncovered : f32,\n count : u32,\n supportCount : u32,\n centerColor : vec4<f32>,\n centerMoving : bool,\n) -> vec4<f32> {\n // Uncovered ownership is decremented at the same time as validCount is incremented\n // for both geometric and midpoint-recovered samples. Keep the derived cap\n // as a guard against floating point accumulation and make the ownership\n // transfer explicit instead of adding an independent brightness term.\n let conservedUncovered = min(\n max(uncovered, 0.0),\n max(f32(supportCount) - validCount, 0.0),\n );\n // A moving receiver can be partially covered at a silhouette edge. Use the\n // accepted foreground only for the receiver's missing current coverage; a\n // fully covered receiver keeps the original center contribution and the\n // Dawn energy contract remains unchanged for uniform opaque surfaces.\n let acceptedColor = select(\n vec3<f32>(0.0),\n filtered.rgb / max(validCount, 1.0),\n hasAcceptedSource && validCount > 0.0,\n );\n // Preserve the color target's authored alpha as the output floor. It is\n // separate from the RGB test below, which identifies an empty background\n // receiver without treating alpha as a scene-coverage attachment.\n let missingForeground = 1.0 - clamp(centerColor.a, 0.0, 1.0);\n let edgeCoverage = select(missingForeground, 1.0, centerMoving);\n let edgeFill = acceptedColor * edgeCoverage * EDGE_FILL_FACTOR;\n let movingFallback = select(centerColor.rgb, edgeFill, hasAcceptedSource && validCount > 0.0);\n let background = select(vec3<f32>(0.0), movingFallback, centerMoving);\n // The accepted colour can come from a transparent receiver's moving\n // foreground. Carry the same bounded support coverage into alpha so that\n // RGB written outside the current silhouette is not composited as black.\n // Preserve the receiver's authored coverage as a floor: blur must not make\n // an already visible pixel disappear.\n let acceptedAlpha = select(\n 0.0,\n filtered.a / max(validCount, 1.0),\n validCount > 0.0,\n );\n let acceptedCoverage = validCount + missingForeground * conservedUncovered;\n let reconstructedAlpha = acceptedAlpha * acceptedCoverage / max(f32(count), 1.0);\n let outputAlpha = clamp(max(centerColor.a, reconstructedAlpha), 0.0, 1.0);\n let emptyReceiver =\n !centerMoving &&\n hasAcceptedSource &&\n max(max(abs(centerColor.r), abs(centerColor.g)), abs(centerColor.b)) < 1e-4;\n let sourceScale = select(1.0, 1.0 - EDGE_FILL_FACTOR, emptyReceiver);\n let sourceContribution = filtered.rgb * sourceScale;\n let trailScale = select(1.0, 1.0 - EDGE_FILL_FACTOR, emptyReceiver);\n let trailContribution = background * conservedUncovered * trailScale;\n return vec4<f32>(\n (sourceContribution + centerColor.rgb + trailContribution) / max(f32(count), 1.0),\n outputAlpha,\n );\n}\n\nfn longSupportFilter(\n receiverPixel : vec2<i32>,\n support : MotionBlurSupport,\n centerDepth : f32,\n dimensions : vec2<i32>,\n) -> MotionBlurFilter {\n var empty = MotionBlurFilter(\n vec4<f32>(0.0),\n vec4<f32>(0.0),\n vec4<f32>(0.0),\n vec4<f32>(0.0),\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n 0.0,\n receiverPixel,\n vec2<f32>(0.0),\n 0.0,\n 0u,\n 0u,\n false,\n );\n if (!support.valid) { return empty; }\n let count = min(params.sampleCount, 16u);\n // The authored tier is the total source colour-read budget. Reserve one slot\n // for the receiver/background contribution; the remaining bounded taps\n // (at most 15) are split between the two source directions when needed.\n let supportCount = max(count - 1u, 1u);\n let useSecondDirection = support.secondaryRadius > 1e-5 && distinctDirection(support.primaryMotion, support.secondaryMotion);\n let primaryCount = select(supportCount, max(supportCount / 2u, 1u), useSecondDirection);\n let secondaryCount = max(supportCount - primaryCount, 1u);\n let shutter = clamp(params.shutterAngle / 360.0, 0.0, 1.0);\n let center = temporalAt(receiverPixel, dimensions);\n // Keep each receiving quadrant's own center color. Reusing the owner\n // pixel for all four quadrants causes a one-pixel parity shift to duplicate\n // a bright source (or erase a bright receiver) in the half-resolution cache.\n var centerColor0 = colorAt(receiverPixel, dimensions);\n var centerColor1 = colorAt(receiverPixel + vec2<i32>(1, 0), dimensions);\n var centerColor2 = colorAt(receiverPixel + vec2<i32>(0, 1), dimensions);\n var centerColor3 = colorAt(receiverPixel + vec2<i32>(1, 1), dimensions);\n var filtered0 = vec4<f32>(0.0);\n var filtered1 = vec4<f32>(0.0);\n var filtered2 = vec4<f32>(0.0);\n var filtered3 = vec4<f32>(0.0);\n var validCount0 = 0.0;\n var validCount1 = 0.0;\n var validCount2 = 0.0;\n var validCount3 = 0.0;\n var hasAcceptedSource0 = false;\n var hasAcceptedSource1 = false;\n var hasAcceptedSource2 = false;\n var hasAcceptedSource3 = false;\n var uncovered0 = f32(supportCount);\n var uncovered1 = f32(supportCount);\n var uncovered2 = f32(supportCount);\n var uncovered3 = f32(supportCount);\n var midpointFallbackPixel = vec2<i32>(0);\n var midpointFallbackValid = false;\n var midpointFallbackRadius = 0.0;\n var nearestDepth0 = 3.402823e+38;\n var nearestDepth1 = 3.402823e+38;\n var nearestDepth2 = 3.402823e+38;\n var nearestDepth3 = 3.402823e+38;\n for (var index = 0u; index < 16u; index += 1u) {\n if (index >= supportCount) { break; }\n let secondDirection = useSecondDirection && index >= primaryCount;\n let localIndex = select(index, index - primaryCount, secondDirection);\n let localCount = select(primaryCount, secondaryCount, secondDirection);\n let selectedMotion = select(support.primaryMotion, support.secondaryMotion, secondDirection);\n let selectedRadius = select(support.primaryRadius, support.secondaryRadius, secondDirection);\n let tap = supportTap(\n receiverPixel,\n localIndex,\n localCount,\n selectedMotion,\n selectedRadius,\n select(support.primaryAnchor, support.secondaryAnchor, secondDirection),\n dimensions,\n );\n if (!tap.valid) {\n if (tap.fallbackValid && selectedRadius > midpointFallbackRadius) {\n midpointFallbackPixel = tap.fallbackPixel;\n midpointFallbackValid = true;\n midpointFallbackRadius = selectedRadius;\n }\n continue;\n }\n let source = sourceAtFootprint(\n receiverPixel,\n tap.pixel,\n centerDepth,\n shutter,\n dimensions,\n );\n if (!source.valid) {\n if (tap.fallbackValid && selectedRadius > midpointFallbackRadius) {\n midpointFallbackPixel = tap.fallbackPixel;\n midpointFallbackValid = true;\n midpointFallbackRadius = selectedRadius;\n }\n continue;\n }\n let sampleColor = colorAt(source.pixel, dimensions);\n // Keep the receiver's own color as the center contribution. A source\n // footprint may cover an adjacent receiver quadrant without being the\n // receiver itself; substituting its color here creates odd/even-alignment\n // brightening at thin-object boundaries.\n if ((source.receiverMask & 1u) != 0u) {\n filtered0 += sampleColor * source.coverage0;\n validCount0 += source.coverage0;\n hasAcceptedSource0 = true;\n uncovered0 = max(uncovered0 - source.coverage0, 0.0);\n nearestDepth0 = min(nearestDepth0, source.depth);\n }\n if ((source.receiverMask & 2u) != 0u) {\n filtered1 += sampleColor * source.coverage1;\n validCount1 += source.coverage1;\n hasAcceptedSource1 = true;\n uncovered1 = max(uncovered1 - source.coverage1, 0.0);\n nearestDepth1 = min(nearestDepth1, source.depth);\n }\n if ((source.receiverMask & 4u) != 0u) {\n filtered2 += sampleColor * source.coverage2;\n validCount2 += source.coverage2;\n hasAcceptedSource2 = true;\n uncovered2 = max(uncovered2 - source.coverage2, 0.0);\n nearestDepth2 = min(nearestDepth2, source.depth);\n }\n if ((source.receiverMask & 8u) != 0u) {\n filtered3 += sampleColor * source.coverage3;\n validCount3 += source.coverage3;\n hasAcceptedSource3 = true;\n uncovered3 = max(uncovered3 - source.coverage3, 0.0);\n nearestDepth3 = min(nearestDepth3, source.depth);\n }\n }\n // A tile anchor recovers a sparse source only for the widest support tier,\n // where the fixed geometric lattice can leave a source between taps. It\n // spends the represented midpoint ownership of the finite support segment;\n // every accepted colour, coverage and depth contribution uses that same\n // bounded ownership, so the fallback cannot create an opaque stripe. The\n // shorter tiers keep their exact geometric energy and do not need recovery.\n if (midpointFallbackValid && max(support.primaryRadius, support.secondaryRadius) > 32.0) {\n let fallbackSource = sourceAtFootprint(\n receiverPixel,\n midpointFallbackPixel,\n centerDepth,\n shutter,\n dimensions,\n );\n if (fallbackSource.valid) {\n let midpointWeight = midpointTileOwnership(receiverPixel, fallbackSource);\n if (\n midpointWeight > 0.0\n ) {\n let fallbackColor = colorAt(fallbackSource.pixel, dimensions);\n let fallbackWeight0 = fallbackSource.coverage0 * midpointWeight;\n let fallbackWeight1 = fallbackSource.coverage1 * midpointWeight;\n let fallbackWeight2 = fallbackSource.coverage2 * midpointWeight;\n let fallbackWeight3 = fallbackSource.coverage3 * midpointWeight;\n if (validCount0 <= 0.0 && (fallbackSource.receiverMask & 1u) != 0u) {\n let ownedWeight0 = min(fallbackWeight0, uncovered0);\n if (ownedWeight0 > 0.0) {\n filtered0 += fallbackColor * ownedWeight0;\n validCount0 += ownedWeight0;\n hasAcceptedSource0 = true;\n uncovered0 = max(uncovered0 - ownedWeight0, 0.0);\n nearestDepth0 = min(nearestDepth0, fallbackSource.depth);\n }\n }\n if (validCount1 <= 0.0 && (fallbackSource.receiverMask & 2u) != 0u) {\n let ownedWeight1 = min(fallbackWeight1, uncovered1);\n if (ownedWeight1 > 0.0) {\n filtered1 += fallbackColor * ownedWeight1;\n validCount1 += ownedWeight1;\n hasAcceptedSource1 = true;\n uncovered1 = max(uncovered1 - ownedWeight1, 0.0);\n nearestDepth1 = min(nearestDepth1, fallbackSource.depth);\n }\n }\n if (validCount2 <= 0.0 && (fallbackSource.receiverMask & 4u) != 0u) {\n let ownedWeight2 = min(fallbackWeight2, uncovered2);\n if (ownedWeight2 > 0.0) {\n filtered2 += fallbackColor * ownedWeight2;\n validCount2 += ownedWeight2;\n hasAcceptedSource2 = true;\n uncovered2 = max(uncovered2 - ownedWeight2, 0.0);\n nearestDepth2 = min(nearestDepth2, fallbackSource.depth);\n }\n }\n if (validCount3 <= 0.0 && (fallbackSource.receiverMask & 8u) != 0u) {\n let ownedWeight3 = min(fallbackWeight3, uncovered3);\n if (ownedWeight3 > 0.0) {\n filtered3 += fallbackColor * ownedWeight3;\n validCount3 += ownedWeight3;\n hasAcceptedSource3 = true;\n uncovered3 = max(uncovered3 - ownedWeight3, 0.0);\n nearestDepth3 = min(nearestDepth3, fallbackSource.depth);\n }\n }\n }\n }\n }\n let moving0 = temporalAt(receiverPixel, dimensions);\n let moving1 = temporalAt(receiverPixel + vec2<i32>(1, 0), dimensions);\n let moving2 = temporalAt(receiverPixel + vec2<i32>(0, 1), dimensions);\n let moving3 = temporalAt(receiverPixel + vec2<i32>(1, 1), dimensions);\n let motion0 = sourceMotionPixels(moving0, dimensions);\n let motion1 = sourceMotionPixels(moving1, dimensions);\n let motion2 = sourceMotionPixels(moving2, dimensions);\n let motion3 = sourceMotionPixels(moving3, dimensions);\n let centerMoving0 = moving0.validDepth && moving0.motionValid && sourceRadius(motion0, shutter) > 1e-5;\n let centerMoving1 = moving1.validDepth && moving1.motionValid && sourceRadius(motion1, shutter) > 1e-5;\n let centerMoving2 = moving2.validDepth && moving2.motionValid && sourceRadius(motion2, shutter) > 1e-5;\n let centerMoving3 = moving3.validDepth && moving3.motionValid && sourceRadius(motion3, shutter) > 1e-5;\n empty.color0 = integrateLongColor(filtered0, validCount0, hasAcceptedSource0, uncovered0, count, supportCount, centerColor0, centerMoving0);\n empty.color1 = integrateLongColor(filtered1, validCount1, hasAcceptedSource1, uncovered1, count, supportCount, centerColor1, centerMoving1);\n empty.color2 = integrateLongColor(filtered2, validCount2, hasAcceptedSource2, uncovered2, count, supportCount, centerColor2, centerMoving2);\n empty.color3 = integrateLongColor(filtered3, validCount3, hasAcceptedSource3, uncovered3, count, supportCount, centerColor3, centerMoving3);\n empty.depth0 = select(centerDepth, nearestDepth0, validCount0 > 0.0);\n empty.depth1 = select(centerDepth, nearestDepth1, validCount1 > 0.0);\n empty.depth2 = select(centerDepth, nearestDepth2, validCount2 > 0.0);\n empty.depth3 = select(centerDepth, nearestDepth3, validCount3 > 0.0);\n empty.coverage0 = validCount0 / max(f32(supportCount), 1.0);\n empty.coverage1 = validCount1 / max(f32(supportCount), 1.0);\n empty.coverage2 = validCount2 / max(f32(supportCount), 1.0);\n empty.coverage3 = validCount3 / max(f32(supportCount), 1.0);\n empty.motion = select(support.primaryMotion, support.secondaryMotion, support.primaryRadius <= 1e-5);\n empty.radius = max(support.primaryRadius, support.secondaryRadius);\n empty.receiverMask =\n select(0u, 1u, validCount0 > 0.0 || centerMoving0) |\n select(0u, 2u, validCount1 > 0.0 || centerMoving1) |\n select(0u, 4u, validCount2 > 0.0 || centerMoving2) |\n select(0u, 8u, validCount3 > 0.0 || centerMoving3);\n empty.validMask =\n select(0u, 1u, validCount0 > 0.0 || centerMoving0) |\n select(0u, 2u, validCount1 > 0.0 || centerMoving1) |\n select(0u, 4u, validCount2 > 0.0 || centerMoving2) |\n select(0u, 8u, validCount3 > 0.0 || centerMoving3);\n empty.valid = empty.validMask != 0u;\n return empty;\n}\n\nfn colorAt(pixel : vec2<i32>, dimensions : vec2<i32>) -> vec4<f32> {\n return textureLoad(currentColor, clamp(pixel, vec2<i32>(0), dimensions - vec2<i32>(1)), 0);\n}\n\nfn cacheFootprintContains(receiverPixel : vec2<i32>, ownerPixel : vec2<i32>) -> bool {\n return\n receiverPixel.x >= ownerPixel.x && receiverPixel.x <= ownerPixel.x + 1 &&\n receiverPixel.y >= ownerPixel.y && receiverPixel.y <= ownerPixel.y + 1;\n}\n\nfn cachedSupportCovers(\n receiverPixel : vec2<i32>,\n ownerPixel : vec2<i32>,\n motion : vec2<f32>,\n radius : f32,\n) -> bool {\n if (!cacheFootprintContains(receiverPixel, ownerPixel)) { return false; }\n let motionLength = length(motion);\n if (motionLength <= 1e-5 || radius <= 1e-5) { return false; }\n let direction = motion / motionLength;\n let delta = vec2<f32>(receiverPixel - ownerPixel);\n let along = dot(delta, direction);\n let perpendicular = abs(delta.x * direction.y - delta.y * direction.x);\n return abs(along) <= radius + 1.0 && perpendicular <= 1.0;\n}\n\nfn cachedDirectionMatches(support : MotionBlurSupport, motion : vec2<f32>) -> bool {\n let motionLength = length(motion);\n if (motionLength <= 1e-5) { return false; }\n let direction = motion / motionLength;\n if (support.primaryRadius > 1e-5 && abs(dot(normalize(support.primaryMotion), direction)) >= 0.94) {\n return true;\n }\n return support.secondaryRadius > 1e-5 && abs(dot(normalize(support.secondaryMotion), direction)) >= 0.94;\n}\n\nfn depthGuidedHalfResolutionColor(\n localId : vec3<u32>,\n receiverPixel : vec2<i32>,\n support : MotionBlurSupport,\n centerDepth : f32,\n) -> MotionBlurCacheSample {\n let cell = vec2<i32>(localId.xy / vec2<u32>(2));\n let quadrant = (localId.y % 2u) * 2u + (localId.x % 2u);\n var selected = MotionBlurCacheSample(vec4<f32>(0.0), 0.0, false);\n var selectedDelta = 3.402823e+38;\n // Search the bounded adjacent cache cells, but accept only a cell whose\n // authored 2x2 footprint and direction actually cover this receiver.\n for (var y = -1; y <= 1; y += 1) {\n for (var x = -1; x <= 1; x += 1) {\n let candidateCell = cell + vec2<i32>(x, y);\n if (candidateCell.x < 0 || candidateCell.y < 0 || candidateCell.x >= 4 || candidateCell.y >= 4) { continue; }\n let cacheCellIndex = u32(candidateCell.y * 4 + candidateCell.x);\n let index = cacheCellIndex * 4u + quadrant;\n if (\n halfFilteredValid[index] == 0u ||\n depthReject(centerDepth, halfFilteredDepth[index]) ||\n !cachedDirectionMatches(support, halfFilteredMotion[cacheCellIndex]) ||\n !cachedSupportCovers(\n receiverPixel,\n halfFilteredReceiver[cacheCellIndex],\n halfFilteredMotion[cacheCellIndex],\n halfFilteredRadius[cacheCellIndex],\n )\n ) { continue; }\n let delta = abs(halfFilteredDepth[index] - centerDepth);\n if (!selected.valid || delta < selectedDelta) {\n selected.color = halfFilteredColor[index];\n selected.coverage = halfFilteredCoverage[index];\n selectedDelta = delta;\n selected.valid = true;\n }\n }\n }\n return selected;\n}\n\n@compute @workgroup_size(8, 8)\nfn tile_summary(\n @builtin(global_invocation_id) id : vec3<u32>,\n @builtin(local_invocation_id) localId : vec3<u32>,\n @builtin(local_invocation_index) localIndex : u32,\n @builtin(workgroup_id) workgroupId : vec3<u32>,\n) {\n let dimensions = textureDimensions(sceneTemporal);\n let tiles = (dimensions + vec2<u32>(15)) / vec2<u32>(16);\n let tile = workgroupId.xy;\n let inTile = tile.x < tiles.x && tile.y < tiles.y;\n var maxMotion = vec2<f32>(0.0);\n var maxLength = 0.0;\n var maxSource = vec2<i32>(0);\n var secondaryMotion = vec2<f32>(0.0);\n var secondaryLength = 0.0;\n var secondarySource = vec2<i32>(0);\n for (var localY = 0u; localY < 2u; localY += 1u) {\n for (var localX = 0u; localX < 2u; localX += 1u) {\n let pixel = tile * vec2<u32>(16) + localId.xy * vec2<u32>(2) + vec2<u32>(localX, localY);\n if (!inTile || pixel.x >= dimensions.x || pixel.y >= dimensions.y) { continue; }\n let sample = temporalAt(vec2<i32>(pixel), vec2<i32>(dimensions));\n if (!sample.validDepth || !sample.motionValid) { continue; }\n let motionLength = length(sample.motion * vec2<f32>(dimensions));\n if (motionLength > maxLength) {\n if (distinctDirection(maxMotion, sample.motion)) {\n secondaryMotion = maxMotion;\n secondaryLength = maxLength;\n secondarySource = maxSource;\n }\n maxLength = motionLength;\n maxMotion = sample.motion;\n maxSource = vec2<i32>(pixel);\n } else if (\n motionLength > secondaryLength &&\n distinctDirection(maxMotion, sample.motion)\n ) {\n secondaryLength = motionLength;\n secondaryMotion = sample.motion;\n secondarySource = vec2<i32>(pixel);\n }\n }\n }\n tileMotionScratch[localIndex] = maxMotion;\n tileLengthScratch[localIndex] = maxLength;\n tileSourceScratch[localIndex] = maxSource;\n tileSecondaryMotionScratch[localIndex] = secondaryMotion;\n tileSecondaryLengthScratch[localIndex] = secondaryLength;\n tileSecondarySourceScratch[localIndex] = secondarySource;\n workgroupBarrier();\n for (var stride = 32u; stride > 0u; stride = stride / 2u) {\n if (localIndex < stride) {\n let otherIndex = localIndex + stride;\n let otherLength = tileLengthScratch[otherIndex];\n if (otherLength > tileLengthScratch[localIndex]) {\n let oldMotion = tileMotionScratch[localIndex];\n let oldLength = tileLengthScratch[localIndex];\n let oldSource = tileSourceScratch[localIndex];\n tileLengthScratch[localIndex] = otherLength;\n tileMotionScratch[localIndex] = tileMotionScratch[otherIndex];\n tileSourceScratch[localIndex] = tileSourceScratch[otherIndex];\n if (\n oldLength > 1e-5 &&\n distinctDirection(tileMotionScratch[localIndex], oldMotion) &&\n oldLength > tileSecondaryLengthScratch[localIndex]\n ) {\n tileSecondaryLengthScratch[localIndex] = oldLength;\n tileSecondaryMotionScratch[localIndex] = oldMotion;\n tileSecondarySourceScratch[localIndex] = oldSource;\n }\n }\n if (\n tileSecondaryLengthScratch[otherIndex] > tileSecondaryLengthScratch[localIndex] &&\n distinctDirection(\n tileMotionScratch[localIndex],\n tileSecondaryMotionScratch[otherIndex],\n )\n ) {\n tileSecondaryLengthScratch[localIndex] = tileSecondaryLengthScratch[otherIndex];\n tileSecondaryMotionScratch[localIndex] = tileSecondaryMotionScratch[otherIndex];\n tileSecondarySourceScratch[localIndex] = tileSecondarySourceScratch[otherIndex];\n }\n if (\n tileLengthScratch[otherIndex] > tileSecondaryLengthScratch[localIndex] &&\n distinctDirection(tileMotionScratch[localIndex], tileMotionScratch[otherIndex])\n ) {\n tileSecondaryLengthScratch[localIndex] = tileLengthScratch[otherIndex];\n tileSecondaryMotionScratch[localIndex] = tileMotionScratch[otherIndex];\n tileSecondarySourceScratch[localIndex] = tileSourceScratch[otherIndex];\n }\n }\n workgroupBarrier();\n }\n if (localIndex == 0u && inTile) {\n let tileIndex = tile.y * tiles.x + tile.x;\n tileSummary[tileIndex] = MotionBlurTileSummary(\n vec4<f32>(\n tileMotionScratch[0],\n f32(tileSourceScratch[0].x),\n f32(tileSourceScratch[0].y),\n ),\n vec4<f32>(\n tileSecondaryMotionScratch[0],\n f32(tileSecondarySourceScratch[0].x),\n f32(tileSecondarySourceScratch[0].y),\n ),\n );\n }\n}\n\n@compute @workgroup_size(8, 8)\nfn reconstruct(\n @builtin(global_invocation_id) id : vec3<u32>,\n @builtin(local_invocation_id) localId : vec3<u32>,\n @builtin(workgroup_id) workgroupId : vec3<u32>,\n) {\n let dimensions = textureDimensions(currentColor);\n let colorDimensions = vec2<i32>(dimensions);\n let pixel = vec2<i32>(id.xy);\n let inBounds = id.x < dimensions.x && id.y < dimensions.y;\n let workgroupBase = vec2<i32>(workgroupId.xy * vec2<u32>(8));\n let ownsHalfCell = (localId.x % 2u == 0u) && (localId.y % 2u == 0u);\n let halfIndex = (localId.y / 2u) * 4u + (localId.x / 2u);\n let localIndex = localId.y * 8u + localId.x;\n if (localIndex == 0u) {\n scanTileNeighbourhood(workgroupBase, colorDimensions);\n }\n workgroupBarrier();\n let support = resolveMotionBlurSupport(pixel, colorDimensions);\n let longVector = support.valid && support.longVector;\n\n longVectorScratch[localId.y * 8u + localId.x] = select(0u, 1u, longVector);\n workgroupBarrier();\n for (var longStride = 32u; longStride > 0u; longStride = longStride / 2u) {\n let localIndex = localId.y * 8u + localId.x;\n if (localIndex < longStride) {\n longVectorScratch[localIndex] = max(\n longVectorScratch[localIndex],\n longVectorScratch[localIndex + longStride],\n );\n }\n workgroupBarrier();\n }\n let anyLongVector = longVectorScratch[0] != 0u;\n if (anyLongVector && ownsHalfCell) {\n // Every designated owner evaluates the full support exactly once. The\n // cached result includes filtered color, nearest accepted depth, and\n // coverage; no 2x2 prefilter is substituted for the long gather.\n let sourcePixel = workgroupBase + vec2<i32>(localId.xy);\n let sourceSupport = resolveMotionBlurSupport(sourcePixel, colorDimensions);\n let filtered = longSupportFilter(\n sourcePixel,\n sourceSupport,\n temporalAt(sourcePixel, colorDimensions).depth,\n colorDimensions,\n );\n halfFilteredReceiver[halfIndex] = sourcePixel;\n halfFilteredMotion[halfIndex] = filtered.motion;\n halfFilteredRadius[halfIndex] = filtered.radius;\n let cacheBase = halfIndex * 4u;\n halfFilteredColor[cacheBase] = filtered.color0;\n halfFilteredColor[cacheBase + 1u] = filtered.color1;\n halfFilteredColor[cacheBase + 2u] = filtered.color2;\n halfFilteredColor[cacheBase + 3u] = filtered.color3;\n halfFilteredDepth[cacheBase] = filtered.depth0;\n halfFilteredDepth[cacheBase + 1u] = filtered.depth1;\n halfFilteredDepth[cacheBase + 2u] = filtered.depth2;\n halfFilteredDepth[cacheBase + 3u] = filtered.depth3;\n halfFilteredCoverage[cacheBase] = filtered.coverage0;\n halfFilteredCoverage[cacheBase + 1u] = filtered.coverage1;\n halfFilteredCoverage[cacheBase + 2u] = filtered.coverage2;\n halfFilteredCoverage[cacheBase + 3u] = filtered.coverage3;\n halfFilteredValid[cacheBase] = select(0u, 1u, (filtered.validMask & 1u) != 0u);\n halfFilteredValid[cacheBase + 1u] = select(0u, 1u, (filtered.validMask & 2u) != 0u);\n halfFilteredValid[cacheBase + 2u] = select(0u, 1u, (filtered.validMask & 4u) != 0u);\n halfFilteredValid[cacheBase + 3u] = select(0u, 1u, (filtered.validMask & 8u) != 0u);\n }\n workgroupBarrier();\n // No invocation can return before both uniform barriers above. This keeps\n // odd extents and out-of-bounds lanes from allowing a long source to read a\n // cache entry that another invocation has not published yet.\n if (!inBounds) {\n return;\n }\n if (!support.valid) {\n textureStore(outputColor, pixel, colorAt(pixel, colorDimensions));\n return;\n }\n if (longVector) {\n let cached = depthGuidedHalfResolutionColor(\n localId,\n pixel,\n support,\n temporalAt(pixel, colorDimensions).depth,\n );\n if (cached.valid) {\n textureStore(outputColor, pixel, cached.color);\n } else {\n textureStore(outputColor, pixel, colorAt(pixel, colorDimensions));\n }\n return;\n }\n let useSecondDirection = support.secondaryRadius > 1e-5 && distinctDirection(support.primaryMotion, support.secondaryMotion);\n let count = min(params.sampleCount, 16u);\n let supportCount = max(count - 1u, 1u);\n let primaryCount = select(supportCount, max(supportCount / 2u, 1u), useSecondDirection);\n let secondaryCount = max(supportCount - primaryCount, 1u);\n let shutter = clamp(params.shutterAngle / 360.0, 0.0, 1.0);\n let center = temporalAt(pixel, colorDimensions);\n let centerMotion = sourceMotionPixels(center, colorDimensions);\n let centerMoving = center.validDepth && center.motionValid && sourceRadius(centerMotion, shutter) > 1e-5;\n let centerColor = colorAt(pixel, colorDimensions);\n var accum = vec4<f32>(0.0);\n var weight = 0.0;\n for (var index = 0u; index < 16u; index += 1u) {\n if (index >= supportCount) { break; }\n let secondDirection = useSecondDirection && index >= primaryCount;\n let localIndex = select(index, index - primaryCount, secondDirection);\n let localCount = select(primaryCount, secondaryCount, secondDirection);\n let selectedMotion = select(support.primaryMotion, support.secondaryMotion, secondDirection);\n let selectedRadius = select(support.primaryRadius, support.secondaryRadius, secondDirection);\n let tap = supportTap(\n pixel,\n localIndex,\n localCount,\n selectedMotion,\n selectedRadius,\n select(support.primaryAnchor, support.secondaryAnchor, secondDirection),\n colorDimensions,\n );\n if (!tap.valid) { continue; }\n let source = sourceAt(pixel, tap.pixel, center.depth, shutter, colorDimensions);\n if (!source.valid) { continue; }\n let sampleColor = colorAt(source.pixel, colorDimensions);\n accum += sampleColor;\n weight += 1.0;\n }\n let uncovered = max(f32(supportCount) - weight, 0.0);\n let acceptedColor = select(vec3<f32>(0.0), accum.rgb / max(weight, 1.0), weight > 0.0);\n let missingForeground = 1.0 - clamp(centerColor.a, 0.0, 1.0);\n let edgeCoverage = select(missingForeground, 1.0, centerMoving);\n let edgeFill = acceptedColor * edgeCoverage * EDGE_FILL_FACTOR;\n let movingFallback = select(centerColor.rgb, edgeFill, weight > 0.0);\n let uncoveredColor = select(vec3<f32>(0.0), movingFallback, centerMoving);\n let acceptedAlpha = select(0.0, accum.a / max(weight, 1.0), weight > 0.0);\n let acceptedCoverage = weight + missingForeground * uncovered;\n let reconstructedAlpha = acceptedAlpha * acceptedCoverage / max(f32(count), 1.0);\n let outputAlpha = clamp(max(centerColor.a, reconstructedAlpha), 0.0, 1.0);\n let emptyReceiver =\n !centerMoving &&\n weight > 0.0 &&\n max(max(abs(centerColor.r), abs(centerColor.g)), abs(centerColor.b)) < 1e-4;\n let sourceScale = select(1.0, 1.0 - EDGE_FILL_FACTOR, emptyReceiver);\n let sourceContribution = accum.rgb * sourceScale;\n let trailScale = select(1.0, 1.0 - EDGE_FILL_FACTOR, emptyReceiver);\n let trailContribution = uncoveredColor * uncovered * trailScale;\n textureStore(\n outputColor,\n pixel,\n vec4<f32>((sourceContribution + centerColor.rgb + trailContribution) / max(f32(count), 1.0), outputAlpha),\n );\n}\n";
|
|
31
|
+
export declare function encodeMotionBlurComputeParams(params: MotionBlurParams, frameDeltaSeconds?: number, reset?: boolean): Uint8Array;
|
|
32
|
+
export declare function planMotionBlur(params: MotionBlurParams, context: RenderFeaturePlanContext, temporal?: Pick<MotionBlurFeatureFrame, 'frameDeltaSeconds' | 'reset'>): Result<RenderFeaturePlan, RenderError>;
|
|
33
|
+
export declare function createMotionBlurFeature(read: () => MotionBlurFeatureInput | undefined): RenderFeature<MotionBlurFeatureFrame>;
|
|
16
34
|
//# sourceMappingURL=motion-blur-feature.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion-blur-feature.d.ts","sourceRoot":"","sources":["../../../src/features/motion-blur/motion-blur-feature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAA+B,MAAM,UAAU,CAAC;AAC3E,OAAO,
|
|
1
|
+
{"version":3,"file":"motion-blur-feature.d.ts","sourceRoot":"","sources":["../../../src/features/motion-blur/motion-blur-feature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAA+B,MAAM,UAAU,CAAC;AAC3E,OAAO,EAGL,KAAK,gBAAgB,EAItB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,4BAA4B,wBAAwB,CAAC;AAElE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,EAC9C,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,oBAAoB,GAC3B,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAQhC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,0wsDA6xCpC,CAAC;AAEF,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,gBAAgB,EACxB,iBAAiB,SAAS,EAC1B,KAAK,UAAQ,GACZ,UAAU,CAgBZ;AAMD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,wBAAwB,EACjC,QAAQ,GAAE,IAAI,CAAC,sBAAsB,EAAE,mBAAmB,GAAG,OAAO,CAGnE,GACA,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAgMxC;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,sBAAsB,GAAG,SAAS,GAC7C,aAAa,CAAC,sBAAsB,CAAC,CA0BvC"}
|
|
@@ -3,7 +3,13 @@ export interface MotionBlurParams {
|
|
|
3
3
|
readonly shutterAngle: number;
|
|
4
4
|
readonly maxRadiusPixels: number;
|
|
5
5
|
readonly sampleCount: number;
|
|
6
|
+
/** Target presentation rate used to convert frame displacement to exposure. 0 follows frame time. */
|
|
7
|
+
readonly targetFps: number;
|
|
6
8
|
}
|
|
9
|
+
/** WGSL uniform size for the renderer-owned Motion Blur parameter block. */
|
|
10
|
+
export declare const MOTION_BLUR_PARAMS_BYTE_SIZE = 32;
|
|
11
|
+
/** The only quality tiers the shader is allowed to execute. */
|
|
12
|
+
export type MotionBlurSampleTier = 0 | 4 | 8 | 16;
|
|
7
13
|
export declare const DEFAULT_MOTION_BLUR_PARAMS: MotionBlurParams;
|
|
8
14
|
export interface MotionBlurInvalidParamsDetail {
|
|
9
15
|
readonly field: keyof MotionBlurParams;
|
|
@@ -21,5 +27,20 @@ export declare class MotionBlurValidationError extends Error {
|
|
|
21
27
|
}
|
|
22
28
|
export declare function validateMotionBlurParams(input: Partial<MotionBlurParams> | undefined): Result<MotionBlurParams, MotionBlurValidationError>;
|
|
23
29
|
export declare function motionBlurTemporalDemand(params: MotionBlurParams | undefined): boolean;
|
|
30
|
+
/** Round authored work down to the bounded shader tiers without changing exposure length. */
|
|
31
|
+
export declare function effectiveMotionBlurSampleCount(sampleCount: number): MotionBlurSampleTier;
|
|
32
|
+
/** Reject a frame interval that cannot represent a stable temporal pair. */
|
|
33
|
+
export declare function isMotionBlurIntervalValid(frameDeltaSeconds: number): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Convert current-to-previous frame displacement into the authored target-rate exposure.
|
|
36
|
+
* Invalid intervals return zero so callers can commit a fresh baseline without blurring it.
|
|
37
|
+
*/
|
|
38
|
+
export declare function motionBlurExposureScale(frameDeltaSeconds: number, targetFps: number): number;
|
|
39
|
+
/**
|
|
40
|
+
* Derive a render interval from the host sample clock before ECS time policy
|
|
41
|
+
* clamps it. A finite raw pair is never clamped here, so a hitch remains
|
|
42
|
+
* visible to temporal admission.
|
|
43
|
+
*/
|
|
44
|
+
export declare function motionBlurSampleDelta(sampleTimeSeconds: number | undefined, previousSampleTimeSeconds: number | undefined, fallbackDeltaSeconds: number): number;
|
|
24
45
|
export declare function resolveMotionBlurParams(input: Partial<MotionBlurParams> | undefined): Result<MotionBlurParams | undefined, MotionBlurValidationError>;
|
|
25
46
|
//# sourceMappingURL=motion-blur-params.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion-blur-params.d.ts","sourceRoot":"","sources":["../../../src/features/motion-blur/motion-blur-params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"motion-blur-params.d.ts","sourceRoot":"","sources":["../../../src/features/motion-blur/motion-blur-params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qGAAqG;IACrG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,4EAA4E;AAC5E,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAE/C,+DAA+D;AAC/D,MAAM,MAAM,oBAAoB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAElD,eAAO,MAAM,0BAA0B,EAAE,gBAKvC,CAAC;AAEH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,gBAAgB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,EAAG,4BAA4B,CAAU;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC;gBAEnC,MAAM,EAAE,6BAA6B;CASlD;AA0BD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS,GAC3C,MAAM,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAerD;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAEtF;AAED,6FAA6F;AAC7F,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,CAKxF;AAED,4EAA4E;AAC5E,wBAAgB,yBAAyB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAE5E;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAY5F;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,yBAAyB,EAAE,MAAM,GAAG,SAAS,EAC7C,oBAAoB,EAAE,MAAM,GAC3B,MAAM,CAcR;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,SAAS,GAC3C,MAAM,CAAC,gBAAgB,GAAG,SAAS,EAAE,yBAAyB,CAAC,CAGjE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { MotionBlurExecutionReceipt, MotionBlurInspection } from '../../inspection-types';
|
|
2
|
+
import type { CameraSnapshot } from '../../render-contract';
|
|
3
|
+
import type { TemporalFrameTransactionInspection } from '../../temporal/frame';
|
|
4
|
+
import type { TemporalView } from '../../temporal/view';
|
|
5
|
+
import type { MotionBlurFeatureInput } from './motion-blur-feature';
|
|
6
|
+
import { type MotionBlurValidationError } from './motion-blur-params';
|
|
7
|
+
export interface MotionBlurRuntimeCapabilities {
|
|
8
|
+
readonly compute: boolean;
|
|
9
|
+
readonly storageBuffer: boolean;
|
|
10
|
+
readonly storageTexture: boolean;
|
|
11
|
+
readonly rgba16floatRenderable: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface MotionBlurFramePlan {
|
|
14
|
+
readonly rawSampleDelta: number;
|
|
15
|
+
readonly demanded: boolean;
|
|
16
|
+
readonly featureInput: MotionBlurFeatureInput | undefined;
|
|
17
|
+
}
|
|
18
|
+
export interface MotionBlurDrawOptions {
|
|
19
|
+
readonly sampleTimeSeconds?: number;
|
|
20
|
+
readonly temporalReset?: true;
|
|
21
|
+
}
|
|
22
|
+
export declare function motionBlurDrawOptions(input: {
|
|
23
|
+
readonly sampleTimeSeconds?: number;
|
|
24
|
+
readonly temporalReset?: boolean;
|
|
25
|
+
}): MotionBlurDrawOptions;
|
|
26
|
+
/** Derive one motion-blur temporal plan before the record transaction starts. */
|
|
27
|
+
export declare function planMotionBlurFrame(input: {
|
|
28
|
+
readonly params: CameraSnapshot['motionBlur'];
|
|
29
|
+
readonly sampleTimeSeconds: number | undefined;
|
|
30
|
+
readonly acceptedSampleTimeSeconds: number | undefined;
|
|
31
|
+
readonly fallbackDeltaSeconds: number;
|
|
32
|
+
readonly acceptedTemporal: TemporalView | undefined;
|
|
33
|
+
readonly temporalReset: boolean;
|
|
34
|
+
readonly width: number;
|
|
35
|
+
readonly height: number;
|
|
36
|
+
readonly cameraViewIdentity: string;
|
|
37
|
+
readonly historyVersion: number;
|
|
38
|
+
readonly environmentSignature: string;
|
|
39
|
+
readonly fogSignature: string;
|
|
40
|
+
readonly deviceGeneration: number;
|
|
41
|
+
}): MotionBlurFramePlan;
|
|
42
|
+
/** Project the bounded inspection record without exposing renderer internals. */
|
|
43
|
+
export declare function projectMotionBlurInspection(input: {
|
|
44
|
+
readonly camera: CameraSnapshot | undefined;
|
|
45
|
+
readonly invalidParams: MotionBlurValidationError | undefined;
|
|
46
|
+
readonly capabilities: MotionBlurRuntimeCapabilities;
|
|
47
|
+
readonly acceptedTemporal: TemporalView | undefined;
|
|
48
|
+
readonly transaction: TemporalFrameTransactionInspection;
|
|
49
|
+
readonly execution: MotionBlurExecutionReceipt | undefined;
|
|
50
|
+
readonly temporalFrameId: number | undefined;
|
|
51
|
+
readonly deviceGeneration: number;
|
|
52
|
+
readonly graphGeneration: number;
|
|
53
|
+
}): MotionBlurInspection | undefined;
|
|
54
|
+
//# sourceMappingURL=motion-blur-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-blur-runtime.d.ts","sourceRoot":"","sources":["../../../src/features/motion-blur/motion-blur-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAIL,KAAK,yBAAyB,EAG/B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC3D;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;CAC/B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC,GAAG,qBAAqB,CAOxB;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IAC9C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,YAAY,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC,GAAG,mBAAmB,CAoCtB;AAED,iFAAiF;AACjF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,yBAAyB,GAAG,SAAS,CAAC;IAC9D,QAAQ,CAAC,YAAY,EAAE,6BAA6B,CAAC;IACrD,QAAQ,CAAC,gBAAgB,EAAE,YAAY,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,WAAW,EAAE,kCAAkC,CAAC;IACzD,QAAQ,CAAC,SAAS,EAAE,0BAA0B,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC,GAAG,oBAAoB,GAAG,SAAS,CAmEnC"}
|
package/dist/features/plan.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { GraphBufferAccess, GraphTextureAccess } from '@forgeax/engine-rend
|
|
|
2
2
|
import type { RhiCaps, TextureFormat } from '@forgeax/engine-rhi';
|
|
3
3
|
import { type Result } from '@forgeax/engine-types';
|
|
4
4
|
import type { RenderError } from '../errors/render';
|
|
5
|
-
import type
|
|
5
|
+
import { type SceneDataTarget } from '../temporal/scene-data';
|
|
6
6
|
import type { RenderFeatureGpuBufferUsage, RenderFeatureGpuProgramDescriptor } from './prepared-gpu-work';
|
|
7
7
|
import type { RenderFeaturePipelineDescriptor } from './prepared-graphics';
|
|
8
8
|
export type RenderFeatureResourceUsage = GraphBufferAccess | GraphTextureAccess;
|
|
@@ -75,8 +75,8 @@ export type RenderFeatureResourceDeclaration = RenderFeatureFullscreenProgramDec
|
|
|
75
75
|
readonly kind: 'sampler';
|
|
76
76
|
readonly value: unknown;
|
|
77
77
|
};
|
|
78
|
-
/** Optional graph target
|
|
79
|
-
readonly logicalTarget?:
|
|
78
|
+
/** Optional graph target or semantic scene-data target backing the resource. */
|
|
79
|
+
readonly logicalTarget?: RenderFeatureSampledTarget;
|
|
80
80
|
} | {
|
|
81
81
|
readonly kind: 'compute-bindings';
|
|
82
82
|
readonly name: string;
|
|
@@ -203,6 +203,9 @@ export interface RenderFeaturePlanContext {
|
|
|
203
203
|
readonly caps: Readonly<RhiCaps>;
|
|
204
204
|
readonly frame: {
|
|
205
205
|
readonly frameNumber: number;
|
|
206
|
+
/** Physical render extent used for bounded compute dispatch sizing. */
|
|
207
|
+
readonly width?: number;
|
|
208
|
+
readonly height?: number;
|
|
206
209
|
};
|
|
207
210
|
readonly generation: number;
|
|
208
211
|
readonly targets: readonly RenderFeatureLogicalTarget[];
|
|
@@ -221,7 +224,7 @@ export interface RenderFeaturePlannedFrame {
|
|
|
221
224
|
readonly plan: RenderFeaturePlan;
|
|
222
225
|
}
|
|
223
226
|
export interface RenderFeatureDerivedAccess {
|
|
224
|
-
readonly resource: string;
|
|
227
|
+
readonly resource: string | SceneDataTarget;
|
|
225
228
|
readonly usage: RenderFeatureResourceUsage;
|
|
226
229
|
}
|
|
227
230
|
/** Detached accounting for the canonical plan signature path. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/features/plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/features/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,11 @@ import { type BindGroupLayoutDescriptor, type Result } from '@forgeax/engine-typ
|
|
|
4
4
|
import type { DeviceScope, LifecycleResourceSpec } from '../device/device-scope';
|
|
5
5
|
import { type RenderError } from '../errors/render';
|
|
6
6
|
import type { PipelineBuilderShaderModuleFactory } from '../pipeline-builder';
|
|
7
|
+
import type { SceneDataTarget } from '../temporal/scene-data';
|
|
7
8
|
import type { RenderFeatureTargetHandle } from './targets';
|
|
8
9
|
import type { RenderFeatureShaderModuleMode } from './types';
|
|
10
|
+
/** A graph target that can be late-bound at encode time. */
|
|
11
|
+
export type RenderFeatureComputeTarget = string | RenderFeatureTargetHandle | SceneDataTarget;
|
|
9
12
|
declare const RenderFeatureGpuProgramBrand: unique symbol;
|
|
10
13
|
export interface RenderFeatureGpuProgramRef {
|
|
11
14
|
readonly [RenderFeatureGpuProgramBrand]: void;
|
|
@@ -71,7 +74,7 @@ export interface RenderFeatureGpuPrepare {
|
|
|
71
74
|
prepareBuffer(name: string, descriptor: RenderFeatureGpuBufferDescriptor): Result<RenderFeatureGpuBufferRef, RenderError>;
|
|
72
75
|
/** Adopt a provider-owned resident buffer without taking destruction ownership. */
|
|
73
76
|
prepareBufferResource(name: string, resource: Buffer, descriptor: Pick<RenderFeatureGpuBufferDescriptor, 'size' | 'usage'>): Result<RenderFeatureGpuBufferRef, RenderError>;
|
|
74
|
-
prepareTextureView(name: string, resource: TextureView, logicalTarget?:
|
|
77
|
+
prepareTextureView(name: string, resource: TextureView | undefined, logicalTarget?: RenderFeatureComputeTarget): Result<RenderFeatureGpuTextureViewRef, RenderError>;
|
|
75
78
|
prepareSampler(name: string, resource: Sampler): Result<RenderFeatureGpuSamplerRef, RenderError>;
|
|
76
79
|
prepareBindings(name: string, descriptor: RenderFeatureGpuBindingsDescriptor): Result<RenderFeatureGpuBindingsRef, RenderError>;
|
|
77
80
|
}
|
|
@@ -95,7 +98,8 @@ export interface RenderFeatureGpuComputePassDescriptor {
|
|
|
95
98
|
readonly dispatches: readonly RenderFeatureGpuDispatch[];
|
|
96
99
|
}
|
|
97
100
|
export interface RenderFeatureResolvedGpuComputePass {
|
|
98
|
-
readonly sampledTargets?: readonly
|
|
101
|
+
readonly sampledTargets?: readonly RenderFeatureComputeTarget[];
|
|
102
|
+
readonly storageTargets?: readonly RenderFeatureComputeTarget[];
|
|
99
103
|
readonly buffers: readonly {
|
|
100
104
|
readonly name: string;
|
|
101
105
|
readonly buffer: Buffer;
|
|
@@ -106,12 +110,12 @@ export interface RenderFeatureResolvedGpuComputePass {
|
|
|
106
110
|
readonly dispatches: readonly ({
|
|
107
111
|
readonly pipeline: ComputePipeline;
|
|
108
112
|
readonly bindGroup: BindGroup;
|
|
109
|
-
readonly resolveBindGroup?: (resolve: (target:
|
|
113
|
+
readonly resolveBindGroup?: (resolve: (target: RenderFeatureComputeTarget) => TextureView) => BindGroup;
|
|
110
114
|
readonly workgroups: readonly [number, number, number];
|
|
111
115
|
} | {
|
|
112
116
|
readonly pipeline: ComputePipeline;
|
|
113
117
|
readonly bindGroup: BindGroup;
|
|
114
|
-
readonly resolveBindGroup?: (resolve: (target:
|
|
118
|
+
readonly resolveBindGroup?: (resolve: (target: RenderFeatureComputeTarget) => TextureView) => BindGroup;
|
|
115
119
|
readonly indirectBuffer: Buffer;
|
|
116
120
|
readonly indirectOffset: number;
|
|
117
121
|
})[];
|
|
@@ -121,7 +125,7 @@ export interface RenderFeatureResolvedGpuBuffer {
|
|
|
121
125
|
readonly size: number;
|
|
122
126
|
readonly physicalUsage: number;
|
|
123
127
|
}
|
|
124
|
-
export declare function encodeRenderFeatureGpuComputePass(pass: RhiComputePassEncoder, work: RenderFeatureResolvedGpuComputePass, resolveTarget?: (target:
|
|
128
|
+
export declare function encodeRenderFeatureGpuComputePass(pass: RhiComputePassEncoder, work: RenderFeatureResolvedGpuComputePass, resolveTarget?: (target: RenderFeatureComputeTarget) => TextureView): void;
|
|
125
129
|
export interface RenderFeatureGpuPrepareSession extends RenderFeatureGpuPrepare {
|
|
126
130
|
beginFrame(): void;
|
|
127
131
|
resolveComputePass(featureIdentity: string, descriptor: RenderFeatureGpuComputePassDescriptor): Result<RenderFeatureResolvedGpuComputePass, RenderError>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepared-gpu-work.d.ts","sourceRoot":"","sources":["../../src/features/prepared-gpu-work.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"prepared-gpu-work.d.ts","sourceRoot":"","sources":["../../src/features/prepared-gpu-work.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EACV,SAAS,EAET,MAAM,EACN,eAAe,EAGf,qBAAqB,EAErB,SAAS,EACT,OAAO,EAEP,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,yBAAyB,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,KAAK,WAAW,EAAuC,MAAM,kBAAkB,CAAC;AACzF,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAE7D,4DAA4D;AAC5D,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,yBAAyB,GAAG,eAAe,CAAC;AAE9F,OAAO,CAAC,MAAM,4BAA4B,EAAE,OAAO,MAAM,CAAC;AAC1D,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,CAAC,4BAA4B,CAAC,EAAE,IAAI,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,OAAO,CAAC,MAAM,2BAA2B,EAAE,OAAO,MAAM,CAAC;AACzD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,CAAC,2BAA2B,CAAC,EAAE,IAAI,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,OAAO,CAAC,MAAM,gCAAgC,EAAE,OAAO,MAAM,CAAC;AAC9D,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,CAAC,gCAAgC,CAAC,EAAE,IAAI,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,OAAO,CAAC,MAAM,4BAA4B,EAAE,OAAO,MAAM,CAAC;AAC1D,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,CAAC,4BAA4B,CAAC,EAAE,IAAI,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,mCAAmC,GAC3C;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAA;CAAE,GAC1E;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,8BAA8B,CAAA;CAAE,GACrF;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,0BAA0B,CAAA;CAAE,CAAC;AAEjF,OAAO,CAAC,MAAM,6BAA6B,EAAE,OAAO,MAAM,CAAC;AAC3D,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,CAAC,6BAA6B,CAAC,EAAE,IAAI,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,2BAA2B,GACnC,SAAS,GACT,SAAS,GACT,UAAU,GACV,QAAQ,GACR,OAAO,GACP,UAAU,CAAC;AAEf,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC1D;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC;CACjC;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,SAAS,CACvB;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAA;KAAE,GACxE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,mCAAmC,CAAA;KAAE,CACvF,EAAE,CAAC;CACL;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,CAAC,UAAU,EAAE,SAAS,2BAA2B,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9F,cAAc,CACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,iCAAiC,GAC5C,MAAM,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC;IACnD,aAAa,CACX,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,gCAAgC,GAC3C,MAAM,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC;IAClD,mFAAmF;IACnF,qBAAqB,CACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,IAAI,CAAC,gCAAgC,EAAE,MAAM,GAAG,OAAO,CAAC,GACnE,MAAM,CAAC,yBAAyB,EAAE,WAAW,CAAC,CAAC;IAClD,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,GAAG,SAAS,EACjC,aAAa,CAAC,EAAE,0BAA0B,GACzC,MAAM,CAAC,8BAA8B,EAAE,WAAW,CAAC,CAAC;IACvD,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC;IACjG,eAAe,CACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,kCAAkC,GAC7C,MAAM,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAC;CACrD;AAED,UAAU,4BAA4B;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,2BAA2B,CAAC;CACjD;AAED,MAAM,MAAM,wBAAwB,GAAG,4BAA4B,GACjE,CACI;IACE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;CAC3B,GACD;IACE,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;QAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;CACH,CACJ,CAAC;AAEJ,MAAM,WAAW,qCAAqC;IACpD,QAAQ,CAAC,OAAO,EAAE,0BAA0B,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAC1D;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAChE,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAChE,QAAQ,CAAC,OAAO,EAAE,SAAS;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;KACpC,EAAE,CAAC;IACJ,QAAQ,CAAC,UAAU,EAAE,SAAS,CAC1B;QACE,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;QACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAC1B,OAAO,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,WAAW,KACzD,SAAS,CAAC;QACf,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACxD,GACD;QACE,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;QACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAC1B,OAAO,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,WAAW,KACzD,SAAS,CAAC;QACf,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;KACjC,CACJ,EAAE,CAAC;CACL;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,qBAAqB,EAC3B,IAAI,EAAE,mCAAmC,EACzC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,KAAK,WAAW,GAClE,IAAI,CAeN;AAED,MAAM,WAAW,8BAA+B,SAAQ,uBAAuB;IAC7E,UAAU,IAAI,IAAI,CAAC;IACnB,kBAAkB,CAChB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,qCAAqC,GAChD,MAAM,CAAC,mCAAmC,EAAE,WAAW,CAAC,CAAC;IAC5D,aAAa,CAAC,SAAS,EAAE,yBAAyB,GAAG,8BAA8B,GAAG,SAAS,CAAC;IAChG,eAAe,IAAI,SAAS,6BAA6B,EAAE,CAAC;IAC5D,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;CACtC;AAyyCD;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,kEAAkE;IAClE,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACvE,YAAY,CACV,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,gBAAgB,CAAC,EAAE,6BAA6B,GAC/C,8BAA8B,CAAC;IAClC,aAAa,CACX,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,yBAAyB,GACnC,8BAA8B,GAAG,SAAS,CAAC;IAC9C,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;CACtC;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,SAAS,CAAC;IACpC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;IAC1E,QAAQ,CAAC,+BAA+B,CAAC,EAAE,MAAM,kCAAkC,CAAC;CACrF,GAAG,yBAAyB,CA4D5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-graph-compute.d.ts","sourceRoot":"","sources":["../../src/features/render-graph-compute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAO,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"render-graph-compute.d.ts","sourceRoot":"","sources":["../../src/features/render-graph-compute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAO,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,KAAK,WAAW,EAGjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAEL,KAAK,mCAAmC,EACzC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,0BAA0B,CAAC;AAElC,qBAAa,mCAAmC,CAAC,QAAQ,SAAS,gBAAgB;IAI9E,OAAO,CAAC,QAAQ,CAAC,OAAO;IAExB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IANjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;gBAGvC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EACtD,SAAS,CAAC,EAAE,6BAA6B,EACxB,WAAW,CAAC,GAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,aAAA,EAC1C,aAAa,CAAC,EAAE,gCAAgC,YAAA;IAKnE,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,mCAAmC,GACxC,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW,CAAC;CAqEhD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-graph-contribution.d.ts","sourceRoot":"","sources":["../../src/features/render-graph-contribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,WAAW,EAAiC,MAAM,kBAAkB,CAAC;AACnF,OAAO,KAAK,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,MAAM,QAAQ,CAAC;AAEzF,OAAO,EACL,KAAK,kCAAkC,EACvC,KAAK,gCAAgC,EACrC,KAAK,6BAA6B,EAElC,KAAK,wBAAwB,EAE9B,MAAM,uBAAuB,CAAC;AAG/B,wBAAgB,kCAAkC;;;EAKjD;AAkBD,wBAAgB,2BAA2B,CAAC,QAAQ,SAAS,gBAAgB,EAC3E,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EACrC,UAAU,EAAE,SAAS,0BAA0B,EAAE,EACjD,KAAK,EAAE,UAAU,CAAC,OAAO,kCAAkC,CAAC,GAC3D,MAAM,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG,SAAS,EAAE,gBAAgB,GAAG,WAAW,CAAC,CAkFxF;AAED,+EAA+E;AAC/E,wBAAgB,yBAAyB,CAAC,QAAQ,SAAS,gBAAgB,EACzE,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EACrC,UAAU,EAAE,SAAS,0BAA0B,EAAE,EACjD,OAAO,EAAE;IACP,QAAQ,CAAC,aAAa,EAAE,gCAAgC,CAAC;IACzD,QAAQ,CAAC,eAAe,CAAC,EAAE,kCAAkC,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IACpF,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,uBAAuB,CAAC,EAAE,6BAA6B,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IACvF,QAAQ,CAAC,uBAAuB,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,kCAAkC,CAAC,CAAC;CACxE,GACA,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"render-graph-contribution.d.ts","sourceRoot":"","sources":["../../src/features/render-graph-contribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,WAAW,EAAiC,MAAM,kBAAkB,CAAC;AACnF,OAAO,KAAK,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,MAAM,QAAQ,CAAC;AAEzF,OAAO,EACL,KAAK,kCAAkC,EACvC,KAAK,gCAAgC,EACrC,KAAK,6BAA6B,EAElC,KAAK,wBAAwB,EAE9B,MAAM,uBAAuB,CAAC;AAG/B,wBAAgB,kCAAkC;;;EAKjD;AAkBD,wBAAgB,2BAA2B,CAAC,QAAQ,SAAS,gBAAgB,EAC3E,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EACrC,UAAU,EAAE,SAAS,0BAA0B,EAAE,EACjD,KAAK,EAAE,UAAU,CAAC,OAAO,kCAAkC,CAAC,GAC3D,MAAM,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG,SAAS,EAAE,gBAAgB,GAAG,WAAW,CAAC,CAkFxF;AAED,+EAA+E;AAC/E,wBAAgB,yBAAyB,CAAC,QAAQ,SAAS,gBAAgB,EACzE,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EACrC,UAAU,EAAE,SAAS,0BAA0B,EAAE,EACjD,OAAO,EAAE;IACP,QAAQ,CAAC,aAAa,EAAE,gCAAgC,CAAC;IACzD,QAAQ,CAAC,eAAe,CAAC,EAAE,kCAAkC,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IACpF,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,uBAAuB,CAAC,EAAE,6BAA6B,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IACvF,QAAQ,CAAC,uBAAuB,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,kCAAkC,CAAC,CAAC;CACxE,GACA,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW,CAAC,CAqE9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"material-artifacts.d.ts","sourceRoot":"","sources":["../../src/gpu-driven/material-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"material-artifacts.d.ts","sourceRoot":"","sources":["../../src/gpu-driven/material-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAErE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGlF,KAAK,WAAW,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7F,oFAAoF;AACpF,wBAAgB,iCAAiC,CAAC,EAChD,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,OAAO,EACP,SAAS,EACT,kBAAkB,GACnB,EAAE;IACD,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,SAAS,WAAW,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC,2BAA2B,CAAC,CAAC;IACrE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;CACtC;;;;;EAoJA"}
|
|
@@ -55,6 +55,13 @@ export interface PrepareGpuDrivenDrawInput {
|
|
|
55
55
|
readonly draw: GpuDrivenDrawRange;
|
|
56
56
|
readonly skinReceipt?: GpuDrivenSkinReceipt;
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* A material receipt declares the inputs its shader consumes. Geometry may
|
|
60
|
+
* carry additional authored attributes (for example an unused TEXCOORD_1),
|
|
61
|
+
* so admission checks required locations and formats without treating those
|
|
62
|
+
* producer-owned extras as an ABI mismatch.
|
|
63
|
+
*/
|
|
64
|
+
export declare function hasRequiredVertexInputs(expected: readonly MaterialShaderVertexInput[], actual: readonly MaterialShaderVertexInput[]): boolean;
|
|
58
65
|
export declare function prepareGpuDrivenDraw(input: PrepareGpuDrivenDrawInput): {
|
|
59
66
|
readonly ok: true;
|
|
60
67
|
readonly value: PreparedGpuDrivenDraw;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepared-draw.d.ts","sourceRoot":"","sources":["../../src/gpu-driven/prepared-draw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,6BAA6B,EAC7B,yBAAyB,EAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,yBAAyB,EAE1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC5D,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,CAAC;KACxC,CAAC;IACF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,iFAAiF;IACjF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,6BAA6B,CAAC,aAAa,CAAC,CAAC;IACnE,QAAQ,CAAC,aAAa,EAAE,6BAA6B,CAAC,eAAe,CAAC,CAAC;IACvE,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IACzD,QAAQ,CAAC,YAAY,EAAE,6BAA6B,CAAC,cAAc,CAAC,CAAC;IACrE,QAAQ,CAAC,SAAS,EAAE,6BAA6B,CAAC,WAAW,CAAC,CAAC;IAC/D,QAAQ,CAAC,kBAAkB,EAAE,6BAA6B,CAAC,oBAAoB,CAAC,CAAC;IACjF,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,aAAa,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC;CAC7C;
|
|
1
|
+
{"version":3,"file":"prepared-draw.d.ts","sourceRoot":"","sources":["../../src/gpu-driven/prepared-draw.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ import type { PersistentGpuDrivenState } from '../scene/render-scene';
|
|
|
17
17
|
import type { OcclusionFrameProjection } from '../scene/visibility/occlusion-runtime';
|
|
18
18
|
import { type GpuDrivenBatch, type SubmissionPlan } from './batch-topology';
|
|
19
19
|
import { type ShadowViewIdentity, type ShadowViewProjection, ShadowViewStatePool, type ShadowViewUpdateInput } from './shadow-views';
|
|
20
|
-
import { type GpuDrivenLodSelectionInspection } from './view-gpu';
|
|
20
|
+
import { type GpuDrivenLodSelectionInspection, type GpuDrivenLodSubmitIdentity } from './view-gpu';
|
|
21
21
|
export interface StandardPbrSceneCandidate {
|
|
22
22
|
readonly primitiveIndex: number;
|
|
23
23
|
readonly world: Float32Array;
|
|
@@ -302,6 +302,8 @@ export declare class GpuDrivenProduction {
|
|
|
302
302
|
readonly activeEntityRevision?: number;
|
|
303
303
|
/** Total extracted candidates, including facet-suppressed rows. */
|
|
304
304
|
readonly telemetryCandidateCount?: number;
|
|
305
|
+
/** Public receipt identity for the GPU telemetry copy encoded this frame. */
|
|
306
|
+
readonly telemetrySubmit?: GpuDrivenLodSubmitIdentity;
|
|
305
307
|
readonly occlusion?: OcclusionFrameProjection;
|
|
306
308
|
/** Per-frame deltas from the existing RenderScene/GPU Scene/palette owners. */
|
|
307
309
|
readonly structureMetrics?: GpuDrivenStructureMetrics;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"production-raster.d.ts","sourceRoot":"","sources":["../../src/gpu-driven/production-raster.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"production-raster.d.ts","sourceRoot":"","sources":["../../src/gpu-driven/production-raster.ts"],"names":[],"mappings":"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"}
|