@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
|
@@ -280,19 +280,18 @@ export async function prepareMaterialShaders(
|
|
|
280
280
|
]);
|
|
281
281
|
|
|
282
282
|
// ── Step 0: storage-buffer cap gate ───────────────────────────────────────
|
|
283
|
-
const capValue =
|
|
284
|
-
.maxStorageBuffersPerShaderStage;
|
|
283
|
+
const capValue = rhiDevice.limits.maxStorageBuffersPerShaderStage;
|
|
285
284
|
const webgl2Downlevel = rhiDevice.caps.backendKind === 'wgpu-webgl2';
|
|
286
|
-
|
|
287
|
-
if (
|
|
285
|
+
let storageBufferCapable = !webgl2Downlevel && rhiDevice.caps.storageBuffer;
|
|
286
|
+
if (typeof capValue === 'number') {
|
|
288
287
|
const capCheck = assertStorageBufferCap(capValue);
|
|
289
288
|
if (!capCheck.ok) throw capCheck.error;
|
|
289
|
+
storageBufferCapable = !webgl2Downlevel && rhiDevice.caps.storageBuffer && capCheck.value;
|
|
290
290
|
}
|
|
291
291
|
const extendedLightingShaderAvailable = deriveExtendedLightingCapability(rhiDevice).admitted;
|
|
292
292
|
const projectorAvailable =
|
|
293
293
|
(rhiDevice.limits.maxSampledTexturesPerShaderStage ?? 0) >=
|
|
294
294
|
STANDARD_PBR_REQUIRED_SAMPLED_TEXTURES;
|
|
295
|
-
|
|
296
295
|
// ── Step 1: manifest load ─────────────────────────────────────────────────
|
|
297
296
|
const registry = getShader();
|
|
298
297
|
const loaded = await registry.loadManifest();
|
|
@@ -301,35 +300,46 @@ export async function prepareMaterialShaders(
|
|
|
301
300
|
}
|
|
302
301
|
|
|
303
302
|
// ── Step 1b: material shader variant resolution + registration ───────────
|
|
304
|
-
// feat-20260609-hdrp-cluster-fragment-ggx M1 / w7:
|
|
305
|
-
//
|
|
306
|
-
//
|
|
307
|
-
// (CLUSTER_FORWARD_AVAILABLE=true) is resolved later when
|
|
308
|
-
// clustered Standard profile activation selects the clustered variant.
|
|
309
|
-
const isHdrpActive = false; // M4: wire to actual renderSystem.frameState.isHdrpActive
|
|
303
|
+
// feat-20260609-hdrp-cluster-fragment-ggx M1 / w7: the boot resolver selects
|
|
304
|
+
// the non-clustered variant; clustered Standard activation resolves its own
|
|
305
|
+
// variant later at record time.
|
|
310
306
|
for (const msEntry of registry.materialShaderManifestEntries()) {
|
|
311
307
|
// bug-20260610: skip synthetic non-material engine entries piggy-backing
|
|
312
308
|
// on the materialShaders channel for variant surfacing (shadow_caster).
|
|
313
309
|
// They use the `forgeax::engine-` prefix and are consumed by Step 2's
|
|
314
310
|
// engine-entry compile path, NOT by installMaterialArtifact.
|
|
315
311
|
if (msEntry.identifier.startsWith('forgeax::engine-')) continue;
|
|
316
|
-
//
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
//
|
|
322
|
-
//
|
|
323
|
-
//
|
|
324
|
-
|
|
312
|
+
// The same closed resolver drives every manifest axis at boot. This keeps
|
|
313
|
+
// registration aligned with record-time capability/feature selection and
|
|
314
|
+
// supplies explicit defaults for opt-in axes such as shadow alpha-mask and
|
|
315
|
+
// GPU-driven scene-index variants.
|
|
316
|
+
// Build the exact boot key from the capability facts and explicit defaults.
|
|
317
|
+
// Record-time callers use resolveMaterialShaderVariantSet below; keeping
|
|
318
|
+
// the same axes here prevents a physical-material variant from being
|
|
319
|
+
// registered under a key that cannot be selected by the renderer.
|
|
320
|
+
const variantDefines: Record<string, boolean> = {
|
|
321
|
+
STORAGE_BUFFER_AVAILABLE: storageBufferCapable,
|
|
322
|
+
};
|
|
325
323
|
if (msEntry.variants.some((v) => 'WEBGL2_COMPAT' in v.defines)) {
|
|
326
324
|
variantDefines.WEBGL2_COMPAT = webgl2Downlevel;
|
|
327
325
|
}
|
|
328
|
-
// Only include CLUSTER_FORWARD_AVAILABLE when the material shader declares
|
|
329
|
-
// the axis (has a variant with this key), preserving backward compat for
|
|
330
|
-
// entries without the pragma.
|
|
331
326
|
if (msEntry.variants.some((v) => 'CLUSTER_FORWARD_AVAILABLE' in v.defines)) {
|
|
332
|
-
variantDefines.CLUSTER_FORWARD_AVAILABLE =
|
|
327
|
+
variantDefines.CLUSTER_FORWARD_AVAILABLE = false;
|
|
328
|
+
}
|
|
329
|
+
if (msEntry.variants.some((v) => 'GPU_DRIVEN_SCENE_INDEX_AVAILABLE' in v.defines)) {
|
|
330
|
+
variantDefines.GPU_DRIVEN_SCENE_INDEX_AVAILABLE = false;
|
|
331
|
+
}
|
|
332
|
+
if (msEntry.variants.some((v) => 'GPU_DRIVEN_SCENE_INDEX_EXPLICIT' in v.defines)) {
|
|
333
|
+
// The boot material is the compact visible-stream path. Explicit
|
|
334
|
+
// scene-index dispatches select their own variant at record time; they
|
|
335
|
+
// must never make the default artifact key unsatisfiable.
|
|
336
|
+
variantDefines.GPU_DRIVEN_SCENE_INDEX_EXPLICIT = false;
|
|
337
|
+
}
|
|
338
|
+
if (msEntry.variants.some((v) => 'ALPHA_MASK' in v.defines)) {
|
|
339
|
+
// Alpha-mask admission is a per-draw producer fact. Keep the boot
|
|
340
|
+
// artifact opaque and resolve ALPHA_MASK=true only for a receipt-owned
|
|
341
|
+
// shadow batch.
|
|
342
|
+
variantDefines.ALPHA_MASK = false;
|
|
333
343
|
}
|
|
334
344
|
if (msEntry.variants.some((v) => 'DIRECTIONAL_PCSS_AVAILABLE' in v.defines)) {
|
|
335
345
|
variantDefines.DIRECTIONAL_PCSS_AVAILABLE = directionalPcssCapable(
|
|
@@ -339,16 +349,24 @@ export async function prepareMaterialShaders(
|
|
|
339
349
|
if (msEntry.variants.some((v) => 'VERTEX_COLOR_AVAILABLE' in v.defines)) {
|
|
340
350
|
variantDefines.VERTEX_COLOR_AVAILABLE = false;
|
|
341
351
|
}
|
|
352
|
+
if (msEntry.variants.some((v) => 'COVERAGE_ONLY' in v.defines)) {
|
|
353
|
+
// Coverage-only is a producer-owned opt-in for sprite/temporal paths.
|
|
354
|
+
// Keep the ordinary boot material on the opaque variant; record-time
|
|
355
|
+
// coverage batches request the true variant explicitly.
|
|
356
|
+
variantDefines.COVERAGE_ONLY = false;
|
|
357
|
+
}
|
|
342
358
|
if (msEntry.variants.some((v) => 'PROBE_BLEND_AVAILABLE' in v.defines)) {
|
|
343
359
|
variantDefines.PROBE_BLEND_AVAILABLE = false;
|
|
344
360
|
}
|
|
345
361
|
if (msEntry.variants.some((v) => 'EXTENDED_LIGHTING_AVAILABLE' in v.defines)) {
|
|
346
362
|
variantDefines.EXTENDED_LIGHTING_AVAILABLE = extendedLightingShaderAvailable;
|
|
347
363
|
}
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
364
|
+
// A material shader that declares the projector axis owns the same
|
|
365
|
+
// capability-selected resource pair, regardless of whether it is the
|
|
366
|
+
// engine Standard entry or a VFX particle entry. Omitting this value for
|
|
367
|
+
// particle variants asks the manifest for a partial key and fails before
|
|
368
|
+
// the first frame when the shader does not use the Standard root.
|
|
369
|
+
if (msEntry.variants.some((v) => 'PROJECTOR_AVAILABLE' in v.defines)) {
|
|
352
370
|
variantDefines.PROJECTOR_AVAILABLE = projectorAvailable;
|
|
353
371
|
}
|
|
354
372
|
if (msEntry.variants.some((v) => 'TRANSMISSION_AVAILABLE' in v.defines)) {
|
|
@@ -409,6 +427,9 @@ export async function prepareMaterialShaders(
|
|
|
409
427
|
registry.installMaterialArtifact(msEntry.identifier, {
|
|
410
428
|
source: wgsl,
|
|
411
429
|
paramSchema,
|
|
430
|
+
...(chosen?.receipt === undefined && msEntry.receipt === undefined
|
|
431
|
+
? {}
|
|
432
|
+
: { receipt: chosen?.receipt ?? msEntry.receipt }),
|
|
412
433
|
});
|
|
413
434
|
// feat-20260629 M4: store uvSetCount from naga reflection for
|
|
414
435
|
// auto-fill in getMaterialShaderPipeline clamp-to-last alias.
|
|
@@ -457,6 +478,7 @@ export async function prepareMaterialShaders(
|
|
|
457
478
|
registry.installMaterialArtifact(shadowCasterIdentifier, {
|
|
458
479
|
source: manifestEntry.composedWgsl,
|
|
459
480
|
paramSchema: STANDARD_PIPELINE_PARAM_SCHEMA,
|
|
481
|
+
...(manifestEntry.receipt === undefined ? {} : { receipt: manifestEntry.receipt }),
|
|
460
482
|
});
|
|
461
483
|
const shaderGuid = ENGINE_SHADER_GUIDS.get(shadowCasterIdentifier);
|
|
462
484
|
if (shaderGuid !== undefined) {
|
|
@@ -516,7 +538,15 @@ export async function prepareMaterialShaders(
|
|
|
516
538
|
* material-shader layouts add a `LayoutKind` member + a PipelineState slot
|
|
517
539
|
* + a switch arm here in one cut (charter P3 extensibility).
|
|
518
540
|
*/
|
|
519
|
-
export type LayoutKind =
|
|
541
|
+
export type LayoutKind =
|
|
542
|
+
| 'pbr'
|
|
543
|
+
| 'pbr-skin'
|
|
544
|
+
| 'gpu-driven-pbr'
|
|
545
|
+
| 'gpu-driven-skin'
|
|
546
|
+
| 'hdrp-pbr'
|
|
547
|
+
| 'hdrp-skin'
|
|
548
|
+
| 'sprite-urp'
|
|
549
|
+
| 'unlit-urp';
|
|
520
550
|
|
|
521
551
|
function directionalPcssCapable(backendKind: RhiDevice['caps']['backendKind']): boolean {
|
|
522
552
|
return backendKind === 'webgpu' || backendKind === 'wgpu-native';
|
|
@@ -583,9 +613,12 @@ export function selectNoColorPbrVariant(
|
|
|
583
613
|
): MaterialShaderManifestEntry['variants'][number] | undefined {
|
|
584
614
|
const hdrpRequested = variantSet === '' || requestsClusterVariant(variantSet);
|
|
585
615
|
const probeBlendRequested = requestsProbeBlendVariant(variantSet);
|
|
616
|
+
const coverageOnlyRequested = variantSet?.includes('COVERAGE_ONLY=true') === true;
|
|
586
617
|
return manifestEntry?.variants.find(
|
|
587
618
|
(variant) =>
|
|
588
619
|
variant.defines.STORAGE_BUFFER_AVAILABLE === storageBufferCapable &&
|
|
620
|
+
(!('COVERAGE_ONLY' in variant.defines) ||
|
|
621
|
+
variant.defines.COVERAGE_ONLY === coverageOnlyRequested) &&
|
|
589
622
|
(!('EXTENDED_LIGHTING_AVAILABLE' in variant.defines) ||
|
|
590
623
|
variant.defines.EXTENDED_LIGHTING_AVAILABLE === extendedLightingShaderAvailable) &&
|
|
591
624
|
variant.defines.VERTEX_COLOR_AVAILABLE === false &&
|
|
@@ -627,6 +660,17 @@ export function resolveMaterialShaderBindingContract(
|
|
|
627
660
|
/@group\s*\(\s*0\s*\)\s*@binding\s*\(\s*1\s*\)\s*var\s+scene_depth\s*:\s*texture_depth_2d\b/u.test(
|
|
628
661
|
withoutComments,
|
|
629
662
|
);
|
|
663
|
+
const declaresSceneDepthAtZero =
|
|
664
|
+
/@group\s*\(\s*0\s*\)\s*@binding\s*\(\s*0\s*\)\s*var\s+scene_depth\s*:\s*texture_depth_2d\b/u.test(
|
|
665
|
+
withoutComments,
|
|
666
|
+
);
|
|
667
|
+
const hasMaterialGroup = groups.includes(1);
|
|
668
|
+
if (declaresView && declaresSceneDepth && hasMaterialGroup) {
|
|
669
|
+
return 'render-material-and-scene-depth';
|
|
670
|
+
}
|
|
671
|
+
if (declaresSceneDepthAtZero && hasMaterialGroup) {
|
|
672
|
+
return 'render-material-with-scene-depth';
|
|
673
|
+
}
|
|
630
674
|
if (declaresView && declaresSceneDepth && groups.every((group) => group === 0)) {
|
|
631
675
|
return 'view-and-scene-depth';
|
|
632
676
|
}
|
|
@@ -760,8 +804,11 @@ export function shouldDeferMissingPreparedMaterialShader(
|
|
|
760
804
|
): boolean {
|
|
761
805
|
return (
|
|
762
806
|
vertexLayout === RENDER_FEATURE_VERTEX_LAYOUTS.billboardMaterialInstance ||
|
|
807
|
+
vertexLayout === RENDER_FEATURE_VERTEX_LAYOUTS.billboardMaterialInputInstance ||
|
|
763
808
|
vertexLayout === RENDER_FEATURE_VERTEX_LAYOUTS.topologySegmentInstance ||
|
|
764
|
-
vertexLayout === RENDER_FEATURE_VERTEX_LAYOUTS.
|
|
809
|
+
vertexLayout === RENDER_FEATURE_VERTEX_LAYOUTS.topologySegmentMaterialInputInstance ||
|
|
810
|
+
vertexLayout === RENDER_FEATURE_VERTEX_LAYOUTS.meshGeometryMaterialInstance ||
|
|
811
|
+
vertexLayout === RENDER_FEATURE_VERTEX_LAYOUTS.meshGeometryMaterialInputInstance
|
|
765
812
|
);
|
|
766
813
|
}
|
|
767
814
|
|
|
@@ -773,6 +820,8 @@ export function selectPipelineLayoutForVariant(
|
|
|
773
820
|
readonly hdrpProbePbrPipelineLayout?: PipelineLayout | null;
|
|
774
821
|
readonly pbrSkinPipelineLayout: PipelineLayout | null;
|
|
775
822
|
readonly pbrSkinProbePipelineLayout?: PipelineLayout | null;
|
|
823
|
+
readonly gpuDrivenPbrPipelineLayout?: PipelineLayout | null;
|
|
824
|
+
readonly gpuDrivenPbrSkinPipelineLayout?: PipelineLayout | null;
|
|
776
825
|
readonly hdrpSkinPipelineLayout?: PipelineLayout | null;
|
|
777
826
|
} | null,
|
|
778
827
|
variantSet: string | undefined,
|
|
@@ -780,6 +829,12 @@ export function selectPipelineLayoutForVariant(
|
|
|
780
829
|
): PipelineLayout | null {
|
|
781
830
|
if (state === null) return null;
|
|
782
831
|
const probeBlendVariant = variantSet?.includes('PROBE_BLEND_AVAILABLE=true') === true;
|
|
832
|
+
if (layoutKind === 'gpu-driven-pbr') {
|
|
833
|
+
return state.gpuDrivenPbrPipelineLayout ?? null;
|
|
834
|
+
}
|
|
835
|
+
if (layoutKind === 'gpu-driven-skin') {
|
|
836
|
+
return state.gpuDrivenPbrSkinPipelineLayout ?? null;
|
|
837
|
+
}
|
|
783
838
|
// bug-20260611: skin layout selection takes precedence over HDRP variant
|
|
784
839
|
// resolution. HDRP × skin is OOS-1 (plan-strategy R-2 — left for a
|
|
785
840
|
// dedicated feat); when an HDRP-variant skin call ever lands, we fail
|
|
@@ -853,6 +908,7 @@ export function resolveMaterialShaderVariantSet(
|
|
|
853
908
|
): string | undefined {
|
|
854
909
|
const declaredAxes = new Set(variants.flatMap((variant) => Object.keys(variant.defines)));
|
|
855
910
|
const declaresCapabilityVariants =
|
|
911
|
+
declaredAxes.has('COVERAGE_ONLY') ||
|
|
856
912
|
declaredAxes.has('WEBGL2_COMPAT') ||
|
|
857
913
|
declaredAxes.has('STORAGE_BUFFER_AVAILABLE') ||
|
|
858
914
|
declaredAxes.has('EXTENDED_LIGHTING_AVAILABLE') ||
|
|
@@ -890,23 +946,31 @@ export function resolveMaterialShaderVariantSet(
|
|
|
890
946
|
? backendKind !== 'wgpu-webgl2' && storageBuffer
|
|
891
947
|
: axis === 'SKINNING_DISABLED'
|
|
892
948
|
? (requested[axis] ?? true)
|
|
893
|
-
: axis === '
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
949
|
+
: axis === 'ALPHA_MASK' ||
|
|
950
|
+
axis === 'GPU_DRIVEN_SCENE_INDEX_AVAILABLE' ||
|
|
951
|
+
axis === 'GPU_DRIVEN_SCENE_INDEX_EXPLICIT' ||
|
|
952
|
+
axis === 'COVERAGE_ONLY'
|
|
953
|
+
? (requested[axis] ?? false)
|
|
954
|
+
: axis === 'CLUSTER_FORWARD_AVAILABLE'
|
|
955
|
+
? storageBuffer && backendKind !== 'wgpu-webgl2' && (requested[axis] ?? false)
|
|
956
|
+
: axis === 'PER_INSTANCE_REGION'
|
|
898
957
|
? requestedVariantSet === '' || (requested[axis] ?? false)
|
|
899
|
-
: axis === '
|
|
900
|
-
?
|
|
901
|
-
: axis === '
|
|
902
|
-
?
|
|
903
|
-
: axis === '
|
|
904
|
-
? (requested[axis] ?? false)
|
|
905
|
-
: axis === '
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
958
|
+
: axis === 'VERTEX_COLOR_AVAILABLE'
|
|
959
|
+
? requestedVariantSet === '' || (requested[axis] ?? false)
|
|
960
|
+
: axis === 'EXTENDED_LIGHTING_AVAILABLE'
|
|
961
|
+
? extendedLightingAvailable
|
|
962
|
+
: axis === 'PROBE_BLEND_AVAILABLE'
|
|
963
|
+
? storageBuffer && (requested[axis] ?? false)
|
|
964
|
+
: axis === 'TRANSMISSION_AVAILABLE' ||
|
|
965
|
+
axis === 'REFLECTION_FALLBACK_AVAILABLE'
|
|
966
|
+
? (requested[axis] ?? false)
|
|
967
|
+
: axis === 'DIRECTIONAL_PCSS_AVAILABLE'
|
|
968
|
+
? directionalPcssCapable(backendKind)
|
|
969
|
+
: axis === 'PROJECTOR_AVAILABLE'
|
|
970
|
+
? projectorAvailable
|
|
971
|
+
: // Authored axes keep the manifest's all-true default.
|
|
972
|
+
// Only Engine-owned admission axes default to disabled.
|
|
973
|
+
(requested[axis] ?? true);
|
|
910
974
|
}
|
|
911
975
|
const sorted = Object.entries(filtered).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
912
976
|
return sorted.every(([, value]) => value)
|
|
@@ -50,6 +50,11 @@ export function attachDeviceLostFanout(
|
|
|
50
50
|
}
|
|
51
51
|
onDeviceLost?.(detail);
|
|
52
52
|
lostRegistry.fire(safe);
|
|
53
|
+
// A `destroyed` loss is the terminal signal from an intentional
|
|
54
|
+
// GPUDevice.destroy() call. It is observable through the lost channel,
|
|
55
|
+
// but must not put the renderer into recoverable device-lost health or
|
|
56
|
+
// emit an error during normal teardown. Only an unexpected loss keeps the
|
|
57
|
+
// recovery/error fan-out active.
|
|
53
58
|
if (safe.reason !== 'destroyed') {
|
|
54
59
|
pack.instrumentation?.onDeviceLost?.();
|
|
55
60
|
healthRegistry.fire({
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { DeviceResourceKind } from '../../device/resource-types';
|
|
2
|
+
import type { RecoveryGuidance, RecoveryPhase } from '../renderer-lifecycle';
|
|
3
|
+
|
|
4
|
+
export interface RecoveryFailureLocation {
|
|
5
|
+
readonly phase: RecoveryPhase;
|
|
6
|
+
readonly retryable: boolean;
|
|
7
|
+
readonly guidance: RecoveryGuidance;
|
|
8
|
+
readonly owner: string;
|
|
9
|
+
readonly resourceKind: DeviceResourceKind;
|
|
10
|
+
readonly cause: unknown;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function recoveryCauseCode(cause: unknown): string | undefined {
|
|
14
|
+
if (typeof cause !== 'object' || cause === null) return undefined;
|
|
15
|
+
const directCode = (cause as { readonly code?: unknown }).code;
|
|
16
|
+
if (typeof directCode === 'string') return directCode;
|
|
17
|
+
const detail = (cause as { readonly detail?: unknown }).detail;
|
|
18
|
+
if (typeof detail !== 'object' || detail === null) return undefined;
|
|
19
|
+
const detailCode = (detail as { readonly code?: unknown }).code;
|
|
20
|
+
if (typeof detailCode === 'string') return detailCode;
|
|
21
|
+
return recoveryCauseCode((detail as { readonly cause?: unknown }).cause);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function createRecoveryFailureLocation(
|
|
25
|
+
phase: RecoveryPhase,
|
|
26
|
+
cause: unknown,
|
|
27
|
+
overrides: Partial<Omit<RecoveryFailureLocation, 'phase' | 'cause'>> = {},
|
|
28
|
+
): RecoveryFailureLocation {
|
|
29
|
+
const code = recoveryCauseCode(cause) ?? '';
|
|
30
|
+
const resourceKind: DeviceResourceKind = code.includes('shader')
|
|
31
|
+
? 'shader'
|
|
32
|
+
: code.includes('buffer')
|
|
33
|
+
? 'buffer'
|
|
34
|
+
: code.includes('texture')
|
|
35
|
+
? 'texture'
|
|
36
|
+
: code.includes('binding')
|
|
37
|
+
? 'binding'
|
|
38
|
+
: phase === 'rehydrate'
|
|
39
|
+
? 'shader'
|
|
40
|
+
: phase === 'acquire-adapter' || phase === 'acquire-device'
|
|
41
|
+
? 'surface'
|
|
42
|
+
: phase === 'publish' || phase === 'cleanup'
|
|
43
|
+
? 'surface'
|
|
44
|
+
: 'pipeline';
|
|
45
|
+
const owner =
|
|
46
|
+
code.includes('shader') || phase === 'rehydrate'
|
|
47
|
+
? 'shader'
|
|
48
|
+
: phase === 'acquire-adapter' || phase === 'acquire-device'
|
|
49
|
+
? 'backend'
|
|
50
|
+
: phase === 'compile-graph'
|
|
51
|
+
? 'pipeline'
|
|
52
|
+
: 'renderer';
|
|
53
|
+
return {
|
|
54
|
+
phase,
|
|
55
|
+
retryable: false,
|
|
56
|
+
guidance: 'repair-owner',
|
|
57
|
+
owner,
|
|
58
|
+
resourceKind,
|
|
59
|
+
cause,
|
|
60
|
+
...overrides,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
} from '@forgeax/engine-rhi';
|
|
13
13
|
import { ok, type Result } from '@forgeax/engine-types';
|
|
14
14
|
import type { RhiBackendPack } from '../backend-contract';
|
|
15
|
+
import { deviceOptionsForAdapter } from '../device-feature-admission';
|
|
15
16
|
import {
|
|
16
17
|
RECOVERY_ADAPTER_DEADLINE_MS,
|
|
17
18
|
RECOVERY_DEVICE_DEADLINE_MS,
|
|
@@ -20,13 +21,7 @@ import {
|
|
|
20
21
|
type RecoveryPhase,
|
|
21
22
|
} from '../renderer-lifecycle';
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
'texture-compression-bc',
|
|
25
|
-
'texture-compression-etc2',
|
|
26
|
-
'texture-compression-astc',
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
export const STANDARD_PBR_REQUIRED_SAMPLED_TEXTURES = 17;
|
|
24
|
+
export { deviceOptionsForAdapter } from '../device-feature-admission';
|
|
30
25
|
|
|
31
26
|
const PROBE_TEXTURE_USAGE_COPY_SRC = 0x01;
|
|
32
27
|
const PROBE_TEXTURE_USAGE_RENDER_ATTACHMENT = 0x10;
|
|
@@ -573,28 +568,6 @@ export async function probeCandidateGraphExecution(
|
|
|
573
568
|
}
|
|
574
569
|
}
|
|
575
570
|
|
|
576
|
-
export function deviceOptionsForAdapter(adapter: Pick<RhiAdapter, 'features' | 'limits'>):
|
|
577
|
-
| {
|
|
578
|
-
requiredFeatures?: GPUFeatureName[];
|
|
579
|
-
requiredLimits?: GPUDeviceDescriptor['requiredLimits'];
|
|
580
|
-
}
|
|
581
|
-
| undefined {
|
|
582
|
-
const requiredFeatures = COMPRESSION_FEATURES.filter((feature) => adapter.features.has(feature));
|
|
583
|
-
const supportsTransmission =
|
|
584
|
-
(adapter.limits.maxSampledTexturesPerShaderStage ?? 0) >=
|
|
585
|
-
STANDARD_PBR_REQUIRED_SAMPLED_TEXTURES;
|
|
586
|
-
return {
|
|
587
|
-
...(requiredFeatures.length > 0 ? { requiredFeatures } : {}),
|
|
588
|
-
...(supportsTransmission
|
|
589
|
-
? {
|
|
590
|
-
requiredLimits: {
|
|
591
|
-
maxSampledTexturesPerShaderStage: STANDARD_PBR_REQUIRED_SAMPLED_TEXTURES,
|
|
592
|
-
},
|
|
593
|
-
}
|
|
594
|
-
: {}),
|
|
595
|
-
};
|
|
596
|
-
}
|
|
597
|
-
|
|
598
571
|
export interface AcquiredDeviceGeneration {
|
|
599
572
|
readonly adapter: RhiAdapter;
|
|
600
573
|
readonly device: RhiDevice;
|
|
@@ -19,18 +19,13 @@ import {
|
|
|
19
19
|
postProcessShaderEntrySignature,
|
|
20
20
|
postProcessShaderPipelineLabel,
|
|
21
21
|
} from '../../fullscreen-post-process-pass';
|
|
22
|
-
import {
|
|
23
|
-
import type {
|
|
24
|
-
PipelineState,
|
|
25
|
-
RecoveryColdWorkGuard,
|
|
26
|
-
RenderSystemInternals,
|
|
27
|
-
} from '../../record/render-context';
|
|
22
|
+
import type { PipelineState, RenderSystemInternals } from '../../record/render-context';
|
|
28
23
|
import type {
|
|
29
24
|
RecoveryGraphCandidate,
|
|
30
25
|
RecoveryPostProcessResources,
|
|
31
26
|
RecoveryRootBundle,
|
|
32
|
-
|
|
33
|
-
} from '../../render-system';
|
|
27
|
+
} from '../../recovery/types';
|
|
28
|
+
import type { RenderSystem } from '../../render-system';
|
|
34
29
|
import type { RhiBackendPack } from '../backend-contract';
|
|
35
30
|
import {
|
|
36
31
|
type LayoutKind,
|
|
@@ -42,8 +37,9 @@ import type { MeshSsboGrowResult, MeshSsboState } from '../mesh-ssbo-grow';
|
|
|
42
37
|
import { structuredRendererCause } from '../renderer-facade';
|
|
43
38
|
import { ensureContextConfigured } from '../renderer-helpers';
|
|
44
39
|
import type { RecoveryContinuation, RecoveryDeadline, RecoveryPhase } from '../renderer-lifecycle';
|
|
45
|
-
import type {
|
|
40
|
+
import type { WebGPURendererInternals } from '../webgpu-renderer';
|
|
46
41
|
import { attachDeviceLostFanout } from './device-loss-fanout';
|
|
42
|
+
import type { RecoveryFailureLocation } from './failure-location';
|
|
47
43
|
import { buildGenerationAggregate, type GenerationAggregate } from './generation';
|
|
48
44
|
import {
|
|
49
45
|
acquireDeviceGeneration,
|
|
@@ -146,6 +142,9 @@ export interface RendererRecoveryDependencies {
|
|
|
146
142
|
readonly getMaterialShaderPipelineEntry: NonNullable<
|
|
147
143
|
RenderSystemInternals['getMaterialShaderPipelineEntry']
|
|
148
144
|
>;
|
|
145
|
+
readonly getMaterialShaderArtifact: NonNullable<
|
|
146
|
+
RenderSystemInternals['getMaterialShaderArtifact']
|
|
147
|
+
>;
|
|
149
148
|
readonly getCachedMaterialShaderBindingContract: NonNullable<
|
|
150
149
|
RenderSystemInternals['getMaterialShaderBindingContract']
|
|
151
150
|
>;
|
|
@@ -166,7 +165,6 @@ export interface RendererRecoveryDependencies {
|
|
|
166
165
|
candidatePostProcessResources: RecoveryPostProcessResources,
|
|
167
166
|
recoveryRootBundle: RecoveryRootBundle,
|
|
168
167
|
recoveryGraphCandidate: RecoveryGraphCandidate | undefined,
|
|
169
|
-
recoveryColdWorkGuard: RecoveryColdWorkGuard,
|
|
170
168
|
) => void;
|
|
171
169
|
}
|
|
172
170
|
|
|
@@ -205,6 +203,7 @@ export function createRendererRecovery(deps: RendererRecoveryDependencies): Rend
|
|
|
205
203
|
buildPipeline,
|
|
206
204
|
getMaterialShaderPipeline,
|
|
207
205
|
getMaterialShaderPipelineEntry,
|
|
206
|
+
getMaterialShaderArtifact,
|
|
208
207
|
getCachedMaterialShaderBindingContract,
|
|
209
208
|
getParamSchema,
|
|
210
209
|
getMaterialBindGroupLayout,
|
|
@@ -253,7 +252,6 @@ export function createRendererRecovery(deps: RendererRecoveryDependencies): Rend
|
|
|
253
252
|
// old roots remain authoritative until the final synchronous publication.
|
|
254
253
|
const candidateGpuStore = new GpuResidencyCache();
|
|
255
254
|
const candidateDynamicTextureStore = new DynamicTextureStore();
|
|
256
|
-
const recoveryColdWorkGuard = createRecoveryColdWorkGuard();
|
|
257
255
|
// Re-acquire through the SAME backend pack (the
|
|
258
256
|
// idempotent factory primitives tryCreateWebGPURenderer uses). On the
|
|
259
257
|
// adapter / device failure paths, health stays `device-lost` (A-AC-07):
|
|
@@ -334,6 +332,7 @@ export function createRendererRecovery(deps: RendererRecoveryDependencies): Rend
|
|
|
334
332
|
candidateShaderCatalog.installMaterialArtifact(identifier, {
|
|
335
333
|
source: entry.value.source,
|
|
336
334
|
paramSchema: entry.value.paramSchema,
|
|
335
|
+
...(entry.value.receipt === undefined ? {} : { receipt: entry.value.receipt }),
|
|
337
336
|
});
|
|
338
337
|
}
|
|
339
338
|
}
|
|
@@ -568,14 +567,15 @@ export function createRendererRecovery(deps: RendererRecoveryDependencies): Rend
|
|
|
568
567
|
const candidateInternals = Object.create(internals) as WebGPURendererInternals &
|
|
569
568
|
RenderSystemInternals;
|
|
570
569
|
Object.defineProperties(candidateInternals, {
|
|
570
|
+
assets: { value: assets },
|
|
571
571
|
device: { value: candidateState.device },
|
|
572
572
|
context: { value: candidateState.context },
|
|
573
573
|
deviceScope: { value: candidateState.scope },
|
|
574
574
|
gpuStore: { value: candidateState.gpuStore },
|
|
575
575
|
dynamicTextureStore: { value: candidateState.dynamicTextureStore },
|
|
576
|
-
recoveryColdWorkGuard: { value: undefined },
|
|
577
576
|
getMaterialShaderPipeline: { value: getMaterialShaderPipeline },
|
|
578
577
|
getMaterialShaderPipelineEntry: { value: getMaterialShaderPipelineEntry },
|
|
578
|
+
getMaterialShaderArtifact: { value: getMaterialShaderArtifact },
|
|
579
579
|
getMaterialShaderBindingContract: { value: getCachedMaterialShaderBindingContract },
|
|
580
580
|
getParamSchema: { value: getParamSchema },
|
|
581
581
|
getMaterialBindGroupLayout: { value: getMaterialBindGroupLayout },
|
|
@@ -594,20 +594,20 @@ export function createRendererRecovery(deps: RendererRecoveryDependencies): Rend
|
|
|
594
594
|
value: (
|
|
595
595
|
id: string,
|
|
596
596
|
bgl: BindGroupLayout,
|
|
597
|
-
|
|
597
|
+
colorFormats: readonly GPUTextureFormat[],
|
|
598
598
|
entryOverride?: PostProcessShaderEntry,
|
|
599
599
|
) => {
|
|
600
600
|
const entry = entryOverride ?? candidateInternals.lookupPostProcess?.(id);
|
|
601
601
|
if (entry === undefined || candidateInternals.buildPostProcessPipeline === undefined) {
|
|
602
602
|
return null;
|
|
603
603
|
}
|
|
604
|
-
const key = `${id}|${
|
|
604
|
+
const key = `${id}|${colorFormats.join(',')}|${postProcessShaderEntrySignature(entry)}`;
|
|
605
605
|
const cached = candidatePostProcessPipelineCache.get(key);
|
|
606
606
|
if (cached !== undefined) return cached;
|
|
607
607
|
const built = candidateInternals.buildPostProcessPipeline(
|
|
608
608
|
entry,
|
|
609
609
|
bgl,
|
|
610
|
-
|
|
610
|
+
colorFormats,
|
|
611
611
|
postProcessShaderPipelineLabel(id, entry.source),
|
|
612
612
|
);
|
|
613
613
|
if (built === null) return null;
|
|
@@ -632,7 +632,7 @@ export function createRendererRecovery(deps: RendererRecoveryDependencies): Rend
|
|
|
632
632
|
releaseCandidate();
|
|
633
633
|
return err(new RecoverError('recover-device-unavailable'));
|
|
634
634
|
}
|
|
635
|
-
const graphPreparation =
|
|
635
|
+
const graphPreparation = renderSystem.prepareRecoveryGraphCandidate({
|
|
636
636
|
internals: candidateInternals,
|
|
637
637
|
pipelineState: candidatePipelineState,
|
|
638
638
|
});
|
|
@@ -872,7 +872,6 @@ export function createRendererRecovery(deps: RendererRecoveryDependencies): Rend
|
|
|
872
872
|
candidatePostProcessResources,
|
|
873
873
|
preparedRecoveryRoots,
|
|
874
874
|
recoveryGraphCandidate,
|
|
875
|
-
recoveryColdWorkGuard,
|
|
876
875
|
);
|
|
877
876
|
if (recoveryGraphCandidate !== undefined) {
|
|
878
877
|
recoveryGraphCandidate = undefined;
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
STANDARD_POST_STAGE_NAMES,
|
|
22
22
|
} from '../pipeline/standard-profile';
|
|
23
23
|
import type {
|
|
24
|
+
FrameObservationDomain,
|
|
24
25
|
Renderer,
|
|
25
26
|
RendererError,
|
|
26
27
|
RendererEventListener,
|
|
@@ -29,6 +30,7 @@ import type {
|
|
|
29
30
|
RenderProfile,
|
|
30
31
|
RenderResult,
|
|
31
32
|
} from '../render-contract';
|
|
33
|
+
import { resolveSsaoParameters } from '../ssao-config';
|
|
32
34
|
import type { RendererHostImplementation } from './host-contract';
|
|
33
35
|
import { createRendererLifecycle, isRendererStateOperational } from './renderer-lifecycle';
|
|
34
36
|
|
|
@@ -88,6 +90,8 @@ export function exposeRenderer(renderer: RendererHostImplementation): Renderer {
|
|
|
88
90
|
});
|
|
89
91
|
|
|
90
92
|
return {
|
|
93
|
+
instances: renderer.instances,
|
|
94
|
+
bounds: (world, entity) => (disposed ? undefined : renderer.bounds(world, entity)),
|
|
91
95
|
attach: (world) => {
|
|
92
96
|
const result = renderer.attach(world);
|
|
93
97
|
return result.ok
|
|
@@ -105,6 +109,8 @@ export function exposeRenderer(renderer: RendererHostImplementation): Renderer {
|
|
|
105
109
|
candidate: DynamicGeometryCandidate,
|
|
106
110
|
ordering: DynamicGeometryOrdering,
|
|
107
111
|
) => renderer.acceptDynamicGeometry(candidate, ordering),
|
|
112
|
+
acceptDynamicGeometryCandidates: (candidates, ordering) =>
|
|
113
|
+
renderer.acceptDynamicGeometryCandidates(candidates, ordering),
|
|
108
114
|
dynamicGeometryReceipt: (candidate: DynamicGeometryCandidate) =>
|
|
109
115
|
renderer.dynamicGeometryReceipt(candidate),
|
|
110
116
|
cancelDynamicGeometry: (candidate: DynamicGeometryCandidate) =>
|
|
@@ -147,10 +153,19 @@ export function exposeRenderer(renderer: RendererHostImplementation): Renderer {
|
|
|
147
153
|
kind: 'frame-submitted',
|
|
148
154
|
frameId: result.value.frameId,
|
|
149
155
|
deviceGeneration: result.value.deviceGeneration,
|
|
156
|
+
receipt: result.value,
|
|
150
157
|
}),
|
|
151
158
|
);
|
|
152
159
|
return ok(result.value);
|
|
153
160
|
},
|
|
161
|
+
requestObservation: (domains: readonly FrameObservationDomain[]) =>
|
|
162
|
+
renderer.requestObservation?.(domains) ??
|
|
163
|
+
err(
|
|
164
|
+
new RendererOperationError('renderer-state-invalid', {
|
|
165
|
+
operation: 'request-observation',
|
|
166
|
+
state: lifecycle.state(),
|
|
167
|
+
}),
|
|
168
|
+
),
|
|
154
169
|
inspect: () => ({ ...renderer.inspect(), state: lifecycle.state() }),
|
|
155
170
|
observe: (receipt, request) => renderer.observe(receipt, request),
|
|
156
171
|
subscribe: (listener) => {
|
|
@@ -337,9 +352,26 @@ export function validateRenderProfile(profile: RenderProfile): string | undefine
|
|
|
337
352
|
if (profile.shadows !== 'off' && profile.shadows !== 'hard' && profile.shadows !== 'filtered') {
|
|
338
353
|
return "RenderProfile.shadows must be 'off', 'hard', or 'filtered'";
|
|
339
354
|
}
|
|
340
|
-
for (const field of ['pbr', 'ibl'
|
|
355
|
+
for (const field of ['pbr', 'ibl'] as const) {
|
|
341
356
|
if (typeof profile[field] !== 'boolean') return `RenderProfile.${field} must be boolean`;
|
|
342
357
|
}
|
|
358
|
+
if (
|
|
359
|
+
typeof profile.ssao !== 'boolean' &&
|
|
360
|
+
(typeof profile.ssao !== 'object' || profile.ssao === null || Array.isArray(profile.ssao))
|
|
361
|
+
)
|
|
362
|
+
return 'RenderProfile.ssao must be boolean or AO parameters';
|
|
363
|
+
if (typeof profile.ssao === 'object') {
|
|
364
|
+
if (
|
|
365
|
+
Object.keys(profile.ssao).some(
|
|
366
|
+
(key) => !['radius', 'bias', 'intensity', 'quality'].includes(key),
|
|
367
|
+
)
|
|
368
|
+
)
|
|
369
|
+
return 'RenderProfile.ssao contains an unsupported parameter';
|
|
370
|
+
const resolved = resolveSsaoParameters(profile.ssao);
|
|
371
|
+
if (!resolved.ok) return resolved.error.hint;
|
|
372
|
+
}
|
|
373
|
+
if (profile.ssao !== false && profile.renderPath !== 'deferred')
|
|
374
|
+
return 'SSAO needs current depth and normals: set renderPath to deferred';
|
|
343
375
|
const stages = STANDARD_POST_STAGE_NAMES;
|
|
344
376
|
if (
|
|
345
377
|
!Array.isArray(profile.postStages) ||
|
|
@@ -354,6 +386,7 @@ export function validateRenderProfile(profile: RenderProfile): string | undefine
|
|
|
354
386
|
export function freezeRenderProfile(profile: RenderProfile): RenderProfile {
|
|
355
387
|
return Object.freeze({
|
|
356
388
|
...profile,
|
|
389
|
+
ssao: typeof profile.ssao === 'object' ? Object.freeze({ ...profile.ssao }) : profile.ssao,
|
|
357
390
|
postStages: Object.freeze([...profile.postStages]) as RenderProfile['postStages'],
|
|
358
391
|
});
|
|
359
392
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RenderFeatureHost } from '../features/host';
|
|
2
|
+
import type { RenderInspection } from '../render-contract';
|
|
3
|
+
|
|
4
|
+
/** Project feature-host lifecycle facts without exposing the live host. */
|
|
5
|
+
export function projectRendererFeatureInspection(
|
|
6
|
+
featureHost: RenderFeatureHost | undefined,
|
|
7
|
+
): Pick<RenderInspection, 'features' | 'featureDiagnostics' | 'featureHost'> {
|
|
8
|
+
return {
|
|
9
|
+
features: Object.freeze((featureHost?.features ?? []).map((feature) => feature.identity)),
|
|
10
|
+
featureDiagnostics: featureHost?.diagnostics() ?? Object.freeze([]),
|
|
11
|
+
...(featureHost?.inspection === undefined ? {} : { featureHost: featureHost.inspection() }),
|
|
12
|
+
};
|
|
13
|
+
}
|