@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
package/src/record/view-ubo.ts
CHANGED
|
@@ -129,6 +129,7 @@ export function writePointsLinesViewUbo(
|
|
|
129
129
|
* folded from standalone binding 9 to fix WebGL2 fragment uniform-buffer
|
|
130
130
|
* overflow; lane N = spot with shadowAtlasTile === N, 16 f32 / lane,
|
|
131
131
|
* 16 B-aligned at byte 528 = float 132).
|
|
132
|
+
* [236..239] ssrParams (maxDistance, thickness, maxRoughness, enabled).
|
|
132
133
|
*
|
|
133
134
|
* @internal
|
|
134
135
|
*/
|
|
@@ -218,6 +219,16 @@ export function writeViewUbo(
|
|
|
218
219
|
viewPayload[234] = previousCameraPosition[2] ?? 0;
|
|
219
220
|
viewPayload[235] = 1;
|
|
220
221
|
}
|
|
222
|
+
// SSR uses the fixed View tail as its single per-camera parameter carrier.
|
|
223
|
+
// Admission has already validated these values; the enabled lane remains
|
|
224
|
+
// zero when the component is absent so disabled frames carry no demand.
|
|
225
|
+
const ssr = camera.screenSpaceReflection;
|
|
226
|
+
if (ssr !== undefined) {
|
|
227
|
+
viewPayload[236] = ssr.maxDistance;
|
|
228
|
+
viewPayload[237] = ssr.thickness;
|
|
229
|
+
viewPayload[238] = ssr.maxRoughness;
|
|
230
|
+
viewPayload[239] = 1;
|
|
231
|
+
}
|
|
221
232
|
// splitPlanes at [108..123] (four vec4 lanes: split/world texel/depth span/reserved).
|
|
222
233
|
if (lights.splitPlanes !== undefined) {
|
|
223
234
|
for (let s = 0; s < 4; s++) {
|
|
@@ -28,15 +28,18 @@ import {
|
|
|
28
28
|
postProcessShaderEntrySignature,
|
|
29
29
|
} from '../fullscreen-post-process-pass';
|
|
30
30
|
import { GpuDrivenProduction } from '../gpu-driven/production-raster';
|
|
31
|
-
import { disposeInstanceBufferChunks, disposeInstanceBuffers } from '../instance-buffer-cache';
|
|
32
31
|
import { inspectStandardLighting } from '../pipeline/standard-lighting/inspection';
|
|
32
|
+
import { retireAutoExposureGpuResources } from '../pipeline/standard-output/auto-exposure/gpu';
|
|
33
|
+
import {
|
|
34
|
+
prepareStandardOutputResources,
|
|
35
|
+
resetStandardOutputForDeviceLoss,
|
|
36
|
+
} from '../pipeline/standard-output/resources';
|
|
33
37
|
import type { PipelineBuilderShaderModuleFactory } from '../pipeline-builder';
|
|
34
38
|
import { inspectPointShadow } from '../point-shadow-inspection';
|
|
35
39
|
import type { PreparedGraphicsResolver } from '../prepare/prepared-graphics-resolver';
|
|
36
|
-
import { validateRenderables } from '../record/frame';
|
|
40
|
+
import { gpuDrivenMeshesForFrame, validateRenderables } from '../record/frame';
|
|
37
41
|
import { prepareFrameLighting } from '../record/frame-lighting';
|
|
38
42
|
import type { RenderFrameState, ValidatedRenderable } from '../record/frame-snapshot';
|
|
39
|
-
import { resolveGeometryInstanceBuffer } from '../record/main-pass-geometry';
|
|
40
43
|
import { computeSplitLdrSprite } from '../record/main-pass-sprite-draws';
|
|
41
44
|
import {
|
|
42
45
|
prepareRecoveryPipelineReadiness,
|
|
@@ -49,13 +52,6 @@ import {
|
|
|
49
52
|
type RenderFeatureGraphCandidate,
|
|
50
53
|
} from '../record/typed-frame-graph';
|
|
51
54
|
import { STANDARD_OUTPUT_TRANSFORM_FEATURE_ID } from '../render-contract';
|
|
52
|
-
import type {
|
|
53
|
-
RecoveryGraphCandidate,
|
|
54
|
-
RecoveryGraphCandidatePreparation,
|
|
55
|
-
RecoveryGraphCandidateRuntime,
|
|
56
|
-
RecoveryGraphSetupSubmission,
|
|
57
|
-
RecoveryPointsLinesCandidate,
|
|
58
|
-
} from '../render-system';
|
|
59
55
|
import type { ExtractedFrame, MaterialSnapshot } from '../render-system-extract';
|
|
60
56
|
import type { PersistentGpuDrivenCandidate, PersistentRenderScene } from '../scene/render-scene';
|
|
61
57
|
import { SHADOW_ATLAS_DEFAULT_LAYERS } from '../shadow-atlas';
|
|
@@ -64,7 +60,15 @@ import {
|
|
|
64
60
|
getTemporalBindGroupResources,
|
|
65
61
|
getTemporalGpuState,
|
|
66
62
|
getTemporalParamsBuffer,
|
|
63
|
+
TEMPORAL_HISTORY_FORMATS,
|
|
67
64
|
} from '../temporal/gpu';
|
|
65
|
+
import type {
|
|
66
|
+
RecoveryGraphCandidate,
|
|
67
|
+
RecoveryGraphCandidatePreparation,
|
|
68
|
+
RecoveryGraphCandidateRuntime,
|
|
69
|
+
RecoveryGraphSetupSubmission,
|
|
70
|
+
RecoveryPointsLinesCandidate,
|
|
71
|
+
} from './types';
|
|
68
72
|
|
|
69
73
|
export interface PreparedResolverCaches {
|
|
70
74
|
readonly preparedPipelineIds: WeakMap<object, string>;
|
|
@@ -123,7 +127,7 @@ export interface RenderSystemRecoveryOwner {
|
|
|
123
127
|
setLastSuccessfulFrameSeed(seed: RecoveryFrameSeed): void;
|
|
124
128
|
prepareRecoveryGraphCandidate(
|
|
125
129
|
runtime: RecoveryGraphCandidateRuntime,
|
|
126
|
-
):
|
|
130
|
+
): RecoveryGraphCandidatePreparation;
|
|
127
131
|
submitCandidateSetup(
|
|
128
132
|
candidate: RecoveryGraphCandidate,
|
|
129
133
|
isValid: () => boolean,
|
|
@@ -132,22 +136,36 @@ export interface RenderSystemRecoveryOwner {
|
|
|
132
136
|
discardRecoveryGraphCandidate(candidate: RecoveryGraphCandidate): void;
|
|
133
137
|
}
|
|
134
138
|
|
|
135
|
-
|
|
136
|
-
|
|
139
|
+
/**
|
|
140
|
+
* Keep the missing-texture sentinel out of residency preparation. A zero
|
|
141
|
+
* handle is the same absent-reference value used by materialHandle; resolving
|
|
142
|
+
* it as a real TextureAsset would otherwise pass an undefined pod to the GPU
|
|
143
|
+
* store and fail before the renderer can produce a structured readiness
|
|
144
|
+
* result.
|
|
145
|
+
*/
|
|
146
|
+
export function materialTextureHandlesForResidency(
|
|
147
|
+
candidates: Iterable<Handle<'TextureAsset', 'shared'> | undefined>,
|
|
137
148
|
): readonly Handle<'TextureAsset', 'shared'>[] {
|
|
138
149
|
const handles = new Map<number, Handle<'TextureAsset', 'shared'>>();
|
|
139
|
-
const
|
|
140
|
-
if (handle !== undefined) handles.set(Number(handle), handle);
|
|
141
|
-
}
|
|
142
|
-
for (const handle of material.textureHandles?.values() ?? []) add(handle);
|
|
143
|
-
add(material.baseColorTexture);
|
|
144
|
-
add(material.metallicRoughnessTexture);
|
|
145
|
-
add(material.normalTexture);
|
|
146
|
-
add(material.emissiveTexture);
|
|
147
|
-
add(material.occlusionTexture);
|
|
150
|
+
for (const handle of candidates) {
|
|
151
|
+
if (handle !== undefined && Number(handle) !== 0) handles.set(Number(handle), handle);
|
|
152
|
+
}
|
|
148
153
|
return [...handles.values()];
|
|
149
154
|
}
|
|
150
155
|
|
|
156
|
+
export function materialTextureHandles(
|
|
157
|
+
material: MaterialSnapshot,
|
|
158
|
+
): readonly Handle<'TextureAsset', 'shared'>[] {
|
|
159
|
+
return materialTextureHandlesForResidency([
|
|
160
|
+
...(material.textureHandles?.values() ?? []),
|
|
161
|
+
material.baseColorTexture,
|
|
162
|
+
material.metallicRoughnessTexture,
|
|
163
|
+
material.normalTexture,
|
|
164
|
+
material.emissiveTexture,
|
|
165
|
+
material.occlusionTexture,
|
|
166
|
+
]);
|
|
167
|
+
}
|
|
168
|
+
|
|
151
169
|
export function materialSamplerHandles(
|
|
152
170
|
material: MaterialSnapshot,
|
|
153
171
|
): readonly Handle<'SamplerAsset', 'shared'>[] {
|
|
@@ -196,6 +214,13 @@ export function createRenderSystemRecovery(
|
|
|
196
214
|
successfulTemporalFrameIndex: 0,
|
|
197
215
|
temporalFrameTransaction: createTemporalFrameTransaction({ deviceEpoch: 0 }),
|
|
198
216
|
temporalFrameInput: undefined,
|
|
217
|
+
ssrRequested: false,
|
|
218
|
+
ssrSpatialAdmission: undefined,
|
|
219
|
+
ssrHistoryOwner: undefined,
|
|
220
|
+
ssrHistoryCandidate: undefined,
|
|
221
|
+
ssrTemporalParamsPayload: undefined,
|
|
222
|
+
ssrLastCameraEntity: undefined,
|
|
223
|
+
ssrLastHistoryVersion: undefined,
|
|
199
224
|
graphTargetCapture: undefined,
|
|
200
225
|
perFrameGraph: null,
|
|
201
226
|
directionalShadowCache: null,
|
|
@@ -227,8 +252,6 @@ export function createRenderSystemRecovery(
|
|
|
227
252
|
currentDirectionalShadowView: null,
|
|
228
253
|
currentSpotShadowView: null,
|
|
229
254
|
instanceBuffers: new Map(),
|
|
230
|
-
instanceBufferChunks: new Map(),
|
|
231
|
-
instanceResidency: new Map(),
|
|
232
255
|
morphBuffers: new Map(),
|
|
233
256
|
hdrpClusterBinScratch: createClusterBinScratch(),
|
|
234
257
|
hdrpClusterGridScratch: null,
|
|
@@ -257,7 +280,7 @@ export function createRenderSystemRecovery(
|
|
|
257
280
|
};
|
|
258
281
|
|
|
259
282
|
const publishRecoveryGraphCandidate = (candidate: RecoveryGraphCandidate): void => {
|
|
260
|
-
candidate.recoveryReadiness.
|
|
283
|
+
candidate.recoveryReadiness.assertPreparedCache();
|
|
261
284
|
const previousFeatureHost = internals.featureHost;
|
|
262
285
|
// The caller enters this method only after the active generation swap and
|
|
263
286
|
// after resetForRecover() has shed every lost-device owner. Replace the
|
|
@@ -317,9 +340,9 @@ export function createRenderSystemRecovery(
|
|
|
317
340
|
candidate.release();
|
|
318
341
|
};
|
|
319
342
|
|
|
320
|
-
const prepareRecoveryGraphCandidate =
|
|
343
|
+
const prepareRecoveryGraphCandidate = (
|
|
321
344
|
runtime: RecoveryGraphCandidateRuntime,
|
|
322
|
-
):
|
|
345
|
+
): RecoveryGraphCandidatePreparation => {
|
|
323
346
|
const seed = lastSuccessfulFrameSeed;
|
|
324
347
|
if (seed === undefined) return { kind: 'no-seed' };
|
|
325
348
|
const camera = seed.frame.cameras[0];
|
|
@@ -330,6 +353,7 @@ export function createRenderSystemRecovery(
|
|
|
330
353
|
if (camera === undefined) return { kind: 'no-seed' };
|
|
331
354
|
|
|
332
355
|
const candidateFrameState = createRecoveryCandidateFrameState();
|
|
356
|
+
resetStandardOutputForDeviceLoss(candidateFrameState, runtime.internals.deviceScope.generation);
|
|
333
357
|
Object.assign(candidateFrameState, {
|
|
334
358
|
temporalFrame: undefined,
|
|
335
359
|
bloomFrameReceipts: undefined,
|
|
@@ -356,6 +380,9 @@ export function createRenderSystemRecovery(
|
|
|
356
380
|
const releaseCandidate = (): void => {
|
|
357
381
|
if (candidateReleased || candidatePublished) return;
|
|
358
382
|
candidateReleased = true;
|
|
383
|
+
const pendingOutput = candidateFrameState.pendingAutoExposureGpuResources;
|
|
384
|
+
if (pendingOutput !== undefined) retireAutoExposureGpuResources(pendingOutput);
|
|
385
|
+
candidateFrameState.pendingAutoExposureGpuResources = undefined;
|
|
359
386
|
for (const work of setupWorks) work.discard();
|
|
360
387
|
setupWorks.length = 0;
|
|
361
388
|
const graph = candidateFrameState.compiledFrameGraph;
|
|
@@ -386,13 +413,6 @@ export function createRenderSystemRecovery(
|
|
|
386
413
|
candidateGpuDrivenScene = undefined;
|
|
387
414
|
candidatePointsLines?.release();
|
|
388
415
|
candidatePointsLines = undefined;
|
|
389
|
-
disposeInstanceBuffers(candidateFrameState.instanceBuffers, runtime.internals.errorRegistry);
|
|
390
|
-
if (candidateFrameState.instanceBufferChunks !== undefined) {
|
|
391
|
-
disposeInstanceBufferChunks(
|
|
392
|
-
candidateFrameState.instanceBufferChunks,
|
|
393
|
-
runtime.internals.errorRegistry,
|
|
394
|
-
);
|
|
395
|
-
}
|
|
396
416
|
candidateGpuStore.destroyAll();
|
|
397
417
|
};
|
|
398
418
|
const markPublished = (): void => {
|
|
@@ -408,30 +428,43 @@ export function createRenderSystemRecovery(
|
|
|
408
428
|
};
|
|
409
429
|
|
|
410
430
|
try {
|
|
431
|
+
const output = prepareStandardOutputResources(
|
|
432
|
+
candidateFrameState,
|
|
433
|
+
runtime.internals,
|
|
434
|
+
camera,
|
|
435
|
+
seed.worlds[seed.cameraOwner] as World,
|
|
436
|
+
);
|
|
437
|
+
if (!output.ok) return failed('candidate Standard output preparation failed', output.error);
|
|
411
438
|
const gpuScene = persistentRenderScene.prepareRecoveryGpuDrivenCandidate(
|
|
412
439
|
runtime.internals.device,
|
|
413
440
|
);
|
|
414
441
|
if (!gpuScene.ok) return failed('candidate GPU scene preparation failed', gpuScene.error);
|
|
415
442
|
candidateGpuDrivenScene = gpuScene.value;
|
|
416
443
|
if (candidateGpuDrivenScene.state !== undefined) {
|
|
417
|
-
|
|
444
|
+
candidateGpuDrivenProduction = GpuDrivenProduction.forDevice(
|
|
418
445
|
runtime.internals.device,
|
|
419
446
|
gpuDrivenShaderFactory,
|
|
420
|
-
(descriptor) =>
|
|
421
|
-
internals.createShaderModule === undefined
|
|
422
|
-
? Promise.resolve(gpuDrivenShaderFactory.createShaderModule(descriptor))
|
|
423
|
-
: internals.createShaderModule(runtime.internals.device, descriptor),
|
|
424
447
|
);
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
448
|
+
const standardPbrArtifact = runtime.internals.getMaterialShaderArtifact?.(
|
|
449
|
+
'forgeax::default-standard-pbr',
|
|
450
|
+
);
|
|
451
|
+
const standardPbrSkinArtifact =
|
|
452
|
+
runtime.internals.getMaterialShaderArtifact?.('forgeax::pbr-skin');
|
|
428
453
|
const prepared = candidateGpuDrivenProduction.prepare({
|
|
429
454
|
scene: candidateGpuDrivenScene.state,
|
|
430
455
|
camera,
|
|
431
|
-
|
|
456
|
+
meshBySlot: gpuDrivenMeshesForFrame(
|
|
457
|
+
runtime.internals,
|
|
458
|
+
runtime.pipelineState,
|
|
459
|
+
seed.worlds,
|
|
460
|
+
candidateGpuDrivenScene.state,
|
|
461
|
+
),
|
|
432
462
|
viewBindGroupLayout: runtime.pipelineState.viewBindGroupLayout,
|
|
433
463
|
meshResidencyEpoch: runtime.internals.gpuStore.meshResidencyEpoch,
|
|
434
464
|
hdrp: false,
|
|
465
|
+
...(standardPbrArtifact === undefined ? {} : { standardPbrArtifact }),
|
|
466
|
+
...(standardPbrSkinArtifact === undefined ? {} : { standardPbrSkinArtifact }),
|
|
467
|
+
standardPbrPipelineState: runtime.pipelineState,
|
|
435
468
|
});
|
|
436
469
|
if (!prepared.ok) return failed('candidate GPU-driven preparation failed', prepared.error);
|
|
437
470
|
preparedGpuDriven = prepared.value;
|
|
@@ -501,8 +534,14 @@ export function createRenderSystemRecovery(
|
|
|
501
534
|
...(batches.length === 0
|
|
502
535
|
? {}
|
|
503
536
|
: { preparedResourceKey: `recovery-${runtime.internals.deviceScope.generation}` }),
|
|
504
|
-
onRejected:
|
|
505
|
-
|
|
537
|
+
onRejected: () => {
|
|
538
|
+
featureFrame.onAborted();
|
|
539
|
+
releaseBatches();
|
|
540
|
+
},
|
|
541
|
+
onAbandoned: () => {
|
|
542
|
+
featureFrame.onAborted();
|
|
543
|
+
releaseBatches();
|
|
544
|
+
},
|
|
506
545
|
};
|
|
507
546
|
}
|
|
508
547
|
for (const renderable of seed.frame.renderables) {
|
|
@@ -596,25 +635,6 @@ export function createRenderSystemRecovery(
|
|
|
596
635
|
if (candidateValidated.length !== seed.frame.renderables.length) {
|
|
597
636
|
return failed('candidate validation did not retain every LKG-visible renderable');
|
|
598
637
|
}
|
|
599
|
-
for (const entry of candidateValidated) {
|
|
600
|
-
if (entry.source.instances === undefined) continue;
|
|
601
|
-
const prepared = resolveGeometryInstanceBuffer(
|
|
602
|
-
{
|
|
603
|
-
runtime: runtime.internals,
|
|
604
|
-
pipelineState: runtime.pipelineState,
|
|
605
|
-
frameState: candidateFrameState,
|
|
606
|
-
bindGroupCounts: { createBindGroup: 0, keys: [] },
|
|
607
|
-
},
|
|
608
|
-
entry,
|
|
609
|
-
[],
|
|
610
|
-
false,
|
|
611
|
-
);
|
|
612
|
-
if (prepared === null) return failed('candidate instance preparation failed');
|
|
613
|
-
}
|
|
614
|
-
// These uploads belong to recovery preparation, never to a rendered frame.
|
|
615
|
-
for (const [id, residency] of candidateFrameState.instanceResidency ?? []) {
|
|
616
|
-
candidateFrameState.instanceResidency?.set(id, { ...residency, frameNumber: -1 });
|
|
617
|
-
}
|
|
618
638
|
const lighting = prepareFrameLighting(
|
|
619
639
|
runtime.internals,
|
|
620
640
|
candidateFrameState,
|
|
@@ -680,7 +700,7 @@ export function createRenderSystemRecovery(
|
|
|
680
700
|
) {
|
|
681
701
|
throw new Error(`recovery post-process bindings are unavailable: ${id}`);
|
|
682
702
|
}
|
|
683
|
-
const pipeline = postProcessPipeline(id, built.bindGroupLayout, colorFormat, entry);
|
|
703
|
+
const pipeline = postProcessPipeline(id, built.bindGroupLayout, [colorFormat], entry);
|
|
684
704
|
if (pipeline === null) {
|
|
685
705
|
throw new Error(`recovery post-process pipeline is unavailable: ${id}`);
|
|
686
706
|
}
|
|
@@ -714,7 +734,11 @@ export function createRenderSystemRecovery(
|
|
|
714
734
|
const taaPipeline = postProcessPipeline(
|
|
715
735
|
'forgeax.taa-resolve',
|
|
716
736
|
temporalBindings.layout,
|
|
717
|
-
|
|
737
|
+
[
|
|
738
|
+
TEMPORAL_HISTORY_FORMATS.color,
|
|
739
|
+
TEMPORAL_HISTORY_FORMATS.temporal,
|
|
740
|
+
TEMPORAL_HISTORY_FORMATS.stability,
|
|
741
|
+
],
|
|
718
742
|
taaEntry,
|
|
719
743
|
);
|
|
720
744
|
if (taaPipeline === null) {
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { LifecycleResourceSpec } from '../device/device-scope';
|
|
2
|
+
import type { EnvironmentGeneration } from '../environment/generation';
|
|
3
|
+
import type { EnvironmentLifecycle } from '../environment/lifecycle';
|
|
4
|
+
import type { RenderFrameState } from '../record/frame-snapshot';
|
|
5
|
+
import type { RecoveryRootBundle, RecoveryRootRuntime } from '../render-system';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Assemble replacement-device roots without letting candidate construction
|
|
9
|
+
* publish through the active RenderSystem owner. The caller supplies the
|
|
10
|
+
* small state handoff explicitly so this recovery seam remains independent
|
|
11
|
+
* from frame orchestration.
|
|
12
|
+
*/
|
|
13
|
+
export function prepareRenderSystemRecoveryRoots(
|
|
14
|
+
runtime: RecoveryRootRuntime,
|
|
15
|
+
environmentLifecycle: EnvironmentLifecycle,
|
|
16
|
+
frameState: RenderFrameState,
|
|
17
|
+
publishEnvironmentLifecycle: (lifecycle: EnvironmentLifecycle) => void,
|
|
18
|
+
): RecoveryRootBundle {
|
|
19
|
+
const candidateEnvironmentLifecycle = environmentLifecycle.createRecoveryCandidate(runtime.scope);
|
|
20
|
+
const roots: LifecycleResourceSpec<unknown>[] = [];
|
|
21
|
+
let candidateEnvironmentGeneration: EnvironmentGeneration | undefined;
|
|
22
|
+
let environmentRootCleaned = false;
|
|
23
|
+
let published = false;
|
|
24
|
+
if (candidateEnvironmentLifecycle.hasRecoveryFrame()) {
|
|
25
|
+
const environmentRoot = candidateEnvironmentLifecycle.createRecoveryRoot(runtime.scope);
|
|
26
|
+
roots.push({
|
|
27
|
+
...environmentRoot,
|
|
28
|
+
create: async () => {
|
|
29
|
+
const generation = (await environmentRoot.create()) as EnvironmentGeneration;
|
|
30
|
+
candidateEnvironmentGeneration = generation;
|
|
31
|
+
return generation;
|
|
32
|
+
},
|
|
33
|
+
cleanup: (value) => {
|
|
34
|
+
if (environmentRootCleaned) return;
|
|
35
|
+
environmentRootCleaned = true;
|
|
36
|
+
if (candidateEnvironmentGeneration === value) candidateEnvironmentGeneration = undefined;
|
|
37
|
+
if (published) {
|
|
38
|
+
candidateEnvironmentLifecycle.retirePublishedGeneration(value as EnvironmentGeneration);
|
|
39
|
+
} else {
|
|
40
|
+
environmentRoot.cleanup(value);
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const graphCandidate = runtime.graphCandidate;
|
|
46
|
+
if (graphCandidate !== undefined) {
|
|
47
|
+
const releaseGraphCandidate = (): void => graphCandidate.release();
|
|
48
|
+
const compiledGraph = graphCandidate.frameState.compiledFrameGraph;
|
|
49
|
+
if (compiledGraph !== null) {
|
|
50
|
+
roots.push({
|
|
51
|
+
kind: 'pipeline',
|
|
52
|
+
create: () => {
|
|
53
|
+
if (!runtime.scope.isAlive())
|
|
54
|
+
throw new Error('Recovery graph candidate scope is not active.');
|
|
55
|
+
if (graphCandidate.frameState.compiledFrameGraph !== compiledGraph) {
|
|
56
|
+
throw new Error('Recovery graph candidate was changed before aggregate assembly.');
|
|
57
|
+
}
|
|
58
|
+
return compiledGraph;
|
|
59
|
+
},
|
|
60
|
+
cleanup: releaseGraphCandidate,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
if (graphCandidate.featureHost !== undefined) {
|
|
64
|
+
const featureRoot = graphCandidate.featureHost.createRecoveryRoot(runtime.scope);
|
|
65
|
+
roots.push({ ...featureRoot, cleanup: releaseGraphCandidate });
|
|
66
|
+
}
|
|
67
|
+
if (graphCandidate.featureGpuWork !== undefined) {
|
|
68
|
+
const featureWorkRoot = graphCandidate.featureGpuWork.createRecoveryRoot(runtime.scope);
|
|
69
|
+
roots.push({ ...featureWorkRoot, cleanup: releaseGraphCandidate });
|
|
70
|
+
}
|
|
71
|
+
if (graphCandidate.gpuDrivenProduction !== undefined) {
|
|
72
|
+
const productionRoot = graphCandidate.gpuDrivenProduction.createRecoveryRoot(runtime.scope);
|
|
73
|
+
roots.push({ ...productionRoot, cleanup: releaseGraphCandidate });
|
|
74
|
+
}
|
|
75
|
+
if (graphCandidate.gpuDrivenScene?.state !== undefined) {
|
|
76
|
+
const sceneRoot = graphCandidate.gpuDrivenScene.createRecoveryRoot(runtime.scope);
|
|
77
|
+
roots.push({ ...sceneRoot, cleanup: releaseGraphCandidate });
|
|
78
|
+
}
|
|
79
|
+
if (graphCandidate.pointsLines !== undefined) {
|
|
80
|
+
const pointsLinesRoot = graphCandidate.pointsLines.createRecoveryRoot(runtime.scope);
|
|
81
|
+
roots.push({ ...pointsLinesRoot, cleanup: releaseGraphCandidate });
|
|
82
|
+
}
|
|
83
|
+
if (runtime.gpuStore.recoveryResourceCount() > 0) {
|
|
84
|
+
const gpuStoreRoot = runtime.gpuStore.createRecoveryRoot(runtime.scope);
|
|
85
|
+
roots.push({ ...gpuStoreRoot, cleanup: releaseGraphCandidate });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
let discarded = false;
|
|
89
|
+
return {
|
|
90
|
+
roots: Object.freeze(roots),
|
|
91
|
+
publish: () => {
|
|
92
|
+
if (published || discarded) return;
|
|
93
|
+
if (candidateEnvironmentGeneration !== undefined && !candidateEnvironmentGeneration.retired) {
|
|
94
|
+
environmentLifecycle.retireActiveForReplacement();
|
|
95
|
+
candidateEnvironmentLifecycle.publish(candidateEnvironmentGeneration);
|
|
96
|
+
}
|
|
97
|
+
published = true;
|
|
98
|
+
publishEnvironmentLifecycle(candidateEnvironmentLifecycle);
|
|
99
|
+
Object.assign(frameState, { environmentLifecycle: candidateEnvironmentLifecycle });
|
|
100
|
+
},
|
|
101
|
+
discard: () => {
|
|
102
|
+
if (published || discarded) return;
|
|
103
|
+
discarded = true;
|
|
104
|
+
if (candidateEnvironmentGeneration !== undefined) {
|
|
105
|
+
candidateEnvironmentLifecycle.discard(candidateEnvironmentGeneration);
|
|
106
|
+
candidateEnvironmentGeneration = undefined;
|
|
107
|
+
}
|
|
108
|
+
candidateEnvironmentLifecycle.discardRecoveryCandidates();
|
|
109
|
+
graphCandidate?.release();
|
|
110
|
+
runtime.scope.abandon();
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { MipmapEncoderWork } from '@forgeax/engine-assets-runtime';
|
|
2
|
+
import type { Buffer, RenderPipeline, RhiDevice } from '@forgeax/engine-rhi';
|
|
3
|
+
import type { DeviceScope, LifecycleResourceSpec } from '../device/device-scope';
|
|
4
|
+
import type { GpuResidencyCache } from '../device/gpu-residency';
|
|
5
|
+
import type { RenderFeatureHost } from '../features/host';
|
|
6
|
+
import type { RenderFeatureGpuWorkOwner } from '../features/prepared-gpu-work';
|
|
7
|
+
import type { GpuDrivenProduction } from '../gpu-driven/production-raster';
|
|
8
|
+
import type { RenderFrameState } from '../record/frame-snapshot';
|
|
9
|
+
import type { RecoveryPipelineReadiness } from '../record/recovery-pipeline';
|
|
10
|
+
import type { PipelineState, RenderSystemInternals } from '../record/render-context';
|
|
11
|
+
import type { RenderFeatureGraphCandidate } from '../record/typed-frame-graph';
|
|
12
|
+
import type { PersistentGpuDrivenCandidate } from '../scene/render-scene';
|
|
13
|
+
|
|
14
|
+
/** The single Points/Lines owner's staged device-generation handoff. */
|
|
15
|
+
export interface RecoveryPointsLinesCandidate {
|
|
16
|
+
createRecoveryRoot(scope: DeviceScope): LifecycleResourceSpec<unknown>;
|
|
17
|
+
publish(): void;
|
|
18
|
+
release(): void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Candidate-only device/runtime inputs used by the recovery prepare seam. */
|
|
22
|
+
export interface RecoveryGraphCandidateRuntime {
|
|
23
|
+
readonly internals: RenderSystemInternals;
|
|
24
|
+
readonly pipelineState: PipelineState;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Detached graph state prepared on a replacement device, before publication. */
|
|
28
|
+
export interface RecoveryGraphCandidate {
|
|
29
|
+
readonly frameState: RenderFrameState;
|
|
30
|
+
readonly setupWorks: readonly MipmapEncoderWork[];
|
|
31
|
+
readonly device: RhiDevice;
|
|
32
|
+
readonly generation: number;
|
|
33
|
+
readonly gpuDrivenProduction?: GpuDrivenProduction;
|
|
34
|
+
readonly gpuDrivenScene?: PersistentGpuDrivenCandidate;
|
|
35
|
+
/** Staged CPU-expanded Points/Lines buffers owned by the same RenderSystem. */
|
|
36
|
+
readonly pointsLines?: RecoveryPointsLinesCandidate;
|
|
37
|
+
readonly featureHost?: RenderFeatureHost;
|
|
38
|
+
readonly featureGpuWork?: RenderFeatureGpuWorkOwner;
|
|
39
|
+
readonly featureGraphCandidate?: RenderFeatureGraphCandidate;
|
|
40
|
+
readonly postProcessPipelines?: ReadonlyMap<string, RenderPipeline>;
|
|
41
|
+
readonly recoveryReadiness: RecoveryPipelineReadiness;
|
|
42
|
+
/** Release all candidate roots before publication; safe to call repeatedly. */
|
|
43
|
+
readonly release: () => void;
|
|
44
|
+
/** Transfer candidate-root ownership to the published RenderSystem. */
|
|
45
|
+
readonly markPublished: () => void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Candidate setup completion; completion is bounded by the recovery owner. */
|
|
49
|
+
export interface RecoveryGraphSetupSubmission {
|
|
50
|
+
readonly completion?: PromiseLike<unknown>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export type RecoveryGraphCandidatePreparation =
|
|
54
|
+
| { readonly kind: 'no-seed' }
|
|
55
|
+
| { readonly kind: 'ready'; readonly candidate: RecoveryGraphCandidate }
|
|
56
|
+
| { readonly kind: 'failed'; readonly reason: string; readonly cause?: unknown };
|
|
57
|
+
|
|
58
|
+
/** Explicit candidate-owned inputs for lifecycle-root preparation. */
|
|
59
|
+
export interface RecoveryRootRuntime {
|
|
60
|
+
readonly scope: DeviceScope;
|
|
61
|
+
readonly device: RhiDevice;
|
|
62
|
+
readonly gpuStore: GpuResidencyCache;
|
|
63
|
+
readonly graphCandidate?: RecoveryGraphCandidate | undefined;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Candidate roots plus the one synchronous owner switch at publication. */
|
|
67
|
+
export interface RecoveryRootBundle {
|
|
68
|
+
readonly roots: readonly LifecycleResourceSpec<unknown>[];
|
|
69
|
+
publish(): void;
|
|
70
|
+
discard(): void;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Device-bound post-process resources prepared off to the side of the active renderer. */
|
|
74
|
+
export interface RecoveryPostProcessResources {
|
|
75
|
+
readonly device: RhiDevice;
|
|
76
|
+
readonly paramsBuffers: Map<string, Buffer>;
|
|
77
|
+
}
|