@forgeax/engine-render 0.1.27 → 0.1.29
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 +842 -124
- package/dist/assembly/atmosphere-shader-prewarm.d.ts +6 -0
- package/dist/assembly/atmosphere-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/dynamic-geometry-host.d.ts +52 -0
- package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -0
- package/dist/assembly/dynamic-geometry-runtime.d.ts +20 -0
- package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +3 -1
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/gpu-driven-owner.d.ts +10 -0
- package/dist/assembly/gpu-driven-owner.d.ts.map +1 -0
- package/dist/assembly/host-contract.d.ts +19 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/material/assembly.d.ts +7 -0
- package/dist/assembly/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material-shader-policy.d.ts +3 -1
- package/dist/assembly/material-shader-policy.d.ts.map +1 -1
- package/dist/assembly/recovery/failure-location.d.ts +12 -0
- package/dist/assembly/recovery/failure-location.d.ts.map +1 -0
- package/dist/assembly/recovery/renderer-recover.d.ts +6 -4
- package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
- package/dist/assembly/renderer-facade.d.ts.map +1 -1
- package/dist/assembly/renderer-feature-inspection.d.ts +5 -0
- package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -0
- package/dist/assembly/renderer-frame-transaction.d.ts +19 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
- package/dist/assembly/renderer-helpers.d.ts +3 -0
- package/dist/assembly/renderer-helpers.d.ts.map +1 -1
- package/dist/assembly/renderer-inspection.d.ts +4 -0
- package/dist/assembly/renderer-inspection.d.ts.map +1 -1
- package/dist/assembly/shader-prewarm-policy.d.ts +6 -0
- package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -1
- package/dist/assembly/skin-palette-owner.d.ts +8 -0
- package/dist/assembly/skin-palette-owner.d.ts.map +1 -0
- package/dist/assembly/ssr-shader-prewarm.d.ts +6 -0
- package/dist/assembly/ssr-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/webgpu-device-loss.d.ts +15 -0
- package/dist/assembly/webgpu-device-loss.d.ts.map +1 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts +38 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready-mipmap.d.ts +11 -0
- package/dist/assembly/webgpu-ready-mipmap.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready.d.ts +7 -3
- package/dist/assembly/webgpu-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts +10 -0
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-contract.d.ts +62 -0
- package/dist/assembly/webgpu-renderer-contract.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-guards.d.ts +9 -0
- package/dist/assembly/webgpu-renderer-guards.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-observation.d.ts +6 -0
- package/dist/assembly/webgpu-renderer-observation.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-recovery-failure.d.ts +12 -0
- package/dist/assembly/webgpu-renderer-recovery-failure.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer.d.ts +7 -141
- package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
- package/dist/assembly/webgpu-vertex-layouts.d.ts +28 -84
- package/dist/assembly/webgpu-vertex-layouts.d.ts.map +1 -1
- package/dist/authoring.mjs +3 -3
- package/dist/{chunk-ADHHVYLW.mjs → chunk-33XZFTQU.mjs} +245 -39
- package/dist/chunk-33XZFTQU.mjs.map +1 -0
- package/dist/{chunk-GF523LHF.mjs → chunk-BLXGONR2.mjs} +30 -12
- package/dist/chunk-BLXGONR2.mjs.map +1 -0
- package/dist/{chunk-KM2NOX2I.mjs → chunk-BQVQOQJH.mjs} +958 -254
- package/dist/chunk-BQVQOQJH.mjs.map +1 -0
- package/dist/{chunk-HKXTW355.mjs → chunk-BTWH7BP4.mjs} +386 -17
- package/dist/chunk-BTWH7BP4.mjs.map +1 -0
- package/dist/{chunk-TMIASV2N.mjs → chunk-FUODTTIA.mjs} +3934 -676
- package/dist/chunk-FUODTTIA.mjs.map +1 -0
- package/dist/{chunk-FJ6P52EE.mjs → chunk-ILQ5MEZF.mjs} +3 -17
- package/dist/chunk-ILQ5MEZF.mjs.map +1 -0
- package/dist/{chunk-E34VL5VI.mjs → chunk-JQTSEI3Z.mjs} +3 -3
- package/dist/{chunk-E34VL5VI.mjs.map → chunk-JQTSEI3Z.mjs.map} +1 -1
- package/dist/{chunk-GE3SDD72.mjs → chunk-NICXSHAT.mjs} +16 -38
- package/dist/chunk-NICXSHAT.mjs.map +1 -0
- package/dist/{chunk-ZZ4YQ474.mjs → chunk-NRNXBLIJ.mjs} +577 -7
- package/dist/chunk-NRNXBLIJ.mjs.map +1 -0
- package/dist/{chunk-JDWARUOI.mjs → chunk-PA5DRJNI.mjs} +17 -3
- package/dist/chunk-PA5DRJNI.mjs.map +1 -0
- package/dist/{chunk-XDP6XE5V.mjs → chunk-S4DNKQYQ.mjs} +1118 -446
- package/dist/chunk-S4DNKQYQ.mjs.map +1 -0
- package/dist/components/camera.d.ts +62 -2
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/instances.d.ts +6 -20
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/components/scene-instance.d.ts +2 -1
- package/dist/components/scene-instance.d.ts.map +1 -1
- package/dist/components/screen-space-reflection.d.ts +14 -0
- package/dist/components/screen-space-reflection.d.ts.map +1 -0
- package/dist/construct-renderer.mjs +13805 -7186
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/gpu-residency.d.ts +11 -17
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/device/mesh-residency-lifetime.d.ts +21 -0
- package/dist/device/mesh-residency-lifetime.d.ts.map +1 -0
- package/dist/dynamic-geometry.d.ts +125 -0
- package/dist/dynamic-geometry.d.ts.map +1 -0
- package/dist/environment/background.d.ts +6 -0
- package/dist/environment/background.d.ts.map +1 -0
- package/dist/errors/gpu-driven.d.ts +6 -3
- package/dist/errors/gpu-driven.d.ts.map +1 -1
- package/dist/errors/render.d.ts +7 -4
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/camera.d.ts.map +1 -1
- package/dist/extract/gpu-driven.d.ts +33 -3
- package/dist/extract/gpu-driven.d.ts.map +1 -1
- package/dist/features/host.d.ts +23 -1
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/noise-texture.d.ts +17 -0
- package/dist/features/noise-texture.d.ts.map +1 -0
- package/dist/features/plan.d.ts +83 -2
- package/dist/features/plan.d.ts.map +1 -1
- package/dist/features/prepared-gpu-work.d.ts +37 -4
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics-store.d.ts.map +1 -1
- package/dist/features/prepared-graphics.d.ts +5 -0
- package/dist/features/prepared-graphics.d.ts.map +1 -1
- package/dist/features/render-graph-compute.d.ts +5 -3
- package/dist/features/render-graph-compute.d.ts.map +1 -1
- package/dist/features/render-graph-contribution.d.ts +11 -3
- package/dist/features/render-graph-contribution.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +19 -3
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/types.d.ts +11 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +2 -0
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/gpu-driven/batch-topology.d.ts +34 -1
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/pbr-program.d.ts +10 -0
- package/dist/gpu-driven/pbr-program.d.ts.map +1 -0
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +144 -23
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/shadow-views.d.ts +126 -0
- package/dist/gpu-driven/shadow-views.d.ts.map +1 -0
- package/dist/gpu-driven/view-gpu.d.ts +18 -2
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-scene-schema.d.ts +2 -8
- package/dist/gpu-scene-schema.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +14 -0
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/gpu-texture-usage.d.ts +1 -0
- package/dist/gpu-texture-usage.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +6 -0
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/frame-resources.d.ts +8 -0
- package/dist/ibl/frame-resources.d.ts.map +1 -0
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +21 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +8 -7
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +164 -0
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/instances-derived-bounds.d.ts +11 -0
- package/dist/instances-derived-bounds.d.ts.map +1 -1
- package/dist/instances.d.ts +89 -44
- package/dist/instances.d.ts.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +118 -10
- package/dist/internal.mjs.map +1 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/material-row.d.ts +5 -0
- package/dist/material-row.d.ts.map +1 -0
- package/dist/materials.d.ts +15 -0
- package/dist/materials.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +21 -5
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-output/auto-exposure/capability.d.ts +12 -0
- package/dist/pipeline/standard-output/auto-exposure/capability.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts +70 -0
- package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/graph.d.ts +75 -0
- package/dist/pipeline/standard-output/auto-exposure/graph.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts +111 -0
- package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts +16 -0
- package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/preset.d.ts +14 -0
- package/dist/pipeline/standard-output/auto-exposure/preset.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/state.d.ts +46 -0
- package/dist/pipeline/standard-output/auto-exposure/state.d.ts.map +1 -0
- package/dist/pipeline/standard-output/color-transform.d.ts +27 -0
- package/dist/pipeline/standard-output/color-transform.d.ts.map +1 -0
- package/dist/pipeline/standard-output/graph.d.ts +15 -0
- package/dist/pipeline/standard-output/graph.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-admission.d.ts +29 -0
- package/dist/pipeline/standard-output/lut-admission.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-gpu.d.ts +48 -0
- package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-state.d.ts +68 -0
- package/dist/pipeline/standard-output/lut-state.d.ts.map +1 -0
- package/dist/pipeline/standard-output/resources.d.ts +10 -0
- package/dist/pipeline/standard-output/resources.d.ts.map +1 -0
- package/dist/pipeline/standard-output/types.d.ts +39 -0
- package/dist/pipeline/standard-output/types.d.ts.map +1 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts +2 -2
- package/dist/pipeline/standard-post.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +2 -1
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec-types.d.ts +4 -0
- package/dist/pipeline-spec-types.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts +1 -9
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/points-lines/standard-owner.d.ts +1 -1
- package/dist/points-lines/standard-owner.d.ts.map +1 -1
- package/dist/prepare/prepared-graphics-resolver.d.ts +6 -1
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
- package/dist/record/dynamic-geometry-consumption.d.ts +15 -0
- package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +3 -3
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +106 -5
- 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 +39 -4
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +7 -8
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +38 -1
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts +2 -10
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +12 -2
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts +15 -6
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/prepared-material-bindings.d.ts +19 -0
- package/dist/record/prepared-material-bindings.d.ts.map +1 -0
- package/dist/record/recovery-pipeline.d.ts +2 -9
- package/dist/record/recovery-pipeline.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +76 -26
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts +62 -7
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts +1 -1
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +35 -7
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +1 -0
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/recovery/render-system-candidate.d.ts +10 -2
- package/dist/recovery/render-system-candidate.d.ts.map +1 -1
- package/dist/recovery/render-system-roots.d.ts +11 -0
- package/dist/recovery/render-system-roots.d.ts.map +1 -0
- package/dist/recovery/types.d.ts +76 -0
- package/dist/recovery/types.d.ts.map +1 -0
- package/dist/reflection/record-owner.d.ts +0 -2
- package/dist/reflection/record-owner.d.ts.map +1 -1
- package/dist/render-contract.d.ts +185 -30
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts +1 -0
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +64 -5
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts +7 -5
- package/dist/render-system-extract-tail.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +101 -41
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system-projections.d.ts +22 -0
- package/dist/render-system-projections.d.ts.map +1 -0
- package/dist/render-system.d.ts +34 -77
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene-types.d.ts +14 -7
- package/dist/scene/render-scene-types.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +29 -11
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/scene/shadow-visibility.d.ts +5 -0
- package/dist/scene/shadow-visibility.d.ts.map +1 -0
- package/dist/ssr/admission.d.ts +70 -1
- package/dist/ssr/admission.d.ts.map +1 -1
- package/dist/ssr/compose.d.ts +13 -0
- package/dist/ssr/compose.d.ts.map +1 -0
- package/dist/ssr/errors.d.ts +35 -0
- package/dist/ssr/errors.d.ts.map +1 -1
- package/dist/ssr/graph.d.ts +60 -0
- package/dist/ssr/graph.d.ts.map +1 -0
- package/dist/ssr/history.d.ts +97 -0
- package/dist/ssr/history.d.ts.map +1 -0
- package/dist/ssr/hiz.d.ts +37 -0
- package/dist/ssr/hiz.d.ts.map +1 -0
- package/dist/ssr/inspection.d.ts +42 -0
- package/dist/ssr/inspection.d.ts.map +1 -0
- package/dist/ssr/resources.d.ts +58 -0
- package/dist/ssr/resources.d.ts.map +1 -0
- package/dist/ssr/temporal.d.ts +38 -0
- package/dist/ssr/temporal.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts +32 -10
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
- package/dist/systems/skin-palette-types.d.ts +15 -0
- package/dist/systems/skin-palette-types.d.ts.map +1 -1
- package/dist/systems/transparent-dispatch.d.ts +9 -0
- package/dist/systems/transparent-dispatch.d.ts.map +1 -0
- package/dist/targets/material-source.d.ts +7 -0
- package/dist/targets/material-source.d.ts.map +1 -1
- package/dist/temporal/frame-coordinator.d.ts +7 -0
- package/dist/temporal/frame-coordinator.d.ts.map +1 -1
- package/dist/temporal/gpu.d.ts +8 -0
- package/dist/temporal/gpu.d.ts.map +1 -1
- package/dist/temporal/history.d.ts.map +1 -1
- package/dist/temporal/index.mjs +6 -6
- package/dist/temporal/inspection.d.ts.map +1 -1
- package/dist/temporal/standard-scene-data.d.ts +2 -1
- package/dist/temporal/standard-scene-data.d.ts.map +1 -1
- package/dist/temporal/temporal-view.d.ts +2 -0
- package/dist/temporal/temporal-view.d.ts.map +1 -1
- package/dist/typed-render-graph-primitives.d.ts +35 -1
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/typed-shadow-passes.d.ts +3 -1
- package/dist/typed-shadow-passes.d.ts.map +1 -1
- package/dist/volume/temporal.d.ts +6 -0
- package/dist/volume/temporal.d.ts.map +1 -1
- package/package.json +21 -20
- package/src/__tests__/auto-exposure-gpu-evidence.ts +291 -0
- package/src/__tests__/auto-exposure-inspection.unit.test.ts +80 -0
- package/src/__tests__/auto-exposure-transaction.integration.test.ts +99 -0
- package/src/__tests__/auto-exposure.browser.test.ts +33 -0
- package/src/__tests__/auto-exposure.dawn.test.ts +33 -0
- package/src/__tests__/detached-inspection.integration.test.ts +5 -0
- package/src/__tests__/device-scope-lifecycle.unit.test.ts +18 -0
- package/src/__tests__/device-scope-stale-matrix.unit.test.ts +18 -0
- package/src/__tests__/docs-gate-green.unit.test.ts +3 -3
- package/src/__tests__/dynamic-geometry-host.unit.test.ts +1123 -0
- package/src/__tests__/dynamic-geometry.unit.test.ts +233 -0
- package/src/__tests__/factory-contract.integration.test.ts +73 -22
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +19 -0
- package/src/__tests__/feature-depth-input.dawn.test.ts +121 -0
- package/src/__tests__/feature-noise.unit.test.ts +38 -0
- package/src/__tests__/fixtures/taa-resolve-pinned-baseline.wgsl +301 -0
- package/src/__tests__/frame-camera-selection.unit.test.ts +131 -0
- package/src/__tests__/frame-plan-contract.unit.test.ts +24 -0
- package/src/__tests__/frame-targets.unit.test.ts +24 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +3 -0
- package/src/__tests__/gpu-driven-baseline.characterization.test.ts +79 -0
- package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +287 -6
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +122 -142
- package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +10 -1
- package/src/__tests__/gpu-driven-lod-cache.unit.test.ts +264 -0
- package/src/__tests__/gpu-driven-mesh-world-identity.unit.test.ts +349 -0
- package/src/__tests__/gpu-driven-pbr.dawn.test.ts +1417 -0
- package/src/__tests__/gpu-driven-pbr.integration.test.ts +21 -0
- package/src/__tests__/gpu-driven-production-fixture.ts +96 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +1075 -93
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +1 -3
- package/src/__tests__/gpu-driven-shadow-views.browser.test.ts +63 -0
- package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +294 -0
- package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +97 -0
- package/src/__tests__/gpu-driven-shadow-views.unit.test.ts +168 -0
- package/src/__tests__/gpu-driven-skin-contract.test-d.ts +11 -0
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +72 -20
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +30 -9
- package/src/__tests__/gpu-driven-view.unit.test.ts +159 -52
- package/src/__tests__/gpu-pass-timing.browser.test.ts +6 -1
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +42 -0
- package/src/__tests__/gpu-scene-render-graph-gpu.ts +19 -5
- package/src/__tests__/gpu-scene.dawn.test.ts +40 -13
- package/src/__tests__/gpu-scene.unit.test.ts +559 -33
- package/src/__tests__/instances-culling.integration.test.ts +36 -10
- package/src/__tests__/instances-derived-bounds.unit.test.ts +54 -0
- package/src/__tests__/instances-store.unit.test.ts +242 -39
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +6 -0
- package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +13 -16
- package/src/__tests__/lut-lkg-transaction.integration.test.ts +122 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +5 -6
- package/src/__tests__/material-dispatch-shader-id.unit.test.ts +51 -0
- package/src/__tests__/material-lane-selection.unit.test.ts +60 -0
- package/src/__tests__/material-numeric-upload.unit.test.ts +53 -0
- package/src/__tests__/material-texture-handles.unit.test.ts +18 -0
- package/src/__tests__/material-texture-source.unit.test.ts +87 -0
- package/src/__tests__/materials-authoring-validation.unit.test.ts +41 -0
- package/src/__tests__/materials-standard-contract.unit.test.ts +52 -2
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +4 -0
- package/src/__tests__/mesh-submission-lifetime.unit.test.ts +53 -0
- package/src/__tests__/normal-fallback.dawn.test.ts +122 -0
- package/src/__tests__/particle-material-input-layout.unit.test.ts +104 -0
- package/src/__tests__/physical-clearcoat.integration.test.ts +37 -3
- package/src/__tests__/pipeline-texture-specialization.unit.test.ts +138 -0
- package/src/__tests__/point-shadow-inspection.unit.test.ts +2 -0
- package/src/__tests__/prepared-gpu-driven-pbr-contract.test-d.ts +31 -0
- package/src/__tests__/prepared-gpu-driven-pbr-contract.unit.test.ts +39 -0
- package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +35 -4
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +21 -0
- package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +6 -2
- package/src/__tests__/profiler-phase-catalog.test.ts +5 -0
- package/src/__tests__/public-surface.test-d.ts +3 -0
- package/src/__tests__/recovery-candidate-prepare.contract.test.ts +30 -12
- package/src/__tests__/reflection-fallback-async-publication.unit.test.ts +104 -0
- package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +2 -1
- package/src/__tests__/render-error-code-owner.test-d.ts +4 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +22 -0
- package/src/__tests__/render-error-exhaustive.test-d.ts +15 -0
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +285 -2
- package/src/__tests__/render-feature-plan.unit.test.ts +245 -0
- package/src/__tests__/render-feature-shadow-order.unit.test.ts +228 -0
- package/src/__tests__/render-feature-zero-work.unit.test.ts +35 -1
- package/src/__tests__/render-graph-fallback.integration.test.ts +2 -2
- package/src/__tests__/render-owner-cohesion.unit.test.ts +55 -0
- package/src/__tests__/render-scene-mixed-updates.integration.test.ts +426 -0
- package/src/__tests__/render-scene-projection.unit.test.ts +914 -23
- package/src/__tests__/render-scene-resource-updates.integration.test.ts +214 -0
- package/src/__tests__/render-scene-skin-lifecycle.integration.test.ts +173 -0
- package/src/__tests__/render-scene-temporal-retry.unit.test.ts +133 -0
- package/src/__tests__/render-target-material-source.test-d.ts +27 -3
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +61 -1
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +923 -5
- package/src/__tests__/shader-manifest-fixture.ts +39 -0
- package/src/__tests__/skin-motion-regression.unit.test.ts +0 -33
- package/src/__tests__/skin-palette-persistent.integration.test.ts +28 -0
- package/src/__tests__/skin-palette-persistent.unit.test.ts +247 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +118 -14
- package/src/__tests__/specular-environment-scale.dawn.test.ts +156 -0
- package/src/__tests__/ssr-admission-matrix.integration.test.ts +7 -1
- package/src/__tests__/ssr-confidence-compose.unit.test.ts +84 -0
- package/src/__tests__/ssr-coordinate-oracle.unit.test.ts +28 -0
- package/src/__tests__/ssr-format-probe-gating.integration.test.ts +82 -0
- package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +91 -0
- package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +112 -0
- package/src/__tests__/ssr-gpu-dispatch.ts +946 -0
- package/src/__tests__/ssr-graph-topology.unit.test.ts +104 -0
- package/src/__tests__/ssr-history-filter.dawn.test.ts +198 -0
- package/src/__tests__/ssr-hit-color.dawn.test.ts +273 -0
- package/src/__tests__/ssr-hiz-odd-reduction.dawn.test.ts +569 -0
- package/src/__tests__/ssr-hiz-rescue.dawn.test.ts +279 -0
- package/src/__tests__/ssr-hiz.browser.test.ts +150 -0
- package/src/__tests__/ssr-hiz.dawn.test.ts +150 -0
- package/src/__tests__/ssr-hiz.unit.test.ts +56 -0
- package/src/__tests__/ssr-inspection.unit.test.ts +105 -0
- package/src/__tests__/ssr-memory-budget.unit.test.ts +45 -0
- package/src/__tests__/ssr-performance-sequence-aggregation.unit.test.ts +15 -0
- package/src/__tests__/ssr-public-surface.test-d.ts +37 -0
- package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +387 -0
- package/src/__tests__/ssr-reflection-mip-reducer.dawn.test.ts +309 -0
- package/src/__tests__/ssr-reprojection-probe.ts +90 -0
- package/src/__tests__/ssr-roughness-mip.dawn.test.ts +163 -0
- package/src/__tests__/ssr-shader-prewarm.unit.test.ts +59 -0
- package/src/__tests__/ssr-spatial.integration.test.ts +141 -0
- package/src/__tests__/ssr-stable-lattice.dawn.test.ts +475 -0
- package/src/__tests__/ssr-temporal-history.unit.test.ts +202 -0
- package/src/__tests__/ssr-texel-crossing.dawn.test.ts +448 -0
- package/src/__tests__/ssr-zero-work.integration.test.ts +87 -0
- package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +44 -12
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +29 -0
- package/src/__tests__/standard-output-chain-contract.unit.test.ts +99 -0
- package/src/__tests__/standard-output-chain.integration.test.ts +73 -0
- package/src/__tests__/standard-output-gpu-evidence.ts +205 -0
- package/src/__tests__/standard-output.browser.test.ts +15 -0
- package/src/__tests__/standard-output.dawn.test.ts +15 -0
- package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +38 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +320 -3
- package/src/__tests__/standard-profile-oracle.unit.test.ts +22 -0
- package/src/__tests__/standard-surface-lighting.unit.test.ts +41 -0
- package/src/__tests__/standard-texture-specialization.dawn.test.ts +141 -0
- package/src/__tests__/surface-adjacent-regressions.integration.test.ts +6 -3
- package/src/__tests__/taa-coverage-edge.dawn.test.ts +193 -0
- package/src/__tests__/taa-history-clipping.dawn.test.ts +328 -0
- package/src/__tests__/taa-neighborhood-equivalence.dawn.test.ts +778 -0
- package/src/__tests__/taa-stability-feedback.browser.test.ts +23 -0
- package/src/__tests__/taa-stability-feedback.dawn.test.ts +68 -0
- package/src/__tests__/taa-stability-feedback.ts +341 -0
- package/src/__tests__/temporal-history-lifecycle.unit.test.ts +49 -7
- package/src/__tests__/temporal-reset-matrix.unit.test.ts +9 -0
- package/src/__tests__/temporal-transaction.integration.test.ts +28 -0
- package/src/__tests__/texture-usage-surface.unit.test.ts +4 -2
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +109 -4
- package/src/__tests__/typed-scene-pass-material-cache.integration.test.ts +126 -0
- package/src/__tests__/vertex-layouts-ssot.unit.test.ts +47 -0
- package/src/__tests__/visibility-extract.perf.test.ts +20 -8
- package/src/__tests__/visibility-instances.integration.test.ts +19 -7
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +20 -9
- package/src/assembly/atmosphere-shader-prewarm.ts +38 -0
- package/src/assembly/dynamic-geometry-host.ts +887 -0
- package/src/assembly/dynamic-geometry-runtime.ts +71 -0
- package/src/assembly/factory.ts +4 -0
- package/src/assembly/gpu-driven-owner.ts +29 -0
- package/src/assembly/host-contract.ts +36 -0
- package/src/assembly/material/assembly.ts +38 -0
- package/src/assembly/material-shader-policy.ts +71 -28
- package/src/assembly/recovery/failure-location.ts +62 -0
- package/src/assembly/recovery/renderer-recover.ts +19 -17
- package/src/assembly/renderer-facade.ts +29 -0
- package/src/assembly/renderer-feature-inspection.ts +13 -0
- package/src/assembly/renderer-frame-transaction.ts +63 -0
- package/src/assembly/renderer-helpers.ts +26 -0
- package/src/assembly/renderer-inspection.ts +6 -0
- package/src/assembly/shader-prewarm-policy.ts +32 -0
- package/src/assembly/skin-palette-owner.ts +21 -0
- package/src/assembly/ssr-shader-prewarm.ts +41 -0
- package/src/assembly/webgpu-device-loss.ts +75 -0
- package/src/assembly/webgpu-pbr-ready.ts +232 -0
- package/src/assembly/webgpu-ready-mipmap.ts +26 -0
- package/src/assembly/webgpu-ready.ts +142 -121
- package/src/assembly/webgpu-renderer-bootstrap.ts +85 -0
- package/src/assembly/webgpu-renderer-contract.ts +69 -0
- package/src/assembly/webgpu-renderer-guards.ts +32 -0
- package/src/assembly/webgpu-renderer-observation.ts +43 -0
- package/src/assembly/webgpu-renderer-recovery-failure.ts +62 -0
- package/src/assembly/webgpu-renderer.ts +675 -614
- package/src/assembly/webgpu-vertex-layouts.ts +233 -87
- package/src/components/__tests__/camera-exposure.contract.unit.test.ts +153 -0
- package/src/components/camera.ts +287 -7
- package/src/components/index.ts +1 -0
- package/src/components/instances.ts +45 -18
- package/src/components/scene-instance.ts +2 -1
- package/src/components/screen-space-reflection.ts +21 -0
- package/src/components/sprite-animation.ts +3 -3
- package/src/components/sprite-instances.ts +1 -1
- package/src/device/gpu-residency.ts +96 -93
- package/src/device/mesh-residency-lifetime.ts +73 -0
- package/src/dynamic-geometry.ts +736 -0
- package/src/environment/background.ts +263 -0
- package/src/errors/gpu-driven.ts +39 -5
- package/src/errors/render.ts +27 -3
- package/src/extract/camera.ts +26 -1
- package/src/extract/gpu-driven.ts +185 -10
- package/src/features/host.ts +237 -19
- package/src/features/noise-texture.ts +91 -0
- package/src/features/plan.ts +553 -24
- package/src/features/prepared-gpu-work.ts +631 -49
- package/src/features/prepared-graphics-store.ts +31 -0
- package/src/features/prepared-graphics.ts +5 -0
- package/src/features/render-graph-compute.ts +41 -8
- package/src/features/render-graph-contribution.ts +141 -3
- package/src/features/render-graph-raster.ts +143 -30
- package/src/features/types.ts +11 -0
- package/src/fullscreen-post-process-pass.ts +3 -0
- package/src/gpu-driven/batch-topology.ts +424 -102
- package/src/gpu-driven/pbr-program.ts +31 -0
- package/src/gpu-driven/prepared-draw.ts +29 -4
- package/src/gpu-driven/production-raster.ts +2267 -694
- package/src/gpu-driven/shadow-views.ts +539 -0
- package/src/gpu-driven/view-gpu.ts +188 -41
- package/src/gpu-scene-schema.ts +52 -11
- package/src/gpu-scene.ts +186 -99
- package/src/gpu-texture-usage.ts +1 -0
- package/src/hdrp-buffers.ts +72 -36
- package/src/ibl/frame-resources.ts +38 -0
- package/src/ibl/skylight-bind-group.ts +5 -4
- package/src/index.ts +125 -1
- package/src/inspection-types.ts +191 -0
- package/src/instances-derived-bounds.ts +258 -34
- package/src/instances.ts +459 -150
- package/src/internal.ts +22 -0
- package/src/lifecycle.ts +2 -0
- package/src/material-row.ts +145 -0
- package/src/materials.ts +44 -8
- package/src/pbr-pipeline.ts +159 -17
- package/src/pipeline/standard-forward-lane.ts +52 -24
- package/src/pipeline/standard-output/__tests__/lut-admission.unit.test.ts +103 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/capability.unit.test.ts +40 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/gpu.contract.unit.test.ts +125 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/graph.contract.unit.test.ts +94 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/oracle.test.ts +108 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/preset.test.ts +26 -0
- package/src/pipeline/standard-output/auto-exposure/capability.ts +38 -0
- package/src/pipeline/standard-output/auto-exposure/gpu.ts +567 -0
- package/src/pipeline/standard-output/auto-exposure/graph.ts +221 -0
- package/src/pipeline/standard-output/auto-exposure/inspection.ts +231 -0
- package/src/pipeline/standard-output/auto-exposure/oracle.ts +291 -0
- package/src/pipeline/standard-output/auto-exposure/preset.ts +28 -0
- package/src/pipeline/standard-output/auto-exposure/state.ts +156 -0
- package/src/pipeline/standard-output/color-transform.ts +124 -0
- package/src/pipeline/standard-output/graph.ts +139 -0
- package/src/pipeline/standard-output/lut-admission.ts +121 -0
- package/src/pipeline/standard-output/lut-gpu.ts +399 -0
- package/src/pipeline/standard-output/lut-state.ts +176 -0
- package/src/pipeline/standard-output/resources.ts +121 -0
- package/src/pipeline/standard-output/types.ts +58 -0
- package/src/pipeline/standard-pipeline.ts +192 -59
- package/src/pipeline/standard-post.ts +186 -27
- package/src/pipeline-builder.ts +16 -6
- package/src/pipeline-spec-types.ts +4 -0
- package/src/pipeline-spec.ts +37 -29
- package/src/points-lines/standard-owner.ts +6 -14
- package/src/prepare/prepared-graphics-resolver.ts +9 -2
- package/src/record/__tests__/material-slot-plan.unit.test.ts +48 -0
- package/src/record/__tests__/mesh-ssbo.unit.test.ts +40 -1
- package/src/record/__tests__/recovery-pipeline.unit.test.ts +2 -29
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +36 -5
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +45 -0
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +5 -0
- package/src/record/dynamic-geometry-consumption.ts +59 -0
- package/src/record/frame-lighting.ts +12 -11
- package/src/record/frame-snapshot.ts +133 -23
- package/src/record/frame-targets.ts +9 -0
- package/src/record/frame.ts +727 -133
- package/src/record/main-pass-geometry.ts +162 -98
- package/src/record/main-pass-material.ts +115 -26
- package/src/record/main-pass-sprite-draws.ts +18 -107
- package/src/record/main-pass.ts +78 -8
- package/src/record/material-uniforms.ts +1 -1
- package/src/record/mesh-ssbo.ts +59 -15
- package/src/record/prepared-material-bindings.ts +234 -0
- package/src/record/recovery-pipeline.ts +59 -136
- package/src/record/render-context.ts +92 -22
- package/src/record/shadow-pass.ts +1231 -209
- package/src/record/skybox-post-pass.ts +14 -3
- package/src/record/typed-frame-graph.ts +1006 -53
- package/src/record/view-ubo.ts +11 -0
- package/src/recovery/render-system-candidate.ts +90 -66
- package/src/recovery/render-system-roots.ts +113 -0
- package/src/recovery/types.ts +77 -0
- package/src/reflection/record-owner.ts +26 -54
- package/src/render-contract.ts +219 -25
- package/src/render-graph-primitives.ts +6 -2
- package/src/render-pipeline.ts +70 -1
- package/src/render-system-extract-tail.ts +409 -160
- package/src/render-system-extract.ts +376 -102
- package/src/render-system-projections.ts +241 -0
- package/src/render-system.ts +692 -791
- package/src/scene/render-scene-types.ts +13 -4
- package/src/scene/render-scene.ts +569 -355
- package/src/scene/shadow-visibility.ts +21 -0
- package/src/ssr/admission.ts +380 -14
- package/src/ssr/compose.ts +144 -0
- package/src/ssr/errors.ts +48 -0
- package/src/ssr/graph.ts +777 -0
- package/src/ssr/history.ts +436 -0
- package/src/ssr/hiz.ts +124 -0
- package/src/ssr/inspection.ts +124 -0
- package/src/ssr/resources.ts +202 -0
- package/src/ssr/temporal.ts +164 -0
- package/src/systems/skin-palette-allocator.ts +495 -148
- package/src/systems/skin-palette-types.ts +17 -0
- package/src/systems/transparent-dispatch.ts +90 -0
- package/src/targets/material-source.ts +34 -0
- package/src/temporal/coverage.ts +1 -1
- package/src/temporal/frame-coordinator.ts +23 -2
- package/src/temporal/gpu.ts +74 -12
- package/src/temporal/history.ts +3 -1
- package/src/temporal/inspection.ts +2 -1
- package/src/temporal/standard-scene-data.ts +3 -1
- package/src/temporal/temporal-view.ts +3 -0
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +204 -139
- package/src/typed-render-graph-primitives.ts +266 -74
- package/src/typed-shadow-passes.ts +122 -12
- package/src/volume/temporal.ts +10 -0
- package/dist/chunk-ADHHVYLW.mjs.map +0 -1
- package/dist/chunk-FJ6P52EE.mjs.map +0 -1
- package/dist/chunk-GE3SDD72.mjs.map +0 -1
- package/dist/chunk-GF523LHF.mjs.map +0 -1
- package/dist/chunk-HKXTW355.mjs.map +0 -1
- package/dist/chunk-JDWARUOI.mjs.map +0 -1
- package/dist/chunk-KM2NOX2I.mjs.map +0 -1
- package/dist/chunk-TMIASV2N.mjs.map +0 -1
- package/dist/chunk-XDP6XE5V.mjs.map +0 -1
- package/dist/chunk-ZZ4YQ474.mjs.map +0 -1
- package/src/__tests__/instances-world-ownership.integration.test.ts +0 -62
- package/src/scene/__tests__/changed-block-summary.candidate.test.ts +0 -36
|
@@ -12,3 +12,20 @@ export interface SkinPaletteSlice {
|
|
|
12
12
|
/** GPU buffer containing the slice's joint matrices. */
|
|
13
13
|
readonly buffer: Buffer;
|
|
14
14
|
}
|
|
15
|
+
|
|
16
|
+
export interface SkinPaletteDirtyRange {
|
|
17
|
+
readonly startJoint: number;
|
|
18
|
+
readonly jointCount: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface SkinPaletteReceipt extends SkinPaletteSlice {
|
|
22
|
+
readonly identity: string;
|
|
23
|
+
readonly generation: number;
|
|
24
|
+
readonly fence: number;
|
|
25
|
+
readonly customDataStart: number;
|
|
26
|
+
readonly storageOrUniform: 'storage' | 'uniform';
|
|
27
|
+
readonly bounds?: Float32Array;
|
|
28
|
+
readonly dirtyRanges: readonly SkinPaletteDirtyRange[];
|
|
29
|
+
readonly uploadBytes: number;
|
|
30
|
+
readonly retiredByteOffset?: number;
|
|
31
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { World } from '@forgeax/engine-ecs';
|
|
2
|
+
import { RenderQueue } from '@forgeax/engine-types';
|
|
3
|
+
import type { CameraSnapshot } from '../render-contract';
|
|
4
|
+
import type { DispatchEntry, RenderableSnapshot } from '../render-system-extract';
|
|
5
|
+
import {
|
|
6
|
+
getTransparentSortConfig,
|
|
7
|
+
TRANSPARENT_SORT_MODE_DISTANCE,
|
|
8
|
+
TRANSPARENT_SORT_MODE_LAYER_Y,
|
|
9
|
+
TRANSPARENT_SORT_MODE_LAYER_YZ,
|
|
10
|
+
TRANSPARENT_SORT_MODE_LAYER_Z,
|
|
11
|
+
} from './transparent-sort-config';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Reorder only the transparent queue while preserving every opaque slot.
|
|
15
|
+
* Equal depth/layer values use material identity as a fold-friendly tie break.
|
|
16
|
+
*/
|
|
17
|
+
export function sortTransparentDispatch(
|
|
18
|
+
dispatch: DispatchEntry[],
|
|
19
|
+
world: World,
|
|
20
|
+
cameras: readonly CameraSnapshot[],
|
|
21
|
+
renderables: readonly RenderableSnapshot[],
|
|
22
|
+
): DispatchEntry[] {
|
|
23
|
+
const cfg = getTransparentSortConfig(world);
|
|
24
|
+
const mode = cfg.mode;
|
|
25
|
+
const transparentSlots: number[] = [];
|
|
26
|
+
for (let i = 0; i < dispatch.length; i++) {
|
|
27
|
+
if (dispatch[i]?.queue === RenderQueue.Transparent) transparentSlots.push(i);
|
|
28
|
+
}
|
|
29
|
+
if (transparentSlots.length <= 1) return dispatch;
|
|
30
|
+
|
|
31
|
+
let sortedSlotOrder: number[];
|
|
32
|
+
if (mode === TRANSPARENT_SORT_MODE_DISTANCE) {
|
|
33
|
+
const camera = cameras[0];
|
|
34
|
+
if (camera === undefined) return dispatch;
|
|
35
|
+
const camPos = camera.position;
|
|
36
|
+
const negDistSq = (entry: DispatchEntry): number => {
|
|
37
|
+
const tx = renderables[entry.renderableIndex]?.transform;
|
|
38
|
+
if (tx === undefined) return 0;
|
|
39
|
+
const w = tx.world;
|
|
40
|
+
const dx = (w[12] ?? 0) - (camPos[0] ?? 0);
|
|
41
|
+
const dy = (w[13] ?? 0) - (camPos[1] ?? 0);
|
|
42
|
+
const dz = (w[14] ?? 0) - (camPos[2] ?? 0);
|
|
43
|
+
return -(dx * dx + dy * dy + dz * dz);
|
|
44
|
+
};
|
|
45
|
+
sortedSlotOrder = transparentSlots.slice().sort((a, b) => {
|
|
46
|
+
const da = negDistSq(dispatch[a] as DispatchEntry);
|
|
47
|
+
const db = negDistSq(dispatch[b] as DispatchEntry);
|
|
48
|
+
if (da < db) return -1;
|
|
49
|
+
if (da > db) return 1;
|
|
50
|
+
return 0;
|
|
51
|
+
});
|
|
52
|
+
} else {
|
|
53
|
+
const sortVal = (entry: DispatchEntry): number => {
|
|
54
|
+
const tx = renderables[entry.renderableIndex]?.transform;
|
|
55
|
+
const w = tx?.world;
|
|
56
|
+
const posY = (w?.[13] ?? 0) as number;
|
|
57
|
+
const posZ = (w?.[14] ?? 0) as number;
|
|
58
|
+
if (mode === TRANSPARENT_SORT_MODE_LAYER_Z) return posZ;
|
|
59
|
+
const mat = renderables[entry.renderableIndex]?.material;
|
|
60
|
+
const pivotAndSize = mat?.paramSnapshot?.pivotAndSize as readonly number[] | undefined;
|
|
61
|
+
const pivotY = (pivotAndSize?.[1] ?? 0.5) as number;
|
|
62
|
+
const wy4 = (w?.[4] ?? 0) as number;
|
|
63
|
+
const wy5 = (w?.[5] ?? 1) as number;
|
|
64
|
+
const wy6 = (w?.[6] ?? 0) as number;
|
|
65
|
+
const sizeY = Math.sqrt(wy4 * wy4 + wy5 * wy5 + wy6 * wy6);
|
|
66
|
+
const footY = posY - pivotY * sizeY;
|
|
67
|
+
if (mode === TRANSPARENT_SORT_MODE_LAYER_Y) return -footY;
|
|
68
|
+
if (mode === TRANSPARENT_SORT_MODE_LAYER_YZ) return footY + cfg.yzAlpha * posZ;
|
|
69
|
+
return posZ;
|
|
70
|
+
};
|
|
71
|
+
sortedSlotOrder = transparentSlots.slice().sort((a, b) => {
|
|
72
|
+
const da = dispatch[a] as DispatchEntry;
|
|
73
|
+
const db = dispatch[b] as DispatchEntry;
|
|
74
|
+
if (da.layer !== db.layer) return da.layer - db.layer;
|
|
75
|
+
const va = sortVal(da);
|
|
76
|
+
const vb = sortVal(db);
|
|
77
|
+
if (va < vb) return -1;
|
|
78
|
+
if (va > vb) return 1;
|
|
79
|
+
return da.materialHandle - db.materialHandle;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const result = dispatch.slice();
|
|
84
|
+
for (let k = 0; k < transparentSlots.length; k++) {
|
|
85
|
+
const targetSlot = transparentSlots[k] as number;
|
|
86
|
+
const sourceSlot = sortedSlotOrder[k] as number;
|
|
87
|
+
result[targetSlot] = dispatch[sourceSlot] as DispatchEntry;
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
@@ -39,6 +39,18 @@ export interface RenderTargetMaterialSourceExpectation {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
const sourceBindings = new WeakMap<object, RenderTargetMaterialSourceBinding>();
|
|
42
|
+
const targetIdentities = new WeakMap<object, number>();
|
|
43
|
+
let nextTargetIdentity = 1;
|
|
44
|
+
|
|
45
|
+
function targetIdentity(target: RenderTarget): number {
|
|
46
|
+
const object = target as object;
|
|
47
|
+
const existing = targetIdentities.get(object);
|
|
48
|
+
if (existing !== undefined) return existing;
|
|
49
|
+
const identity = nextTargetIdentity;
|
|
50
|
+
nextTargetIdentity += 1;
|
|
51
|
+
targetIdentities.set(object, identity);
|
|
52
|
+
return identity;
|
|
53
|
+
}
|
|
42
54
|
|
|
43
55
|
function sourceToken(): RenderTargetTextureSource {
|
|
44
56
|
return Object.freeze({}) as RenderTargetTextureSource;
|
|
@@ -51,6 +63,28 @@ export function resolveRenderTargetMaterialSource(
|
|
|
51
63
|
return sourceBindings.get(source as object);
|
|
52
64
|
}
|
|
53
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Returns the stable renderer-local resource identity used by batch grouping.
|
|
68
|
+
* The opaque source object is intentionally not stringified: target identity,
|
|
69
|
+
* device generation, and view subresource are the producer-owned facts that
|
|
70
|
+
* determine whether two draws may share one material bind group.
|
|
71
|
+
*/
|
|
72
|
+
export function renderTargetMaterialSourceIdentity(
|
|
73
|
+
source: RenderTargetTextureSource,
|
|
74
|
+
): string | undefined {
|
|
75
|
+
const binding = resolveRenderTargetMaterialSource(source);
|
|
76
|
+
if (binding === undefined) return undefined;
|
|
77
|
+
return [
|
|
78
|
+
targetIdentity(binding.target),
|
|
79
|
+
binding.generation,
|
|
80
|
+
binding.shape,
|
|
81
|
+
binding.format,
|
|
82
|
+
binding.view.dimension,
|
|
83
|
+
binding.view.mipLevel,
|
|
84
|
+
binding.view.resolveRequired ? 1 : 0,
|
|
85
|
+
].join(':');
|
|
86
|
+
}
|
|
87
|
+
|
|
54
88
|
function invalid(
|
|
55
89
|
field: string,
|
|
56
90
|
value: unknown,
|
package/src/temporal/coverage.ts
CHANGED
|
@@ -23,7 +23,7 @@ export function createTemporalCoverage(width: number, height: number): TemporalC
|
|
|
23
23
|
if (!Number.isSafeInteger(width) || width <= 0) throw new RangeError('width must be positive.');
|
|
24
24
|
if (!Number.isSafeInteger(height) || height <= 0)
|
|
25
25
|
throw new RangeError('height must be positive.');
|
|
26
|
-
return Object.freeze({ width, height, bytes:
|
|
26
|
+
return Object.freeze({ width, height, bytes: 34 * width * height, fullScreen: true as const });
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export type SceneDataContributorKind = 'exact' | 'reactive';
|
|
@@ -12,6 +12,9 @@ import {
|
|
|
12
12
|
/** The only stages that may publish a temporal frame. */
|
|
13
13
|
export type TemporalFrameStage = 'build' | 'encode' | 'finish' | 'submit';
|
|
14
14
|
|
|
15
|
+
/** Closed list of consumers that share the renderer temporal transaction. */
|
|
16
|
+
export type TemporalFrameConsumerId = 'taa' | 'motion-blur' | 'ssr';
|
|
17
|
+
|
|
15
18
|
export type TemporalFrameErrorCode = 'taa-unavailable' | 'temporal-active' | 'temporal-not-active';
|
|
16
19
|
|
|
17
20
|
export interface TemporalFrameError {
|
|
@@ -24,6 +27,7 @@ export interface TemporalFrameError {
|
|
|
24
27
|
export interface TemporalFrameSnapshot<T = unknown> {
|
|
25
28
|
readonly epoch: number;
|
|
26
29
|
readonly previous: T | undefined;
|
|
30
|
+
readonly consumerIds: readonly TemporalFrameConsumerId[];
|
|
27
31
|
readonly historyAttempt: 'none' | 'active' | 'committed' | 'aborted';
|
|
28
32
|
readonly attempt: 'none' | 'active' | 'committed' | 'aborted';
|
|
29
33
|
readonly lastFailure: TemporalFrameStage | undefined;
|
|
@@ -40,6 +44,8 @@ export interface TemporalFrameBeginInput<T = unknown> {
|
|
|
40
44
|
readonly antialias: 'none' | 'fxaa' | 'msaa' | 'taa';
|
|
41
45
|
/** Enables the shared transaction for a temporal feature without TAA. */
|
|
42
46
|
readonly temporalDemand?: boolean;
|
|
47
|
+
/** Consumers registered on this one renderer-owned frame transaction. */
|
|
48
|
+
readonly consumerIds?: readonly TemporalFrameConsumerId[];
|
|
43
49
|
readonly available?: boolean;
|
|
44
50
|
readonly contributors?: readonly SceneDataContributor[];
|
|
45
51
|
readonly requiredContributorIds?: readonly string[];
|
|
@@ -54,6 +60,7 @@ export interface TemporalFrameCandidate<T = unknown> {
|
|
|
54
60
|
readonly history: { readonly direction: 'a-to-b' | 'b-to-a'; readonly valid: boolean };
|
|
55
61
|
readonly contributors: readonly SceneDataContributor[];
|
|
56
62
|
readonly requiredContributorIds: readonly string[];
|
|
63
|
+
readonly consumerIds: readonly TemporalFrameConsumerId[];
|
|
57
64
|
readonly temporalView?: TemporalView;
|
|
58
65
|
}
|
|
59
66
|
|
|
@@ -116,6 +123,7 @@ export class TemporalFrameCoordinator<T = unknown> {
|
|
|
116
123
|
readonly historyStore: TaaHistoryStore;
|
|
117
124
|
private epoch: number;
|
|
118
125
|
private previous: T | undefined;
|
|
126
|
+
private consumerIds: readonly TemporalFrameConsumerId[] = [];
|
|
119
127
|
private active: TemporalFrameCandidate<T> | undefined;
|
|
120
128
|
private attempt: TemporalFrameSnapshot<T>['attempt'] = 'none';
|
|
121
129
|
private historyAttempt: TemporalFrameSnapshot<T>['historyAttempt'] = 'none';
|
|
@@ -144,7 +152,9 @@ export class TemporalFrameCoordinator<T = unknown> {
|
|
|
144
152
|
}
|
|
145
153
|
|
|
146
154
|
begin(input: TemporalFrameBeginInput<T>): Result<TemporalFrameCandidate<T>, TemporalFrameError> {
|
|
147
|
-
const
|
|
155
|
+
const consumerIds = Object.freeze([...(input.consumerIds ?? [])]);
|
|
156
|
+
const demanded =
|
|
157
|
+
input.antialias === 'taa' || input.temporalDemand === true || consumerIds.length > 0;
|
|
148
158
|
if (!demanded) {
|
|
149
159
|
return ok({
|
|
150
160
|
epoch: this.epoch,
|
|
@@ -153,6 +163,7 @@ export class TemporalFrameCoordinator<T = unknown> {
|
|
|
153
163
|
history: { direction: this.historyDirection, valid: false },
|
|
154
164
|
contributors: Object.freeze([...(input.contributors ?? [])]),
|
|
155
165
|
requiredContributorIds: Object.freeze([...(input.requiredContributorIds ?? [])]),
|
|
166
|
+
consumerIds,
|
|
156
167
|
...(input.temporalView === undefined ? {} : { temporalView: input.temporalView }),
|
|
157
168
|
});
|
|
158
169
|
}
|
|
@@ -176,6 +187,7 @@ export class TemporalFrameCoordinator<T = unknown> {
|
|
|
176
187
|
history: { direction: this.historyDirection, valid: this.previous !== undefined },
|
|
177
188
|
contributors: Object.freeze([...(input.contributors ?? [])]),
|
|
178
189
|
requiredContributorIds: Object.freeze([...(input.requiredContributorIds ?? [])]),
|
|
190
|
+
consumerIds,
|
|
179
191
|
...(input.temporalView === undefined ? {} : { temporalView: input.temporalView }),
|
|
180
192
|
};
|
|
181
193
|
if (input.antialias === 'taa') {
|
|
@@ -201,6 +213,7 @@ export class TemporalFrameCoordinator<T = unknown> {
|
|
|
201
213
|
this.temporalFrameIndex += 1;
|
|
202
214
|
}
|
|
203
215
|
this.historyDirection = candidate.history.direction === 'a-to-b' ? 'b-to-a' : 'a-to-b';
|
|
216
|
+
this.consumerIds = candidate.consumerIds;
|
|
204
217
|
const historyAttempt = this.historyAttempts.get(candidate);
|
|
205
218
|
historyAttempt?.commit({
|
|
206
219
|
deviceGeneration: this.historyStore.inspect().deviceGeneration,
|
|
@@ -239,7 +252,13 @@ export class TemporalFrameCoordinator<T = unknown> {
|
|
|
239
252
|
const started = this.begin(input);
|
|
240
253
|
if (!started.ok) return started;
|
|
241
254
|
const candidate = started.value;
|
|
242
|
-
if (
|
|
255
|
+
if (
|
|
256
|
+
input.antialias !== 'taa' &&
|
|
257
|
+
input.temporalDemand !== true &&
|
|
258
|
+
(input.consumerIds?.length ?? 0) === 0
|
|
259
|
+
) {
|
|
260
|
+
return ok(undefined);
|
|
261
|
+
}
|
|
243
262
|
try {
|
|
244
263
|
const built = phases.build();
|
|
245
264
|
phases.encode(built);
|
|
@@ -262,6 +281,7 @@ export class TemporalFrameCoordinator<T = unknown> {
|
|
|
262
281
|
return {
|
|
263
282
|
epoch: this.epoch,
|
|
264
283
|
previous: this.previous,
|
|
284
|
+
consumerIds: this.consumerIds,
|
|
265
285
|
historyAttempt: this.historyAttempt,
|
|
266
286
|
attempt: this.attempt,
|
|
267
287
|
lastFailure: this.lastFailure,
|
|
@@ -327,6 +347,7 @@ export class TemporalFrameCoordinator<T = unknown> {
|
|
|
327
347
|
missingContributorIds: [],
|
|
328
348
|
omittedMissingContributorCount: 0,
|
|
329
349
|
};
|
|
350
|
+
this.consumerIds = [];
|
|
330
351
|
}
|
|
331
352
|
|
|
332
353
|
private stageFromError(cause: unknown): TemporalFrameStage {
|
package/src/temporal/gpu.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type {
|
|
|
5
5
|
RhiQueue,
|
|
6
6
|
Sampler,
|
|
7
7
|
Texture,
|
|
8
|
+
TextureFormat,
|
|
8
9
|
TextureView,
|
|
9
10
|
} from '@forgeax/engine-rhi';
|
|
10
11
|
import type { DeviceScope } from '../device/device-scope';
|
|
@@ -16,6 +17,12 @@ import {
|
|
|
16
17
|
import { GPU_BUFFER_USAGE_COPY_DST, GPU_BUFFER_USAGE_UNIFORM } from '../gpu-usage';
|
|
17
18
|
import type { RenderFrameState } from '../record/frame-snapshot';
|
|
18
19
|
|
|
20
|
+
export const TEMPORAL_HISTORY_FORMATS = Object.freeze({
|
|
21
|
+
color: 'rgba16float',
|
|
22
|
+
temporal: 'rgba16float',
|
|
23
|
+
stability: 'r8unorm',
|
|
24
|
+
} as const);
|
|
25
|
+
|
|
19
26
|
interface TemporalSurface {
|
|
20
27
|
readonly texture: Texture;
|
|
21
28
|
readonly view: TextureView;
|
|
@@ -32,8 +39,10 @@ export interface TemporalGpuState {
|
|
|
32
39
|
pendingIndex: 0 | 1 | undefined;
|
|
33
40
|
readonly color: [TemporalSurface, TemporalSurface];
|
|
34
41
|
readonly temporal: [TemporalSurface, TemporalSurface];
|
|
42
|
+
readonly stability: [TemporalSurface, TemporalSurface];
|
|
35
43
|
bindGroupLayout: BindGroupLayout | undefined;
|
|
36
44
|
sampler: Sampler | undefined;
|
|
45
|
+
temporalSampler: Sampler | undefined;
|
|
37
46
|
paramsBuffer: Buffer | undefined;
|
|
38
47
|
committed: boolean;
|
|
39
48
|
}
|
|
@@ -44,11 +53,12 @@ function createSurface(
|
|
|
44
53
|
label: string,
|
|
45
54
|
width: number,
|
|
46
55
|
height: number,
|
|
56
|
+
format: TextureFormat = TEMPORAL_HISTORY_FORMATS.color,
|
|
47
57
|
): TemporalSurface {
|
|
48
58
|
const texture = device.createTexture({
|
|
49
59
|
label,
|
|
50
60
|
size: { width, height, depthOrArrayLayers: 1 },
|
|
51
|
-
format
|
|
61
|
+
format,
|
|
52
62
|
textureBindingViewDimension: undefined,
|
|
53
63
|
usage:
|
|
54
64
|
GPU_TEXTURE_USAGE_COPY_SRC |
|
|
@@ -93,11 +103,44 @@ function createState(
|
|
|
93
103
|
createSurface(device, childScope, 'taa-history-color-b', width, height),
|
|
94
104
|
],
|
|
95
105
|
temporal: [
|
|
96
|
-
createSurface(
|
|
97
|
-
|
|
106
|
+
createSurface(
|
|
107
|
+
device,
|
|
108
|
+
childScope,
|
|
109
|
+
'taa-history-temporal-a',
|
|
110
|
+
width,
|
|
111
|
+
height,
|
|
112
|
+
TEMPORAL_HISTORY_FORMATS.temporal,
|
|
113
|
+
),
|
|
114
|
+
createSurface(
|
|
115
|
+
device,
|
|
116
|
+
childScope,
|
|
117
|
+
'taa-history-temporal-b',
|
|
118
|
+
width,
|
|
119
|
+
height,
|
|
120
|
+
TEMPORAL_HISTORY_FORMATS.temporal,
|
|
121
|
+
),
|
|
122
|
+
],
|
|
123
|
+
stability: [
|
|
124
|
+
createSurface(
|
|
125
|
+
device,
|
|
126
|
+
childScope,
|
|
127
|
+
'taa-history-stability-a',
|
|
128
|
+
width,
|
|
129
|
+
height,
|
|
130
|
+
TEMPORAL_HISTORY_FORMATS.stability,
|
|
131
|
+
),
|
|
132
|
+
createSurface(
|
|
133
|
+
device,
|
|
134
|
+
childScope,
|
|
135
|
+
'taa-history-stability-b',
|
|
136
|
+
width,
|
|
137
|
+
height,
|
|
138
|
+
TEMPORAL_HISTORY_FORMATS.stability,
|
|
139
|
+
),
|
|
98
140
|
],
|
|
99
141
|
bindGroupLayout: undefined,
|
|
100
142
|
sampler: undefined,
|
|
143
|
+
temporalSampler: undefined,
|
|
101
144
|
paramsBuffer: undefined,
|
|
102
145
|
committed: false,
|
|
103
146
|
};
|
|
@@ -111,7 +154,7 @@ export function getTemporalParamsBuffer(state: TemporalGpuState): Buffer {
|
|
|
111
154
|
if (state.paramsBuffer !== undefined) return state.paramsBuffer;
|
|
112
155
|
const created = state.device.createBuffer({
|
|
113
156
|
label: 'taa-resolve-params',
|
|
114
|
-
size:
|
|
157
|
+
size: 32,
|
|
115
158
|
usage: GPU_BUFFER_USAGE_UNIFORM | GPU_BUFFER_USAGE_COPY_DST,
|
|
116
159
|
mappedAtCreation: false,
|
|
117
160
|
});
|
|
@@ -122,7 +165,7 @@ export function getTemporalParamsBuffer(state: TemporalGpuState): Buffer {
|
|
|
122
165
|
state.childScope._adopt('buffer', created.value, (value) => {
|
|
123
166
|
state.device.destroyBuffer(value);
|
|
124
167
|
});
|
|
125
|
-
const written = state.device.queue.writeBuffer(created.value, 0, new Uint8Array(
|
|
168
|
+
const written = state.device.queue.writeBuffer(created.value, 0, new Uint8Array(32));
|
|
126
169
|
if (!written.ok) {
|
|
127
170
|
if (!state.committed) state.childScope.abandon();
|
|
128
171
|
throw written.error;
|
|
@@ -164,11 +207,13 @@ export function getTemporalGpuState(
|
|
|
164
207
|
export function getTemporalBindGroupResources(state: TemporalGpuState): {
|
|
165
208
|
readonly layout: BindGroupLayout;
|
|
166
209
|
readonly sampler: Sampler | null;
|
|
210
|
+
readonly temporalSampler: Sampler | null;
|
|
167
211
|
} {
|
|
168
212
|
if (state.bindGroupLayout !== undefined) {
|
|
169
213
|
return {
|
|
170
214
|
layout: state.bindGroupLayout,
|
|
171
215
|
sampler: state.sampler ?? null,
|
|
216
|
+
temporalSampler: state.temporalSampler ?? null,
|
|
172
217
|
};
|
|
173
218
|
}
|
|
174
219
|
try {
|
|
@@ -178,15 +223,15 @@ export function getTemporalBindGroupResources(state: TemporalGpuState): {
|
|
|
178
223
|
{
|
|
179
224
|
binding: 0,
|
|
180
225
|
visibility: 2,
|
|
181
|
-
texture: { sampleType: '
|
|
226
|
+
texture: { sampleType: 'float', viewDimension: '2d' },
|
|
182
227
|
},
|
|
183
|
-
{ binding: 1, visibility: 2, sampler: { type: '
|
|
228
|
+
{ binding: 1, visibility: 2, sampler: { type: 'filtering' } },
|
|
184
229
|
{
|
|
185
230
|
binding: 2,
|
|
186
231
|
visibility: 2,
|
|
187
|
-
texture: { sampleType: '
|
|
232
|
+
texture: { sampleType: 'float', viewDimension: '2d' },
|
|
188
233
|
},
|
|
189
|
-
{ binding: 3, visibility: 2, sampler: { type: '
|
|
234
|
+
{ binding: 3, visibility: 2, sampler: { type: 'filtering' } },
|
|
190
235
|
{
|
|
191
236
|
binding: 4,
|
|
192
237
|
visibility: 2,
|
|
@@ -200,6 +245,12 @@ export function getTemporalBindGroupResources(state: TemporalGpuState): {
|
|
|
200
245
|
},
|
|
201
246
|
{ binding: 7, visibility: 2, sampler: { type: 'non-filtering' } },
|
|
202
247
|
{ binding: 8, visibility: 2, buffer: { type: 'uniform' } },
|
|
248
|
+
{ binding: 9, visibility: 2, texture: { sampleType: 'float', viewDimension: '2d' } },
|
|
249
|
+
{
|
|
250
|
+
binding: 10,
|
|
251
|
+
visibility: 2,
|
|
252
|
+
texture: { sampleType: 'unfilterable-float', viewDimension: '2d' },
|
|
253
|
+
},
|
|
203
254
|
],
|
|
204
255
|
});
|
|
205
256
|
if (!layout.ok) throw layout.error;
|
|
@@ -207,19 +258,29 @@ export function getTemporalBindGroupResources(state: TemporalGpuState): {
|
|
|
207
258
|
const sampler = state.device.createSampler({
|
|
208
259
|
addressModeU: 'clamp-to-edge',
|
|
209
260
|
addressModeV: 'clamp-to-edge',
|
|
210
|
-
magFilter: '
|
|
211
|
-
minFilter: '
|
|
261
|
+
magFilter: 'linear',
|
|
262
|
+
minFilter: 'linear',
|
|
212
263
|
});
|
|
213
264
|
if (!sampler.ok) throw sampler.error;
|
|
214
265
|
state.childScope._adopt('binding', sampler.value, () => undefined);
|
|
266
|
+
const temporalSampler = state.device.createSampler({
|
|
267
|
+
addressModeU: 'clamp-to-edge',
|
|
268
|
+
addressModeV: 'clamp-to-edge',
|
|
269
|
+
magFilter: 'nearest',
|
|
270
|
+
minFilter: 'nearest',
|
|
271
|
+
});
|
|
272
|
+
if (!temporalSampler.ok) throw temporalSampler.error;
|
|
273
|
+
state.childScope._adopt('binding', temporalSampler.value, () => undefined);
|
|
215
274
|
state.bindGroupLayout = layout.value;
|
|
216
275
|
state.sampler = sampler.value;
|
|
217
|
-
|
|
276
|
+
state.temporalSampler = temporalSampler.value;
|
|
277
|
+
return { layout: layout.value, sampler: sampler.value, temporalSampler: temporalSampler.value };
|
|
218
278
|
} catch (cause) {
|
|
219
279
|
if (!state.committed) {
|
|
220
280
|
state.childScope.abandon();
|
|
221
281
|
state.bindGroupLayout = undefined;
|
|
222
282
|
state.sampler = undefined;
|
|
283
|
+
state.temporalSampler = undefined;
|
|
223
284
|
}
|
|
224
285
|
throw cause;
|
|
225
286
|
}
|
|
@@ -261,6 +322,7 @@ export function retireTemporalGpuState(state: TemporalGpuState): void {
|
|
|
261
322
|
state.committed = false;
|
|
262
323
|
state.bindGroupLayout = undefined;
|
|
263
324
|
state.sampler = undefined;
|
|
325
|
+
state.temporalSampler = undefined;
|
|
264
326
|
state.paramsBuffer = undefined;
|
|
265
327
|
}
|
|
266
328
|
|
package/src/temporal/history.ts
CHANGED
|
@@ -41,7 +41,7 @@ export class TemporalHistory {
|
|
|
41
41
|
bytes: 0,
|
|
42
42
|
fullScreen: true as const,
|
|
43
43
|
});
|
|
44
|
-
this.historyCount = taa ?
|
|
44
|
+
this.historyCount = taa ? 6 : 0;
|
|
45
45
|
this.historyBytes = this.coverage.bytes;
|
|
46
46
|
if (!taa) {
|
|
47
47
|
this.resources = [];
|
|
@@ -54,6 +54,8 @@ export class TemporalHistory {
|
|
|
54
54
|
child.ref('texture', Object.freeze({ slot: 'color-b' })),
|
|
55
55
|
child.ref('texture', Object.freeze({ slot: 'temporal-a' })),
|
|
56
56
|
child.ref('texture', Object.freeze({ slot: 'temporal-b' })),
|
|
57
|
+
child.ref('texture', Object.freeze({ slot: 'stability-a' })),
|
|
58
|
+
child.ref('texture', Object.freeze({ slot: 'stability-b' })),
|
|
57
59
|
]);
|
|
58
60
|
}
|
|
59
61
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createTemporalCoverage } from './coverage';
|
|
1
2
|
import type { TemporalGpuState } from './gpu';
|
|
2
3
|
import type { TemporalHistory } from './history';
|
|
3
4
|
import type { TemporalView } from './view';
|
|
@@ -28,7 +29,7 @@ export interface TemporalInspection {
|
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
function gpuBytes(state: TemporalGpuState | undefined): number {
|
|
31
|
-
return state === undefined ? 0 : state.width
|
|
32
|
+
return state === undefined ? 0 : createTemporalCoverage(state.width, state.height).bytes;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
function gpuResources(state: TemporalGpuState | undefined): number {
|
|
@@ -11,10 +11,11 @@ import { addTypedFullscreenPass, addTypedScenePass } from '../typed-render-graph
|
|
|
11
11
|
export interface StandardTemporalDemandInput {
|
|
12
12
|
readonly taa: boolean;
|
|
13
13
|
readonly motionBlur: boolean;
|
|
14
|
+
readonly ssr?: boolean;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
export interface StandardTemporalDemand {
|
|
17
|
-
readonly consumerIds: readonly ('taa' | 'motion-blur')[];
|
|
18
|
+
readonly consumerIds: readonly ('taa' | 'motion-blur' | 'ssr')[];
|
|
18
19
|
readonly targetCount: 0 | 1;
|
|
19
20
|
readonly producerPassCount: 0 | 1;
|
|
20
21
|
readonly historyCount: 0 | 1;
|
|
@@ -35,6 +36,7 @@ export function aggregateTemporalDemand(
|
|
|
35
36
|
const consumerIds = [
|
|
36
37
|
...(input.taa ? (['taa'] as const) : []),
|
|
37
38
|
...(input.motionBlur ? (['motion-blur'] as const) : []),
|
|
39
|
+
...(input.ssr ? (['ssr'] as const) : []),
|
|
38
40
|
];
|
|
39
41
|
const requested = consumerIds.length > 0;
|
|
40
42
|
return Object.freeze({
|
|
@@ -4,6 +4,9 @@ import type { CameraSnapshot } from '../render-contract';
|
|
|
4
4
|
|
|
5
5
|
export const TEMPORAL_JITTER_SAMPLE_COUNT = 8;
|
|
6
6
|
|
|
7
|
+
/** Current temporal view owns fixed surface dimensions; dynamic TAAU is deferred. */
|
|
8
|
+
export const TEMPORAL_TAAU_DEPENDENCY_STATUS = 'dependency-deferred' as const;
|
|
9
|
+
|
|
7
10
|
export type TemporalViewResetReason =
|
|
8
11
|
| 'first-frame'
|
|
9
12
|
| 'camera-switch'
|