@forgeax/engine-render 0.1.28 → 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 +627 -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 +21 -0
- package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
- 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 +8 -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 +2 -2
- package/dist/{chunk-JAASCMXA.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-J52NMQKR.mjs → chunk-BQVQOQJH.mjs} +1086 -838
- package/dist/chunk-BQVQOQJH.mjs.map +1 -0
- package/dist/{chunk-IQMKJLNU.mjs → chunk-BTWH7BP4.mjs} +386 -17
- package/dist/chunk-BTWH7BP4.mjs.map +1 -0
- package/dist/{chunk-MBU4ZVE7.mjs → chunk-FUODTTIA.mjs} +3921 -671
- package/dist/chunk-FUODTTIA.mjs.map +1 -0
- package/dist/{chunk-MYJ5RPJO.mjs → chunk-JQTSEI3Z.mjs} +3 -3
- package/dist/{chunk-MYJ5RPJO.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-J6KACNOH.mjs → chunk-NRNXBLIJ.mjs} +577 -7
- package/dist/chunk-NRNXBLIJ.mjs.map +1 -0
- package/dist/{chunk-RBDBZ5R7.mjs → chunk-PA5DRJNI.mjs} +2 -2
- package/dist/chunk-PA5DRJNI.mjs.map +1 -0
- package/dist/{chunk-VSL23LZE.mjs → chunk-S4DNKQYQ.mjs} +1117 -445
- 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 +12888 -7025
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/gpu-residency.d.ts +1 -12
- package/dist/device/gpu-residency.d.ts.map +1 -1
- 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 +18 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +8 -8
- 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 +117 -9
- 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 +74 -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 +173 -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 +27 -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__/factory-contract.integration.test.ts +67 -8
- 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__/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 +60 -0
- 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 +48 -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 +10 -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 +12 -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 +666 -652
- 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 +2 -2
- package/src/components/sprite-instances.ts +1 -1
- package/src/device/gpu-residency.ts +34 -31
- 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 +109 -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 +725 -133
- package/src/record/main-pass-geometry.ts +149 -94
- package/src/record/main-pass-material.ts +115 -26
- package/src/record/main-pass-sprite-draws.ts +16 -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 +90 -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 +1004 -44
- 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 +195 -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 +681 -822
- 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-GE3SDD72.mjs.map +0 -1
- package/dist/chunk-GF523LHF.mjs.map +0 -1
- package/dist/chunk-IQMKJLNU.mjs.map +0 -1
- package/dist/chunk-J52NMQKR.mjs.map +0 -1
- package/dist/chunk-J6KACNOH.mjs.map +0 -1
- package/dist/chunk-JAASCMXA.mjs.map +0 -1
- package/dist/chunk-MBU4ZVE7.mjs.map +0 -1
- package/dist/chunk-RBDBZ5R7.mjs.map +0 -1
- package/dist/chunk-VSL23LZE.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
|
@@ -130,12 +130,10 @@ export class ReflectionProbeRecordOwner {
|
|
|
130
130
|
private outputFormat: TextureFormat;
|
|
131
131
|
private fallbackFormatAvailable: boolean;
|
|
132
132
|
private nextFallbackTicket = 0;
|
|
133
|
-
//
|
|
134
|
-
//
|
|
135
|
-
//
|
|
136
|
-
|
|
137
|
-
private pendingFallback = new Map<number, PendingFallback>();
|
|
138
|
-
private latestFallbackTickets = new Map<string, number>();
|
|
133
|
+
// Submitted frames own their immutable candidates until completion. Keep
|
|
134
|
+
// only the current projection here: preparing a source-identical frame
|
|
135
|
+
// must not starve an earlier asynchronous readback of publication.
|
|
136
|
+
private latestFallbackTickets = new Map<string, PendingFallback>();
|
|
139
137
|
private fallbackRetiredFrames = new Map<string, number>();
|
|
140
138
|
private fallbackCommittedFrames = new Map<string, number>();
|
|
141
139
|
private fallbackGenerations = new Map<
|
|
@@ -283,14 +281,13 @@ export class ReflectionProbeRecordOwner {
|
|
|
283
281
|
}
|
|
284
282
|
|
|
285
283
|
private retireFallbackState(frameId: number): void {
|
|
286
|
-
for (const pending of this.
|
|
284
|
+
for (const pending of this.latestFallbackTickets.values()) {
|
|
287
285
|
const key = pending.projection.renderableKey;
|
|
288
286
|
if (key !== undefined) this.fallbackRetiredFrames.set(key, frameId);
|
|
289
287
|
}
|
|
290
288
|
for (const key of this.fallbackReceipts.keys()) {
|
|
291
289
|
this.fallbackRetiredFrames.set(key, frameId);
|
|
292
290
|
}
|
|
293
|
-
this.pendingFallback.clear();
|
|
294
291
|
this.latestFallbackTickets.clear();
|
|
295
292
|
this.fallbackReceipts.clear();
|
|
296
293
|
this.fallbackSignatures.clear();
|
|
@@ -561,7 +558,6 @@ export class ReflectionProbeRecordOwner {
|
|
|
561
558
|
// producer's second output, so the graph intentionally omits the MRT.
|
|
562
559
|
// Retire only this frame's candidate tickets; keep any previously
|
|
563
560
|
// committed LKG receipt without manufacturing a readback failure.
|
|
564
|
-
this.discardFallbackTickets(fallbackTickets);
|
|
565
561
|
return;
|
|
566
562
|
}
|
|
567
563
|
let completionFailure: ReflectionFallbackFailureInput | undefined;
|
|
@@ -650,6 +646,13 @@ export class ReflectionProbeRecordOwner {
|
|
|
650
646
|
continue;
|
|
651
647
|
}
|
|
652
648
|
const signature = reflectionFallbackProjectionSignature(projection.value);
|
|
649
|
+
const previousCandidate = this.latestFallbackTickets.get(renderableKey);
|
|
650
|
+
if (
|
|
651
|
+
previousCandidate !== undefined &&
|
|
652
|
+
reflectionFallbackProjectionSignature(previousCandidate.projection) !== signature
|
|
653
|
+
) {
|
|
654
|
+
this.fallbackRetiredFrames.set(renderableKey, frameId);
|
|
655
|
+
}
|
|
653
656
|
const previousSignature = this.fallbackSignatures.get(renderableKey);
|
|
654
657
|
if (previousSignature !== undefined && previousSignature !== signature) {
|
|
655
658
|
// A changed source, coverage, extent, or BRDF is not a compatible LKG.
|
|
@@ -668,11 +671,8 @@ export class ReflectionProbeRecordOwner {
|
|
|
668
671
|
deviceGeneration: this.internals.deviceScope.generation,
|
|
669
672
|
projection: projection.value,
|
|
670
673
|
};
|
|
671
|
-
const previousTicket = this.latestFallbackTickets.get(renderableKey);
|
|
672
|
-
if (previousTicket !== undefined) this.pendingFallback.delete(previousTicket);
|
|
673
674
|
tickets.set(renderableKey, pending);
|
|
674
|
-
this.
|
|
675
|
-
this.latestFallbackTickets.set(renderableKey, pending.ticket);
|
|
675
|
+
this.latestFallbackTickets.set(renderableKey, pending);
|
|
676
676
|
}
|
|
677
677
|
// Retire rows that disappeared from this frame's main-pass selection.
|
|
678
678
|
// Keeping them would make a detached inspection row outlive its source.
|
|
@@ -688,23 +688,12 @@ export class ReflectionProbeRecordOwner {
|
|
|
688
688
|
for (const renderableKey of this.fallbackGenerations.keys()) {
|
|
689
689
|
if (!tickets.has(renderableKey)) this.fallbackGenerations.delete(renderableKey);
|
|
690
690
|
}
|
|
691
|
-
//
|
|
692
|
-
//
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
if (
|
|
698
|
-
key !== undefined &&
|
|
699
|
-
pending.frameId < frameId &&
|
|
700
|
-
(current === undefined ||
|
|
701
|
-
current.projection.source === 'neutral' ||
|
|
702
|
-
reflectionFallbackProjectionSignature(current.projection) !==
|
|
703
|
-
reflectionFallbackProjectionSignature(pending.projection))
|
|
704
|
-
) {
|
|
705
|
-
this.pendingFallback.delete(ticket);
|
|
706
|
-
if (current === undefined) this.fallbackRetiredFrames.set(key, frameId);
|
|
707
|
-
}
|
|
691
|
+
// Retire even uncommitted rows, so disappear/reappear cannot revive an
|
|
692
|
+
// old completion. Storage stays bounded by current renderables.
|
|
693
|
+
for (const key of this.latestFallbackTickets.keys()) {
|
|
694
|
+
if (tickets.has(key)) continue;
|
|
695
|
+
this.latestFallbackTickets.delete(key);
|
|
696
|
+
this.fallbackRetiredFrames.set(key, frameId);
|
|
708
697
|
}
|
|
709
698
|
if (tickets.size === 0 && facts.length === 0) {
|
|
710
699
|
const neutralKey = '__frame__';
|
|
@@ -723,11 +712,8 @@ export class ReflectionProbeRecordOwner {
|
|
|
723
712
|
deviceGeneration: this.internals.deviceScope.generation,
|
|
724
713
|
projection: projection.value,
|
|
725
714
|
};
|
|
726
|
-
const previousTicket = this.latestFallbackTickets.get(neutralKey);
|
|
727
|
-
if (previousTicket !== undefined) this.pendingFallback.delete(previousTicket);
|
|
728
715
|
tickets.set(neutralKey, pending);
|
|
729
|
-
this.
|
|
730
|
-
this.latestFallbackTickets.set(neutralKey, pending.ticket);
|
|
716
|
+
this.latestFallbackTickets.set(neutralKey, pending);
|
|
731
717
|
}
|
|
732
718
|
}
|
|
733
719
|
this.selectFallbackReceiptKey(tickets, skylight !== undefined);
|
|
@@ -778,19 +764,13 @@ export class ReflectionProbeRecordOwner {
|
|
|
778
764
|
this.fallbackReceiptKey = firstKey;
|
|
779
765
|
}
|
|
780
766
|
|
|
781
|
-
private discardFallbackTickets(fallbackTickets: ReadonlyMap<string, PendingFallback>): void {
|
|
782
|
-
for (const pending of fallbackTickets.values()) {
|
|
783
|
-
this.pendingFallback.delete(pending.ticket);
|
|
784
|
-
}
|
|
785
|
-
}
|
|
786
|
-
|
|
787
767
|
/** Commit exact-zero neutral rows even when a non-neutral MRT readback fails. */
|
|
788
768
|
private commitNeutralFallbacks(fallbackTickets: ReadonlyMap<string, PendingFallback>): number {
|
|
789
769
|
let committed = 0;
|
|
790
770
|
for (const [renderableKey, pending] of fallbackTickets) {
|
|
791
771
|
if (
|
|
792
772
|
pending.projection.source === 'neutral' &&
|
|
793
|
-
this.latestFallbackTickets.get(renderableKey) === pending
|
|
773
|
+
this.latestFallbackTickets.get(renderableKey) === pending &&
|
|
794
774
|
pending.deviceGeneration === this.internals.deviceScope.generation
|
|
795
775
|
) {
|
|
796
776
|
this.commitFallbackProjection(renderableKey, pending, 'neutral');
|
|
@@ -839,7 +819,7 @@ export class ReflectionProbeRecordOwner {
|
|
|
839
819
|
/** Retain only a source-identical committed row after candidate failure. */
|
|
840
820
|
private preserveFallbackLkg(fallbackTickets: ReadonlyMap<string, PendingFallback>): void {
|
|
841
821
|
for (const [renderableKey, pending] of fallbackTickets) {
|
|
842
|
-
if (this.latestFallbackTickets.get(renderableKey) !== pending
|
|
822
|
+
if (this.latestFallbackTickets.get(renderableKey) !== pending) continue;
|
|
843
823
|
const previous = this.fallbackReceipts.get(renderableKey);
|
|
844
824
|
const signature = reflectionFallbackProjectionSignature(pending.projection);
|
|
845
825
|
const compatible =
|
|
@@ -887,7 +867,6 @@ export class ReflectionProbeRecordOwner {
|
|
|
887
867
|
// fallback attachment probe. The prepare phase already published the
|
|
888
868
|
// structured capability failure and retired all current rows.
|
|
889
869
|
if (!this.fallbackFormatAvailable) {
|
|
890
|
-
this.discardFallbackTickets(fallbackTickets);
|
|
891
870
|
return;
|
|
892
871
|
}
|
|
893
872
|
// A graph attachment descriptor is not a producer receipt. Until the
|
|
@@ -906,7 +885,6 @@ export class ReflectionProbeRecordOwner {
|
|
|
906
885
|
);
|
|
907
886
|
this.preserveFallbackLkg(fallbackTickets);
|
|
908
887
|
}
|
|
909
|
-
this.discardFallbackTickets(fallbackTickets);
|
|
910
888
|
return;
|
|
911
889
|
}
|
|
912
890
|
if (fallbackOutput?.readback === undefined) {
|
|
@@ -930,7 +908,6 @@ export class ReflectionProbeRecordOwner {
|
|
|
930
908
|
});
|
|
931
909
|
}
|
|
932
910
|
this.preserveFallbackLkg(nonNeutral);
|
|
933
|
-
this.discardFallbackTickets(fallbackTickets);
|
|
934
911
|
return;
|
|
935
912
|
}
|
|
936
913
|
let readback: {
|
|
@@ -954,7 +931,6 @@ export class ReflectionProbeRecordOwner {
|
|
|
954
931
|
[...fallbackTickets].filter(([, pending]) => pending.projection.source !== 'neutral'),
|
|
955
932
|
),
|
|
956
933
|
);
|
|
957
|
-
this.discardFallbackTickets(fallbackTickets);
|
|
958
934
|
return;
|
|
959
935
|
}
|
|
960
936
|
if (
|
|
@@ -979,25 +955,23 @@ export class ReflectionProbeRecordOwner {
|
|
|
979
955
|
[...fallbackTickets].filter(([, pending]) => pending.projection.source !== 'neutral'),
|
|
980
956
|
),
|
|
981
957
|
);
|
|
982
|
-
this.discardFallbackTickets(fallbackTickets);
|
|
983
958
|
return;
|
|
984
959
|
}
|
|
985
960
|
const eligible: Array<[string, PendingFallback]> = [];
|
|
986
961
|
let staleCount = 0;
|
|
987
962
|
for (const [renderableKey, pending] of fallbackTickets) {
|
|
988
|
-
const staged = this.pendingFallback.get(pending.ticket);
|
|
989
963
|
const latest = this.latestFallbackTickets.get(renderableKey);
|
|
990
964
|
const retiredAt = this.fallbackRetiredFrames.get(renderableKey);
|
|
991
965
|
const committedFrame = this.fallbackCommittedFrames.get(renderableKey);
|
|
992
966
|
if (
|
|
993
|
-
|
|
994
|
-
latest !==
|
|
967
|
+
latest === undefined ||
|
|
968
|
+
reflectionFallbackProjectionSignature(latest.projection) !==
|
|
969
|
+
reflectionFallbackProjectionSignature(pending.projection) ||
|
|
995
970
|
pending.frameId !== fallbackOutput.frameId ||
|
|
996
971
|
pending.deviceGeneration !== this.internals.deviceScope.generation ||
|
|
997
972
|
(retiredAt !== undefined && pending.frameId < retiredAt) ||
|
|
998
973
|
(committedFrame !== undefined && pending.frameId <= committedFrame)
|
|
999
974
|
) {
|
|
1000
|
-
this.pendingFallback.delete(pending.ticket);
|
|
1001
975
|
staleCount += 1;
|
|
1002
976
|
continue;
|
|
1003
977
|
}
|
|
@@ -1009,7 +983,7 @@ export class ReflectionProbeRecordOwner {
|
|
|
1009
983
|
stage: 'completion',
|
|
1010
984
|
code: 'reflection-fallback-stale-ticket',
|
|
1011
985
|
expected:
|
|
1012
|
-
'the fallback
|
|
986
|
+
'the completed fallback to match the current projection and device without rolling back a committed frame',
|
|
1013
987
|
detail: { staleCount },
|
|
1014
988
|
});
|
|
1015
989
|
}
|
|
@@ -1042,7 +1016,6 @@ export class ReflectionProbeRecordOwner {
|
|
|
1042
1016
|
});
|
|
1043
1017
|
}
|
|
1044
1018
|
for (const [renderableKey, pending] of eligible) {
|
|
1045
|
-
this.pendingFallback.delete(pending.ticket);
|
|
1046
1019
|
this.commitFallbackProjection(
|
|
1047
1020
|
renderableKey,
|
|
1048
1021
|
pending,
|
|
@@ -1058,7 +1031,6 @@ export class ReflectionProbeRecordOwner {
|
|
|
1058
1031
|
this.destroyProbeResource(resource);
|
|
1059
1032
|
}
|
|
1060
1033
|
this.resources.clear();
|
|
1061
|
-
this.pendingFallback.clear();
|
|
1062
1034
|
this.latestFallbackTickets.clear();
|
|
1063
1035
|
this.fallbackRetiredFrames.clear();
|
|
1064
1036
|
this.fallbackCommittedFrames.clear();
|
package/src/render-contract.ts
CHANGED
|
@@ -24,8 +24,10 @@ import type {
|
|
|
24
24
|
import type { SkinError } from '@forgeax/engine-skinning';
|
|
25
25
|
import type { ImageError } from '@forgeax/engine-types';
|
|
26
26
|
import type { RhiBackendInstrumentation } from './assembly/backend-contract';
|
|
27
|
-
import type { Antialias, BloomEnabled, Tonemap } from './components/camera';
|
|
27
|
+
import type { Antialias, BloomEnabled, CameraExposure, Tonemap } from './components/camera';
|
|
28
|
+
import type { ScreenSpaceReflectionData } from './components/screen-space-reflection';
|
|
28
29
|
import type { EnvironmentInspection } from './environment/inspection';
|
|
30
|
+
import type { GpuDrivenPreparationError } from './errors/gpu-driven';
|
|
29
31
|
import type { RecoveryOutcome, RecoveryPhase } from './errors/recover';
|
|
30
32
|
import type { RenderError } from './errors/render';
|
|
31
33
|
import type { RenderFeature, RenderFeatureDiagnostics } from './features/types';
|
|
@@ -37,12 +39,16 @@ import type {
|
|
|
37
39
|
LodOcclusionInspection,
|
|
38
40
|
MotionBlurInspection,
|
|
39
41
|
ReflectionProbeInspection,
|
|
42
|
+
RenderFeatureGraphInspection,
|
|
43
|
+
RenderFeatureHostInspection,
|
|
40
44
|
RenderSceneInspection,
|
|
41
45
|
SsrDependenciesInspection,
|
|
46
|
+
SsrSpatialInspection,
|
|
42
47
|
TemporalTargetInspection,
|
|
43
48
|
TransmissionInspection,
|
|
44
49
|
} from './inspection-types';
|
|
45
|
-
import type { InstanceCollectionInspection } from './instances';
|
|
50
|
+
import type { InstanceCollectionInspection, InstanceCollectionStore } from './instances';
|
|
51
|
+
import type { RenderSceneBounds } from './scene/render-scene-types';
|
|
46
52
|
import type { SsrAdmissionIdentity } from './ssr/identity';
|
|
47
53
|
import type {
|
|
48
54
|
RenderTarget,
|
|
@@ -71,6 +77,8 @@ import type {
|
|
|
71
77
|
MeshMaterialBindingObservation,
|
|
72
78
|
} from './mesh-material-bindings';
|
|
73
79
|
import type { StandardLightingInspection } from './pipeline/standard-lighting/inspection';
|
|
80
|
+
import type { AutoExposureInspection } from './pipeline/standard-output/auto-exposure/inspection';
|
|
81
|
+
import type { StandardLutInspection } from './pipeline/standard-output/lut-state';
|
|
74
82
|
import type { StandardProfile } from './pipeline/standard-profile';
|
|
75
83
|
import type { PointShadowInspection } from './point-shadow-inspection';
|
|
76
84
|
import type { PostProcessError } from './post-process-errors';
|
|
@@ -105,6 +113,15 @@ export type RenderResult<T, E> =
|
|
|
105
113
|
/** The only World data boundary accepted by the M6 renderer contract. */
|
|
106
114
|
export type RenderWorldLease = RenderReadLease;
|
|
107
115
|
|
|
116
|
+
/** Camera-owned color/exposure facts projected once at the frame boundary. */
|
|
117
|
+
export interface CameraOutputSnapshot {
|
|
118
|
+
readonly exposure: CameraExposure;
|
|
119
|
+
readonly temperature: number;
|
|
120
|
+
readonly tint: number;
|
|
121
|
+
readonly colorLut: number;
|
|
122
|
+
readonly colorLutStrength: number;
|
|
123
|
+
}
|
|
124
|
+
|
|
108
125
|
/**
|
|
109
126
|
* Camera facts shared by extract, record, and scene owners.
|
|
110
127
|
*
|
|
@@ -138,12 +155,16 @@ export interface CameraSnapshot {
|
|
|
138
155
|
readonly tonemap: Tonemap;
|
|
139
156
|
readonly exposure: number;
|
|
140
157
|
readonly whitePoint: number;
|
|
158
|
+
/** Camera schema output projection consumed by Standard prepare/inspection. */
|
|
159
|
+
readonly output?: CameraOutputSnapshot;
|
|
141
160
|
readonly antialias: Antialias;
|
|
142
161
|
readonly bloom: BloomEnabled;
|
|
143
162
|
readonly bloomThreshold: number;
|
|
144
163
|
readonly bloomIntensity: number;
|
|
145
164
|
readonly bloomBlurRadius: number;
|
|
146
165
|
readonly clearColor: readonly [number, number, number, number];
|
|
166
|
+
/** Optional active-camera SSR authoring fact, copied from the ECS schema. */
|
|
167
|
+
readonly screenSpaceReflection?: ScreenSpaceReflectionData;
|
|
147
168
|
/** Renderer-owned temporal projection used by Standard's TAA producer. */
|
|
148
169
|
readonly temporal?: TemporalView;
|
|
149
170
|
/** Active-camera motion blur parameters, present only when demanded. */
|
|
@@ -188,8 +209,43 @@ interface RenderPipelineStateView {
|
|
|
188
209
|
* RenderSystemRuntime structurally satisfies this contract, but the public
|
|
189
210
|
* frame surface does not depend on that assembly owner.
|
|
190
211
|
*/
|
|
212
|
+
interface RenderPipelineObservationCapture {
|
|
213
|
+
readonly domain: 'linear-hdr' | 'linear-ldr' | 'final-srgb';
|
|
214
|
+
readonly format: TextureFormat;
|
|
215
|
+
readonly device: RhiDevice;
|
|
216
|
+
readonly texture: Texture;
|
|
217
|
+
readonly buffer: Buffer;
|
|
218
|
+
readonly frameNumber: number;
|
|
219
|
+
readonly deviceGeneration: number;
|
|
220
|
+
readonly graphGeneration: number;
|
|
221
|
+
readonly backendId: string;
|
|
222
|
+
readonly width: number;
|
|
223
|
+
readonly height: number;
|
|
224
|
+
readonly bytesPerRow: number;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
interface RenderPipelineObservationCaptureOwner {
|
|
228
|
+
readonly register: (capture: RenderPipelineObservationCapture) => void;
|
|
229
|
+
readonly consume: (frameNumber: number) => readonly RenderPipelineObservationCapture[];
|
|
230
|
+
readonly drain: () => readonly RenderPipelineObservationCapture[];
|
|
231
|
+
}
|
|
232
|
+
|
|
191
233
|
interface RenderPipelineRuntime {
|
|
192
234
|
readonly device: RhiDevice;
|
|
235
|
+
/** Current renderer device generation used to fence graph captures. */
|
|
236
|
+
readonly deviceGeneration?: number | undefined;
|
|
237
|
+
/** Public receipt identity reserved for the frame currently being encoded. */
|
|
238
|
+
readonly observationFrameId?: number | undefined;
|
|
239
|
+
/** Renderer-issued graph fence populated by the graph owner during encoding. */
|
|
240
|
+
observationGraphGeneration?: number | undefined;
|
|
241
|
+
/** Per-renderer bridge for receipt-bound graph color captures. */
|
|
242
|
+
readonly observationCaptureOwner?: RenderPipelineObservationCaptureOwner | undefined;
|
|
243
|
+
/**
|
|
244
|
+
* Domains armed for the frame currently being encoded. An absent or empty
|
|
245
|
+
* set is the normal zero-cost path; typed graph capture passes remain
|
|
246
|
+
* declared for topology inspection but do not allocate or copy anything.
|
|
247
|
+
*/
|
|
248
|
+
readonly observationCaptureDomains?: readonly FrameObservationDomain[] | undefined;
|
|
193
249
|
/** Runtime-owned shader module factory used by built-in graph producers. */
|
|
194
250
|
readonly shaderModuleFactory?: {
|
|
195
251
|
createShaderModule(input: {
|
|
@@ -200,6 +256,16 @@ interface RenderPipelineRuntime {
|
|
|
200
256
|
RhiError
|
|
201
257
|
>;
|
|
202
258
|
};
|
|
259
|
+
/** Immediate factory used by same-frame built-in producers after runtime warm-up. */
|
|
260
|
+
readonly immediateShaderModuleFactory?: {
|
|
261
|
+
createShaderModule(input: {
|
|
262
|
+
readonly code: string;
|
|
263
|
+
readonly label?: string | undefined;
|
|
264
|
+
}): import('@forgeax/engine-types').Result<
|
|
265
|
+
import('@forgeax/engine-rhi').ShaderModule,
|
|
266
|
+
RhiError
|
|
267
|
+
>;
|
|
268
|
+
};
|
|
203
269
|
readonly errorRegistry: { fire(error: RendererError): void };
|
|
204
270
|
readonly debugOverlay?: RenderDebugOverlay | undefined;
|
|
205
271
|
readonly lookupPostProcess?: (id: string) => PostProcessShaderEntry | undefined;
|
|
@@ -207,7 +273,7 @@ interface RenderPipelineRuntime {
|
|
|
207
273
|
readonly getPostProcessPipeline?: (
|
|
208
274
|
id: string,
|
|
209
275
|
bgl: BindGroupLayout,
|
|
210
|
-
|
|
276
|
+
colorFormats: readonly GPUTextureFormat[],
|
|
211
277
|
entry?: PostProcessShaderEntry,
|
|
212
278
|
) => RhiRenderPipeline | null;
|
|
213
279
|
}
|
|
@@ -250,6 +316,10 @@ export interface RenderPipelineContext {
|
|
|
250
316
|
readonly spotLightProjector?: SpotLightProjectorFrameContext;
|
|
251
317
|
/** Build-time composed utility sources for the renderer-owned volume passes. */
|
|
252
318
|
readonly volumetricFogShaders?: VolumetricFogShaderSources;
|
|
319
|
+
/** Build-time composed utility sources for the renderer-owned SSR passes. */
|
|
320
|
+
readonly ssrShaders?: SsrShaderSources;
|
|
321
|
+
/** Build-time composed utility sources for the renderer-owned atmosphere passes. */
|
|
322
|
+
readonly atmosphereShaders?: AtmosphereShaderSources;
|
|
253
323
|
}
|
|
254
324
|
|
|
255
325
|
/** Stable utility entry-point sources emitted by the shader manifest. */
|
|
@@ -260,6 +330,21 @@ export interface VolumetricFogShaderSources {
|
|
|
260
330
|
readonly composite: string;
|
|
261
331
|
}
|
|
262
332
|
|
|
333
|
+
/** Stable utility entry-point sources emitted by the shader manifest. */
|
|
334
|
+
export interface SsrShaderSources {
|
|
335
|
+
readonly hiz: string;
|
|
336
|
+
readonly hizReduce: string;
|
|
337
|
+
readonly trace: string;
|
|
338
|
+
readonly temporal: string;
|
|
339
|
+
readonly compose: string;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/** Stable analytic-atmosphere entry-point sources emitted by the shader manifest. */
|
|
343
|
+
export interface AtmosphereShaderSources {
|
|
344
|
+
readonly cube: string;
|
|
345
|
+
readonly background: string;
|
|
346
|
+
}
|
|
347
|
+
|
|
263
348
|
/**
|
|
264
349
|
* GPU resources for one validated volumetric-fog candidate. The record stage
|
|
265
350
|
* owns residency and parameter uploads; graph passes consume this narrow view
|
|
@@ -304,6 +389,7 @@ export interface SpotLightProjectorFrameContext {
|
|
|
304
389
|
*/
|
|
305
390
|
export interface Renderer {
|
|
306
391
|
/** Renderer-owned authoring and update path for large instance collections. */
|
|
392
|
+
readonly instances: InstanceCollectionStore;
|
|
307
393
|
attach(world: World): RenderResult<RenderWorldLease, RenderError>;
|
|
308
394
|
/** Prepare a standard MeshAsset for the active device generation. */
|
|
309
395
|
prepareDynamicGeometry(
|
|
@@ -318,6 +404,18 @@ export interface Renderer {
|
|
|
318
404
|
cancelDynamicGeometry(candidate: DynamicGeometryCandidate): Result<void, DynamicGeometryError>;
|
|
319
405
|
retireDynamicGeometry(candidate: DynamicGeometryCandidate): Result<void, DynamicGeometryError>;
|
|
320
406
|
draw(input: RenderFrameInput): RenderResult<FrameReceipt, RenderError>;
|
|
407
|
+
/**
|
|
408
|
+
* Arm one upcoming submitted frame for explicit color-domain observation.
|
|
409
|
+
* Observation buffers are not created, copied, mapped, or retained until a
|
|
410
|
+
* host calls this method before `draw()`. The demand is consumed only by a
|
|
411
|
+
* successful submit; a failed frame keeps it armed for a retry.
|
|
412
|
+
*
|
|
413
|
+
* This optional extension keeps older injected Renderer test doubles source
|
|
414
|
+
* compatible while concrete Engine renderers always implement it.
|
|
415
|
+
*/
|
|
416
|
+
requestObservation?: (
|
|
417
|
+
domains: readonly FrameObservationDomain[],
|
|
418
|
+
) => RenderResult<void, RenderError>;
|
|
321
419
|
createRenderTarget(descriptor: RenderTargetDescriptor): RenderResult<RenderTarget, RenderError>;
|
|
322
420
|
resizeRenderTarget(
|
|
323
421
|
target: RenderTarget,
|
|
@@ -334,6 +432,8 @@ export interface Renderer {
|
|
|
334
432
|
destroyRenderTarget(target: RenderTarget): RenderResult<void, RenderError>;
|
|
335
433
|
setProfile(profile: RenderProfile): RenderResult<void, RenderError>;
|
|
336
434
|
state(): RendererState;
|
|
435
|
+
/** Detached world bounds for one record in the last extracted World; undefined if unavailable. */
|
|
436
|
+
bounds(world: World, entity: number): RenderSceneBounds | undefined;
|
|
337
437
|
inspect(): RenderInspection;
|
|
338
438
|
observe(
|
|
339
439
|
receipt: FrameReceipt,
|
|
@@ -371,6 +471,8 @@ export type RendererEvent =
|
|
|
371
471
|
readonly kind: 'frame-submitted';
|
|
372
472
|
readonly frameId: number;
|
|
373
473
|
readonly deviceGeneration: number;
|
|
474
|
+
/** The exact receipt returned by the renderer's submit boundary. */
|
|
475
|
+
readonly receipt: FrameReceipt;
|
|
374
476
|
};
|
|
375
477
|
|
|
376
478
|
/** Package-local listener alias used by the renderer assembly implementation. */
|
|
@@ -400,8 +502,17 @@ export interface FrameEnvironment {
|
|
|
400
502
|
* only with the matching FrameReceipt after `receipt.completed` and returns a
|
|
401
503
|
* structured Result error when the generation or frame identity is stale.
|
|
402
504
|
*/
|
|
505
|
+
export type FrameObservationDomain = 'linear-hdr' | 'linear-ldr' | 'final-srgb';
|
|
506
|
+
|
|
507
|
+
export type FrameObservationInclude =
|
|
508
|
+
| 'timings'
|
|
509
|
+
| 'draws'
|
|
510
|
+
| 'bindings'
|
|
511
|
+
| 'target-readbacks'
|
|
512
|
+
| FrameObservationDomain;
|
|
513
|
+
|
|
403
514
|
export interface FrameObservationRequest {
|
|
404
|
-
readonly include: readonly
|
|
515
|
+
readonly include: readonly FrameObservationInclude[];
|
|
405
516
|
readonly targetReadbacks?: readonly RenderTargetReadbackTicket[];
|
|
406
517
|
}
|
|
407
518
|
|
|
@@ -414,6 +525,10 @@ export interface FrameObservationRequest {
|
|
|
414
525
|
export interface FrameReceipt {
|
|
415
526
|
readonly frameId: number;
|
|
416
527
|
readonly deviceGeneration: number;
|
|
528
|
+
/** Backend identity captured at submit and checked before observation. */
|
|
529
|
+
readonly backendId?: RhiCaps['backendKind'];
|
|
530
|
+
/** Monotonic compiled graph identity used by renderer-issued observations. */
|
|
531
|
+
readonly graphGeneration?: number;
|
|
417
532
|
readonly completed: Promise<RenderResult<void, RenderError>>;
|
|
418
533
|
}
|
|
419
534
|
|
|
@@ -436,16 +551,44 @@ export interface RenderFrameInput {
|
|
|
436
551
|
export interface FrameReceiptObservation {
|
|
437
552
|
readonly frameId: number;
|
|
438
553
|
readonly deviceGeneration: number;
|
|
439
|
-
readonly include: readonly
|
|
554
|
+
readonly include: readonly FrameObservationInclude[];
|
|
440
555
|
/** Receipt-bound Render-owned GPU pass facts; absent when not requested. */
|
|
441
556
|
readonly timings?: GpuPassTimingObservation | undefined;
|
|
442
557
|
/** Receipt-bound volume GPU timing facts; absent when not requested. */
|
|
443
558
|
readonly volumeTimings?: VolumeTimingObservation | undefined;
|
|
444
559
|
readonly targetReadbacks?: readonly RenderTargetReadbackData[];
|
|
560
|
+
/** Independent raw bytes captured from the requested linear/display domains. */
|
|
561
|
+
readonly observations?: readonly FrameDomainObservation[] | undefined;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
export interface FrameDomainObservation {
|
|
565
|
+
readonly domain: FrameObservationDomain;
|
|
566
|
+
readonly bytes: Uint8Array;
|
|
567
|
+
readonly metadata: {
|
|
568
|
+
readonly frameId: number;
|
|
569
|
+
readonly deviceGeneration: number;
|
|
570
|
+
readonly backendId?: RhiCaps['backendKind'];
|
|
571
|
+
/** Native texture format of the copied attachment, including BGRA order. */
|
|
572
|
+
readonly format: TextureFormat;
|
|
573
|
+
readonly graphGeneration: number;
|
|
574
|
+
readonly textureIdentity: number;
|
|
575
|
+
readonly readbackIdentity: number;
|
|
576
|
+
readonly width: number;
|
|
577
|
+
readonly height: number;
|
|
578
|
+
readonly bytesPerRow: number;
|
|
579
|
+
readonly footprint: {
|
|
580
|
+
readonly resourceCount: number;
|
|
581
|
+
readonly bindGroupCount: number;
|
|
582
|
+
};
|
|
583
|
+
};
|
|
445
584
|
}
|
|
446
585
|
|
|
447
586
|
/** Stable backend facts for the Standard output transform projection. */
|
|
448
587
|
export interface RenderOutputInspection {
|
|
588
|
+
/** Camera-owned auto-exposure facts, detached from GPU state when available. */
|
|
589
|
+
readonly autoExposure?: AutoExposureInspection;
|
|
590
|
+
/** Renderer-owned detached LUT residency and receipt facts. */
|
|
591
|
+
readonly standardLut?: StandardLutInspection;
|
|
449
592
|
readonly outputTransform?: typeof STANDARD_OUTPUT_TRANSFORM_FEATURE_ID;
|
|
450
593
|
readonly displayEncoded: boolean;
|
|
451
594
|
readonly intermediateFormat?: TextureFormat;
|
|
@@ -493,6 +636,15 @@ export interface RenderObservationInspection {
|
|
|
493
636
|
/** Exact pass names and target descriptor from the committed graph. */
|
|
494
637
|
readonly passNames: readonly string[];
|
|
495
638
|
readonly standardOutputColor?: RenderStandardOutputColorInspection;
|
|
639
|
+
/** Monotonic, renderer-owned observation resource facts; no GPU handles. */
|
|
640
|
+
readonly resourceStats?: {
|
|
641
|
+
readonly allocationCount: number;
|
|
642
|
+
readonly liveCount: number;
|
|
643
|
+
readonly peakLiveCount: number;
|
|
644
|
+
readonly mapCount: number;
|
|
645
|
+
readonly readbackCount: number;
|
|
646
|
+
readonly liveByteLength: number;
|
|
647
|
+
};
|
|
496
648
|
}
|
|
497
649
|
|
|
498
650
|
/**
|
|
@@ -531,6 +683,12 @@ export interface RenderInspection {
|
|
|
531
683
|
readonly features: readonly string[];
|
|
532
684
|
/** Truthful lifecycle facts for every registered declarative feature. */
|
|
533
685
|
readonly featureDiagnostics: readonly RenderFeatureDiagnostics[];
|
|
686
|
+
/** Detached signature and prepared-resource counters for feature planning. */
|
|
687
|
+
readonly featureHost?: RenderFeatureHostInspection;
|
|
688
|
+
/** Detached typed-graph compile/reuse and candidate lifecycle counters. */
|
|
689
|
+
readonly featureGraph?: RenderFeatureGraphInspection;
|
|
690
|
+
/** Detached material texture-source probe counters from the last extract. */
|
|
691
|
+
readonly materialTextureSources?: import('./inspection-types').MaterialTextureSourceInspection;
|
|
534
692
|
readonly frustumStats: { readonly culled: number; readonly total: number };
|
|
535
693
|
readonly visibilityStats: { readonly explicitlyHidden: number };
|
|
536
694
|
/** Renderer-owned large-instance residency and upload facts. */
|
|
@@ -541,6 +699,8 @@ export interface RenderInspection {
|
|
|
541
699
|
readonly reflectionProbes: ReflectionProbeInspection;
|
|
542
700
|
/** Renderer-owned SSR dependency seam; consumer facts are projected from live owners. */
|
|
543
701
|
readonly ssrDependencies: SsrDependenciesInspection;
|
|
702
|
+
/** Renderer-owned SSR spatial status and bounded execution facts. */
|
|
703
|
+
readonly ssr: SsrSpatialInspection;
|
|
544
704
|
/** Last completed transmission candidate facts, detached from GPU handles. */
|
|
545
705
|
readonly transmission?: TransmissionInspection;
|
|
546
706
|
/** Last prepared Standard transport facts, detached from GPU handles. */
|
|
@@ -583,16 +743,12 @@ export interface RenderInspection {
|
|
|
583
743
|
readonly lastGeneration: number | undefined;
|
|
584
744
|
};
|
|
585
745
|
};
|
|
586
|
-
/**
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
readonly
|
|
592
|
-
readonly endpoint: 'surface.storage.raw';
|
|
593
|
-
readonly capability: RenderOutputInspection['capability'];
|
|
594
|
-
readonly presentationProof?: RhiCanvasSurfacePresentationProof;
|
|
595
|
-
readonly error: RenderOutputInspection['error'];
|
|
746
|
+
/**
|
|
747
|
+
* Output-transform facts from the same committed graph and physical surface.
|
|
748
|
+
* Keep this as one named subtree so AI consumers do not have to guess which
|
|
749
|
+
* detached fields belong to the output contract versus renderer lifecycle.
|
|
750
|
+
*/
|
|
751
|
+
readonly output: RenderOutputInspection;
|
|
596
752
|
readonly observation: RenderObservationInspection;
|
|
597
753
|
readonly environment: EnvironmentInspection;
|
|
598
754
|
readonly temporal: TemporalInspection;
|
|
@@ -626,6 +782,8 @@ export interface RenderInspection {
|
|
|
626
782
|
export type DrawOwnerOptions = {
|
|
627
783
|
readonly cameraOwner: number;
|
|
628
784
|
readonly resourceOwner: number;
|
|
785
|
+
/** Optional FrameCamera entity selection; absent preserves ActiveCamera semantics. */
|
|
786
|
+
readonly cameraEntityKey?: number;
|
|
629
787
|
readonly profileFrame?: ProfileFrameToken;
|
|
630
788
|
};
|
|
631
789
|
|
|
@@ -649,17 +807,18 @@ export type RendererLostListener = (info: RendererLostInfo) => void;
|
|
|
649
807
|
* exception), NOT the eliminated cross-cluster `RuntimeError` SSOT (D-3).
|
|
650
808
|
*
|
|
651
809
|
* Composition = `RhiError | RenderError | AssetRuntimeError | SkinError |
|
|
652
|
-
* PostProcessError`.
|
|
653
|
-
*
|
|
654
|
-
*
|
|
655
|
-
*
|
|
656
|
-
*
|
|
657
|
-
* `
|
|
658
|
-
* `
|
|
810
|
+
* GpuDrivenPreparationError | PostProcessError`. The GPU preparation arm is
|
|
811
|
+
* the renderer-owned producer contract: its closed `code` and typed `detail`
|
|
812
|
+
* identify the material, geometry, skin, generation, or shadow owner without making
|
|
813
|
+
* RHI errors carry render policy. `RecoverError` and `EngineEnvironmentError`
|
|
814
|
+
* are intentionally excluded — neither is ever emitted through the Renderer
|
|
815
|
+
* event stream (`RecoverError` returns from `recover()`,
|
|
816
|
+
* `EngineEnvironmentError` throws at construction).
|
|
659
817
|
*
|
|
660
818
|
* AI consumers do `switch (err.code)` over the union: the disjoint
|
|
661
819
|
* `RhiErrorCode` / `RenderErrorCode` / `AssetRuntimeErrorCode` / `SkinErrorCode`
|
|
662
|
-
* / `PostProcessErrorCode` literal sets let
|
|
820
|
+
* / `GpuDrivenPreparationErrorCode` / `PostProcessErrorCode` literal sets let
|
|
821
|
+
* TS narrow each arm to the concrete
|
|
663
822
|
* class (charter P3 union discoverability — every fan-out member is reachable
|
|
664
823
|
* in an exhaustive switch, no untyped escape). Example:
|
|
665
824
|
*
|
|
@@ -670,7 +829,8 @@ export type RendererLostListener = (info: RendererLostInfo) => void;
|
|
|
670
829
|
* case 'asset-not-registered': // AssetRuntimeError arm, err narrowed here
|
|
671
830
|
* return report(err.hint);
|
|
672
831
|
* // ...one arm per RhiErrorCode | RenderErrorCode | AssetRuntimeErrorCode
|
|
673
|
-
* // | SkinErrorCode |
|
|
832
|
+
* // | SkinErrorCode | GpuDrivenPreparationErrorCode |
|
|
833
|
+
* // PostProcessErrorCode member; no default needed,
|
|
674
834
|
* // TS flags every unhandled code at compile time.
|
|
675
835
|
* }
|
|
676
836
|
* });
|
|
@@ -681,6 +841,7 @@ export type RendererError =
|
|
|
681
841
|
| RenderGraphError
|
|
682
842
|
| ImageError
|
|
683
843
|
| RenderError
|
|
844
|
+
| GpuDrivenPreparationError
|
|
684
845
|
| AssetRuntimeError
|
|
685
846
|
| SkinError
|
|
686
847
|
| PostProcessError;
|
|
@@ -725,6 +886,11 @@ export const RENDER_GRAPH_EXECUTION_PHASE_CATALOG = [
|
|
|
725
886
|
'record/graph-execute/bloom-blur-h',
|
|
726
887
|
'record/graph-execute/bloom-blur-v',
|
|
727
888
|
'record/graph-execute/bloom-composite',
|
|
889
|
+
'record/graph-execute/ssr-hiz',
|
|
890
|
+
'record/graph-execute/ssr-trace',
|
|
891
|
+
'record/graph-execute/ssr-temporal',
|
|
892
|
+
'record/graph-execute/ssr-reflection-mip',
|
|
893
|
+
'record/graph-execute/ssr-compose',
|
|
728
894
|
'record/graph-execute/other',
|
|
729
895
|
] as const;
|
|
730
896
|
|
|
@@ -818,7 +984,11 @@ export interface RendererOptions {
|
|
|
818
984
|
readonly rhiInstrumentation?: RhiBackendInstrumentation | undefined;
|
|
819
985
|
/** Optional bounded GPU pass timing facts; this is not frame latency. */
|
|
820
986
|
readonly gpuPassTiming?: GpuPassTimingOptions | undefined;
|
|
821
|
-
/**
|
|
987
|
+
/**
|
|
988
|
+
* Exact source/tree/lock/build identity binding for the renderer-owned SSR seam.
|
|
989
|
+
* Opts into one format-capability probe during device-generation initialization;
|
|
990
|
+
* camera ScreenSpaceReflection still controls all per-frame SSR work.
|
|
991
|
+
*/
|
|
822
992
|
readonly ssrIdentity?: SsrAdmissionIdentity | undefined;
|
|
823
993
|
// feat-20260608-create-app-param-surface-trim / M1 / AC-02: `clearColor`
|
|
824
994
|
// was deleted as a one-cut breaking change (AGENTS.md Change stance +
|