@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
|
@@ -10,7 +10,9 @@ import {
|
|
|
10
10
|
RhiError,
|
|
11
11
|
type RhiRenderPassEncoder,
|
|
12
12
|
} from '@forgeax/engine-rhi';
|
|
13
|
+
import { STANDARD_TEXTURE_MASK_OVERRIDE } from '@forgeax/engine-shader';
|
|
13
14
|
import type { ParamSchemaEntry, PassKind, PrimitiveTopology } from '@forgeax/engine-types';
|
|
15
|
+
import { gpuDrivenDrawKey, gpuDrivenSourceDrawItemIndex } from '../extract/gpu-driven';
|
|
14
16
|
import { GpuBuffer } from '../gpu-resource';
|
|
15
17
|
import {
|
|
16
18
|
GPU_BUFFER_USAGE_COPY_DST,
|
|
@@ -19,11 +21,7 @@ import {
|
|
|
19
21
|
} from '../gpu-usage';
|
|
20
22
|
import { createHdrpSkinUnifiedBindGroup, getOrCreateHdrpBuffers } from '../hdrp-buffers';
|
|
21
23
|
import type { InstanceBufferCacheEntry } from '../instance-buffer-cache';
|
|
22
|
-
import {
|
|
23
|
-
type InstanceCollectionFailureCode,
|
|
24
|
-
recordInstanceFailure,
|
|
25
|
-
recordInstanceResidency,
|
|
26
|
-
} from '../instances';
|
|
24
|
+
import { type InstanceCollectionFailureCode, instanceUploadRangesForResident } from '../instances';
|
|
27
25
|
import { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from '../materials';
|
|
28
26
|
import {
|
|
29
27
|
createPbrSkinMeshBindGroupEntries,
|
|
@@ -75,6 +73,23 @@ import type { _InternalRenderPipelineContext, MaterialShaderPipelineEntry } from
|
|
|
75
73
|
import { MATERIAL_PER_ENTITY_STRIDE } from './render-context';
|
|
76
74
|
import { POINTS_LINES_VIEW_SLOT_STRIDE, writePointsLinesViewUbo } from './view-ubo';
|
|
77
75
|
|
|
76
|
+
/** Temporal ignores authored color entry points; opaque duplicates are idempotent. */
|
|
77
|
+
export function sameOpaqueTemporalDraw(a: DispatchEntry, b: DispatchEntry): boolean {
|
|
78
|
+
return (
|
|
79
|
+
(isStandardPbrMaterialShader(a.materialShaderId) ||
|
|
80
|
+
(a.tags.SurfaceKind === 'standard' &&
|
|
81
|
+
b.tags.SurfaceKind === 'standard' &&
|
|
82
|
+
a.tags.SurfaceModule === b.tags.SurfaceModule)) &&
|
|
83
|
+
a.materialShaderId === b.materialShaderId &&
|
|
84
|
+
a.renderState?.blend === undefined &&
|
|
85
|
+
b.renderState?.blend === undefined &&
|
|
86
|
+
a.renderState?.stencil === undefined &&
|
|
87
|
+
b.renderState?.stencil === undefined &&
|
|
88
|
+
a.stencilReference === b.stencilReference &&
|
|
89
|
+
renderStateHash(a.renderState) === renderStateHash(b.renderState)
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
78
93
|
type GeometryInstanceDraw = {
|
|
79
94
|
readonly instanceBuffer: Buffer;
|
|
80
95
|
readonly instanceBindGroup: BindGroup;
|
|
@@ -127,6 +142,7 @@ type MaterialPipelineLookup = {
|
|
|
127
142
|
readonly sampleCount: number;
|
|
128
143
|
readonly colorFormatOverride: GPUTextureFormat | undefined;
|
|
129
144
|
readonly additionalColorFormats: readonly GPUTextureFormat[] | undefined;
|
|
145
|
+
readonly textureMask: number | undefined;
|
|
130
146
|
readonly handle: MaterialShaderPipelineEntry | null;
|
|
131
147
|
};
|
|
132
148
|
|
|
@@ -134,6 +150,86 @@ type GeometryRecordProfileSegment = 'material-bind-groups' | 'pipeline-selection
|
|
|
134
150
|
|
|
135
151
|
type GeometryRenderState = ReturnType<typeof geometryRenderStateForTopology>;
|
|
136
152
|
|
|
153
|
+
/** Coverage is a dedicated temporal material variant, not a color/alpha tap. */
|
|
154
|
+
export function variantSetForCoveragePass(
|
|
155
|
+
variantSet: string | undefined,
|
|
156
|
+
coverageOnly: boolean,
|
|
157
|
+
): string | undefined {
|
|
158
|
+
if (!coverageOnly) return variantSet;
|
|
159
|
+
if (variantSet?.includes('COVERAGE_ONLY=')) return variantSet;
|
|
160
|
+
return variantSet === undefined || variantSet === ''
|
|
161
|
+
? 'COVERAGE_ONLY=true'
|
|
162
|
+
: `${variantSet}+COVERAGE_ONLY=true`;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export function isHdrGeometryTarget(
|
|
166
|
+
tonemapActive: boolean,
|
|
167
|
+
colorFormatOverride: GPUTextureFormat | undefined,
|
|
168
|
+
): boolean {
|
|
169
|
+
return colorFormatOverride === undefined ? tonemapActive : colorFormatOverride === 'rgba16float';
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function gpuDrivenDrawIndicesBySubmesh(
|
|
173
|
+
source: RenderableSnapshot,
|
|
174
|
+
mesh: _InternalRenderPipelineContext['validatedOrdered'][number]['mesh'],
|
|
175
|
+
): ReadonlyMap<number, number> {
|
|
176
|
+
const draws = source.gpuDrivenDraws;
|
|
177
|
+
if (draws === undefined || draws.length === 0) return new Map();
|
|
178
|
+
const indices = new Map<number, number>();
|
|
179
|
+
let hasStableSourceIdentity = false;
|
|
180
|
+
for (const [compactIndex, draw] of draws.entries()) {
|
|
181
|
+
const drawItemIndex = draw.drawItemIndex;
|
|
182
|
+
if (drawItemIndex === undefined) continue;
|
|
183
|
+
hasStableSourceIdentity = true;
|
|
184
|
+
if (mesh.submeshes[drawItemIndex] !== undefined) indices.set(drawItemIndex, compactIndex);
|
|
185
|
+
}
|
|
186
|
+
if (hasStableSourceIdentity) return indices;
|
|
187
|
+
|
|
188
|
+
// Legacy snapshots predating drawItemIndex are matched by their compact
|
|
189
|
+
// geometry facts. New extracted snapshots never take this path.
|
|
190
|
+
let nonIndexedFirst = 0;
|
|
191
|
+
let drawCursor = 0;
|
|
192
|
+
for (const [submeshIndex, submesh] of mesh.submeshes.entries()) {
|
|
193
|
+
const first = mesh.indexed ? submesh.indexOffset : nonIndexedFirst;
|
|
194
|
+
const count = mesh.indexed ? submesh.indexCount : submesh.vertexCount;
|
|
195
|
+
if (!mesh.indexed) nonIndexedFirst += submesh.vertexCount;
|
|
196
|
+
const draw = draws[drawCursor];
|
|
197
|
+
if (
|
|
198
|
+
draw !== undefined &&
|
|
199
|
+
draw.first === first &&
|
|
200
|
+
draw.count === count &&
|
|
201
|
+
draw.materialSlot === submesh.materialSlot &&
|
|
202
|
+
draw.topology === submesh.topology
|
|
203
|
+
) {
|
|
204
|
+
indices.set(submeshIndex, drawCursor);
|
|
205
|
+
drawCursor += 1;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return indices;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function isGpuDrivenMainClaimedSubmesh(
|
|
212
|
+
c: _InternalRenderPipelineContext,
|
|
213
|
+
source: RenderableSnapshot,
|
|
214
|
+
submeshIndex: number,
|
|
215
|
+
drawIndices: ReadonlyMap<number, number>,
|
|
216
|
+
): boolean {
|
|
217
|
+
const drawItemIndex = drawIndices.get(submeshIndex);
|
|
218
|
+
const draw = drawItemIndex === undefined ? undefined : source.gpuDrivenDraws?.[drawItemIndex];
|
|
219
|
+
if (drawItemIndex === undefined || draw === undefined) return false;
|
|
220
|
+
const material = source.materials[draw.materialSlot] ?? source.material;
|
|
221
|
+
const sourceDrawItemIndex = gpuDrivenSourceDrawItemIndex(draw, drawItemIndex);
|
|
222
|
+
return (
|
|
223
|
+
c.gpuDrivenDrawKeys?.has(
|
|
224
|
+
gpuDrivenDrawKey(
|
|
225
|
+
worldEntityKey(source.worldId, source.entityKey),
|
|
226
|
+
material.materialHandle ?? -1,
|
|
227
|
+
sourceDrawItemIndex,
|
|
228
|
+
),
|
|
229
|
+
) === true
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
|
|
137
233
|
/**
|
|
138
234
|
* Select the transmission shader axis from authored material data, not the
|
|
139
235
|
* canonical boot schema. The latter reserves transmission fields for the
|
|
@@ -252,18 +348,19 @@ export function effectiveMaterialLayoutIdentity(
|
|
|
252
348
|
/**
|
|
253
349
|
* Resolve the depth contract for a geometry pass without changing the base
|
|
254
350
|
* material state. Temporal scene-data shares the main pass depth attachment:
|
|
255
|
-
* it is read-only and accepts the equal depth produced by the
|
|
256
|
-
*
|
|
351
|
+
* it is read-only and accepts the equal depth produced by the shared raster
|
|
352
|
+
* projection, while motion varyings remain unjittered. It rejects fragments behind the visible
|
|
257
353
|
* surface.
|
|
258
354
|
*/
|
|
259
355
|
export function geometryRenderStateForPass(
|
|
260
356
|
base: GeometryRenderState,
|
|
261
357
|
passKind: PassKind,
|
|
358
|
+
coverageOnly = false,
|
|
262
359
|
): GeometryRenderState {
|
|
263
360
|
if (passKind !== 'temporal') return base;
|
|
264
361
|
return {
|
|
265
362
|
...base,
|
|
266
|
-
depthWriteEnabled:
|
|
363
|
+
depthWriteEnabled: coverageOnly,
|
|
267
364
|
depthCompare: 'less-equal' as const,
|
|
268
365
|
};
|
|
269
366
|
}
|
|
@@ -373,6 +470,8 @@ export function recordGeometryDraws(
|
|
|
373
470
|
) => BindGroup,
|
|
374
471
|
passKind: PassKind = 'forward',
|
|
375
472
|
selectedDispatch?: readonly DispatchEntry[],
|
|
473
|
+
colorFormats: readonly GPUTextureFormat[] = [],
|
|
474
|
+
coverageOnly = false,
|
|
376
475
|
): void {
|
|
377
476
|
const {
|
|
378
477
|
runtime,
|
|
@@ -396,7 +495,11 @@ export function recordGeometryDraws(
|
|
|
396
495
|
}
|
|
397
496
|
const passes = byMaterial.get(dispatch.materialHandle);
|
|
398
497
|
if (passes === undefined) byMaterial.set(dispatch.materialHandle, [dispatch]);
|
|
399
|
-
else
|
|
498
|
+
else if (
|
|
499
|
+
passKind !== 'temporal' ||
|
|
500
|
+
!passes.some((previous) => sameOpaqueTemporalDraw(previous, dispatch))
|
|
501
|
+
)
|
|
502
|
+
passes.push(dispatch);
|
|
400
503
|
}
|
|
401
504
|
const diagnosticsEnabled = materialDiagnosticsEnabled();
|
|
402
505
|
const colorFormatOverride = c.transparentColorFormat as GPUTextureFormat | undefined;
|
|
@@ -409,7 +512,9 @@ export function recordGeometryDraws(
|
|
|
409
512
|
// numeric domain rather than the camera's tone-map switch, otherwise the
|
|
410
513
|
// LDR/OETF fragment entry point is encoded once here and again by the
|
|
411
514
|
// output transform.
|
|
412
|
-
const isHdrTarget = tonemapActive
|
|
515
|
+
const isHdrTarget = isHdrGeometryTarget(tonemapActive, colorFormatOverride);
|
|
516
|
+
const withCoverageVariant = (variantSet: string | undefined): string | undefined =>
|
|
517
|
+
variantSetForCoveragePass(variantSet, coverageOnly);
|
|
413
518
|
let lastVertexBuffer: GpuBuffer | null = null;
|
|
414
519
|
let lastIndexBuffer: GpuBuffer | null = null;
|
|
415
520
|
const bindingState: GeometryBindingState = {
|
|
@@ -457,7 +562,9 @@ export function recordGeometryDraws(
|
|
|
457
562
|
layoutProjection: import('@forgeax/engine-geometry').VertexLayoutProjection,
|
|
458
563
|
vertexEntry?: string,
|
|
459
564
|
fragmentEntry?: string,
|
|
565
|
+
textureMask?: number,
|
|
460
566
|
): MaterialShaderPipelineEntry | null => {
|
|
567
|
+
const pipelineVariantSet = withCoverageVariant(variantSet);
|
|
461
568
|
// The fallback MRT is an extension of the built-in Standard PBR output
|
|
462
569
|
// contract only. The render pass may carry a second attachment whenever
|
|
463
570
|
// another renderable needs S_fallback, but shaders such as unlit, sprite,
|
|
@@ -469,7 +576,9 @@ export function recordGeometryDraws(
|
|
|
469
576
|
const reflectionFallbackFormats =
|
|
470
577
|
materialShaderId === 'forgeax::default-standard-pbr' &&
|
|
471
578
|
c.reflectionFallbackColorFormat !== undefined
|
|
472
|
-
?
|
|
579
|
+
? passKind === 'deferred'
|
|
580
|
+
? colorFormats.slice(1)
|
|
581
|
+
: [c.reflectionFallbackColorFormat]
|
|
473
582
|
: undefined;
|
|
474
583
|
const renderStateKey = renderStateHash(renderState);
|
|
475
584
|
const shaderLookupCache = materialPipelineLookupCache.get(materialShaderId);
|
|
@@ -481,9 +590,10 @@ export function recordGeometryDraws(
|
|
|
481
590
|
cached.renderStateKey === renderStateKey &&
|
|
482
591
|
cached.topology === topology &&
|
|
483
592
|
cached.indexFormat === indexFormat &&
|
|
484
|
-
cached.variantSet ===
|
|
593
|
+
cached.variantSet === pipelineVariantSet &&
|
|
485
594
|
cached.vertexEntry === vertexEntry &&
|
|
486
595
|
cached.fragmentEntry === fragmentEntry &&
|
|
596
|
+
cached.textureMask === textureMask &&
|
|
487
597
|
cached.passKind === passKind &&
|
|
488
598
|
cached.layoutProjection.digest === layoutProjection.digest &&
|
|
489
599
|
cached.sampleCount === sampleCount &&
|
|
@@ -497,10 +607,10 @@ export function recordGeometryDraws(
|
|
|
497
607
|
const resolvedVariantSetResult =
|
|
498
608
|
runtime.getMaterialArtifact?.(materialShaderId) !== undefined
|
|
499
609
|
? ({ ok: true, value: undefined } as const)
|
|
500
|
-
:
|
|
610
|
+
: pipelineVariantSet === undefined &&
|
|
501
611
|
(materialShaderId === 'forgeax::sprite' || materialShaderId === 'forgeax::sprite-lit')
|
|
502
612
|
? ({ ok: true, value: undefined } as const)
|
|
503
|
-
: variantSetFromVertexLayoutProjection(layoutProjection,
|
|
613
|
+
: variantSetFromVertexLayoutProjection(layoutProjection, pipelineVariantSet);
|
|
504
614
|
if (!resolvedVariantSetResult.ok) {
|
|
505
615
|
runtime.errorRegistry.fire(resolvedVariantSetResult.error);
|
|
506
616
|
return null;
|
|
@@ -530,9 +640,12 @@ export function recordGeometryDraws(
|
|
|
530
640
|
layoutProjection,
|
|
531
641
|
undefined,
|
|
532
642
|
undefined,
|
|
643
|
+
undefined,
|
|
533
644
|
reflectionFallbackFormats,
|
|
534
645
|
vertexEntry,
|
|
535
646
|
fragmentEntry,
|
|
647
|
+
undefined,
|
|
648
|
+
textureMask === undefined ? undefined : { [STANDARD_TEXTURE_MASK_OVERRIDE]: textureMask },
|
|
536
649
|
) ?? null;
|
|
537
650
|
const handle =
|
|
538
651
|
profilePhase === undefined
|
|
@@ -552,7 +665,7 @@ export function recordGeometryDraws(
|
|
|
552
665
|
renderStateKey,
|
|
553
666
|
topology,
|
|
554
667
|
indexFormat,
|
|
555
|
-
variantSet,
|
|
668
|
+
variantSet: pipelineVariantSet,
|
|
556
669
|
vertexEntry,
|
|
557
670
|
fragmentEntry,
|
|
558
671
|
passKind,
|
|
@@ -560,6 +673,7 @@ export function recordGeometryDraws(
|
|
|
560
673
|
sampleCount,
|
|
561
674
|
colorFormatOverride: colorFormat,
|
|
562
675
|
additionalColorFormats: reflectionFallbackFormats,
|
|
676
|
+
textureMask,
|
|
563
677
|
handle,
|
|
564
678
|
};
|
|
565
679
|
if (shaderLookupCache === undefined) {
|
|
@@ -579,7 +693,6 @@ export function recordGeometryDraws(
|
|
|
579
693
|
for (let i = 0; i < validatedOrdered.length; i++) {
|
|
580
694
|
const entry = validatedOrdered[i];
|
|
581
695
|
if (entry === undefined) continue;
|
|
582
|
-
|
|
583
696
|
// Points/Lines share the Standard geometry pass. Their retained source
|
|
584
697
|
// is prepared once by the renderer owner, while this loop remains the
|
|
585
698
|
// sole pass/draw submission owner and preserves the authored topology.
|
|
@@ -587,18 +700,6 @@ export function recordGeometryDraws(
|
|
|
587
700
|
if (entry.source.pointsLines !== undefined && pointsLinesSubmission?.plan.drawCount !== 1)
|
|
588
701
|
continue;
|
|
589
702
|
|
|
590
|
-
if (
|
|
591
|
-
passKind === 'forward' &&
|
|
592
|
-
c.gpuDrivenEntityKeys.has(
|
|
593
|
-
worldEntityKey(
|
|
594
|
-
c.gpuDrivenWorldKeys?.[entry.source.worldId] ?? entry.source.worldId,
|
|
595
|
-
entry.source.entityKey,
|
|
596
|
-
),
|
|
597
|
-
)
|
|
598
|
-
) {
|
|
599
|
-
continue;
|
|
600
|
-
}
|
|
601
|
-
|
|
602
703
|
// feat-20260609 M2: skip entities that don't match the pass selector.
|
|
603
704
|
if (matchedMaterials !== null && !matchedMaterials.has(entry.renderableIndex)) continue;
|
|
604
705
|
|
|
@@ -822,7 +923,9 @@ export function recordGeometryDraws(
|
|
|
822
923
|
),
|
|
823
924
|
);
|
|
824
925
|
if (!skinVariantSetResult.ok) runtime.errorRegistry.fire(skinVariantSetResult.error);
|
|
825
|
-
const skinVariantSet = skinVariantSetResult.ok
|
|
926
|
+
const skinVariantSet = skinVariantSetResult.ok
|
|
927
|
+
? withCoverageVariant(skinVariantSetResult.value)
|
|
928
|
+
: undefined;
|
|
826
929
|
const skinPsoProbe =
|
|
827
930
|
skinResources !== null && skinVariantSetResult.ok
|
|
828
931
|
? (runtime.getMaterialShaderPipeline?.(
|
|
@@ -987,6 +1090,7 @@ export function recordGeometryDraws(
|
|
|
987
1090
|
// — the same placeholders the unlit path already used. The generic
|
|
988
1091
|
// branch below builds the per-submesh BG.
|
|
989
1092
|
let perSubmeshBg: BindGroup | null = null;
|
|
1093
|
+
const gpuDrivenDrawIndices = gpuDrivenDrawIndicesBySubmesh(entry.source, entry.mesh);
|
|
990
1094
|
// feat-20260608 M4 / w16: per-submesh pipeline selection + draw loop.
|
|
991
1095
|
// Each submesh carries its own topology, so pipeline selection is per-submesh.
|
|
992
1096
|
// Vertex/index buffers and bind groups are set once (shared across all submeshes).
|
|
@@ -1004,6 +1108,12 @@ export function recordGeometryDraws(
|
|
|
1004
1108
|
const materialHandle = submeshMaterial.materialHandle ?? 0;
|
|
1005
1109
|
if (materialHandles === undefined || !materialHandles.has(materialHandle)) continue;
|
|
1006
1110
|
}
|
|
1111
|
+
if (
|
|
1112
|
+
passKind === 'forward' &&
|
|
1113
|
+
isGpuDrivenMainClaimedSubmesh(c, entry.source, smIdx, gpuDrivenDrawIndices)
|
|
1114
|
+
) {
|
|
1115
|
+
continue;
|
|
1116
|
+
}
|
|
1007
1117
|
const draws: readonly (DispatchEntry | undefined)[] =
|
|
1008
1118
|
selectedDispatch === undefined
|
|
1009
1119
|
? [undefined]
|
|
@@ -1133,7 +1243,11 @@ export function recordGeometryDraws(
|
|
|
1133
1243
|
blend: selectedRenderState?.blend ?? SPRITE_PREMULTIPLIED_ALPHA_BLEND,
|
|
1134
1244
|
}
|
|
1135
1245
|
: geometryRenderStateForTopology(smTopology, selectedRenderState);
|
|
1136
|
-
const pipelineRenderState = geometryRenderStateForPass(
|
|
1246
|
+
const pipelineRenderState = geometryRenderStateForPass(
|
|
1247
|
+
basePipelineRenderState,
|
|
1248
|
+
passKind,
|
|
1249
|
+
coverageOnly,
|
|
1250
|
+
);
|
|
1137
1251
|
let smPipelineHandle: typeof pipelineState.unlitPipeline;
|
|
1138
1252
|
let materialGroup2Contract: 'mesh' | 'skin' | 'cluster' | 'skin-cluster' | undefined;
|
|
1139
1253
|
let materialPipelineEntry: MaterialShaderPipelineEntry | null = null;
|
|
@@ -1163,6 +1277,7 @@ export function recordGeometryDraws(
|
|
|
1163
1277
|
entry.mesh.layoutProjection,
|
|
1164
1278
|
vertexEntry,
|
|
1165
1279
|
fragmentEntry,
|
|
1280
|
+
submeshMaterial.standardTextureMask,
|
|
1166
1281
|
);
|
|
1167
1282
|
materialPipelineEntry = unlitRsp;
|
|
1168
1283
|
smPipelineHandle =
|
|
@@ -1202,7 +1317,7 @@ export function recordGeometryDraws(
|
|
|
1202
1317
|
const transmissionAvailable = requestsStandardTransmissionVariant(submeshMaterial);
|
|
1203
1318
|
const materialCapabilityVariantSet =
|
|
1204
1319
|
transmissionAvailable && !capabilityVariantSet.includes('TRANSMISSION_AVAILABLE=')
|
|
1205
|
-
? `${capabilityVariantSet
|
|
1320
|
+
? `${capabilityVariantSet}+TRANSMISSION_AVAILABLE=true`
|
|
1206
1321
|
: capabilityVariantSet;
|
|
1207
1322
|
// Sprite's base request must retain the boot-selected artifact. Only
|
|
1208
1323
|
// SpriteInstances uses the explicit empty key for the
|
|
@@ -1215,9 +1330,7 @@ export function recordGeometryDraws(
|
|
|
1215
1330
|
: undefined
|
|
1216
1331
|
: entry.variantSet === undefined
|
|
1217
1332
|
? materialCapabilityVariantSet
|
|
1218
|
-
:
|
|
1219
|
-
? entry.variantSet
|
|
1220
|
-
: `${capabilityVariantSet}+${entry.variantSet}`;
|
|
1333
|
+
: `${materialCapabilityVariantSet}+${entry.variantSet}`;
|
|
1221
1334
|
const cachedPipeline = resolveMaterialPipeline(
|
|
1222
1335
|
smMaterialShaderId,
|
|
1223
1336
|
pipelineRenderState,
|
|
@@ -1228,6 +1341,7 @@ export function recordGeometryDraws(
|
|
|
1228
1341
|
entry.mesh.layoutProjection,
|
|
1229
1342
|
vertexEntry,
|
|
1230
1343
|
fragmentEntry,
|
|
1344
|
+
submeshMaterial.standardTextureMask,
|
|
1231
1345
|
);
|
|
1232
1346
|
// feat-20260615-pipeline-spec-ssot M6-T1: cache miss resolves to
|
|
1233
1347
|
// null uniformly across URP / HDRP / skin shaders. Charter P3
|
|
@@ -1361,10 +1475,7 @@ export function recordGeometryDraws(
|
|
|
1361
1475
|
* @internal
|
|
1362
1476
|
*/
|
|
1363
1477
|
function uploadInstanceRanges(
|
|
1364
|
-
c:
|
|
1365
|
-
_InternalRenderPipelineContext,
|
|
1366
|
-
'runtime' | 'pipelineState' | 'frameState' | 'bindGroupCounts'
|
|
1367
|
-
>,
|
|
1478
|
+
c: _InternalRenderPipelineContext,
|
|
1368
1479
|
inst: NonNullable<RenderableSnapshot['instances']>,
|
|
1369
1480
|
buffer: Buffer,
|
|
1370
1481
|
ranges: readonly { readonly start: number; readonly end: number }[],
|
|
@@ -1396,10 +1507,7 @@ function uploadInstanceRanges(
|
|
|
1396
1507
|
}
|
|
1397
1508
|
|
|
1398
1509
|
export function reportInstanceResidency(
|
|
1399
|
-
c:
|
|
1400
|
-
_InternalRenderPipelineContext,
|
|
1401
|
-
'runtime' | 'pipelineState' | 'frameState' | 'bindGroupCounts'
|
|
1402
|
-
>,
|
|
1510
|
+
c: _InternalRenderPipelineContext,
|
|
1403
1511
|
inst: NonNullable<RenderableSnapshot['instances']>,
|
|
1404
1512
|
input: {
|
|
1405
1513
|
readonly lane: 'direct-storage' | 'chunked-storage' | 'direct-uniform' | 'chunked-uniform';
|
|
@@ -1409,8 +1517,8 @@ export function reportInstanceResidency(
|
|
|
1409
1517
|
readonly uploadedBytes: number;
|
|
1410
1518
|
},
|
|
1411
1519
|
): void {
|
|
1412
|
-
if (inst.collectionId === undefined
|
|
1413
|
-
|
|
1520
|
+
if (inst.collectionId === undefined) return;
|
|
1521
|
+
c.frameState.instanceCollections?._reportResidency({
|
|
1414
1522
|
collectionId: inst.collectionId,
|
|
1415
1523
|
frameNumber: c.frameState.frameNumber,
|
|
1416
1524
|
residentGeneration: c.runtime.deviceScope.generation,
|
|
@@ -1424,10 +1532,7 @@ export function reportInstanceResidency(
|
|
|
1424
1532
|
}
|
|
1425
1533
|
|
|
1426
1534
|
function reportInstanceFailure(
|
|
1427
|
-
c:
|
|
1428
|
-
_InternalRenderPipelineContext,
|
|
1429
|
-
'runtime' | 'pipelineState' | 'frameState' | 'bindGroupCounts'
|
|
1430
|
-
>,
|
|
1535
|
+
c: _InternalRenderPipelineContext,
|
|
1431
1536
|
inst: NonNullable<RenderableSnapshot['instances']>,
|
|
1432
1537
|
error: {
|
|
1433
1538
|
readonly code: InstanceCollectionFailureCode;
|
|
@@ -1437,8 +1542,8 @@ function reportInstanceFailure(
|
|
|
1437
1542
|
requestedBytes: number,
|
|
1438
1543
|
supportedBytes: number | undefined,
|
|
1439
1544
|
): void {
|
|
1440
|
-
if (inst.collectionId === undefined
|
|
1441
|
-
|
|
1545
|
+
if (inst.collectionId === undefined) return;
|
|
1546
|
+
c.frameState.instanceCollections?._reportFailure({
|
|
1442
1547
|
collectionId: inst.collectionId,
|
|
1443
1548
|
code: error.code,
|
|
1444
1549
|
expected: error.expected,
|
|
@@ -1454,13 +1559,7 @@ function reportInstanceFailure(
|
|
|
1454
1559
|
});
|
|
1455
1560
|
}
|
|
1456
1561
|
|
|
1457
|
-
function clearInstanceChunksForOwner(
|
|
1458
|
-
c: Pick<
|
|
1459
|
-
_InternalRenderPipelineContext,
|
|
1460
|
-
'runtime' | 'pipelineState' | 'frameState' | 'bindGroupCounts'
|
|
1461
|
-
>,
|
|
1462
|
-
ownerKey: number,
|
|
1463
|
-
): void {
|
|
1562
|
+
function clearInstanceChunksForOwner(c: _InternalRenderPipelineContext, ownerKey: number): void {
|
|
1464
1563
|
const chunks = c.frameState.instanceBufferChunks;
|
|
1465
1564
|
if (chunks === undefined) return;
|
|
1466
1565
|
const prefix = `${ownerKey}:`;
|
|
@@ -1475,10 +1574,7 @@ function clearInstanceChunksForOwner(
|
|
|
1475
1574
|
}
|
|
1476
1575
|
|
|
1477
1576
|
export function resolveStorageInstanceChunks(
|
|
1478
|
-
c:
|
|
1479
|
-
_InternalRenderPipelineContext,
|
|
1480
|
-
'runtime' | 'pipelineState' | 'frameState' | 'bindGroupCounts'
|
|
1481
|
-
>,
|
|
1577
|
+
c: _InternalRenderPipelineContext,
|
|
1482
1578
|
entry: _InternalRenderPipelineContext['validatedOrdered'][number],
|
|
1483
1579
|
inst: NonNullable<RenderableSnapshot['instances']>,
|
|
1484
1580
|
cap: number,
|
|
@@ -1516,6 +1612,7 @@ export function resolveStorageInstanceChunks(
|
|
|
1516
1612
|
const draws: GeometryInstanceDraw[] = [];
|
|
1517
1613
|
const uploadedRanges: { start: number; end: number }[] = [];
|
|
1518
1614
|
let uploadedBytes = 0;
|
|
1615
|
+
const dirtyRanges = inst.dirtyRanges ?? [{ start: 0, end: inst.instanceCount } as const];
|
|
1519
1616
|
for (let start = 0; start < inst.instanceCount; start += chunkCapacity) {
|
|
1520
1617
|
const end = Math.min(inst.instanceCount, start + chunkCapacity);
|
|
1521
1618
|
const count = end - start;
|
|
@@ -1557,14 +1654,17 @@ export function resolveStorageInstanceChunks(
|
|
|
1557
1654
|
if (chunks === undefined) frameState.transientInstanceBuffers.push(active);
|
|
1558
1655
|
}
|
|
1559
1656
|
if (active === undefined) return null;
|
|
1560
|
-
const
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1657
|
+
const localRanges = dirtyRanges
|
|
1658
|
+
.map((range) => ({
|
|
1659
|
+
start: Math.max(start, range.start) - start,
|
|
1660
|
+
end: Math.min(end, range.end) - start,
|
|
1661
|
+
}))
|
|
1662
|
+
.filter((range) => range.end > range.start);
|
|
1663
|
+
const needsUpload = activeIsNew || active.uploadedRevision !== inst.revision;
|
|
1664
|
+
const rangesToUpload = instanceUploadRangesForResident(activeIsNew, localRanges, {
|
|
1665
|
+
start: 0,
|
|
1666
|
+
end: count,
|
|
1667
|
+
});
|
|
1568
1668
|
if (needsUpload && rangesToUpload.length > 0) {
|
|
1569
1669
|
const upload = uploadInstanceRanges(
|
|
1570
1670
|
c,
|
|
@@ -1584,8 +1684,7 @@ export function resolveStorageInstanceChunks(
|
|
|
1584
1684
|
inst,
|
|
1585
1685
|
{
|
|
1586
1686
|
code: 'queue-write-buffer-failed',
|
|
1587
|
-
expected:
|
|
1588
|
-
'the renderer-owned instance storage buffer accepts the complete instance payload',
|
|
1687
|
+
expected: 'the renderer-owned instance storage buffer accepts the dirty range',
|
|
1589
1688
|
hint: 'retry after the active device is healthy or recover the renderer',
|
|
1590
1689
|
},
|
|
1591
1690
|
inst.instanceCount * strideBytes,
|
|
@@ -1595,8 +1694,8 @@ export function resolveStorageInstanceChunks(
|
|
|
1595
1694
|
}
|
|
1596
1695
|
}
|
|
1597
1696
|
if (needsUpload) {
|
|
1598
|
-
{
|
|
1599
|
-
const published = { ...active, uploadedRevision: inst.revision
|
|
1697
|
+
if (inst.revision !== undefined) {
|
|
1698
|
+
const published = { ...active, uploadedRevision: inst.revision };
|
|
1600
1699
|
active = published;
|
|
1601
1700
|
chunks?.set(chunkKey, published);
|
|
1602
1701
|
}
|
|
@@ -1634,11 +1733,8 @@ export function resolveStorageInstanceChunks(
|
|
|
1634
1733
|
return draws;
|
|
1635
1734
|
}
|
|
1636
1735
|
|
|
1637
|
-
|
|
1638
|
-
c:
|
|
1639
|
-
_InternalRenderPipelineContext,
|
|
1640
|
-
'runtime' | 'pipelineState' | 'frameState' | 'bindGroupCounts'
|
|
1641
|
-
>,
|
|
1736
|
+
function resolveGeometryInstanceBuffer(
|
|
1737
|
+
c: _InternalRenderPipelineContext,
|
|
1642
1738
|
entry: _InternalRenderPipelineContext['validatedOrdered'][number],
|
|
1643
1739
|
identityInstanceDraws: readonly GeometryInstanceDraw[],
|
|
1644
1740
|
useProbeBlend: boolean,
|
|
@@ -1674,9 +1770,12 @@ export function resolveGeometryInstanceBuffer(
|
|
|
1674
1770
|
// the shared identity buffer, which would silently render one instance.
|
|
1675
1771
|
if (inst.instanceCount === 0) return [];
|
|
1676
1772
|
const entityCacheKey = instanceCollectionCacheKey(entry.source.worldId, inst);
|
|
1677
|
-
const revision = inst.revision
|
|
1773
|
+
const revision = inst.revision;
|
|
1774
|
+
const dirtyRanges = inst.dirtyRanges;
|
|
1678
1775
|
const sameRevision = (cached: InstanceBufferCacheEntry): boolean =>
|
|
1679
|
-
|
|
1776
|
+
revision === undefined
|
|
1777
|
+
? cached.uploadedRevision === undefined
|
|
1778
|
+
: cached.uploadedRevision === revision;
|
|
1680
1779
|
const fullRange = [{ start: 0, end: inst.instanceCount }] as const;
|
|
1681
1780
|
let instanceBuffer: Buffer = pipelineState.identityInstanceBuffer;
|
|
1682
1781
|
let instanceCount = 1;
|
|
@@ -1694,6 +1793,7 @@ export function resolveGeometryInstanceBuffer(
|
|
|
1694
1793
|
const activeKeys = new Set<string>();
|
|
1695
1794
|
const draws: GeometryInstanceDraw[] = [];
|
|
1696
1795
|
const uniformStrideBytes = 16 * Float32Array.BYTES_PER_ELEMENT;
|
|
1796
|
+
const dirty = inst.dirtyRanges ?? fullRange;
|
|
1697
1797
|
const uploadedRanges: { start: number; end: number }[] = [];
|
|
1698
1798
|
let uploadedBytes = 0;
|
|
1699
1799
|
for (let start = 0; start < inst.instanceCount; start += MAX_UNIFORM_INSTANCES) {
|
|
@@ -1739,13 +1839,17 @@ export function resolveGeometryInstanceBuffer(
|
|
|
1739
1839
|
chunks?.set(chunkKey, active);
|
|
1740
1840
|
if (chunks === undefined) frameState.transientInstanceBuffers.push(active);
|
|
1741
1841
|
}
|
|
1842
|
+
const localRanges = dirty
|
|
1843
|
+
.map((range) => ({
|
|
1844
|
+
start: Math.max(start, range.start) - start,
|
|
1845
|
+
end: Math.min(start + count, range.end) - start,
|
|
1846
|
+
}))
|
|
1847
|
+
.filter((range) => range.end > range.start);
|
|
1742
1848
|
const needsUpload = activeIsNew || !sameRevision(active);
|
|
1743
|
-
const rangesToUpload =
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
},
|
|
1748
|
-
];
|
|
1849
|
+
const rangesToUpload = instanceUploadRangesForResident(activeIsNew, localRanges, {
|
|
1850
|
+
start: 0,
|
|
1851
|
+
end: count,
|
|
1852
|
+
});
|
|
1749
1853
|
if (needsUpload && rangesToUpload.length > 0) {
|
|
1750
1854
|
const upload = uploadInstanceRanges(
|
|
1751
1855
|
c,
|
|
@@ -1765,8 +1869,7 @@ export function resolveGeometryInstanceBuffer(
|
|
|
1765
1869
|
inst,
|
|
1766
1870
|
{
|
|
1767
1871
|
code: 'queue-write-buffer-failed',
|
|
1768
|
-
expected:
|
|
1769
|
-
'the renderer-owned instance uniform buffer accepts the complete instance payload',
|
|
1872
|
+
expected: 'the renderer-owned instance uniform buffer accepts the dirty range',
|
|
1770
1873
|
hint: 'retry after the active device is healthy or recover the renderer',
|
|
1771
1874
|
},
|
|
1772
1875
|
inst.instanceCount * uniformStrideBytes,
|
|
@@ -1776,7 +1879,8 @@ export function resolveGeometryInstanceBuffer(
|
|
|
1776
1879
|
}
|
|
1777
1880
|
}
|
|
1778
1881
|
if (needsUpload) {
|
|
1779
|
-
const published =
|
|
1882
|
+
const published =
|
|
1883
|
+
revision === undefined ? active : { ...active, uploadedRevision: revision };
|
|
1780
1884
|
active = published;
|
|
1781
1885
|
chunks?.set(chunkKey, published);
|
|
1782
1886
|
}
|
|
@@ -1857,7 +1961,6 @@ export function resolveGeometryInstanceBuffer(
|
|
|
1857
1961
|
if (!bufRes.ok) {
|
|
1858
1962
|
runtime.errorRegistry.fire(bufRes.error);
|
|
1859
1963
|
reportInstanceFailure(c, inst, bufRes.error, requestedBytes, cap);
|
|
1860
|
-
return null;
|
|
1861
1964
|
} else {
|
|
1862
1965
|
// feat-20260619 M4 / F12: destroy the old cached buffer
|
|
1863
1966
|
// before replacing it with the new one (D-6).
|
|
@@ -1880,7 +1983,11 @@ export function resolveGeometryInstanceBuffer(
|
|
|
1880
1983
|
}
|
|
1881
1984
|
if (active !== null) {
|
|
1882
1985
|
const needsUpload = activeIsNew || !sameRevision(active);
|
|
1883
|
-
const ranges =
|
|
1986
|
+
const ranges = instanceUploadRangesForResident(
|
|
1987
|
+
activeIsNew,
|
|
1988
|
+
dirtyRanges ?? fullRange,
|
|
1989
|
+
fullRange[0],
|
|
1990
|
+
);
|
|
1884
1991
|
let uploadRanges: readonly { readonly start: number; readonly end: number }[] = [];
|
|
1885
1992
|
let uploadedBytes = 0;
|
|
1886
1993
|
if (needsUpload && ranges.length > 0) {
|
|
@@ -1899,8 +2006,7 @@ export function resolveGeometryInstanceBuffer(
|
|
|
1899
2006
|
inst,
|
|
1900
2007
|
{
|
|
1901
2008
|
code: 'queue-write-buffer-failed',
|
|
1902
|
-
expected:
|
|
1903
|
-
'the renderer-owned instance buffer accepts the complete instance payloads',
|
|
2009
|
+
expected: 'the renderer-owned instance buffer accepts the dirty ranges',
|
|
1904
2010
|
hint: 'retry after the active device is healthy or recover the renderer',
|
|
1905
2011
|
},
|
|
1906
2012
|
requestedBytes,
|
|
@@ -1914,7 +2020,8 @@ export function resolveGeometryInstanceBuffer(
|
|
|
1914
2020
|
}
|
|
1915
2021
|
}
|
|
1916
2022
|
if (needsUpload) {
|
|
1917
|
-
const published =
|
|
2023
|
+
const published =
|
|
2024
|
+
revision === undefined ? active : { ...active, uploadedRevision: revision };
|
|
1918
2025
|
frameState.instanceBuffers.set(entityCacheKey, published);
|
|
1919
2026
|
active = published;
|
|
1920
2027
|
}
|
|
@@ -1949,10 +2056,7 @@ export function resolveGeometryInstanceBuffer(
|
|
|
1949
2056
|
}
|
|
1950
2057
|
|
|
1951
2058
|
export function resolveProbeBlendBuffer(
|
|
1952
|
-
c:
|
|
1953
|
-
_InternalRenderPipelineContext,
|
|
1954
|
-
'runtime' | 'pipelineState' | 'frameState' | 'bindGroupCounts'
|
|
1955
|
-
>,
|
|
2059
|
+
c: _InternalRenderPipelineContext,
|
|
1956
2060
|
record: import('../scene/probe-blend-record').ProbeBlendRecord | undefined,
|
|
1957
2061
|
entityKey?: number,
|
|
1958
2062
|
): { readonly buffer: Buffer; readonly offset: number } {
|
|
@@ -2000,10 +2104,7 @@ export function resolveProbeBlendBuffer(
|
|
|
2000
2104
|
}
|
|
2001
2105
|
|
|
2002
2106
|
export function resolveGeometryInstancesBindGroup(
|
|
2003
|
-
c:
|
|
2004
|
-
_InternalRenderPipelineContext,
|
|
2005
|
-
'runtime' | 'pipelineState' | 'frameState' | 'bindGroupCounts'
|
|
2006
|
-
>,
|
|
2107
|
+
c: _InternalRenderPipelineContext,
|
|
2007
2108
|
instanceBuffer: Buffer,
|
|
2008
2109
|
probeBuffer?: Buffer,
|
|
2009
2110
|
): BindGroup {
|
|
@@ -2013,8 +2114,13 @@ export function resolveGeometryInstancesBindGroup(
|
|
|
2013
2114
|
? pipelineState.instancesBindGroupLayout
|
|
2014
2115
|
: pipelineState.probeInstancesBindGroupLayout;
|
|
2015
2116
|
if (layout === undefined) throw new Error('probe instances bind-group layout is unavailable');
|
|
2117
|
+
// A few record-only fixtures construct a minimal frame state and omit the
|
|
2118
|
+
// shared bind-group cache. Production frames always provide it, but keeping
|
|
2119
|
+
// this resolver total lets those fixtures exercise the same binding path
|
|
2120
|
+
// without weakening the production cache contract.
|
|
2121
|
+
const instancesBgShared = frameState.instancesBgShared ?? new WeakMap<object, unknown>();
|
|
2016
2122
|
return getOrCreateFromChain(
|
|
2017
|
-
|
|
2123
|
+
instancesBgShared,
|
|
2018
2124
|
probeBuffer === undefined ? [layout, instanceBuffer] : [layout, instanceBuffer, probeBuffer],
|
|
2019
2125
|
probeBuffer === undefined ? 'instances-no-probe' : 'instances-probe',
|
|
2020
2126
|
() => {
|