@forgeax/engine-render 0.1.33 → 0.1.35
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 +1062 -127
- package/dist/assembly/backend-contract.d.ts +2 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -1
- package/dist/assembly/barrel-distortion-inspection.d.ts +3 -0
- package/dist/assembly/barrel-distortion-inspection.d.ts.map +1 -0
- package/dist/assembly/canvas-draw-guard.d.ts +3 -0
- package/dist/assembly/canvas-draw-guard.d.ts.map +1 -0
- package/dist/assembly/cloud-shadow-entry.d.ts +4 -0
- package/dist/assembly/cloud-shadow-entry.d.ts.map +1 -0
- package/dist/assembly/device-feature-admission.d.ts +2 -2
- package/dist/assembly/dynamic-geometry-host.d.ts +4 -1
- package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
- package/dist/assembly/dynamic-geometry-runtime.d.ts +1 -1
- package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -1
- package/dist/assembly/factory.d.ts +1 -1
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/host-contract.d.ts +6 -5
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/pipeline-helpers.d.ts +5 -0
- package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -1
- package/dist/assembly/material-shader-policy.d.ts +16 -2
- package/dist/assembly/material-shader-policy.d.ts.map +1 -1
- package/dist/assembly/material-shader-prewarm.d.ts.map +1 -1
- package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
- package/dist/assembly/recovery/renderer-recover.d.ts +2 -0
- package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
- package/dist/assembly/render-feature-post-processes.d.ts +6 -0
- package/dist/assembly/render-feature-post-processes.d.ts.map +1 -0
- package/dist/assembly/render-target-host.d.ts +5 -0
- package/dist/assembly/render-target-host.d.ts.map +1 -1
- package/dist/assembly/renderer-facade.d.ts.map +1 -1
- package/dist/assembly/renderer-feature-inspection.d.ts +1 -1
- package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -1
- package/dist/assembly/renderer-frame-transaction.d.ts +12 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
- package/dist/assembly/renderer-inspection.d.ts +11 -0
- package/dist/assembly/renderer-inspection.d.ts.map +1 -1
- package/dist/assembly/webgpu-pbr-ready.d.ts +1 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-ready-per-pass.d.ts +39 -0
- package/dist/assembly/webgpu-ready-per-pass.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready.d.ts +1 -1
- package/dist/assembly/webgpu-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer-observation-owner.d.ts +35 -0
- package/dist/assembly/webgpu-renderer-observation-owner.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer.d.ts +2 -1
- package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
- package/dist/authoring.mjs +2 -4
- package/dist/authoring.mjs.map +1 -1
- package/dist/barrel-distortion.d.ts +47 -0
- package/dist/barrel-distortion.d.ts.map +1 -0
- package/dist/chunk-3XUBWRY2.mjs +1842 -0
- package/dist/chunk-3XUBWRY2.mjs.map +1 -0
- package/dist/{chunk-OO3DRYK7.mjs → chunk-G6HDNGY7.mjs} +2400 -1767
- package/dist/chunk-G6HDNGY7.mjs.map +1 -0
- package/dist/{chunk-ZDQWGQW7.mjs → chunk-LM5IE7GF.mjs} +4 -4
- package/dist/{chunk-ZDQWGQW7.mjs.map → chunk-LM5IE7GF.mjs.map} +1 -1
- package/dist/{chunk-VOZWDM3L.mjs → chunk-LNIUIKQ7.mjs} +1514 -498
- package/dist/chunk-LNIUIKQ7.mjs.map +1 -0
- package/dist/chunk-MXTWKZO4.mjs +3268 -0
- package/dist/chunk-MXTWKZO4.mjs.map +1 -0
- package/dist/chunk-MZ4C7EHF.mjs +6942 -0
- package/dist/chunk-MZ4C7EHF.mjs.map +1 -0
- package/dist/chunk-RIPAEGI6.mjs +48 -0
- package/dist/chunk-RIPAEGI6.mjs.map +1 -0
- package/dist/{chunk-LEAXOMYJ.mjs → chunk-SGPUJW3F.mjs} +117 -5
- package/dist/chunk-SGPUJW3F.mjs.map +1 -0
- package/dist/{chunk-PA5DRJNI.mjs → chunk-X2KA6WHM.mjs} +29 -4
- package/dist/chunk-X2KA6WHM.mjs.map +1 -0
- package/dist/{chunk-BLXGONR2.mjs → chunk-XSFB7XXQ.mjs} +51 -4
- package/dist/chunk-XSFB7XXQ.mjs.map +1 -0
- package/dist/cloud/density.d.ts +55 -0
- package/dist/cloud/density.d.ts.map +1 -0
- package/dist/cloud/extract.d.ts +25 -0
- package/dist/cloud/extract.d.ts.map +1 -0
- package/dist/cloud/feature.d.ts +57 -0
- package/dist/cloud/feature.d.ts.map +1 -0
- package/dist/cloud/frame-context.d.ts +8 -0
- package/dist/cloud/frame-context.d.ts.map +1 -0
- package/dist/cloud/inspection.d.ts +59 -0
- package/dist/cloud/inspection.d.ts.map +1 -0
- package/dist/cloud/optics.d.ts +56 -0
- package/dist/cloud/optics.d.ts.map +1 -0
- package/dist/cloud/parameters.d.ts +73 -0
- package/dist/cloud/parameters.d.ts.map +1 -0
- package/dist/cloud/resources.d.ts +60 -0
- package/dist/cloud/resources.d.ts.map +1 -0
- package/dist/cloud/shadow.d.ts +42 -0
- package/dist/cloud/shadow.d.ts.map +1 -0
- package/dist/cloud/temporal.d.ts +74 -0
- package/dist/cloud/temporal.d.ts.map +1 -0
- package/dist/components/barrel-distortion.d.ts +13 -0
- package/dist/components/barrel-distortion.d.ts.map +1 -0
- package/dist/components/cloud-layer.d.ts +29 -0
- package/dist/components/cloud-layer.d.ts.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/instances.d.ts +20 -6
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/construct-renderer.d.ts +1 -1
- package/dist/construct-renderer.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +8406 -5785
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/gpu-residency.d.ts +19 -19
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/dynamic-geometry.d.ts +5 -1
- package/dist/dynamic-geometry.d.ts.map +1 -1
- package/dist/errors/cloud.d.ts +59 -0
- package/dist/errors/cloud.d.ts.map +1 -0
- package/dist/errors/render.d.ts +20 -5
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/examples/single-layer-medium-surface.d.ts +47 -0
- package/dist/examples/single-layer-medium-surface.d.ts.map +1 -0
- package/dist/extract/camera.d.ts.map +1 -1
- package/dist/extract/contracts.d.ts +5 -1
- package/dist/extract/contracts.d.ts.map +1 -1
- package/dist/extract/material-context.d.ts +7 -0
- package/dist/extract/material-context.d.ts.map +1 -0
- package/dist/features/barrel-distortion.d.ts +29 -0
- package/dist/features/barrel-distortion.d.ts.map +1 -0
- package/dist/features/error-reporting.d.ts +6 -2
- package/dist/features/error-reporting.d.ts.map +1 -1
- package/dist/features/host.d.ts +15 -0
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/plan.d.ts +10 -0
- package/dist/features/plan.d.ts.map +1 -1
- package/dist/features/render-graph-contribution.d.ts +5 -0
- package/dist/features/render-graph-contribution.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +1 -0
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/targets.d.ts +2 -0
- package/dist/features/targets.d.ts.map +1 -1
- package/dist/features/types.d.ts +48 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +15 -7
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/glyph-text-layout-system.d.ts +1 -1
- package/dist/glyph-text-layout-system.d.ts.map +1 -1
- package/dist/gpu-dirty-ranges.d.ts +11 -0
- package/dist/gpu-dirty-ranges.d.ts.map +1 -0
- package/dist/gpu-driven/batch-topology.d.ts +17 -0
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/material-artifacts.d.ts +6 -0
- package/dist/gpu-driven/material-artifacts.d.ts.map +1 -1
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster-material.d.ts +178 -0
- package/dist/gpu-driven/production-raster-material.d.ts.map +1 -0
- package/dist/gpu-driven/production-raster.d.ts +47 -3
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/resource-allocation.d.ts +31 -0
- package/dist/gpu-driven/resource-allocation.d.ts.map +1 -0
- package/dist/gpu-driven/shadow-ownership.d.ts +14 -0
- package/dist/gpu-driven/shadow-ownership.d.ts.map +1 -0
- package/dist/gpu-driven/view-gpu.d.ts +26 -2
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +5 -0
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +2 -2
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/frame-resources.d.ts.map +1 -1
- package/dist/ibl/skylight-bind-group.d.ts +14 -5
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +30 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +780 -9
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +135 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/instance-buffer-cache.d.ts +4 -4
- package/dist/instance-buffer-cache.d.ts.map +1 -1
- package/dist/instances.d.ts +47 -100
- package/dist/instances.d.ts.map +1 -1
- package/dist/internal.mjs +7 -8
- package/dist/internal.mjs.map +1 -1
- package/dist/pbr-pipeline.d.ts +22 -4
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/single-layer-medium-passes.d.ts +73 -0
- package/dist/pipeline/single-layer-medium-passes.d.ts.map +1 -0
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-output/graph.d.ts.map +1 -1
- package/dist/pipeline/standard-output/lut-gpu.d.ts +2 -2
- package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -1
- package/dist/pipeline/standard-output/resources.d.ts +2 -2
- package/dist/pipeline/standard-output/resources.d.ts.map +1 -1
- package/dist/pipeline/standard-output/types.d.ts +4 -2
- package/dist/pipeline/standard-output/types.d.ts.map +1 -1
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +1 -1
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/prepare/prepared-graphics-resolver.d.ts +2 -0
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
- package/dist/publication/contract.d.ts +77 -0
- package/dist/publication/contract.d.ts.map +1 -0
- package/dist/publication/dependencies.d.ts +7 -0
- package/dist/publication/dependencies.d.ts.map +1 -0
- package/dist/publication/prepare-geometry.d.ts +9 -0
- package/dist/publication/prepare-geometry.d.ts.map +1 -0
- package/dist/publication/programs.d.ts +5 -0
- package/dist/publication/programs.d.ts.map +1 -0
- package/dist/publication/publisher.d.ts +33 -0
- package/dist/publication/publisher.d.ts.map +1 -0
- package/dist/publication/receiver.d.ts +29 -0
- package/dist/publication/receiver.d.ts.map +1 -0
- package/dist/publication/resource-scope.d.ts +18 -0
- package/dist/publication/resource-scope.d.ts.map +1 -0
- package/dist/publication/targets.d.ts +33 -0
- package/dist/publication/targets.d.ts.map +1 -0
- package/dist/publication/video.d.ts +5 -0
- package/dist/publication/video.d.ts.map +1 -0
- package/dist/record/barrel-distortion-frame.d.ts +15 -0
- package/dist/record/barrel-distortion-frame.d.ts.map +1 -0
- package/dist/record/dynamic-geometry-consumption.d.ts +10 -2
- package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -1
- package/dist/record/fold-buckets.d.ts +95 -0
- package/dist/record/fold-buckets.d.ts.map +1 -0
- package/dist/record/fold-instance-buffer.d.ts +6 -0
- package/dist/record/fold-instance-buffer.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +1 -0
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +43 -9
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame.d.ts +15 -65
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/gpu-draw-receipts.d.ts +11 -0
- package/dist/record/gpu-draw-receipts.d.ts.map +1 -0
- package/dist/record/gpu-timing.d.ts +8 -0
- package/dist/record/gpu-timing.d.ts.map +1 -1
- package/dist/record/helpers.d.ts +2 -2
- package/dist/record/helpers.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +22 -6
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +14 -10
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts +3 -16
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +13 -2
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/motion-blur-receipt.d.ts +11 -0
- package/dist/record/motion-blur-receipt.d.ts.map +1 -0
- package/dist/record/prepared-material-bindings.d.ts +3 -3
- package/dist/record/prepared-material-bindings.d.ts.map +1 -1
- package/dist/record/probe-blend-buffer.d.ts +16 -0
- package/dist/record/probe-blend-buffer.d.ts.map +1 -0
- package/dist/record/recovery-pipeline.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +24 -5
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts +2 -0
- 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/sprite-instance-buffer.d.ts +31 -0
- package/dist/record/sprite-instance-buffer.d.ts.map +1 -0
- package/dist/record/target-capture-graph.d.ts +19 -0
- package/dist/record/target-capture-graph.d.ts.map +1 -0
- package/dist/record/typed-frame-graph.d.ts +24 -15
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +11 -3
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/record/volume-params.d.ts +9 -0
- package/dist/record/volume-params.d.ts.map +1 -0
- package/dist/recovery/render-system-candidate.d.ts +14 -4
- package/dist/recovery/render-system-candidate.d.ts.map +1 -1
- package/dist/reflection/record-owner.d.ts.map +1 -1
- package/dist/render-contract.d.ts +46 -5
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +103 -2
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts +3 -2
- package/dist/render-system-extract-tail.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +18 -9
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system-presentation.d.ts +23 -0
- package/dist/render-system-presentation.d.ts.map +1 -0
- package/dist/render-system-producer-roots.d.ts +10 -0
- package/dist/render-system-producer-roots.d.ts.map +1 -0
- package/dist/render-system-projections.d.ts +3 -2
- package/dist/render-system-projections.d.ts.map +1 -1
- package/dist/render-system-residency.d.ts +12 -0
- package/dist/render-system-residency.d.ts.map +1 -0
- package/dist/render-system.d.ts +22 -21
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/probe-blend.d.ts +27 -0
- package/dist/scene/probe-blend.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +18 -7
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/scene/render-source.d.ts +42 -0
- package/dist/scene/render-source.d.ts.map +1 -0
- package/dist/scene/source-systems.d.ts +6 -0
- package/dist/scene/source-systems.d.ts.map +1 -0
- package/dist/ssao-buffers.d.ts +9 -0
- package/dist/ssao-buffers.d.ts.map +1 -1
- package/dist/surface/dynamic-input.d.ts +133 -0
- package/dist/surface/dynamic-input.d.ts.map +1 -0
- package/dist/surface/gpu-driven.d.ts +41 -0
- package/dist/surface/gpu-driven.d.ts.map +1 -0
- package/dist/surface/submission-observation.d.ts +136 -0
- package/dist/surface/submission-observation.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
- package/dist/systems/skin-palette-types.d.ts +10 -0
- package/dist/systems/skin-palette-types.d.ts.map +1 -1
- package/dist/systems/transparent-dispatch.d.ts +2 -2
- package/dist/systems/transparent-dispatch.d.ts.map +1 -1
- package/dist/systems/transparent-sort-config.d.ts +2 -1
- package/dist/systems/transparent-sort-config.d.ts.map +1 -1
- package/dist/temporal/gpu.d.ts +13 -1
- package/dist/temporal/gpu.d.ts.map +1 -1
- package/dist/temporal/index.mjs +6 -7
- package/dist/temporal/inspection.d.ts.map +1 -1
- package/dist/temporal/standard-scene-data.d.ts.map +1 -1
- package/dist/temporal/target-coverage-attachment.d.ts.map +1 -1
- package/dist/transmission/single-layer-medium.d.ts +89 -0
- package/dist/transmission/single-layer-medium.d.ts.map +1 -0
- package/dist/typed-render-graph-primitives.d.ts +14 -2
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/volume/component.d.ts +9 -4
- package/dist/volume/component.d.ts.map +1 -1
- package/dist/volume/extract.d.ts +1 -1
- package/dist/volume/extract.d.ts.map +1 -1
- package/dist/volume/inspection.d.ts +2 -0
- package/dist/volume/inspection.d.ts.map +1 -1
- package/dist/volume/passes.d.ts +4 -1
- package/dist/volume/passes.d.ts.map +1 -1
- package/dist/volume/resources.d.ts.map +1 -1
- package/package.json +22 -21
- package/src/__tests__/atmosphere-daylight.dawn.test.ts +72 -0
- package/src/__tests__/auto-exposure-transaction.integration.test.ts +4 -9
- package/src/__tests__/barrel-distortion-lkg.integration.test.ts +353 -0
- package/src/__tests__/barrel-distortion.dawn.test.ts +41 -0
- package/src/__tests__/barrel-distortion.unit.test.ts +364 -0
- package/src/__tests__/construct-renderer-identity.unit.test.ts +49 -0
- package/src/__tests__/detached-recovery-graph.unit.test.ts +277 -0
- package/src/__tests__/device-feature-admission.unit.test.ts +3 -2
- package/src/__tests__/device-loss-fanout.unit.test.ts +36 -1
- package/src/__tests__/docs-gate-green.unit.test.ts +112 -1
- package/src/__tests__/factory-contract.integration.test.ts +295 -45
- package/src/__tests__/feature-depth-input.dawn.test.ts +129 -2
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +14 -3
- package/src/__tests__/gpu-dirty-ranges.unit.test.ts +22 -0
- package/src/__tests__/gpu-driven-baseline.characterization.test.ts +16 -3
- package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +12 -0
- package/src/__tests__/gpu-driven-material-artifacts.unit.test.ts +143 -0
- package/src/__tests__/gpu-driven-pbr.dawn.test.ts +5 -6
- package/src/__tests__/gpu-driven-production.integration.test.ts +482 -3
- package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +6 -5
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +94 -6
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +18 -2
- package/src/__tests__/gpu-driven-view.browser.test.ts +5 -8
- package/src/__tests__/gpu-driven-view.dawn.test.ts +6 -2
- package/src/__tests__/gpu-driven-view.unit.test.ts +1 -1
- package/src/__tests__/gpu-pass-timing-lifecycle.integration.test.ts +1 -0
- package/src/__tests__/gpu-pass-timing.browser.test.ts +6 -4
- package/src/__tests__/gpu-pass-timing.rhi-null.unit.test.ts +1 -0
- package/src/__tests__/gpu-scene.unit.test.ts +119 -9
- package/src/__tests__/instance-allocation-failure.unit.test.ts +57 -0
- package/src/__tests__/instances-culling.integration.test.ts +10 -36
- package/src/__tests__/instances-store.unit.test.ts +97 -305
- package/src/__tests__/instances-world-ownership.integration.test.ts +62 -0
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +4 -1
- package/src/__tests__/main-pass-material-medium-selection.unit.test.ts +145 -0
- package/src/__tests__/material-shader-prewarm.unit.test.ts +59 -0
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +39 -1
- package/src/__tests__/materials-standard-contract.unit.test.ts +0 -1
- package/src/__tests__/morph-culling-reentry.dawn.test.ts +5 -5
- package/src/__tests__/morph-visual-evidence.integration.test.ts +8 -7
- package/src/__tests__/motion-blur-compute.dawn.test.ts +13 -7
- package/src/__tests__/motion-blur.pixel.integration.test.ts +2 -2
- package/src/__tests__/nineslice-handle-surface.unit.test.ts +4 -4
- package/src/__tests__/pbr-view-layout.unit.test.ts +9 -0
- package/src/__tests__/physical-clearcoat.integration.test.ts +66 -8
- package/src/__tests__/physical-material-budget.unit.test.ts +40 -0
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +66 -2
- package/src/__tests__/probe-bindings.unit.test.ts +582 -1
- package/src/__tests__/probe-scene-dirty.integration.test.ts +28 -1
- package/src/__tests__/receipt-observation-retirement.unit.test.ts +65 -0
- package/src/__tests__/recovery-candidate-prepare.contract.test.ts +69 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +8 -0
- package/src/__tests__/render-feature-diagnostics.unit.test.ts +15 -2
- package/src/__tests__/render-feature-error-reporting.unit.test.ts +21 -1
- package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +10 -1
- package/src/__tests__/render-feature-retry.unit.test.ts +12 -1
- package/src/__tests__/render-scene-mixed-updates.integration.test.ts +145 -19
- package/src/__tests__/render-scene-projection.unit.test.ts +36 -11
- package/src/__tests__/render-scene-temporal-retry.unit.test.ts +20 -20
- package/src/__tests__/render-target-probe-soak.perf.test.ts +2 -2
- package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +3 -3
- package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +5 -2
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +42 -8
- package/src/__tests__/renderer-frame-generation-fence.integration.test.ts +16 -0
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +26 -10
- package/src/__tests__/resource-allocation.unit.test.ts +123 -0
- package/src/__tests__/single-layer-medium-passes.unit.test.ts +275 -0
- package/src/__tests__/skin-motion-regression.unit.test.ts +70 -1
- package/src/__tests__/skin-palette-recycling.dawn.test.ts +97 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +15 -0
- package/src/__tests__/ssr-carrier-public-contract.unit.test.ts +21 -0
- package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +4 -4
- package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +2 -2
- package/src/__tests__/ssr-gpu-dispatch.ts +1 -1
- package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +6 -2
- package/src/__tests__/standard-output-chain-contract.unit.test.ts +28 -0
- package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +46 -1
- package/src/__tests__/standard-pipeline.integration.test.ts +182 -1
- package/src/__tests__/surface-dynamic-buffer-lifecycle.unit.test.ts +506 -0
- package/src/__tests__/surface-submission-observation.unit.test.ts +812 -0
- package/src/__tests__/temporal-history-lifecycle.unit.test.ts +32 -0
- package/src/__tests__/temporal-performance.integration.test.ts +3 -3
- package/src/__tests__/visibility-instances.integration.test.ts +7 -19
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +9 -20
- package/src/__tests__/volume-optics-oracle.unit.test.ts +4 -2
- package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +30 -20
- package/src/__tests__/volumetric-fog-errors.unit.test.ts +4 -3
- package/src/__tests__/volumetric-fog-multiple.unit.test.ts +55 -0
- package/src/__tests__/volumetric-fog-spot-frame-optics.integration.test.ts +1 -1
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +113 -9
- package/src/__tests__/volumetric-fog-topology.unit.test.ts +5 -3
- package/src/assembly/backend-contract.ts +30 -0
- package/src/assembly/barrel-distortion-inspection.ts +22 -0
- package/src/assembly/canvas-draw-guard.ts +11 -0
- package/src/assembly/cloud-shadow-entry.ts +22 -0
- package/src/assembly/device-feature-admission.ts +2 -2
- package/src/assembly/dynamic-geometry-host.ts +65 -37
- package/src/assembly/dynamic-geometry-runtime.ts +7 -1
- package/src/assembly/factory.ts +2 -30
- package/src/assembly/host-contract.ts +8 -5
- package/src/assembly/material/assembly.ts +25 -13
- package/src/assembly/material/pipeline-helpers.ts +53 -12
- package/src/assembly/material-shader-policy.ts +55 -0
- package/src/assembly/material-shader-prewarm.ts +21 -10
- package/src/assembly/recovery/device-loss-fanout.ts +13 -0
- package/src/assembly/recovery/renderer-recover.ts +50 -18
- package/src/assembly/render-feature-post-processes.ts +54 -0
- package/src/assembly/render-target-host.ts +57 -47
- package/src/assembly/renderer-facade.ts +7 -2
- package/src/assembly/renderer-feature-inspection.ts +8 -2
- package/src/assembly/renderer-frame-transaction.ts +23 -0
- package/src/assembly/renderer-inspection.ts +28 -0
- package/src/assembly/skin-palette-owner.ts +1 -1
- package/src/assembly/temporal-post-process-prewarm.ts +3 -3
- package/src/assembly/webgpu-pbr-ready.ts +9 -1
- package/src/assembly/webgpu-ready-per-pass.ts +104 -0
- package/src/assembly/webgpu-ready.ts +116 -62
- package/src/assembly/webgpu-renderer-bootstrap.ts +0 -12
- package/src/assembly/webgpu-renderer-observation-owner.ts +222 -0
- package/src/assembly/webgpu-renderer.ts +303 -313
- package/src/assembly/webgpu-vertex-layouts.ts +1 -1
- package/src/barrel-distortion.ts +247 -0
- package/src/cloud/__tests__/cloud-density-parity.dawn.test.ts +173 -0
- package/src/cloud/__tests__/cloud-layer-framebuffer-y.dawn.test.ts +265 -0
- package/src/cloud/__tests__/cloud-layer.browser.test.ts +432 -0
- package/src/cloud/__tests__/cloud-layer.unit.test.ts +634 -0
- package/src/cloud/density.ts +600 -0
- package/src/cloud/extract.ts +110 -0
- package/src/cloud/feature.ts +1810 -0
- package/src/cloud/frame-context.ts +42 -0
- package/src/cloud/inspection.ts +130 -0
- package/src/cloud/optics.ts +285 -0
- package/src/cloud/parameters.ts +255 -0
- package/src/cloud/resources.ts +122 -0
- package/src/cloud/shadow.ts +167 -0
- package/src/cloud/temporal.ts +226 -0
- package/src/components/barrel-distortion.ts +46 -0
- package/src/components/cloud-layer.ts +47 -0
- package/src/components/index.ts +2 -0
- package/src/components/instances.ts +18 -45
- package/src/components/sprite-instances.ts +1 -1
- package/src/construct-renderer.ts +1 -1
- package/src/device/gpu-residency.ts +26 -25
- package/src/dynamic-geometry.ts +12 -1
- package/src/errors/cloud.ts +103 -0
- package/src/errors/render.ts +47 -8
- package/src/examples/single-layer-medium-surface.ts +59 -0
- package/src/extract/camera.ts +15 -1
- package/src/extract/contracts.ts +5 -0
- package/src/extract/material-context.ts +21 -0
- package/src/features/barrel-distortion.ts +172 -0
- package/src/features/error-reporting.ts +26 -6
- package/src/features/host.ts +128 -19
- package/src/features/plan.ts +10 -0
- package/src/features/render-graph-contribution.ts +9 -0
- package/src/features/render-graph-raster.ts +45 -3
- package/src/features/targets.ts +66 -0
- package/src/features/types.ts +51 -0
- package/src/fullscreen-post-process-pass.ts +41 -9
- package/src/glyph-text-layout-system.ts +2 -2
- package/src/gpu-dirty-ranges.ts +48 -0
- package/src/gpu-driven/batch-topology.ts +53 -0
- package/src/gpu-driven/material-artifacts.ts +33 -25
- package/src/gpu-driven/prepared-draw.ts +12 -4
- package/src/gpu-driven/production-raster-material.ts +1894 -0
- package/src/gpu-driven/production-raster.ts +825 -784
- package/src/gpu-driven/resource-allocation.ts +142 -0
- package/src/gpu-driven/shadow-ownership.ts +71 -0
- package/src/gpu-driven/view-gpu.ts +164 -10
- package/src/gpu-scene.ts +75 -84
- package/src/hdrp-buffers.ts +4 -3
- package/src/ibl/frame-resources.ts +0 -1
- package/src/ibl/skylight-bind-group.ts +62 -32
- package/src/index.ts +205 -9
- package/src/inspection-types.ts +162 -0
- package/src/instance-buffer-cache.ts +4 -4
- package/src/instances.ts +152 -569
- package/src/pbr-pipeline.ts +230 -30
- package/src/pipeline/single-layer-medium-passes.ts +267 -0
- package/src/pipeline/standard-forward-lane.ts +313 -57
- package/src/pipeline/standard-output/graph.ts +8 -2
- package/src/pipeline/standard-output/lut-gpu.ts +3 -3
- package/src/pipeline/standard-output/resources.ts +2 -2
- package/src/pipeline/standard-output/types.ts +12 -1
- package/src/pipeline/standard-pipeline.ts +291 -18
- package/src/pipeline/standard-post.ts +90 -24
- package/src/pipeline-builder.ts +1 -1
- package/src/plugin.ts +4 -0
- package/src/points-lines/__tests__/points-lines.bench.ts +17 -8
- package/src/prepare/prepared-graphics-resolver.ts +2 -0
- package/src/publication/__tests__/derived-geometry.integration.test.ts +177 -0
- package/src/publication/__tests__/features.integration.test.ts +122 -0
- package/src/publication/__tests__/programs.unit.test.ts +25 -0
- package/src/publication/__tests__/publication.integration.test.ts +370 -0
- package/src/publication/__tests__/targets.integration.test.ts +120 -0
- package/src/publication/__tests__/video.browser.test.ts +50 -0
- package/src/publication/contract.ts +104 -0
- package/src/publication/dependencies.ts +54 -0
- package/src/publication/prepare-geometry.ts +94 -0
- package/src/publication/programs.ts +45 -0
- package/src/publication/publisher.ts +618 -0
- package/src/publication/receiver.ts +297 -0
- package/src/publication/resource-scope.ts +31 -0
- package/src/publication/targets.ts +182 -0
- package/src/publication/video.ts +33 -0
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +30 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +15 -1
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +9 -11
- package/src/record/__tests__/temporal-payload.unit.test.ts +1 -1
- package/src/record/__tests__/transparent-group2-selection.unit.test.ts +11 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +1 -0
- package/src/record/__tests__/video-texture-view.unit.test.ts +9 -9
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +4 -3
- package/src/record/barrel-distortion-frame.ts +110 -0
- package/src/record/dynamic-geometry-consumption.ts +39 -9
- package/src/record/fold-buckets.ts +855 -0
- package/src/record/fold-instance-buffer.ts +51 -0
- package/src/record/frame-lighting.ts +36 -2
- package/src/record/frame-snapshot.ts +45 -9
- package/src/record/frame.ts +258 -1105
- package/src/record/gpu-draw-receipts.ts +38 -0
- package/src/record/gpu-timing.ts +48 -5
- package/src/record/helpers.ts +2 -2
- package/src/record/main-pass-geometry.ts +272 -84
- package/src/record/main-pass-material.ts +102 -36
- package/src/record/main-pass-sprite-draws.ts +13 -217
- package/src/record/main-pass.ts +164 -27
- package/src/record/motion-blur-receipt.ts +91 -0
- package/src/record/prepared-material-bindings.ts +11 -6
- package/src/record/probe-blend-buffer.ts +180 -0
- package/src/record/recovery-pipeline.ts +35 -3
- package/src/record/render-context.ts +41 -5
- package/src/record/shadow-pass.ts +30 -4
- package/src/record/skybox-post-pass.ts +28 -4
- package/src/record/sprite-instance-buffer.ts +155 -0
- package/src/record/target-capture-graph.ts +258 -0
- package/src/record/typed-frame-graph.ts +776 -340
- package/src/record/view-ubo.ts +27 -4
- package/src/record/volume-params.ts +225 -0
- package/src/recovery/render-system-candidate.ts +243 -50
- package/src/reflection/record-owner.ts +7 -3
- package/src/render-contract.ts +54 -5
- package/src/render-graph-primitives.ts +7 -1
- package/src/render-pipeline.ts +130 -0
- package/src/render-system-extract-tail.ts +90 -78
- package/src/render-system-extract.ts +76 -76
- package/src/render-system-presentation.ts +56 -0
- package/src/render-system-producer-roots.ts +96 -0
- package/src/render-system-projections.ts +3 -2
- package/src/render-system-residency.ts +159 -0
- package/src/render-system.ts +421 -408
- package/src/scene/probe-blend.ts +96 -4
- package/src/scene/render-scene.ts +416 -337
- package/src/scene/render-source.ts +90 -0
- package/src/scene/source-systems.ts +33 -0
- package/src/ssao-buffers.ts +95 -2
- package/src/surface/__tests__/dynamic-input.unit.test.ts +374 -0
- package/src/surface/__tests__/gpu-driven.unit.test.ts +87 -0
- package/src/surface/dynamic-input.ts +658 -0
- package/src/surface/gpu-driven.ts +147 -0
- package/src/surface/submission-observation.ts +517 -0
- package/src/systems/skin-palette-allocator.ts +5 -1
- package/src/systems/skin-palette-types.ts +11 -0
- package/src/systems/transparent-dispatch.ts +2 -2
- package/src/systems/transparent-sort-config.ts +3 -1
- package/src/temporal/gpu.ts +101 -17
- package/src/temporal/inspection.ts +7 -1
- package/src/temporal/standard-scene-data.ts +5 -0
- package/src/temporal/target-coverage-attachment.ts +4 -0
- package/src/transmission/__tests__/single-layer-medium.unit.test.ts +149 -0
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +12 -11
- package/src/transmission/single-layer-medium.ts +322 -0
- package/src/typed-render-graph-primitives.ts +70 -2
- package/src/volume/component.ts +10 -9
- package/src/volume/extract.ts +11 -5
- package/src/volume/inspection.ts +3 -0
- package/src/volume/passes.ts +87 -4
- package/src/volume/resources.ts +2 -1
- package/dist/chunk-3RTCJTH4.mjs +0 -1610
- package/dist/chunk-3RTCJTH4.mjs.map +0 -1
- package/dist/chunk-BLXGONR2.mjs.map +0 -1
- package/dist/chunk-ILQ5MEZF.mjs +0 -32
- package/dist/chunk-ILQ5MEZF.mjs.map +0 -1
- package/dist/chunk-LEAXOMYJ.mjs.map +0 -1
- package/dist/chunk-NB2S7ZRX.mjs +0 -1783
- package/dist/chunk-NB2S7ZRX.mjs.map +0 -1
- package/dist/chunk-NNQL7CB3.mjs +0 -1713
- package/dist/chunk-NNQL7CB3.mjs.map +0 -1
- package/dist/chunk-OO3DRYK7.mjs.map +0 -1
- package/dist/chunk-PA5DRJNI.mjs.map +0 -1
- package/dist/chunk-PLAXOOX5.mjs +0 -1907
- package/dist/chunk-PLAXOOX5.mjs.map +0 -1
- package/dist/chunk-RXZ3RGOU.mjs +0 -53
- package/dist/chunk-RXZ3RGOU.mjs.map +0 -1
- package/dist/chunk-VOZWDM3L.mjs.map +0 -1
|
@@ -9,9 +9,11 @@ import {
|
|
|
9
9
|
type Result,
|
|
10
10
|
RhiError,
|
|
11
11
|
} from '@forgeax/engine-rhi';
|
|
12
|
+
import type { MaterialShaderArtifact } from '@forgeax/engine-shader';
|
|
12
13
|
import type { Handle, MeshAsset, SamplerAsset, TextureAsset } from '@forgeax/engine-types';
|
|
13
14
|
import { toShared } from '@forgeax/engine-types';
|
|
14
15
|
import { standardBloomAdmitted } from '../bloom-admission';
|
|
16
|
+
import { cloudShadowResolutionForQuality } from '../cloud/parameters';
|
|
15
17
|
import { createClusterBinScratch } from '../cluster-binner';
|
|
16
18
|
import type { EnvironmentLifecycle } from '../environment/lifecycle';
|
|
17
19
|
import {
|
|
@@ -29,8 +31,12 @@ import {
|
|
|
29
31
|
type PostProcessShaderEntry,
|
|
30
32
|
postProcessShaderEntrySignature,
|
|
31
33
|
} from '../fullscreen-post-process-pass';
|
|
32
|
-
import {
|
|
34
|
+
import {
|
|
35
|
+
collectGpuDrivenMaterialArtifacts,
|
|
36
|
+
requiresProbeBlendRecord,
|
|
37
|
+
} from '../gpu-driven/material-artifacts';
|
|
33
38
|
import { GpuDrivenProduction } from '../gpu-driven/production-raster';
|
|
39
|
+
import { disposeInstanceBufferChunks, disposeInstanceBuffers } from '../instance-buffer-cache';
|
|
34
40
|
import { inspectStandardLighting } from '../pipeline/standard-lighting/inspection';
|
|
35
41
|
import { retireAutoExposureGpuResources } from '../pipeline/standard-output/auto-exposure/gpu';
|
|
36
42
|
import {
|
|
@@ -38,12 +44,16 @@ import {
|
|
|
38
44
|
resetStandardOutputForDeviceLoss,
|
|
39
45
|
} from '../pipeline/standard-output/resources';
|
|
40
46
|
import type { PipelineBuilderShaderModuleFactory } from '../pipeline-builder';
|
|
47
|
+
import { standardTopologyVariantSet } from '../pipeline-spec';
|
|
41
48
|
import { inspectPointShadow } from '../point-shadow-inspection';
|
|
42
49
|
import type { PreparedGraphicsResolver } from '../prepare/prepared-graphics-resolver';
|
|
50
|
+
import type { RenderResourceScope } from '../publication/resource-scope';
|
|
43
51
|
import { gpuDrivenMeshesForFrame, validateRenderables } from '../record/frame';
|
|
44
52
|
import { prepareFrameLighting } from '../record/frame-lighting';
|
|
45
53
|
import type { RenderFrameState, ValidatedRenderable } from '../record/frame-snapshot';
|
|
54
|
+
import { resolveGeometryInstanceBuffer } from '../record/main-pass-geometry';
|
|
46
55
|
import { computeSplitLdrSprite } from '../record/main-pass-sprite-draws';
|
|
56
|
+
import { ensureProbeBlendRecordBuffer } from '../record/probe-blend-buffer';
|
|
47
57
|
import {
|
|
48
58
|
prepareRecoveryPipelineReadiness,
|
|
49
59
|
type RecoveryPipelineReadiness,
|
|
@@ -53,6 +63,8 @@ import {
|
|
|
53
63
|
ensureCompiledFrameGraph,
|
|
54
64
|
getRenderFeatureGraphState,
|
|
55
65
|
type RenderFeatureGraphCandidate,
|
|
66
|
+
retire as retireCompiledGraph,
|
|
67
|
+
shareRenderGraphGenerationAllocationOwner,
|
|
56
68
|
} from '../record/typed-frame-graph';
|
|
57
69
|
import { STANDARD_OUTPUT_TRANSFORM_FEATURE_ID } from '../render-contract';
|
|
58
70
|
import type {
|
|
@@ -62,6 +74,7 @@ import type {
|
|
|
62
74
|
} from '../render-system-extract';
|
|
63
75
|
import type { PersistentGpuDrivenCandidate, PersistentRenderScene } from '../scene/render-scene';
|
|
64
76
|
import { SHADOW_ATLAS_DEFAULT_LAYERS } from '../shadow-atlas';
|
|
77
|
+
import { ReadonlyDynamicInputPage, type SurfaceDynamicInputFrame } from '../surface/dynamic-input';
|
|
65
78
|
import { createTemporalFrameTransaction } from '../temporal/frame';
|
|
66
79
|
import {
|
|
67
80
|
getTemporalBindGroupResources,
|
|
@@ -83,16 +96,24 @@ export interface PreparedResolverCaches {
|
|
|
83
96
|
readonly preparedGroup0Pipelines: WeakSet<object>;
|
|
84
97
|
readonly preparedViewOnlyPipelines: WeakSet<object>;
|
|
85
98
|
readonly preparedRenderMaterialPipelines: WeakSet<object>;
|
|
86
|
-
readonly preparedAssetHandles: WeakMap<
|
|
99
|
+
readonly preparedAssetHandles: WeakMap<RenderResourceScope, Map<string, number>>;
|
|
87
100
|
}
|
|
88
101
|
|
|
89
102
|
export interface RecoveryFrameSeed {
|
|
90
103
|
readonly frame: ExtractedFrame;
|
|
91
|
-
readonly worlds: readonly
|
|
104
|
+
readonly worlds: readonly RenderResourceScope[];
|
|
92
105
|
readonly cameraOwner: number;
|
|
93
106
|
readonly resourceOwner: number;
|
|
94
107
|
readonly width: number;
|
|
95
108
|
readonly height: number;
|
|
109
|
+
/** Last submitted Surface page is reused while the replacement device warms. */
|
|
110
|
+
readonly surfaceDynamicInput?: SurfaceDynamicInputFrame;
|
|
111
|
+
/** Last submitted RenderResourceScope/App time snapshot for the Surface frame ABI. */
|
|
112
|
+
readonly frameTime?: number;
|
|
113
|
+
/** Exact forward artifacts accepted by the submitted frame. */
|
|
114
|
+
readonly materialArtifacts?: ReadonlyMap<string, MaterialShaderArtifact>;
|
|
115
|
+
/** Exact ShadowCaster artifacts accepted by the submitted frame. */
|
|
116
|
+
readonly shadowMaterialArtifacts?: ReadonlyMap<string, MaterialShaderArtifact>;
|
|
96
117
|
}
|
|
97
118
|
|
|
98
119
|
export interface RenderSystemRecoveryDependencies {
|
|
@@ -124,7 +145,7 @@ export interface RenderSystemRecoveryDependencies {
|
|
|
124
145
|
readonly createPreparedResolverFactory: (
|
|
125
146
|
runtime: RenderSystemInternals,
|
|
126
147
|
gpuWork: RenderFeatureGpuWorkOwner,
|
|
127
|
-
worlds: readonly
|
|
148
|
+
worlds: readonly RenderResourceScope[],
|
|
128
149
|
caches: PreparedResolverCaches,
|
|
129
150
|
) => (input: RenderFeaturePreparedGraphicsResolverInput) => PreparedGraphicsResolver;
|
|
130
151
|
readonly createPreparedResolverCaches: () => PreparedResolverCaches;
|
|
@@ -209,13 +230,18 @@ export function createRenderSystemRecovery(
|
|
|
209
230
|
} = deps;
|
|
210
231
|
|
|
211
232
|
// This is a detached CPU projection, retained only after queue submission.
|
|
212
|
-
// It is not a
|
|
233
|
+
// It is not a RenderResourceScope/lease cache and it never carries target or scheduler state.
|
|
213
234
|
let lastSuccessfulFrameSeed: RecoveryFrameSeed | undefined;
|
|
214
235
|
|
|
215
236
|
const createRecoveryCandidateFrameState = (): RenderFrameState => {
|
|
216
|
-
const {
|
|
217
|
-
|
|
237
|
+
const {
|
|
238
|
+
probeBlendRecordBuffer: discardedProbeBlendRecordBuffer,
|
|
239
|
+
instanceCollections: discardedInstanceInspection,
|
|
240
|
+
...baseFrameState
|
|
241
|
+
} = frameState;
|
|
218
242
|
void discardedProbeBlendRecordBuffer;
|
|
243
|
+
// Candidate uploads must not publish residency into the active inspection.
|
|
244
|
+
void discardedInstanceInspection;
|
|
219
245
|
return {
|
|
220
246
|
...baseFrameState,
|
|
221
247
|
successfulTemporalFrameIndex: 0,
|
|
@@ -256,15 +282,18 @@ export function createRenderSystemRecovery(
|
|
|
256
282
|
retiredCompiledFrameGraphs: new Set(),
|
|
257
283
|
currentFrameObservationSource: undefined,
|
|
258
284
|
lastSuccessfulCameraAntialias: undefined,
|
|
285
|
+
lastSuccessfulBarrelDistortion: undefined,
|
|
259
286
|
temporalGpuState: undefined,
|
|
260
287
|
activeTemporalGpuState: undefined,
|
|
261
288
|
retiringTemporalGpuStates: new Set(),
|
|
289
|
+
cloudHistoryActive: false,
|
|
262
290
|
lastSuccessfulTemporalView: undefined,
|
|
263
291
|
pendingTemporalCommit: { kind: 'none' },
|
|
264
292
|
environmentGeneration: undefined,
|
|
265
293
|
currentDirectionalShadowView: null,
|
|
266
294
|
currentSpotShadowView: null,
|
|
267
295
|
instanceBuffers: new Map(),
|
|
296
|
+
instanceBufferChunks: new Map(),
|
|
268
297
|
morphBuffers: new Map(),
|
|
269
298
|
hdrpClusterBinScratch: createClusterBinScratch(),
|
|
270
299
|
hdrpClusterGridScratch: null,
|
|
@@ -299,6 +328,18 @@ export function createRenderSystemRecovery(
|
|
|
299
328
|
candidate.recoveryReadiness.assertPreparedCache();
|
|
300
329
|
}
|
|
301
330
|
const previousFeatureHost = internals.featureHost;
|
|
331
|
+
// The candidate graph proves topology and pipeline readiness before the
|
|
332
|
+
// publication boundary, but its imported display view was acquired before
|
|
333
|
+
// the shared canvas context was reconfigured for the replacement device.
|
|
334
|
+
// Retire that frame-bound graph and preserve the prepared owners/caches;
|
|
335
|
+
// the first recovered frame recompiles the same topology against the
|
|
336
|
+
// newly configured context instead of submitting a view from the lost
|
|
337
|
+
// device generation.
|
|
338
|
+
const candidateDisplayGraph = candidate.frameState.compiledFrameGraph;
|
|
339
|
+
candidate.frameState.compiledFrameGraph = null;
|
|
340
|
+
candidate.frameState.compiledFrameGraphTopologyKey = null;
|
|
341
|
+
candidate.frameState.perFrameGraph = null;
|
|
342
|
+
candidateDisplayGraph?.retire().catch(() => undefined);
|
|
302
343
|
// The caller enters this method only after the active generation swap and
|
|
303
344
|
// after resetForRecover() has shed every lost-device owner. Replace the
|
|
304
345
|
// whole device-bound frame projection so no stale cache/map/temporal view
|
|
@@ -366,10 +407,13 @@ export function createRenderSystemRecovery(
|
|
|
366
407
|
// A successful clear-only draw can have no display camera. There is no
|
|
367
408
|
// frame graph to rehydrate in that case, but the device generation is
|
|
368
409
|
// still recoverable; the next camera-bearing draw will build its graph
|
|
369
|
-
// from the current
|
|
410
|
+
// from the current RenderResourceScope composition.
|
|
370
411
|
if (camera === undefined) return { kind: 'no-seed' };
|
|
371
412
|
|
|
372
413
|
const candidateFrameState = createRecoveryCandidateFrameState();
|
|
414
|
+
// Candidate graph generations are one renderer-owned allocation stream;
|
|
415
|
+
// publication changes their role, not their accounting owner.
|
|
416
|
+
shareRenderGraphGenerationAllocationOwner(frameState, candidateFrameState);
|
|
373
417
|
resetStandardOutputForDeviceLoss(candidateFrameState, runtime.internals.deviceScope.generation);
|
|
374
418
|
Object.assign(candidateFrameState, {
|
|
375
419
|
temporalFrame: undefined,
|
|
@@ -382,6 +426,7 @@ export function createRenderSystemRecovery(
|
|
|
382
426
|
let candidateFeatureHost: RenderFeatureHost | undefined;
|
|
383
427
|
let candidateFeatureGpuWork: RenderFeatureGpuWorkOwner | undefined;
|
|
384
428
|
let candidatePointsLines: RecoveryPointsLinesCandidate | undefined;
|
|
429
|
+
let candidateSurfacePage: ReadonlyDynamicInputPage | undefined;
|
|
385
430
|
let candidateFeatureGraph: RenderFeatureGraphCandidate = {
|
|
386
431
|
plans: Object.freeze([]),
|
|
387
432
|
fullscreenEffects: new Map(),
|
|
@@ -401,12 +446,11 @@ export function createRenderSystemRecovery(
|
|
|
401
446
|
if (pendingOutput !== undefined) retireAutoExposureGpuResources(pendingOutput);
|
|
402
447
|
candidateFrameState.pendingAutoExposureGpuResources = undefined;
|
|
403
448
|
for (const work of setupWorks) work.discard();
|
|
404
|
-
setupWorks.length = 0;
|
|
405
449
|
const graph = candidateFrameState.compiledFrameGraph;
|
|
406
450
|
candidateFrameState.compiledFrameGraph = null;
|
|
407
451
|
candidateFrameState.perFrameGraph = null;
|
|
408
452
|
try {
|
|
409
|
-
graph
|
|
453
|
+
if (graph !== null) retireCompiledGraph(candidateFrameState, graph);
|
|
410
454
|
} catch {
|
|
411
455
|
// Candidate cleanup continues through every independent owner.
|
|
412
456
|
}
|
|
@@ -430,10 +474,21 @@ export function createRenderSystemRecovery(
|
|
|
430
474
|
candidateGpuDrivenScene = undefined;
|
|
431
475
|
candidatePointsLines?.release();
|
|
432
476
|
candidatePointsLines = undefined;
|
|
477
|
+
candidateSurfacePage?.release();
|
|
478
|
+
candidateSurfacePage = undefined;
|
|
479
|
+
disposeInstanceBuffers(candidateFrameState.instanceBuffers, runtime.internals.errorRegistry);
|
|
480
|
+
if (candidateFrameState.instanceBufferChunks !== undefined) {
|
|
481
|
+
disposeInstanceBufferChunks(
|
|
482
|
+
candidateFrameState.instanceBufferChunks,
|
|
483
|
+
runtime.internals.errorRegistry,
|
|
484
|
+
);
|
|
485
|
+
}
|
|
433
486
|
candidateGpuStore.destroyAll();
|
|
434
487
|
};
|
|
435
488
|
const markPublished = (): void => {
|
|
436
489
|
candidatePointsLines?.publish();
|
|
490
|
+
candidateSurfacePage?.release();
|
|
491
|
+
candidateSurfacePage = undefined;
|
|
437
492
|
candidatePublished = true;
|
|
438
493
|
};
|
|
439
494
|
const failed = (
|
|
@@ -449,7 +504,7 @@ export function createRenderSystemRecovery(
|
|
|
449
504
|
candidateFrameState,
|
|
450
505
|
runtime.internals,
|
|
451
506
|
camera,
|
|
452
|
-
seed.worlds[seed.cameraOwner] as
|
|
507
|
+
seed.worlds[seed.cameraOwner] as RenderResourceScope,
|
|
453
508
|
);
|
|
454
509
|
if (!output.ok) return failed('candidate Standard output preparation failed', output.error);
|
|
455
510
|
const gpuScene = persistentRenderScene.prepareRecoveryGpuDrivenCandidate(
|
|
@@ -457,11 +512,101 @@ export function createRenderSystemRecovery(
|
|
|
457
512
|
);
|
|
458
513
|
if (!gpuScene.ok) return failed('candidate GPU scene preparation failed', gpuScene.error);
|
|
459
514
|
candidateGpuDrivenScene = gpuScene.value;
|
|
515
|
+
candidateValidated = validateRenderables(
|
|
516
|
+
runtime.internals,
|
|
517
|
+
seed.worlds[seed.cameraOwner] as RenderResourceScope,
|
|
518
|
+
seed.worlds,
|
|
519
|
+
runtime.pipelineState,
|
|
520
|
+
candidateFrameState,
|
|
521
|
+
seed.frame.renderables,
|
|
522
|
+
seed.frame.dispatch,
|
|
523
|
+
);
|
|
524
|
+
if (candidateValidated.length !== seed.frame.renderables.length) {
|
|
525
|
+
return failed('candidate validation did not retain every LKG-visible renderable');
|
|
526
|
+
}
|
|
527
|
+
const lighting = prepareFrameLighting(
|
|
528
|
+
runtime.internals,
|
|
529
|
+
candidateFrameState,
|
|
530
|
+
seed.frame.lights,
|
|
531
|
+
camera,
|
|
532
|
+
runtime.pipelineState,
|
|
533
|
+
);
|
|
534
|
+
if (!lighting.ok) return failed('candidate lighting preparation failed');
|
|
535
|
+
let recoverySurfaceDynamicInput = seed.surfaceDynamicInput;
|
|
536
|
+
if (
|
|
537
|
+
recoverySurfaceDynamicInput !== undefined &&
|
|
538
|
+
recoverySurfaceDynamicInput.page.deviceGeneration !==
|
|
539
|
+
runtime.internals.deviceScope.generation
|
|
540
|
+
) {
|
|
541
|
+
const source = recoverySurfaceDynamicInput;
|
|
542
|
+
const created = ReadonlyDynamicInputPage.create({
|
|
543
|
+
sourceId: source.page.sourceId,
|
|
544
|
+
pageId: source.page.pageId,
|
|
545
|
+
schema: source.page.schema,
|
|
546
|
+
});
|
|
547
|
+
if (!created.ok) {
|
|
548
|
+
return failed('candidate Surface recovery page creation failed', created.error);
|
|
549
|
+
}
|
|
550
|
+
candidateSurfacePage = created.value;
|
|
551
|
+
// Preserve CPU-authored parameters before preparing the replacement GPU page.
|
|
552
|
+
candidateSurfacePage.bytes.set(source.page.bytes);
|
|
553
|
+
const reconfigured = candidateSurfacePage.reconfigureDevice(
|
|
554
|
+
runtime.internals.deviceScope.generation,
|
|
555
|
+
);
|
|
556
|
+
if (!reconfigured.ok) {
|
|
557
|
+
return failed('candidate Surface recovery page generation failed', reconfigured.error);
|
|
558
|
+
}
|
|
559
|
+
const ranges = (source.ranges ?? []).map((range) => {
|
|
560
|
+
const reserved = candidateSurfacePage?.reserveRange({
|
|
561
|
+
domain: range.domain,
|
|
562
|
+
recordStart: range.recordStart,
|
|
563
|
+
recordCount: range.recordCount,
|
|
564
|
+
instanceIndex: range.instanceIndex,
|
|
565
|
+
member: range.member,
|
|
566
|
+
});
|
|
567
|
+
if (reserved === undefined || !reserved.ok) {
|
|
568
|
+
throw reserved?.error ?? new Error('candidate Surface recovery range unavailable');
|
|
569
|
+
}
|
|
570
|
+
return reserved.value;
|
|
571
|
+
});
|
|
572
|
+
recoverySurfaceDynamicInput = {
|
|
573
|
+
page: candidateSurfacePage,
|
|
574
|
+
ranges,
|
|
575
|
+
projectionRevision: source.projectionRevision + 1,
|
|
576
|
+
frameTime: source.frameTime,
|
|
577
|
+
};
|
|
578
|
+
}
|
|
460
579
|
if (candidateGpuDrivenScene.state !== undefined) {
|
|
461
580
|
candidateGpuDrivenProduction = GpuDrivenProduction.forDevice(
|
|
462
581
|
runtime.internals.device,
|
|
463
582
|
gpuDrivenShaderFactory,
|
|
464
583
|
);
|
|
584
|
+
const clustered = lighting.value.standard?.kind === 'clustered';
|
|
585
|
+
const standardVariantSet = standardTopologyVariantSet(
|
|
586
|
+
lighting.value.standard,
|
|
587
|
+
runtime.internals.device.caps.storageBuffer,
|
|
588
|
+
false,
|
|
589
|
+
);
|
|
590
|
+
const standardPbrArtifact = runtime.internals.getMaterialShaderArtifact?.(
|
|
591
|
+
'forgeax::default-standard-pbr',
|
|
592
|
+
{
|
|
593
|
+
vertexColorAvailable: false,
|
|
594
|
+
deformation: 'rigid',
|
|
595
|
+
pass: 'forward',
|
|
596
|
+
address: 'scene-index',
|
|
597
|
+
variantSet: standardVariantSet,
|
|
598
|
+
},
|
|
599
|
+
);
|
|
600
|
+
const standardPbrSkinArtifact = runtime.internals.getMaterialShaderArtifact?.(
|
|
601
|
+
'forgeax::pbr-skin',
|
|
602
|
+
{
|
|
603
|
+
vertexColorAvailable: false,
|
|
604
|
+
deformation: 'skin',
|
|
605
|
+
pass: 'forward',
|
|
606
|
+
address: 'scene-index',
|
|
607
|
+
variantSet: standardVariantSet,
|
|
608
|
+
},
|
|
609
|
+
);
|
|
465
610
|
const shadowProjection = persistentRenderScene.shadowCasterProjection();
|
|
466
611
|
// The retained scene owns prepared draw receipts. The extraction seed
|
|
467
612
|
// precedes GPU admission and must not stand in for that projection.
|
|
@@ -482,20 +627,45 @@ export function createRenderSystemRecovery(
|
|
|
482
627
|
},
|
|
483
628
|
renderableIndex,
|
|
484
629
|
}));
|
|
485
|
-
const
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
seed.frame.lights.
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
630
|
+
const collectedArtifacts = collectGpuDrivenMaterialArtifacts({
|
|
631
|
+
rows: artifactRows(seed.frame.renderables),
|
|
632
|
+
shadowRows: artifactRows(shadowProjection?.renderables ?? []),
|
|
633
|
+
dispatch: seed.frame.dispatch,
|
|
634
|
+
shadowDispatch: shadowProjection?.dispatch ?? seed.frame.dispatch,
|
|
635
|
+
resolve: runtime.internals.getMaterialShaderArtifact,
|
|
636
|
+
clustered:
|
|
637
|
+
seed.frame.lights.point.length +
|
|
638
|
+
seed.frame.lights.spot.length +
|
|
639
|
+
seed.frame.lights.rect.length >
|
|
640
|
+
0 || candidateFrameState.installedPipelineConfig?.ssao?.enabled === true,
|
|
641
|
+
reflectionFallback: candidateFrameState.reflectionFallbackDemand === true,
|
|
642
|
+
});
|
|
643
|
+
const materialArtifacts =
|
|
644
|
+
collectedArtifacts.materialArtifacts.size > 0
|
|
645
|
+
? collectedArtifacts.materialArtifacts
|
|
646
|
+
: (seed.materialArtifacts ?? new Map());
|
|
647
|
+
const shadowMaterialArtifacts =
|
|
648
|
+
collectedArtifacts.shadowMaterialArtifacts.size > 0
|
|
649
|
+
? collectedArtifacts.shadowMaterialArtifacts
|
|
650
|
+
: (seed.shadowMaterialArtifacts ?? new Map());
|
|
651
|
+
const firstMaterialArtifact = materialArtifacts.values().next().value as
|
|
652
|
+
| MaterialShaderArtifact
|
|
653
|
+
| undefined;
|
|
654
|
+
const firstSkinArtifact = [...materialArtifacts.values()].find(
|
|
655
|
+
(artifact) => artifact.receipt?.skinPaletteAddress !== undefined,
|
|
656
|
+
);
|
|
657
|
+
const firstArtifact = firstMaterialArtifact ?? standardPbrArtifact;
|
|
658
|
+
const materialSkinArtifact = firstSkinArtifact ?? standardPbrSkinArtifact;
|
|
659
|
+
const probeBlendRequested = [...materialArtifacts.values()].some((artifact) =>
|
|
660
|
+
requiresProbeBlendRecord(artifact),
|
|
661
|
+
);
|
|
662
|
+
const probeBlendRecordBuffer = probeBlendRequested
|
|
663
|
+
? ensureProbeBlendRecordBuffer(
|
|
664
|
+
runtime.internals.device,
|
|
665
|
+
candidateFrameState,
|
|
666
|
+
candidateGpuDrivenScene.state.probeBlend,
|
|
667
|
+
)
|
|
668
|
+
: undefined;
|
|
499
669
|
const prepared = candidateGpuDrivenProduction.prepare({
|
|
500
670
|
scene: candidateGpuDrivenScene.state,
|
|
501
671
|
camera,
|
|
@@ -507,11 +677,21 @@ export function createRenderSystemRecovery(
|
|
|
507
677
|
),
|
|
508
678
|
viewBindGroupLayout: runtime.pipelineState.viewBindGroupLayout,
|
|
509
679
|
meshResidencyEpoch: runtime.internals.gpuStore.meshResidencyEpoch,
|
|
510
|
-
|
|
680
|
+
hdrp:
|
|
681
|
+
clustered &&
|
|
682
|
+
((lighting.value.standard?.prepared.local.length ?? 0) > 0 ||
|
|
683
|
+
candidateFrameState.installedPipelineConfig?.ssao?.enabled === true),
|
|
684
|
+
clustered,
|
|
511
685
|
...(firstArtifact === undefined ? {} : { materialArtifact: firstArtifact }),
|
|
512
|
-
...(
|
|
686
|
+
...(materialSkinArtifact === undefined ? {} : { materialSkinArtifact }),
|
|
513
687
|
...(materialArtifacts.size === 0 ? {} : { materialArtifacts }),
|
|
514
688
|
...(shadowMaterialArtifacts.size === 0 ? {} : { shadowMaterialArtifacts }),
|
|
689
|
+
...(probeBlendRecordBuffer === undefined ? {} : { probeBlendRecordBuffer }),
|
|
690
|
+
...(seed.frameTime === undefined ? {} : { frameTime: seed.frameTime }),
|
|
691
|
+
...(recoverySurfaceDynamicInput === undefined
|
|
692
|
+
? {}
|
|
693
|
+
: { surfaceDynamicInput: recoverySurfaceDynamicInput }),
|
|
694
|
+
deviceGeneration: runtime.internals.deviceScope.generation,
|
|
515
695
|
materialPipelineState: runtime.pipelineState,
|
|
516
696
|
...(runtime.internals.getMaterialShaderPipelineEntry === undefined
|
|
517
697
|
? {}
|
|
@@ -520,6 +700,25 @@ export function createRenderSystemRecovery(
|
|
|
520
700
|
if (!prepared.ok) return failed('candidate GPU-driven preparation failed', prepared.error);
|
|
521
701
|
preparedGpuDriven = prepared.value;
|
|
522
702
|
}
|
|
703
|
+
// A fully GPU-owned frame recovers through GPU Scene above. Only mixed
|
|
704
|
+
// or direct frames need the legacy instance-buffer closure as well.
|
|
705
|
+
if (!preparedGpuDriven?.ownsAllDrawItems || !preparedGpuDriven.ownsAllShadowCasters) {
|
|
706
|
+
for (const entry of candidateValidated) {
|
|
707
|
+
if (entry.source.instances === undefined) continue;
|
|
708
|
+
const prepared = resolveGeometryInstanceBuffer(
|
|
709
|
+
{
|
|
710
|
+
runtime: runtime.internals,
|
|
711
|
+
pipelineState: runtime.pipelineState,
|
|
712
|
+
frameState: candidateFrameState,
|
|
713
|
+
bindGroupCounts: { createBindGroup: 0, keys: [] },
|
|
714
|
+
},
|
|
715
|
+
entry,
|
|
716
|
+
[],
|
|
717
|
+
false,
|
|
718
|
+
);
|
|
719
|
+
if (prepared === null) return failed('candidate instance preparation failed');
|
|
720
|
+
}
|
|
721
|
+
}
|
|
523
722
|
candidateFeatureHost = runtime.internals.featureHost;
|
|
524
723
|
if (candidateFeatureHost !== undefined && candidateFeatureHost.size > 0) {
|
|
525
724
|
candidateFeatureGpuWork = createFeatureGpuWorkOwner(runtime.internals);
|
|
@@ -529,11 +728,13 @@ export function createRenderSystemRecovery(
|
|
|
529
728
|
colorAttachmentFormat: runtime.pipelineState.colorAttachmentFormat,
|
|
530
729
|
storageBuffer: runtime.internals.device.caps.storageBuffer,
|
|
531
730
|
multisample: runtime.internals.device.caps.backendKind !== 'wgpu-webgl2',
|
|
731
|
+
cloudHistory: seed.frame.cloudLayer !== undefined,
|
|
532
732
|
});
|
|
533
733
|
const featureFrame = runRenderFeatureFrame(candidateFeatureHost, {
|
|
534
|
-
worlds: seed.worlds,
|
|
734
|
+
worlds: seed.worlds.filter((world): world is World => !('resolveAsset' in world)),
|
|
535
735
|
owner: seed.resourceOwner,
|
|
536
736
|
frameNumber: candidateFrameState.frameNumber,
|
|
737
|
+
selectedCamera: camera,
|
|
537
738
|
frameSize: {
|
|
538
739
|
width: runtime.internals.canvas.width,
|
|
539
740
|
height: runtime.internals.canvas.height,
|
|
@@ -557,7 +758,7 @@ export function createRenderSystemRecovery(
|
|
|
557
758
|
gpuWork: candidateFeatureGpuWork,
|
|
558
759
|
});
|
|
559
760
|
if (featureFrame.errors.length > 0) {
|
|
560
|
-
return failed('candidate render-feature preparation failed');
|
|
761
|
+
return failed('candidate render-feature preparation failed', featureFrame.errors[0]);
|
|
561
762
|
}
|
|
562
763
|
const featurePreparationIncomplete = featureFrame.plans.some((planned) => {
|
|
563
764
|
const execution = getRenderFeaturePlanExecutionProjection(planned);
|
|
@@ -586,6 +787,7 @@ export function createRenderSystemRecovery(
|
|
|
586
787
|
candidateFeatureGraph = {
|
|
587
788
|
plans: featureFrame.plans,
|
|
588
789
|
fullscreenEffects: featureFrame.fullscreenEffects,
|
|
790
|
+
postProcessIdentities: featureFrame.postProcessIdentities,
|
|
589
791
|
...(batches.length === 0
|
|
590
792
|
? {}
|
|
591
793
|
: { preparedResourceKey: `recovery-${runtime.internals.deviceScope.generation}` }),
|
|
@@ -678,26 +880,6 @@ export function createRenderSystemRecovery(
|
|
|
678
880
|
}
|
|
679
881
|
}
|
|
680
882
|
}
|
|
681
|
-
candidateValidated = validateRenderables(
|
|
682
|
-
runtime.internals,
|
|
683
|
-
resourceWorld,
|
|
684
|
-
seed.worlds,
|
|
685
|
-
runtime.pipelineState,
|
|
686
|
-
candidateFrameState,
|
|
687
|
-
seed.frame.renderables,
|
|
688
|
-
seed.frame.dispatch,
|
|
689
|
-
);
|
|
690
|
-
if (candidateValidated.length !== seed.frame.renderables.length) {
|
|
691
|
-
return failed('candidate validation did not retain every LKG-visible renderable');
|
|
692
|
-
}
|
|
693
|
-
const lighting = prepareFrameLighting(
|
|
694
|
-
runtime.internals,
|
|
695
|
-
candidateFrameState,
|
|
696
|
-
seed.frame.lights,
|
|
697
|
-
camera,
|
|
698
|
-
runtime.pipelineState,
|
|
699
|
-
);
|
|
700
|
-
if (!lighting.ok) return failed('candidate lighting preparation failed');
|
|
701
883
|
candidatePointsLines = pointsLinesOwner.prepareRecoveryCandidate(
|
|
702
884
|
candidateValidated,
|
|
703
885
|
lighting.value.standard?.kind === 'clustered',
|
|
@@ -723,7 +905,11 @@ export function createRenderSystemRecovery(
|
|
|
723
905
|
});
|
|
724
906
|
const candidatePostProcessIds = new Set<string>([
|
|
725
907
|
...(candidateFrameState.installedPipelineConfig?.postEffects ?? []),
|
|
726
|
-
|
|
908
|
+
// Required identities include effects disabled for this frame. Warm only
|
|
909
|
+
// published entries, using their public identity rather than graph aliases.
|
|
910
|
+
...(candidateFeatureGraph.postProcessIdentities ?? []).filter((id) =>
|
|
911
|
+
candidateFeatureGraph.fullscreenEffects.has(id),
|
|
912
|
+
),
|
|
727
913
|
]);
|
|
728
914
|
const configuredPostEffects = candidateFrameState.installedPipelineConfig?.postEffects ?? [];
|
|
729
915
|
const postProcessPipeline = runtime.internals.getPostProcessPipeline;
|
|
@@ -855,6 +1041,13 @@ export function createRenderSystemRecovery(
|
|
|
855
1041
|
(error) => {
|
|
856
1042
|
recoveryGraphFailure ??= error;
|
|
857
1043
|
},
|
|
1044
|
+
undefined,
|
|
1045
|
+
undefined,
|
|
1046
|
+
false,
|
|
1047
|
+
false,
|
|
1048
|
+
seed.frame.cloudLayer === undefined
|
|
1049
|
+
? undefined
|
|
1050
|
+
: cloudShadowResolutionForQuality(seed.frame.cloudLayer.params.quality),
|
|
858
1051
|
);
|
|
859
1052
|
if (graph === null) return failed('candidate frame graph compilation failed');
|
|
860
1053
|
if (recoveryReadiness === undefined)
|
|
@@ -397,9 +397,13 @@ export class ReflectionProbeRecordOwner {
|
|
|
397
397
|
this.lastFactCount = facts.length;
|
|
398
398
|
this.lastScheduledRawFaces = 0;
|
|
399
399
|
this.lastScheduledFilteredSteps = 0;
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
400
|
+
// The fallback MRT has one representative readback, so choose a stable
|
|
401
|
+
// non-neutral probe consumer when the scene contains one. Renderable map
|
|
402
|
+
// order is not a source-selection contract: the first entry is commonly
|
|
403
|
+
// an outside panel while the local probe consumer appears later.
|
|
404
|
+
const firstSelection =
|
|
405
|
+
[...selections.values()].find((selection) => selection.kind === 'probe') ??
|
|
406
|
+
(selections.values().next().value as ReflectionProbeSelectionResult | undefined);
|
|
403
407
|
this.lastSelection =
|
|
404
408
|
firstSelection?.kind === 'probe'
|
|
405
409
|
? {
|