@forgeax/engine-render 0.1.28 → 0.1.30
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 +856 -126
- package/dist/assembly/atmosphere-shader-prewarm.d.ts +6 -0
- package/dist/assembly/atmosphere-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/device-feature-admission.d.ts +4 -3
- package/dist/assembly/device-feature-admission.d.ts.map +1 -1
- package/dist/assembly/dynamic-geometry-host.d.ts +27 -0
- package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
- package/dist/assembly/dynamic-geometry-runtime.d.ts +20 -0
- package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +3 -1
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/gpu-driven-owner.d.ts +10 -0
- package/dist/assembly/gpu-driven-owner.d.ts.map +1 -0
- package/dist/assembly/host-contract.d.ts +14 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/material/assembly.d.ts +31 -1
- package/dist/assembly/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/pipeline-helpers.d.ts +24 -0
- package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -0
- 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/device-loss-fanout.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/recovery-attempt.d.ts +1 -6
- package/dist/assembly/recovery/recovery-attempt.d.ts.map +1 -1
- package/dist/assembly/recovery/renderer-recover.d.ts +7 -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 +7 -1
- package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -1
- package/dist/assembly/skin-palette-owner.d.ts +8 -0
- package/dist/assembly/skin-palette-owner.d.ts.map +1 -0
- package/dist/assembly/ssr-shader-prewarm.d.ts +6 -0
- package/dist/assembly/ssr-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/webgpu-device-loss.d.ts +15 -0
- package/dist/assembly/webgpu-device-loss.d.ts.map +1 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts +38 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready-mipmap.d.ts +11 -0
- package/dist/assembly/webgpu-ready-mipmap.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready.d.ts +7 -3
- package/dist/assembly/webgpu-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts +10 -0
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-contract.d.ts +62 -0
- package/dist/assembly/webgpu-renderer-contract.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-guards.d.ts +9 -0
- package/dist/assembly/webgpu-renderer-guards.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-observation.d.ts +6 -0
- package/dist/assembly/webgpu-renderer-observation.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-recovery-failure.d.ts +12 -0
- package/dist/assembly/webgpu-renderer-recovery-failure.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer.d.ts +7 -141
- package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
- package/dist/assembly/webgpu-vertex-layouts.d.ts +28 -84
- package/dist/assembly/webgpu-vertex-layouts.d.ts.map +1 -1
- package/dist/authoring.mjs +2 -2
- package/dist/capture/scene-projection.d.ts +41 -0
- package/dist/capture/scene-projection.d.ts.map +1 -0
- package/dist/{chunk-J52NMQKR.mjs → chunk-7MQ3XBSP.mjs} +1098 -844
- package/dist/chunk-7MQ3XBSP.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-VSL23LZE.mjs → chunk-C3DDSXYK.mjs} +1188 -463
- package/dist/chunk-C3DDSXYK.mjs.map +1 -0
- package/dist/{chunk-IQMKJLNU.mjs → chunk-FUUO4UND.mjs} +443 -30
- package/dist/chunk-FUUO4UND.mjs.map +1 -0
- package/dist/{chunk-J6KACNOH.mjs → chunk-JRBDO2KB.mjs} +617 -7
- package/dist/chunk-JRBDO2KB.mjs.map +1 -0
- package/dist/{chunk-GE3SDD72.mjs → chunk-MDQJPY3T.mjs} +20 -40
- package/dist/chunk-MDQJPY3T.mjs.map +1 -0
- package/dist/{chunk-MYJ5RPJO.mjs → chunk-NO4WZCAH.mjs} +3 -3
- package/dist/chunk-NO4WZCAH.mjs.map +1 -0
- package/dist/{chunk-RBDBZ5R7.mjs → chunk-PA5DRJNI.mjs} +2 -2
- package/dist/chunk-PA5DRJNI.mjs.map +1 -0
- package/dist/{chunk-MBU4ZVE7.mjs → chunk-PSEQ6QPH.mjs} +4655 -892
- package/dist/chunk-PSEQ6QPH.mjs.map +1 -0
- package/dist/{chunk-JAASCMXA.mjs → chunk-S5UE2T5P.mjs} +289 -41
- package/dist/chunk-S5UE2T5P.mjs.map +1 -0
- package/dist/components/camera.d.ts +62 -2
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/directional-light.d.ts +2 -2
- package/dist/components/dynamic-resolution.d.ts +15 -0
- package/dist/components/dynamic-resolution.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 +6 -20
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/reflection-probe.d.ts +1 -0
- package/dist/components/reflection-probe.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/components/skylight.d.ts +4 -1
- package/dist/components/skylight.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +14809 -7570
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/device-scope.d.ts +2 -0
- package/dist/device/device-scope.d.ts.map +1 -1
- package/dist/device/gpu-residency.d.ts +3 -14
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/dynamic-geometry.d.ts.map +1 -1
- package/dist/environment/background.d.ts +7 -0
- package/dist/environment/background.d.ts.map +1 -0
- package/dist/environment/ibl.d.ts +11 -0
- package/dist/environment/ibl.d.ts.map +1 -0
- package/dist/environment/storage.d.ts +14 -0
- package/dist/environment/storage.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 +41 -4
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/camera.d.ts.map +1 -1
- package/dist/extract/contracts.d.ts +7 -0
- package/dist/extract/contracts.d.ts.map +1 -1
- package/dist/extract/gpu-driven.d.ts +50 -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/material-artifacts.d.ts +24 -0
- package/dist/gpu-driven/material-artifacts.d.ts.map +1 -0
- package/dist/gpu-driven/material-bindings.d.ts +7 -0
- package/dist/gpu-driven/material-bindings.d.ts.map +1 -0
- 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 +2 -0
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +169 -27
- 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-resource.d.ts +5 -2
- package/dist/gpu-resource.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 +9 -0
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/IblPipelineCache.d.ts +2 -0
- package/dist/ibl/IblPipelineCache.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 +3 -1
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +87 -75
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +10 -8
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +180 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/instances-derived-bounds.d.ts +11 -0
- package/dist/instances-derived-bounds.d.ts.map +1 -1
- package/dist/instances.d.ts +89 -44
- package/dist/instances.d.ts.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +117 -9
- package/dist/internal.mjs.map +1 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/material-row.d.ts +15 -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 +23 -5
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/render-extent.d.ts +51 -0
- package/dist/pipeline/render-extent.d.ts.map +1 -0
- package/dist/pipeline/standard-build-context.d.ts +7 -0
- package/dist/pipeline/standard-build-context.d.ts.map +1 -0
- package/dist/pipeline/standard-forward-lane.d.ts +3 -2
- 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/standard-profile.d.ts +2 -1
- package/dist/pipeline/standard-profile.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +5 -2
- 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/plugin.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/post-process-errors.d.ts +9 -2
- package/dist/post-process-errors.d.ts.map +1 -1
- package/dist/prepare/extended-lighting/resources.d.ts +3 -3
- 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 +109 -13
- 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 +41 -5
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +13 -9
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +43 -3
- 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 +14 -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 +1 -0
- package/dist/record/recovery-pipeline.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +101 -22
- 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 +39 -8
- 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/background.d.ts +14 -0
- package/dist/reflection/background.d.ts.map +1 -0
- package/dist/reflection/filter.d.ts.map +1 -1
- package/dist/reflection/projection.d.ts +1 -0
- package/dist/reflection/projection.d.ts.map +1 -1
- package/dist/reflection/record-owner.d.ts +4 -4
- package/dist/reflection/record-owner.d.ts.map +1 -1
- package/dist/render-contract.d.ts +211 -53
- 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 +81 -6
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts +15 -6
- package/dist/render-system-extract-tail.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +128 -41
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system-projections.d.ts +22 -0
- package/dist/render-system-projections.d.ts.map +1 -0
- package/dist/render-system.d.ts +27 -77
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene-types.d.ts +14 -7
- package/dist/scene/render-scene-types.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +31 -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/ssao-config.d.ts +8 -6
- package/dist/ssao-config.d.ts.map +1 -1
- 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 +4 -2
- package/dist/temporal/standard-scene-data.d.ts.map +1 -1
- package/dist/temporal/target-coverage-attachment.d.ts +15 -0
- package/dist/temporal/target-coverage-attachment.d.ts.map +1 -0
- package/dist/temporal/temporal-view.d.ts +6 -0
- package/dist/temporal/temporal-view.d.ts.map +1 -1
- package/dist/temporal/view.d.ts +6 -0
- package/dist/temporal/view.d.ts.map +1 -1
- package/dist/typed-render-graph-primitives.d.ts +41 -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/component.d.ts +1 -0
- package/dist/volume/component.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__/capture-scene-projection.unit.test.ts +24 -0
- package/src/__tests__/detached-inspection.integration.test.ts +5 -0
- package/src/__tests__/device-feature-admission.unit.test.ts +15 -24
- package/src/__tests__/device-loss-fanout.unit.test.ts +43 -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-batch.unit.test.ts +157 -0
- package/src/__tests__/dynamic-geometry.unit.test.ts +36 -0
- package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +81 -0
- package/src/__tests__/factory-contract.integration.test.ts +231 -9
- 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-observation.contract.test.ts +21 -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 +307 -7
- 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 +261 -0
- package/src/__tests__/gpu-driven-mesh-world-identity.unit.test.ts +346 -0
- package/src/__tests__/gpu-driven-pbr.dawn.test.ts +1422 -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 +1076 -106
- 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 +160 -52
- package/src/__tests__/gpu-pass-timing-browser-runner.ts +15 -0
- package/src/__tests__/gpu-pass-timing.browser.test.ts +20 -2
- package/src/__tests__/gpu-resource-scope.unit.test.ts +71 -0
- 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 +613 -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 +57 -3
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +4 -0
- package/src/__tests__/mesh-submission-lifetime.unit.test.ts +8 -0
- package/src/__tests__/morph-neutral-admission.unit.test.ts +19 -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 +42 -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__/post-process-error-policy-owner.unit.test.ts +6 -5
- 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 +251 -9
- 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 +171 -0
- package/src/__tests__/reflection-probe-authoring.unit.test.ts +12 -10
- package/src/__tests__/reflection-probe-box.dawn.test.ts +71 -0
- package/src/__tests__/reflection-probe-filter.unit.test.ts +9 -0
- package/src/__tests__/reflection-probe-orientation.dawn.test.ts +294 -0
- package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +5 -14
- package/src/__tests__/reflection-probe-updates.unit.test.ts +129 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +7 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +27 -1
- package/src/__tests__/render-error-exhaustive.test-d.ts +15 -0
- package/src/__tests__/render-extent.unit.test.ts +63 -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 +915 -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 +233 -9
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +923 -5
- package/src/__tests__/shader-manifest-fixture.ts +45 -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 +125 -14
- package/src/__tests__/specular-environment-scale.dawn.test.ts +158 -0
- package/src/__tests__/ssao-config.unit.test.ts +7 -0
- package/src/__tests__/ssao-surface.dawn.test.ts +252 -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-cube-silhouette.dawn.test.ts +270 -0
- package/src/__tests__/ssr-format-probe-gating.integration.test.ts +82 -0
- package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +99 -0
- package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +116 -0
- package/src/__tests__/ssr-gpu-dispatch.ts +951 -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 +84 -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 +275 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +320 -3
- package/src/__tests__/standard-profile-oracle.unit.test.ts +49 -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 +199 -0
- package/src/__tests__/taa-history-clipping.dawn.test.ts +328 -0
- package/src/__tests__/taa-neighborhood-equivalence.dawn.test.ts +782 -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 +342 -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__/temporal-view.unit.test.ts +17 -0
- package/src/__tests__/texture-usage-surface.unit.test.ts +4 -2
- package/src/__tests__/transmission-prewarm.unit.test.ts +57 -0
- 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/__tests__/volumetric-fog-stage-readback.dawn.test.ts +62 -13
- package/src/__tests__/volumetric-fog-topology.unit.test.ts +7 -7
- package/src/assembly/atmosphere-shader-prewarm.ts +39 -0
- package/src/assembly/device-feature-admission.ts +9 -4
- package/src/assembly/dynamic-geometry-host.ts +284 -163
- 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 +19 -0
- package/src/assembly/material/assembly.ts +383 -1
- package/src/assembly/material/pipeline-helpers.ts +100 -0
- package/src/assembly/material-shader-policy.ts +110 -46
- package/src/assembly/recovery/device-loss-fanout.ts +5 -0
- package/src/assembly/recovery/failure-location.ts +62 -0
- package/src/assembly/recovery/recovery-attempt.ts +2 -29
- package/src/assembly/recovery/renderer-recover.ts +16 -17
- package/src/assembly/renderer-facade.ts +34 -1
- 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 +46 -1
- 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 +161 -131
- 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 +744 -730
- package/src/assembly/webgpu-vertex-layouts.ts +233 -87
- package/src/capture/scene-projection.ts +37 -0
- package/src/components/__tests__/camera-exposure.contract.unit.test.ts +153 -0
- package/src/components/__tests__/dynamic-resolution-schema.unit.test.ts +65 -0
- package/src/components/__tests__/light-radius.integration.test.ts +59 -0
- package/src/components/camera.ts +287 -7
- package/src/components/directional-light.ts +3 -3
- package/src/components/dynamic-resolution.ts +67 -0
- package/src/components/index.ts +2 -0
- package/src/components/instances.ts +45 -18
- package/src/components/light-helpers.ts +6 -1
- package/src/components/reflection-probe.ts +1 -0
- package/src/components/scene-instance.ts +2 -1
- package/src/components/screen-space-reflection.ts +21 -0
- package/src/components/skylight.ts +4 -1
- package/src/components/sprite-animation.ts +2 -2
- package/src/components/sprite-instances.ts +1 -1
- package/src/device/device-scope.ts +13 -7
- package/src/device/gpu-residency.ts +45 -42
- package/src/dynamic-geometry.ts +13 -8
- package/src/environment/background.ts +281 -0
- package/src/environment/ibl.ts +211 -0
- package/src/environment/storage.ts +63 -0
- package/src/errors/gpu-driven.ts +49 -8
- package/src/errors/render.ts +91 -3
- package/src/extract/camera.ts +37 -1
- package/src/extract/contracts.ts +10 -0
- package/src/extract/gpu-driven.ts +240 -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 +452 -108
- package/src/gpu-driven/material-artifacts.ts +179 -0
- package/src/gpu-driven/material-bindings.ts +41 -0
- package/src/gpu-driven/pbr-program.ts +31 -0
- package/src/gpu-driven/prepared-draw.ts +42 -6
- package/src/gpu-driven/production-raster.ts +2806 -716
- package/src/gpu-driven/shadow-views.ts +539 -0
- package/src/gpu-driven/view-gpu.ts +188 -41
- package/src/gpu-resource.ts +21 -2
- package/src/gpu-scene-schema.ts +61 -11
- package/src/gpu-scene.ts +197 -99
- package/src/gpu-texture-usage.ts +1 -0
- package/src/hdrp-buffers.ts +141 -36
- package/src/ibl/IblPipelineCache.ts +5 -0
- package/src/ibl/frame-resources.ts +38 -0
- package/src/ibl/skylight-bind-group.ts +32 -21
- package/src/index.ts +194 -75
- package/src/inspection-types.ts +207 -1
- 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 +194 -0
- package/src/materials.ts +44 -8
- package/src/pbr-pipeline.ts +172 -19
- package/src/pipeline/render-extent.ts +111 -0
- package/src/pipeline/standard-build-context.ts +7 -0
- package/src/pipeline/standard-forward-lane.ts +74 -29
- 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 +232 -70
- package/src/pipeline/standard-post.ts +190 -27
- package/src/pipeline/standard-profile.ts +2 -1
- package/src/pipeline-builder.ts +28 -9
- package/src/pipeline-spec-types.ts +4 -0
- package/src/pipeline-spec.ts +37 -29
- package/src/plugin.ts +4 -0
- package/src/points-lines/standard-owner.ts +6 -14
- package/src/post-process-errors.ts +26 -18
- package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +2 -2
- package/src/prepare/extended-lighting/resources.ts +3 -3
- package/src/prepare/prepared-graphics-resolver.ts +9 -2
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +68 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +45 -0
- package/src/record/__tests__/material-slot-plan.unit.test.ts +57 -0
- package/src/record/__tests__/mesh-ssbo.unit.test.ts +40 -1
- package/src/record/__tests__/recovery-pipeline.unit.test.ts +20 -1
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +41 -6
- package/src/record/__tests__/temporal-payload.unit.test.ts +2 -0
- 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 +15 -12
- package/src/record/frame-snapshot.ts +146 -34
- package/src/record/frame-targets.ts +9 -0
- package/src/record/frame.ts +838 -170
- package/src/record/main-pass-geometry.ts +209 -103
- package/src/record/main-pass-material.ts +157 -40
- package/src/record/main-pass-sprite-draws.ts +16 -107
- package/src/record/main-pass.ts +141 -12
- package/src/record/material-uniforms.ts +1 -1
- package/src/record/mesh-ssbo.ts +59 -15
- package/src/record/prepared-material-bindings.ts +238 -0
- package/src/record/recovery-pipeline.ts +69 -90
- package/src/record/render-context.ts +123 -24
- package/src/record/shadow-pass.ts +1389 -230
- package/src/record/skybox-post-pass.ts +14 -3
- package/src/record/typed-frame-graph.ts +1064 -47
- package/src/record/view-ubo.ts +12 -1
- package/src/recovery/render-system-candidate.ts +135 -68
- package/src/recovery/render-system-roots.ts +113 -0
- package/src/recovery/types.ts +77 -0
- package/src/reflection/background.ts +151 -0
- package/src/reflection/filter.ts +3 -0
- package/src/reflection/projection.ts +16 -6
- package/src/reflection/record-owner.ts +308 -140
- package/src/render-contract.ts +237 -49
- package/src/render-graph-primitives.ts +34 -5
- package/src/render-pipeline.ts +90 -2
- package/src/render-system-extract-tail.ts +431 -162
- package/src/render-system-extract.ts +478 -119
- package/src/render-system-projections.ts +241 -0
- package/src/render-system.ts +715 -828
- package/src/scene/render-scene-types.ts +13 -4
- package/src/scene/render-scene.ts +577 -355
- package/src/scene/shadow-visibility.ts +21 -0
- package/src/ssao-config.ts +25 -8
- 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 +797 -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 +79 -12
- package/src/temporal/history.ts +3 -1
- package/src/temporal/inspection.ts +2 -1
- package/src/temporal/standard-scene-data.ts +10 -2
- package/src/temporal/target-coverage-attachment.ts +72 -0
- package/src/temporal/temporal-view.ts +11 -2
- package/src/temporal/view.ts +12 -2
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +219 -139
- package/src/typed-render-graph-primitives.ts +304 -74
- package/src/typed-shadow-passes.ts +122 -12
- package/src/volume/component.ts +1 -0
- package/src/volume/passes.ts +3 -3
- package/src/volume/temporal.ts +10 -0
- package/dist/chunk-GE3SDD72.mjs.map +0 -1
- package/dist/chunk-GF523LHF.mjs.map +0 -1
- package/dist/chunk-IQMKJLNU.mjs.map +0 -1
- package/dist/chunk-J52NMQKR.mjs.map +0 -1
- package/dist/chunk-J6KACNOH.mjs.map +0 -1
- package/dist/chunk-JAASCMXA.mjs.map +0 -1
- package/dist/chunk-MBU4ZVE7.mjs.map +0 -1
- package/dist/chunk-MYJ5RPJO.mjs.map +0 -1
- package/dist/chunk-RBDBZ5R7.mjs.map +0 -1
- package/dist/chunk-VSL23LZE.mjs.map +0 -1
- package/src/__tests__/instances-world-ownership.integration.test.ts +0 -62
- package/src/scene/__tests__/changed-block-summary.candidate.test.ts +0 -36
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++) {
|
|
@@ -233,7 +244,7 @@ export function writeViewUbo(
|
|
|
233
244
|
// accepted quality union occupies the existing four-float tail [128..131].
|
|
234
245
|
// Point and Spot pcfKernelSize stay in their own snapshot paths and never
|
|
235
246
|
// enter this Directional View projection.
|
|
236
|
-
viewPayload[126] = lights.depthBias ?? 0.
|
|
247
|
+
viewPayload[126] = lights.depthBias ?? 0.00001;
|
|
237
248
|
viewPayload[127] = lights.normalBias ?? 0.05;
|
|
238
249
|
const filterCarrier = directionalShadowFilterCarrier(lights.directionalShadowQuality);
|
|
239
250
|
viewPayload[128] = filterCarrier[0] ?? 0;
|
|
@@ -27,16 +27,20 @@ import {
|
|
|
27
27
|
type PostProcessShaderEntry,
|
|
28
28
|
postProcessShaderEntrySignature,
|
|
29
29
|
} from '../fullscreen-post-process-pass';
|
|
30
|
+
import { collectGpuDrivenMaterialArtifacts } from '../gpu-driven/material-artifacts';
|
|
30
31
|
import { GpuDrivenProduction } from '../gpu-driven/production-raster';
|
|
31
|
-
import { disposeInstanceBufferChunks, disposeInstanceBuffers } from '../instance-buffer-cache';
|
|
32
32
|
import { inspectStandardLighting } from '../pipeline/standard-lighting/inspection';
|
|
33
|
+
import { retireAutoExposureGpuResources } from '../pipeline/standard-output/auto-exposure/gpu';
|
|
34
|
+
import {
|
|
35
|
+
prepareStandardOutputResources,
|
|
36
|
+
resetStandardOutputForDeviceLoss,
|
|
37
|
+
} from '../pipeline/standard-output/resources';
|
|
33
38
|
import type { PipelineBuilderShaderModuleFactory } from '../pipeline-builder';
|
|
34
39
|
import { inspectPointShadow } from '../point-shadow-inspection';
|
|
35
40
|
import type { PreparedGraphicsResolver } from '../prepare/prepared-graphics-resolver';
|
|
36
|
-
import { validateRenderables } from '../record/frame';
|
|
41
|
+
import { gpuDrivenMeshesForFrame, validateRenderables } from '../record/frame';
|
|
37
42
|
import { prepareFrameLighting } from '../record/frame-lighting';
|
|
38
43
|
import type { RenderFrameState, ValidatedRenderable } from '../record/frame-snapshot';
|
|
39
|
-
import { resolveGeometryInstanceBuffer } from '../record/main-pass-geometry';
|
|
40
44
|
import { computeSplitLdrSprite } from '../record/main-pass-sprite-draws';
|
|
41
45
|
import {
|
|
42
46
|
prepareRecoveryPipelineReadiness,
|
|
@@ -50,13 +54,10 @@ import {
|
|
|
50
54
|
} from '../record/typed-frame-graph';
|
|
51
55
|
import { STANDARD_OUTPUT_TRANSFORM_FEATURE_ID } from '../render-contract';
|
|
52
56
|
import type {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
RecoveryPointsLinesCandidate,
|
|
58
|
-
} from '../render-system';
|
|
59
|
-
import type { ExtractedFrame, MaterialSnapshot } from '../render-system-extract';
|
|
57
|
+
ExtractedFrame,
|
|
58
|
+
MaterialSnapshot,
|
|
59
|
+
RenderableSnapshot,
|
|
60
|
+
} from '../render-system-extract';
|
|
60
61
|
import type { PersistentGpuDrivenCandidate, PersistentRenderScene } from '../scene/render-scene';
|
|
61
62
|
import { SHADOW_ATLAS_DEFAULT_LAYERS } from '../shadow-atlas';
|
|
62
63
|
import { createTemporalFrameTransaction } from '../temporal/frame';
|
|
@@ -64,7 +65,15 @@ import {
|
|
|
64
65
|
getTemporalBindGroupResources,
|
|
65
66
|
getTemporalGpuState,
|
|
66
67
|
getTemporalParamsBuffer,
|
|
68
|
+
TEMPORAL_HISTORY_FORMATS,
|
|
67
69
|
} from '../temporal/gpu';
|
|
70
|
+
import type {
|
|
71
|
+
RecoveryGraphCandidate,
|
|
72
|
+
RecoveryGraphCandidatePreparation,
|
|
73
|
+
RecoveryGraphCandidateRuntime,
|
|
74
|
+
RecoveryGraphSetupSubmission,
|
|
75
|
+
RecoveryPointsLinesCandidate,
|
|
76
|
+
} from './types';
|
|
68
77
|
|
|
69
78
|
export interface PreparedResolverCaches {
|
|
70
79
|
readonly preparedPipelineIds: WeakMap<object, string>;
|
|
@@ -123,7 +132,7 @@ export interface RenderSystemRecoveryOwner {
|
|
|
123
132
|
setLastSuccessfulFrameSeed(seed: RecoveryFrameSeed): void;
|
|
124
133
|
prepareRecoveryGraphCandidate(
|
|
125
134
|
runtime: RecoveryGraphCandidateRuntime,
|
|
126
|
-
):
|
|
135
|
+
): RecoveryGraphCandidatePreparation;
|
|
127
136
|
submitCandidateSetup(
|
|
128
137
|
candidate: RecoveryGraphCandidate,
|
|
129
138
|
isValid: () => boolean,
|
|
@@ -132,22 +141,36 @@ export interface RenderSystemRecoveryOwner {
|
|
|
132
141
|
discardRecoveryGraphCandidate(candidate: RecoveryGraphCandidate): void;
|
|
133
142
|
}
|
|
134
143
|
|
|
135
|
-
|
|
136
|
-
|
|
144
|
+
/**
|
|
145
|
+
* Keep the missing-texture sentinel out of residency preparation. A zero
|
|
146
|
+
* handle is the same absent-reference value used by materialHandle; resolving
|
|
147
|
+
* it as a real TextureAsset would otherwise pass an undefined pod to the GPU
|
|
148
|
+
* store and fail before the renderer can produce a structured readiness
|
|
149
|
+
* result.
|
|
150
|
+
*/
|
|
151
|
+
export function materialTextureHandlesForResidency(
|
|
152
|
+
candidates: Iterable<Handle<'TextureAsset', 'shared'> | undefined>,
|
|
137
153
|
): readonly Handle<'TextureAsset', 'shared'>[] {
|
|
138
154
|
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);
|
|
155
|
+
for (const handle of candidates) {
|
|
156
|
+
if (handle !== undefined && Number(handle) !== 0) handles.set(Number(handle), handle);
|
|
157
|
+
}
|
|
148
158
|
return [...handles.values()];
|
|
149
159
|
}
|
|
150
160
|
|
|
161
|
+
export function materialTextureHandles(
|
|
162
|
+
material: MaterialSnapshot,
|
|
163
|
+
): readonly Handle<'TextureAsset', 'shared'>[] {
|
|
164
|
+
return materialTextureHandlesForResidency([
|
|
165
|
+
...(material.textureHandles?.values() ?? []),
|
|
166
|
+
material.baseColorTexture,
|
|
167
|
+
material.metallicRoughnessTexture,
|
|
168
|
+
material.normalTexture,
|
|
169
|
+
material.emissiveTexture,
|
|
170
|
+
material.occlusionTexture,
|
|
171
|
+
]);
|
|
172
|
+
}
|
|
173
|
+
|
|
151
174
|
export function materialSamplerHandles(
|
|
152
175
|
material: MaterialSnapshot,
|
|
153
176
|
): readonly Handle<'SamplerAsset', 'shared'>[] {
|
|
@@ -196,6 +219,13 @@ export function createRenderSystemRecovery(
|
|
|
196
219
|
successfulTemporalFrameIndex: 0,
|
|
197
220
|
temporalFrameTransaction: createTemporalFrameTransaction({ deviceEpoch: 0 }),
|
|
198
221
|
temporalFrameInput: undefined,
|
|
222
|
+
ssrRequested: false,
|
|
223
|
+
ssrSpatialAdmission: undefined,
|
|
224
|
+
ssrHistoryOwner: undefined,
|
|
225
|
+
ssrHistoryCandidate: undefined,
|
|
226
|
+
ssrTemporalParamsPayload: undefined,
|
|
227
|
+
ssrLastCameraEntity: undefined,
|
|
228
|
+
ssrLastHistoryVersion: undefined,
|
|
199
229
|
graphTargetCapture: undefined,
|
|
200
230
|
perFrameGraph: null,
|
|
201
231
|
directionalShadowCache: null,
|
|
@@ -227,8 +257,6 @@ export function createRenderSystemRecovery(
|
|
|
227
257
|
currentDirectionalShadowView: null,
|
|
228
258
|
currentSpotShadowView: null,
|
|
229
259
|
instanceBuffers: new Map(),
|
|
230
|
-
instanceBufferChunks: new Map(),
|
|
231
|
-
instanceResidency: new Map(),
|
|
232
260
|
morphBuffers: new Map(),
|
|
233
261
|
hdrpClusterBinScratch: createClusterBinScratch(),
|
|
234
262
|
hdrpClusterGridScratch: null,
|
|
@@ -248,7 +276,7 @@ export function createRenderSystemRecovery(
|
|
|
248
276
|
instancesBgShared: new WeakMap(),
|
|
249
277
|
materialBgShared: new Map(),
|
|
250
278
|
materialBgAssemblyCache: new Map(),
|
|
251
|
-
|
|
279
|
+
shadowMaterialBindGroups: new WeakMap(),
|
|
252
280
|
postProcessBgCache: new WeakMap(),
|
|
253
281
|
probeBlendBuffers: new Map(),
|
|
254
282
|
probeBlendRecordBufferCapacity: 0,
|
|
@@ -257,7 +285,11 @@ export function createRenderSystemRecovery(
|
|
|
257
285
|
};
|
|
258
286
|
|
|
259
287
|
const publishRecoveryGraphCandidate = (candidate: RecoveryGraphCandidate): void => {
|
|
260
|
-
candidate.recoveryReadiness.assertFirstRecoveryFrame
|
|
288
|
+
if (candidate.recoveryReadiness.assertFirstRecoveryFrame) {
|
|
289
|
+
candidate.recoveryReadiness.assertFirstRecoveryFrame();
|
|
290
|
+
} else {
|
|
291
|
+
candidate.recoveryReadiness.assertPreparedCache();
|
|
292
|
+
}
|
|
261
293
|
const previousFeatureHost = internals.featureHost;
|
|
262
294
|
// The caller enters this method only after the active generation swap and
|
|
263
295
|
// after resetForRecover() has shed every lost-device owner. Replace the
|
|
@@ -317,9 +349,9 @@ export function createRenderSystemRecovery(
|
|
|
317
349
|
candidate.release();
|
|
318
350
|
};
|
|
319
351
|
|
|
320
|
-
const prepareRecoveryGraphCandidate =
|
|
352
|
+
const prepareRecoveryGraphCandidate = (
|
|
321
353
|
runtime: RecoveryGraphCandidateRuntime,
|
|
322
|
-
):
|
|
354
|
+
): RecoveryGraphCandidatePreparation => {
|
|
323
355
|
const seed = lastSuccessfulFrameSeed;
|
|
324
356
|
if (seed === undefined) return { kind: 'no-seed' };
|
|
325
357
|
const camera = seed.frame.cameras[0];
|
|
@@ -330,6 +362,7 @@ export function createRenderSystemRecovery(
|
|
|
330
362
|
if (camera === undefined) return { kind: 'no-seed' };
|
|
331
363
|
|
|
332
364
|
const candidateFrameState = createRecoveryCandidateFrameState();
|
|
365
|
+
resetStandardOutputForDeviceLoss(candidateFrameState, runtime.internals.deviceScope.generation);
|
|
333
366
|
Object.assign(candidateFrameState, {
|
|
334
367
|
temporalFrame: undefined,
|
|
335
368
|
bloomFrameReceipts: undefined,
|
|
@@ -356,6 +389,9 @@ export function createRenderSystemRecovery(
|
|
|
356
389
|
const releaseCandidate = (): void => {
|
|
357
390
|
if (candidateReleased || candidatePublished) return;
|
|
358
391
|
candidateReleased = true;
|
|
392
|
+
const pendingOutput = candidateFrameState.pendingAutoExposureGpuResources;
|
|
393
|
+
if (pendingOutput !== undefined) retireAutoExposureGpuResources(pendingOutput);
|
|
394
|
+
candidateFrameState.pendingAutoExposureGpuResources = undefined;
|
|
359
395
|
for (const work of setupWorks) work.discard();
|
|
360
396
|
setupWorks.length = 0;
|
|
361
397
|
const graph = candidateFrameState.compiledFrameGraph;
|
|
@@ -386,13 +422,6 @@ export function createRenderSystemRecovery(
|
|
|
386
422
|
candidateGpuDrivenScene = undefined;
|
|
387
423
|
candidatePointsLines?.release();
|
|
388
424
|
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
425
|
candidateGpuStore.destroyAll();
|
|
397
426
|
};
|
|
398
427
|
const markPublished = (): void => {
|
|
@@ -408,30 +437,77 @@ export function createRenderSystemRecovery(
|
|
|
408
437
|
};
|
|
409
438
|
|
|
410
439
|
try {
|
|
440
|
+
const output = prepareStandardOutputResources(
|
|
441
|
+
candidateFrameState,
|
|
442
|
+
runtime.internals,
|
|
443
|
+
camera,
|
|
444
|
+
seed.worlds[seed.cameraOwner] as World,
|
|
445
|
+
);
|
|
446
|
+
if (!output.ok) return failed('candidate Standard output preparation failed', output.error);
|
|
411
447
|
const gpuScene = persistentRenderScene.prepareRecoveryGpuDrivenCandidate(
|
|
412
448
|
runtime.internals.device,
|
|
413
449
|
);
|
|
414
450
|
if (!gpuScene.ok) return failed('candidate GPU scene preparation failed', gpuScene.error);
|
|
415
451
|
candidateGpuDrivenScene = gpuScene.value;
|
|
416
452
|
if (candidateGpuDrivenScene.state !== undefined) {
|
|
417
|
-
|
|
453
|
+
candidateGpuDrivenProduction = GpuDrivenProduction.forDevice(
|
|
418
454
|
runtime.internals.device,
|
|
419
455
|
gpuDrivenShaderFactory,
|
|
420
|
-
(descriptor) =>
|
|
421
|
-
internals.createShaderModule === undefined
|
|
422
|
-
? Promise.resolve(gpuDrivenShaderFactory.createShaderModule(descriptor))
|
|
423
|
-
: internals.createShaderModule(runtime.internals.device, descriptor),
|
|
424
456
|
);
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
457
|
+
const shadowProjection = persistentRenderScene.shadowCasterProjection();
|
|
458
|
+
// The retained scene owns prepared draw receipts. The extraction seed
|
|
459
|
+
// precedes GPU admission and must not stand in for that projection.
|
|
460
|
+
const preparedSnapshots = new Map(
|
|
461
|
+
candidateGpuDrivenScene.state.slots.map((slot) => [
|
|
462
|
+
`${slot.snapshot.worldId}:${slot.snapshot.entityKey}`,
|
|
463
|
+
slot.snapshot,
|
|
464
|
+
]),
|
|
465
|
+
);
|
|
466
|
+
const artifactRows = (renderables: readonly RenderableSnapshot[]) =>
|
|
467
|
+
renderables.map((source, renderableIndex) => ({
|
|
468
|
+
source: {
|
|
469
|
+
...source,
|
|
470
|
+
gpuDrivenDraws:
|
|
471
|
+
preparedSnapshots.get(`${source.worldId}:${source.entityKey}`)?.gpuDrivenDraws ??
|
|
472
|
+
source.gpuDrivenDraws ??
|
|
473
|
+
[],
|
|
474
|
+
},
|
|
475
|
+
renderableIndex,
|
|
476
|
+
}));
|
|
477
|
+
const { materialArtifacts, shadowMaterialArtifacts, firstArtifact, firstSkinArtifact } =
|
|
478
|
+
collectGpuDrivenMaterialArtifacts({
|
|
479
|
+
rows: artifactRows(seed.frame.renderables),
|
|
480
|
+
shadowRows: artifactRows(shadowProjection?.renderables ?? []),
|
|
481
|
+
dispatch: seed.frame.dispatch,
|
|
482
|
+
shadowDispatch: shadowProjection?.dispatch ?? seed.frame.dispatch,
|
|
483
|
+
resolve: runtime.internals.getMaterialShaderArtifact,
|
|
484
|
+
clustered:
|
|
485
|
+
seed.frame.lights.point.length +
|
|
486
|
+
seed.frame.lights.spot.length +
|
|
487
|
+
seed.frame.lights.rect.length >
|
|
488
|
+
0 || candidateFrameState.installedPipelineConfig?.ssao?.enabled === true,
|
|
489
|
+
reflectionFallback: candidateFrameState.reflectionFallbackDemand === true,
|
|
490
|
+
});
|
|
428
491
|
const prepared = candidateGpuDrivenProduction.prepare({
|
|
429
492
|
scene: candidateGpuDrivenScene.state,
|
|
430
493
|
camera,
|
|
431
|
-
|
|
494
|
+
meshBySlot: gpuDrivenMeshesForFrame(
|
|
495
|
+
runtime.internals,
|
|
496
|
+
runtime.pipelineState,
|
|
497
|
+
seed.worlds,
|
|
498
|
+
candidateGpuDrivenScene.state,
|
|
499
|
+
),
|
|
432
500
|
viewBindGroupLayout: runtime.pipelineState.viewBindGroupLayout,
|
|
433
501
|
meshResidencyEpoch: runtime.internals.gpuStore.meshResidencyEpoch,
|
|
434
|
-
|
|
502
|
+
|
|
503
|
+
...(firstArtifact === undefined ? {} : { materialArtifact: firstArtifact }),
|
|
504
|
+
...(firstSkinArtifact === undefined ? {} : { materialSkinArtifact: firstSkinArtifact }),
|
|
505
|
+
...(materialArtifacts.size === 0 ? {} : { materialArtifacts }),
|
|
506
|
+
...(shadowMaterialArtifacts.size === 0 ? {} : { shadowMaterialArtifacts }),
|
|
507
|
+
materialPipelineState: runtime.pipelineState,
|
|
508
|
+
...(runtime.internals.getMaterialShaderPipelineEntry === undefined
|
|
509
|
+
? {}
|
|
510
|
+
: { materialPipelineFactory: runtime.internals.getMaterialShaderPipelineEntry }),
|
|
435
511
|
});
|
|
436
512
|
if (!prepared.ok) return failed('candidate GPU-driven preparation failed', prepared.error);
|
|
437
513
|
preparedGpuDriven = prepared.value;
|
|
@@ -501,8 +577,14 @@ export function createRenderSystemRecovery(
|
|
|
501
577
|
...(batches.length === 0
|
|
502
578
|
? {}
|
|
503
579
|
: { preparedResourceKey: `recovery-${runtime.internals.deviceScope.generation}` }),
|
|
504
|
-
onRejected:
|
|
505
|
-
|
|
580
|
+
onRejected: () => {
|
|
581
|
+
featureFrame.onAborted();
|
|
582
|
+
releaseBatches();
|
|
583
|
+
},
|
|
584
|
+
onAbandoned: () => {
|
|
585
|
+
featureFrame.onAborted();
|
|
586
|
+
releaseBatches();
|
|
587
|
+
},
|
|
506
588
|
};
|
|
507
589
|
}
|
|
508
590
|
for (const renderable of seed.frame.renderables) {
|
|
@@ -596,25 +678,6 @@ export function createRenderSystemRecovery(
|
|
|
596
678
|
if (candidateValidated.length !== seed.frame.renderables.length) {
|
|
597
679
|
return failed('candidate validation did not retain every LKG-visible renderable');
|
|
598
680
|
}
|
|
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
681
|
const lighting = prepareFrameLighting(
|
|
619
682
|
runtime.internals,
|
|
620
683
|
candidateFrameState,
|
|
@@ -680,7 +743,7 @@ export function createRenderSystemRecovery(
|
|
|
680
743
|
) {
|
|
681
744
|
throw new Error(`recovery post-process bindings are unavailable: ${id}`);
|
|
682
745
|
}
|
|
683
|
-
const pipeline = postProcessPipeline(id, built.bindGroupLayout, colorFormat, entry);
|
|
746
|
+
const pipeline = postProcessPipeline(id, built.bindGroupLayout, [colorFormat], entry);
|
|
684
747
|
if (pipeline === null) {
|
|
685
748
|
throw new Error(`recovery post-process pipeline is unavailable: ${id}`);
|
|
686
749
|
}
|
|
@@ -714,7 +777,11 @@ export function createRenderSystemRecovery(
|
|
|
714
777
|
const taaPipeline = postProcessPipeline(
|
|
715
778
|
'forgeax.taa-resolve',
|
|
716
779
|
temporalBindings.layout,
|
|
717
|
-
|
|
780
|
+
[
|
|
781
|
+
TEMPORAL_HISTORY_FORMATS.color,
|
|
782
|
+
TEMPORAL_HISTORY_FORMATS.temporal,
|
|
783
|
+
TEMPORAL_HISTORY_FORMATS.stability,
|
|
784
|
+
],
|
|
718
785
|
taaEntry,
|
|
719
786
|
);
|
|
720
787
|
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
|
+
}
|