@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
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
CompiledRenderGraphInfo,
|
|
3
|
+
GraphTextureDescriptor,
|
|
4
|
+
GraphTextureView,
|
|
5
|
+
} from '@forgeax/engine-render-graph';
|
|
2
6
|
import { RenderGraphError } from '@forgeax/engine-render-graph';
|
|
3
7
|
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
4
8
|
import { addTypedDebugOverlayPass } from '../debug-draw-glue';
|
|
@@ -25,6 +29,12 @@ import {
|
|
|
25
29
|
TYPED_BLOOM_PASS_NAMES,
|
|
26
30
|
type TypedTemporalResolveTargets,
|
|
27
31
|
} from '../typed-render-graph-primitives';
|
|
32
|
+
import {
|
|
33
|
+
addAutoExposureExposurePass,
|
|
34
|
+
addAutoExposureGraphPasses,
|
|
35
|
+
} from './standard-output/auto-exposure/gpu';
|
|
36
|
+
import { createStandardOutputPlan } from './standard-output/graph';
|
|
37
|
+
import { addStandardColorLutPass } from './standard-output/lut-gpu';
|
|
28
38
|
|
|
29
39
|
interface StandardPostSurface {
|
|
30
40
|
readonly display?: RenderPipelineTarget;
|
|
@@ -159,20 +169,33 @@ export function addStandardPost(
|
|
|
159
169
|
depth: RenderPipelineTarget,
|
|
160
170
|
surface: StandardPostSurface,
|
|
161
171
|
sceneTemporal?: RenderPipelineTarget,
|
|
172
|
+
secondaryReactivity?: GraphTextureView,
|
|
173
|
+
coverage?: RenderPipelineTarget,
|
|
174
|
+
coverageDepth?: RenderPipelineTarget,
|
|
162
175
|
): Result<void, RenderPipelineBuildError> {
|
|
163
176
|
const clearOnly = topology.clearOnly === true;
|
|
177
|
+
const outputPlan = createStandardOutputPlan({
|
|
178
|
+
lane: topology.standardProfile?.renderPath === 'deferred' ? 'clustered' : 'direct',
|
|
179
|
+
temporal: !clearOnly && topology.camera.antialias === 'taa',
|
|
180
|
+
meter: topology.output?.autoExposure === true,
|
|
181
|
+
bloom: !clearOnly && topology.camera.bloom === 'on' && topology.camera.tonemap !== 'none',
|
|
182
|
+
exposure: topology.output?.autoExposure === true,
|
|
183
|
+
whiteBalance: topology.output?.whiteBalance === true,
|
|
184
|
+
lut: topology.output?.colorLut === true,
|
|
185
|
+
fxaa: !clearOnly && topology.camera.antialias === 'fxaa',
|
|
186
|
+
outputEncoding: 'explicit-oetf',
|
|
187
|
+
});
|
|
164
188
|
const hdr =
|
|
165
189
|
!clearOnly && (topology.camera.tonemap !== 'none' || topology.camera.antialias === 'taa');
|
|
166
190
|
// Bloom is an HDR-domain effect and its recorders intentionally no-op when
|
|
167
191
|
// tone mapping is disabled. Keep the graph in the same no-op state for the
|
|
168
192
|
// TAA + tonemap:none combination; otherwise the declared Bloom composite is
|
|
169
193
|
// left clear and the following Output Transform presents a black frame.
|
|
170
|
-
const bloomActive = hdr &&
|
|
171
|
-
const fxaa =
|
|
172
|
-
//
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
// surface boundary instead of making no-AA/WebGL2 a silent bypass.
|
|
194
|
+
const bloomActive = hdr && outputPlan.features.bloom;
|
|
195
|
+
const fxaa = outputPlan.features.fxaa;
|
|
196
|
+
// Keep the graph-owned output transform on every non-HDR frame, including
|
|
197
|
+
// structural lanes without storage buffers; the final writer remains the
|
|
198
|
+
// single display-encoding owner.
|
|
176
199
|
const linearLdr = !clearOnly && !hdr;
|
|
177
200
|
const rawOnly = !clearOnly && topology.surface.profile?.kind === 'raw-only';
|
|
178
201
|
const outputDither = resolveOutputDither(topology.config);
|
|
@@ -194,7 +217,19 @@ export function addStandardPost(
|
|
|
194
217
|
// single Output Transform performs the first 8-bit quantization.
|
|
195
218
|
const finalPresent = surface.storage;
|
|
196
219
|
let postInput = scene;
|
|
220
|
+
let postTemporal = sceneTemporal;
|
|
197
221
|
|
|
222
|
+
const autoExposure = context.standardOutput?.autoExposure;
|
|
223
|
+
if (outputPlan.features.exposure && autoExposure === undefined) {
|
|
224
|
+
return err(
|
|
225
|
+
new RenderGraphError({
|
|
226
|
+
code: 'resource-resolution-failed',
|
|
227
|
+
expected: 'a prepared same-frame auto-exposure producer projection',
|
|
228
|
+
hint: 'prepare device-scoped auto-exposure resources before compiling Standard output',
|
|
229
|
+
detail: { resourceLabel: 'standard-auto-exposure' },
|
|
230
|
+
}),
|
|
231
|
+
);
|
|
232
|
+
}
|
|
198
233
|
if (topology.camera.antialias === 'taa') {
|
|
199
234
|
if (sceneTemporal === undefined) {
|
|
200
235
|
return err(missingTemporalContributor(topology, 'forgeax::standard::scene-data'));
|
|
@@ -207,14 +242,22 @@ export function addStandardPost(
|
|
|
207
242
|
scene,
|
|
208
243
|
depth,
|
|
209
244
|
currentTemporal: sceneTemporal,
|
|
245
|
+
...(coverage === undefined ? {} : { coverage }),
|
|
246
|
+
...(coverageDepth === undefined ? {} : { coverageDepth }),
|
|
247
|
+
...(secondaryReactivity === undefined ? {} : { secondaryReactivity }),
|
|
210
248
|
historyColor: history.previousColor,
|
|
211
249
|
historyTemporal: history.previousTemporal,
|
|
250
|
+
historyStability: history.previousStability,
|
|
212
251
|
writeColor: history.currentColor,
|
|
213
252
|
writeTemporal: history.currentTemporal,
|
|
253
|
+
writeStability: history.currentStability,
|
|
214
254
|
};
|
|
215
255
|
const resolve = addTypedTemporalResolvePass(context.graph, resolveTargets);
|
|
216
256
|
if (!resolve.ok) return resolve;
|
|
217
257
|
postInput = history.currentColor;
|
|
258
|
+
// TAA resolves both outputs to the unjittered lattice. Later effects must
|
|
259
|
+
// consume its matching temporal attachment, not raw jittered coverage.
|
|
260
|
+
postTemporal = history.currentTemporal;
|
|
218
261
|
}
|
|
219
262
|
|
|
220
263
|
// Feature projection and the built-in fallback share one target contract.
|
|
@@ -238,7 +281,7 @@ export function addStandardPost(
|
|
|
238
281
|
},
|
|
239
282
|
];
|
|
240
283
|
if (motionBlur) {
|
|
241
|
-
if (
|
|
284
|
+
if (postTemporal === undefined) {
|
|
242
285
|
return err(
|
|
243
286
|
new Error('Motion Blur requires the Standard scene-data producer') as RenderGraphError,
|
|
244
287
|
);
|
|
@@ -249,7 +292,7 @@ export function addStandardPost(
|
|
|
249
292
|
domain: hdr ? 'linear-hdr' : 'linear-ldr',
|
|
250
293
|
});
|
|
251
294
|
if (!blurred.ok) return blurred;
|
|
252
|
-
const features = context.contributeFeatures(featureTargets, [
|
|
295
|
+
const features = context.contributeFeatures(featureTargets, [postTemporal], {
|
|
253
296
|
'motion-input': postInput,
|
|
254
297
|
'motion-output': blurred.value,
|
|
255
298
|
});
|
|
@@ -257,7 +300,7 @@ export function addStandardPost(
|
|
|
257
300
|
if (context.hasFeature?.('forgeax.motion-blur') === true) {
|
|
258
301
|
postInput = blurred.value;
|
|
259
302
|
} else {
|
|
260
|
-
const fallback = addMotionBlurPass(context.graph, postInput,
|
|
303
|
+
const fallback = addMotionBlurPass(context.graph, postInput, postTemporal, blurred.value);
|
|
261
304
|
if (!fallback.ok) return fallback;
|
|
262
305
|
postInput = blurred.value;
|
|
263
306
|
}
|
|
@@ -270,6 +313,18 @@ export function addStandardPost(
|
|
|
270
313
|
}
|
|
271
314
|
}
|
|
272
315
|
|
|
316
|
+
// Meter the temporally resolved color before Bloom. This preserves the
|
|
317
|
+
// Standard order: temporal -> meter -> bloom -> exposure/WB -> tone -> LUT.
|
|
318
|
+
if (outputPlan.features.exposure && autoExposure !== undefined) {
|
|
319
|
+
const added = addAutoExposureGraphPasses(context, {
|
|
320
|
+
source: postInput,
|
|
321
|
+
resources: autoExposure,
|
|
322
|
+
width: topology.surface.width,
|
|
323
|
+
height: topology.surface.height,
|
|
324
|
+
});
|
|
325
|
+
if (!added.ok) return added;
|
|
326
|
+
}
|
|
327
|
+
|
|
273
328
|
if (bloomActive) {
|
|
274
329
|
const composited = target(
|
|
275
330
|
context,
|
|
@@ -306,6 +361,86 @@ export function addStandardPost(
|
|
|
306
361
|
postInput = composited.value;
|
|
307
362
|
}
|
|
308
363
|
|
|
364
|
+
if (outputPlan.features.exposure || outputPlan.features.whiteBalance) {
|
|
365
|
+
const exposureOutput = target(context, 'standard-exposure-white-balance', {
|
|
366
|
+
format: 'rgba16float',
|
|
367
|
+
size: 'surface',
|
|
368
|
+
domain: 'linear-hdr',
|
|
369
|
+
});
|
|
370
|
+
if (!exposureOutput.ok) return exposureOutput;
|
|
371
|
+
const exposurePass = addAutoExposureExposurePass(
|
|
372
|
+
context,
|
|
373
|
+
postInput,
|
|
374
|
+
exposureOutput.value,
|
|
375
|
+
outputPlan.features.exposure ? autoExposure : undefined,
|
|
376
|
+
{
|
|
377
|
+
temperature: topology.output?.temperature ?? 6504,
|
|
378
|
+
tint: topology.output?.tint ?? 0,
|
|
379
|
+
},
|
|
380
|
+
);
|
|
381
|
+
if (!exposurePass.ok) return exposurePass;
|
|
382
|
+
postInput = exposureOutput.value;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// Auto exposure changes the HDR source before tone mapping, so it needs the
|
|
386
|
+
// same explicit linear-LDR boundary as the LUT route even when no LUT is
|
|
387
|
+
// bound. Keep the manual/LUT0 route combined so disabling auto exposure
|
|
388
|
+
// remains exact-zero.
|
|
389
|
+
const splitOutput =
|
|
390
|
+
outputPlan.features.lut ||
|
|
391
|
+
outputPlan.features.exposure ||
|
|
392
|
+
outputPlan.features.whiteBalance ||
|
|
393
|
+
// A receipt-bound observation request is an explicit producer demand, not
|
|
394
|
+
// a new authored color feature. When a caller asks for the linear-LDR
|
|
395
|
+
// domain on the ordinary ACES path, retain the same tone/output boundary
|
|
396
|
+
// that the LUT and auto-exposure routes already use so the graph can
|
|
397
|
+
// capture it without changing unobserved frames.
|
|
398
|
+
context.observationCaptureDomains?.includes('linear-ldr') === true;
|
|
399
|
+
|
|
400
|
+
// Tone mapping and output encoding are separate entry points when a LUT is
|
|
401
|
+
// enabled or auto exposure is active: the LUT must sample linear LDR, and
|
|
402
|
+
// the single OETF writer runs only after LUT and optional FXAA.
|
|
403
|
+
const toneOutput = splitOutput
|
|
404
|
+
? target(context, 'standard-tone-output', {
|
|
405
|
+
format: 'rgba16float',
|
|
406
|
+
size: 'surface',
|
|
407
|
+
domain: 'linear-ldr',
|
|
408
|
+
})
|
|
409
|
+
: undefined;
|
|
410
|
+
if (toneOutput !== undefined) {
|
|
411
|
+
if (!toneOutput.ok) return toneOutput;
|
|
412
|
+
const transformed = addTypedOutputTransformPass(context.graph, postInput, toneOutput.value, {
|
|
413
|
+
dither: false,
|
|
414
|
+
name: 'standard-tone',
|
|
415
|
+
fragmentEntryPoint: 'fs_tone_only',
|
|
416
|
+
});
|
|
417
|
+
if (!transformed.ok) return transformed;
|
|
418
|
+
postInput = toneOutput.value;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
if (outputPlan.features.lut) {
|
|
422
|
+
const colorLut = context.standardOutput?.colorLut;
|
|
423
|
+
if (colorLut === undefined) {
|
|
424
|
+
return err(
|
|
425
|
+
new RenderGraphError({
|
|
426
|
+
code: 'resource-resolution-failed',
|
|
427
|
+
expected: 'a prepared resident Standard color LUT projection',
|
|
428
|
+
hint: 'resolve and admit the TextureAsset LUT before compiling Standard output',
|
|
429
|
+
detail: { resourceLabel: 'standard-color-lut' },
|
|
430
|
+
}),
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
const lutOutput = target(context, 'standard-color-lut', {
|
|
434
|
+
format: 'rgba16float',
|
|
435
|
+
size: 'surface',
|
|
436
|
+
domain: 'linear-ldr',
|
|
437
|
+
});
|
|
438
|
+
if (!lutOutput.ok) return lutOutput;
|
|
439
|
+
const lutPass = addStandardColorLutPass(context.graph, postInput, lutOutput.value, colorLut);
|
|
440
|
+
if (!lutPass.ok) return lutPass;
|
|
441
|
+
postInput = lutOutput.value;
|
|
442
|
+
}
|
|
443
|
+
|
|
309
444
|
if (rawOnly) {
|
|
310
445
|
const overlay = addTypedDebugOverlayPass(context.graph, postInput);
|
|
311
446
|
if (!overlay.ok) return overlay;
|
|
@@ -313,27 +448,44 @@ export function addStandardPost(
|
|
|
313
448
|
|
|
314
449
|
if (hdr || linearLdr || fxaa || rawOnly || motionBlur) {
|
|
315
450
|
if (fxaa) {
|
|
316
|
-
const output =
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
451
|
+
const output = splitOutput
|
|
452
|
+
? target(context, 'standard-fxaa-output', {
|
|
453
|
+
format: 'rgba16float',
|
|
454
|
+
size: 'surface',
|
|
455
|
+
domain: 'linear-ldr',
|
|
456
|
+
})
|
|
457
|
+
: target(context, 'standard-output-color', {
|
|
458
|
+
format: 'rgba16float',
|
|
459
|
+
size: 'surface',
|
|
460
|
+
usage: GPU_TEXTURE_USAGE_COPY_SRC,
|
|
461
|
+
domain: 'display-encoded',
|
|
462
|
+
});
|
|
322
463
|
if (!output.ok) return output;
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
464
|
+
if (!splitOutput) {
|
|
465
|
+
// FXAA samples this display-encoded intermediate; leave dither to the
|
|
466
|
+
// final FXAA writer so the same pixel is not dithered twice.
|
|
467
|
+
const outputTransform = addTypedOutputTransformPass(
|
|
468
|
+
context.graph,
|
|
469
|
+
postInput,
|
|
470
|
+
output.value,
|
|
471
|
+
{ dither: false },
|
|
472
|
+
);
|
|
473
|
+
if (!outputTransform.ok) return outputTransform;
|
|
474
|
+
}
|
|
329
475
|
const aa = addTypedFullscreenPass(context.graph, {
|
|
330
476
|
name: 'fxaa',
|
|
331
477
|
shader: 'fxaa',
|
|
332
|
-
input: output.value,
|
|
333
|
-
output:
|
|
478
|
+
input: splitOutput ? postInput : output.value,
|
|
479
|
+
output: splitOutput ? output.value : (rawOnlyPostInput?.value ?? finalPresent),
|
|
480
|
+
...(splitOutput
|
|
481
|
+
? {
|
|
482
|
+
paramsTransform: (): Uint8Array => new Uint8Array(16),
|
|
483
|
+
}
|
|
484
|
+
: {}),
|
|
334
485
|
});
|
|
335
486
|
if (!aa.ok) return aa;
|
|
336
|
-
|
|
487
|
+
if (splitOutput) postInput = output.value;
|
|
488
|
+
} else if (rawOnlyPostInput !== undefined && !splitOutput) {
|
|
337
489
|
const transformed = addTypedOutputTransformPass(
|
|
338
490
|
context.graph,
|
|
339
491
|
postInput,
|
|
@@ -343,12 +495,12 @@ export function addStandardPost(
|
|
|
343
495
|
},
|
|
344
496
|
);
|
|
345
497
|
if (!transformed.ok) return transformed;
|
|
346
|
-
} else if (rawOnly || linearLdr) {
|
|
498
|
+
} else if ((rawOnly || linearLdr) && !splitOutput) {
|
|
347
499
|
const transformed = addTypedOutputTransformPass(context.graph, postInput, finalPresent, {
|
|
348
500
|
dither: outputDither,
|
|
349
501
|
});
|
|
350
502
|
if (!transformed.ok) return transformed;
|
|
351
|
-
} else {
|
|
503
|
+
} else if (!splitOutput) {
|
|
352
504
|
const outputTransform = addTypedOutputTransformPass(context.graph, postInput, finalPresent, {
|
|
353
505
|
dither: outputDither,
|
|
354
506
|
});
|
|
@@ -356,6 +508,17 @@ export function addStandardPost(
|
|
|
356
508
|
}
|
|
357
509
|
}
|
|
358
510
|
|
|
511
|
+
if (splitOutput) {
|
|
512
|
+
const encodedOutput = rawOnlyPostInput?.value ?? finalPresent;
|
|
513
|
+
const outputTransform = addTypedOutputTransformPass(context.graph, postInput, encodedOutput, {
|
|
514
|
+
dither: outputDither,
|
|
515
|
+
name: 'standard-output-encoding',
|
|
516
|
+
fragmentEntryPoint: 'fs_encode_only',
|
|
517
|
+
});
|
|
518
|
+
if (!outputTransform.ok) return outputTransform;
|
|
519
|
+
postInput = encodedOutput;
|
|
520
|
+
}
|
|
521
|
+
|
|
359
522
|
if (topology.lane.storageBuffer && postEffects.length > 0) {
|
|
360
523
|
const postInputTarget = rawOnly
|
|
361
524
|
? rawOnlyPostInput?.value
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SsaoParameterConfig } from '../ssao-config';
|
|
1
2
|
export const STANDARD_PIPELINE_ID = 'forgeax::standard' as const;
|
|
2
3
|
export const STANDARD_LIGHT_COUNTS = [1, 32, 256] as const;
|
|
3
4
|
export {
|
|
@@ -34,7 +35,7 @@ export interface StandardProfile {
|
|
|
34
35
|
readonly shadows: StandardShadowMode;
|
|
35
36
|
readonly pbr: boolean;
|
|
36
37
|
readonly ibl: boolean;
|
|
37
|
-
readonly ssao: boolean;
|
|
38
|
+
readonly ssao: boolean | SsaoParameterConfig;
|
|
38
39
|
/** Renderer-owned 1080p volume profile; tile width/height remain surface-derived. */
|
|
39
40
|
readonly volumetricFog?: StandardVolumetricFogProfile | undefined;
|
|
40
41
|
readonly postStages: typeof STANDARD_POST_STAGE_NAMES;
|
package/src/pipeline-builder.ts
CHANGED
|
@@ -124,6 +124,7 @@ export interface PipelineBuilderContext {
|
|
|
124
124
|
readonly colorFormat: GPUTextureFormat;
|
|
125
125
|
/** Additional color targets for an MRT pass; the first target is colorFormat. */
|
|
126
126
|
readonly colorFormats?: readonly GPUTextureFormat[] | undefined;
|
|
127
|
+
readonly fragmentConstants?: Readonly<Record<string, number>> | undefined;
|
|
127
128
|
/** Depth attachment format, or `undefined` for a color-only pass. */
|
|
128
129
|
readonly depthFormat: GPUTextureFormat | undefined;
|
|
129
130
|
/**
|
|
@@ -134,7 +135,7 @@ export interface PipelineBuilderContext {
|
|
|
134
135
|
*/
|
|
135
136
|
readonly vertexBuffers: readonly GPUVertexBufferLayout[];
|
|
136
137
|
/** Explicit layout family selected by the renderer assembly. */
|
|
137
|
-
readonly layoutKind?: 'pbr-skin' | undefined;
|
|
138
|
+
readonly layoutKind?: 'pbr-skin' | 'gpu-driven-skin' | undefined;
|
|
138
139
|
/** Pipeline label (for GPU debug captures); defaults to `pbr-pipeline-${id}`. */
|
|
139
140
|
readonly label?: string | undefined;
|
|
140
141
|
/**
|
|
@@ -160,6 +161,8 @@ export interface PipelineBuilderContext {
|
|
|
160
161
|
readonly storageBuffer: boolean;
|
|
161
162
|
readonly rgba16floatRenderable: boolean;
|
|
162
163
|
};
|
|
164
|
+
/** The output-domain binary coverage variant uses an r8unorm attachment. */
|
|
165
|
+
readonly coverageOnly?: boolean | undefined;
|
|
163
166
|
}
|
|
164
167
|
|
|
165
168
|
/**
|
|
@@ -174,7 +177,10 @@ export interface PipelineBuilderContext {
|
|
|
174
177
|
*/
|
|
175
178
|
export function validateTemporalPipelineContract(
|
|
176
179
|
source: string,
|
|
177
|
-
ctx: Pick<
|
|
180
|
+
ctx: Pick<
|
|
181
|
+
PipelineBuilderContext,
|
|
182
|
+
'colorFormat' | 'depthFormat' | 'capabilities' | 'coverageOnly'
|
|
183
|
+
>,
|
|
178
184
|
): Result<void, RhiError> {
|
|
179
185
|
if (!source.includes('fn vs_temporal') || !source.includes('fn fs_temporal')) {
|
|
180
186
|
return err(
|
|
@@ -185,12 +191,16 @@ export function validateTemporalPipelineContract(
|
|
|
185
191
|
}),
|
|
186
192
|
);
|
|
187
193
|
}
|
|
188
|
-
|
|
194
|
+
const validCoverageTarget = ctx.coverageOnly === true && ctx.colorFormat === 'r8unorm';
|
|
195
|
+
if (ctx.colorFormat !== 'rgba16float' && !validCoverageTarget) {
|
|
189
196
|
return err(
|
|
190
197
|
new RhiError({
|
|
191
198
|
code: 'shader-compile-failed',
|
|
192
199
|
expected: 'temporal material target format is rgba16float',
|
|
193
|
-
hint:
|
|
200
|
+
hint:
|
|
201
|
+
ctx.coverageOnly === true
|
|
202
|
+
? `coverage temporal producer received unsupported color format ${ctx.colorFormat}; use r8unorm`
|
|
203
|
+
: `temporal producer received color format ${ctx.colorFormat}; use its physical rgba16float target`,
|
|
194
204
|
}),
|
|
195
205
|
);
|
|
196
206
|
}
|
|
@@ -367,6 +377,7 @@ export function buildPipelineForMaterialShader(
|
|
|
367
377
|
? {
|
|
368
378
|
module: shaderModule,
|
|
369
379
|
entryPoint: fsEntry,
|
|
380
|
+
...(ctx.fragmentConstants === undefined ? {} : { constants: ctx.fragmentConstants }),
|
|
370
381
|
targets: [],
|
|
371
382
|
}
|
|
372
383
|
: undefined,
|
|
@@ -376,11 +387,18 @@ export function buildPipelineForMaterialShader(
|
|
|
376
387
|
frontFace: renderState?.frontFace ?? 'ccw',
|
|
377
388
|
},
|
|
378
389
|
depthStencil: {
|
|
379
|
-
//
|
|
380
|
-
//
|
|
381
|
-
format
|
|
382
|
-
|
|
383
|
-
|
|
390
|
+
// Shadow passes default to depth32float, while prepared depth-only
|
|
391
|
+
// feature passes may target the renderer's depth24plus-stencil8
|
|
392
|
+
// attachment. The pipeline context carries the resolved format so
|
|
393
|
+
// the PSO and render pass cannot drift.
|
|
394
|
+
format: ctx.depthFormat ?? 'depth32float',
|
|
395
|
+
// Shadow-caster remains the default policy for the legacy depth pass,
|
|
396
|
+
// while an explicit prepared depth-only feature is allowed to carry
|
|
397
|
+
// its own compare/write contract (for example an occlusion prepass
|
|
398
|
+
// using `always` + write-off). Do not infer policy from the absence of
|
|
399
|
+
// color targets alone.
|
|
400
|
+
depthWriteEnabled: renderState?.depthWriteEnabled ?? true,
|
|
401
|
+
depthCompare: renderState?.depthCompare ?? 'less',
|
|
384
402
|
},
|
|
385
403
|
multisample: sampleCount > 1 ? { count: sampleCount } : undefined,
|
|
386
404
|
});
|
|
@@ -430,6 +448,7 @@ export function buildPipelineForMaterialShader(
|
|
|
430
448
|
fragment: {
|
|
431
449
|
module: shaderModule,
|
|
432
450
|
entryPoint: fsEntry,
|
|
451
|
+
...(ctx.fragmentConstants === undefined ? {} : { constants: ctx.fragmentConstants }),
|
|
433
452
|
targets: forwardSpec.attachments.colorFormats.map((format) => ({
|
|
434
453
|
format,
|
|
435
454
|
...(renderState?.blend === undefined ? {} : { blend: renderState.blend }),
|
|
@@ -12,6 +12,8 @@ export interface PipelineSpec {
|
|
|
12
12
|
readonly variantSet: string | undefined;
|
|
13
13
|
readonly vertexEntry?: string;
|
|
14
14
|
readonly fragmentEntry?: string;
|
|
15
|
+
/** Pipeline-time fragment overrides; not runtime WGSL feature defines. */
|
|
16
|
+
readonly fragmentConstants?: Readonly<Record<string, number>> | undefined;
|
|
15
17
|
};
|
|
16
18
|
readonly attachments: {
|
|
17
19
|
readonly colorFormats: readonly GPUTextureFormat[];
|
|
@@ -24,6 +26,8 @@ export interface PipelineSpec {
|
|
|
24
26
|
readonly vertexLayout: VertexAttributeMap;
|
|
25
27
|
/** Geometry-owned immutable descriptor projection, when already derived. */
|
|
26
28
|
readonly vertexLayoutProjection?: VertexLayoutProjection | undefined;
|
|
29
|
+
/** Explicit multi-stream layout supplied by the prepared-graphics owner. */
|
|
30
|
+
readonly vertexBuffers?: readonly GPUVertexBufferLayout[];
|
|
27
31
|
readonly shaderUvSetCount?: number | undefined;
|
|
28
32
|
};
|
|
29
33
|
readonly renderState: MaterialRenderState | undefined;
|
package/src/pipeline-spec.ts
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
// P4: consistent abstraction — 4-axis aligns with wgpu/Bevy/Three.js
|
|
19
19
|
|
|
20
20
|
import {
|
|
21
|
+
DEFAULT_VERTEX_ATTRIBUTE_MAP,
|
|
21
22
|
deriveVertexBufferLayout,
|
|
22
23
|
deriveVertexBufferLayoutFromProjection,
|
|
23
24
|
deriveVertexLayoutProjection,
|
|
@@ -30,7 +31,6 @@ import {
|
|
|
30
31
|
ok,
|
|
31
32
|
type PrimitiveTopology,
|
|
32
33
|
type Result,
|
|
33
|
-
type VertexAttributeMap,
|
|
34
34
|
} from '@forgeax/engine-types';
|
|
35
35
|
import { VertexColorVariantConflictError } from './errors/render';
|
|
36
36
|
|
|
@@ -226,6 +226,24 @@ export function cacheKeyOf(spec: PipelineSpec): string {
|
|
|
226
226
|
|
|
227
227
|
const uvSetCountSegment =
|
|
228
228
|
geometry.shaderUvSetCount !== undefined ? `:uvsc${geometry.shaderUvSetCount}` : '';
|
|
229
|
+
// Prepared graphics may publish an explicit multi-stream layout (particle
|
|
230
|
+
// material-input lanes are the canonical example). The attribute map alone
|
|
231
|
+
// cannot describe those streams or their lane stride, so include the
|
|
232
|
+
// normalized descriptors in the cache identity as well.
|
|
233
|
+
const vertexBuffersSegment =
|
|
234
|
+
geometry.vertexBuffers === undefined
|
|
235
|
+
? ''
|
|
236
|
+
: `:vbs:${JSON.stringify(
|
|
237
|
+
geometry.vertexBuffers.map((buffer) => ({
|
|
238
|
+
arrayStride: buffer.arrayStride,
|
|
239
|
+
stepMode: buffer.stepMode ?? 'vertex',
|
|
240
|
+
attributes: [...buffer.attributes].map((attribute) => ({
|
|
241
|
+
shaderLocation: attribute.shaderLocation,
|
|
242
|
+
offset: attribute.offset,
|
|
243
|
+
format: attribute.format,
|
|
244
|
+
})),
|
|
245
|
+
})),
|
|
246
|
+
)}`;
|
|
229
247
|
|
|
230
248
|
// bug-20260708 M2 (b): sentinel `~` distinguishes `variantSet=undefined`
|
|
231
249
|
// (no-variant / default-variant request) from canonical all-true key `''`
|
|
@@ -249,7 +267,15 @@ export function cacheKeyOf(spec: PipelineSpec): string {
|
|
|
249
267
|
`vl:${vlDigest}`,
|
|
250
268
|
renderStateHash(renderState),
|
|
251
269
|
].join(':') +
|
|
270
|
+
vertexBuffersSegment +
|
|
252
271
|
uvSetCountSegment +
|
|
272
|
+
(shader.fragmentConstants === undefined
|
|
273
|
+
? ''
|
|
274
|
+
: `:fragment-constants:${JSON.stringify(
|
|
275
|
+
Object.entries(shader.fragmentConstants).sort(([left], [right]) =>
|
|
276
|
+
left.localeCompare(right),
|
|
277
|
+
),
|
|
278
|
+
)}`) +
|
|
253
279
|
(shader.vertexEntry === undefined && shader.fragmentEntry === undefined
|
|
254
280
|
? ''
|
|
255
281
|
: `:entries:${JSON.stringify([shader.vertexEntry ?? null, shader.fragmentEntry ?? null])}`)
|
|
@@ -292,22 +318,13 @@ export function variantSetFromVertexLayoutProjection(
|
|
|
292
318
|
return ok(parts.join('+'));
|
|
293
319
|
}
|
|
294
320
|
|
|
295
|
-
/**
|
|
296
|
-
* Derive the capability axes shared by every Standard PBR draw owner.
|
|
297
|
-
*
|
|
298
|
-
* The all-true key is the canonical empty key used by the shader manifest;
|
|
299
|
-
* every other capability pair stays explicit so a no-local-light frame on a
|
|
300
|
-
* device without storage buffers cannot accidentally select a storage-backed
|
|
301
|
-
* PSO. Vertex-color is supplied here because the empty-key rule is only valid
|
|
302
|
-
* when that geometry-owned axis is also true.
|
|
303
|
-
*/
|
|
321
|
+
/** Explicit geometry and lighting facts survive composition before manifest key canonicalization. */
|
|
304
322
|
export function standardCapabilityVariantSet(
|
|
305
323
|
clustered: boolean,
|
|
306
324
|
storageBuffer: boolean,
|
|
307
325
|
vertexColorAvailable: boolean,
|
|
308
326
|
): string {
|
|
309
|
-
|
|
310
|
-
return `CLUSTER_FORWARD_AVAILABLE=${clustered}+STORAGE_BUFFER_AVAILABLE=${storageBuffer}`;
|
|
327
|
+
return `CLUSTER_FORWARD_AVAILABLE=${clustered}+STORAGE_BUFFER_AVAILABLE=${storageBuffer}+VERTEX_COLOR_AVAILABLE=${vertexColorAvailable}`;
|
|
311
328
|
}
|
|
312
329
|
|
|
313
330
|
/**
|
|
@@ -332,15 +349,7 @@ export function standardTopologyVariantSet(
|
|
|
332
349
|
vertexColorAvailable,
|
|
333
350
|
);
|
|
334
351
|
if (!probeBlendAvailable || !storageBuffer) return capabilityVariantSet;
|
|
335
|
-
|
|
336
|
-
// resolveMaterialShaderVariantSet (an omitted cluster axis means false).
|
|
337
|
-
// Expand that base before adding the object-level Probe ABI axis so shader,
|
|
338
|
-
// group(3) bind group, and pipeline layout remain one exact variant.
|
|
339
|
-
const explicitCapabilityVariantSet =
|
|
340
|
-
capabilityVariantSet === ''
|
|
341
|
-
? 'CLUSTER_FORWARD_AVAILABLE=true+STORAGE_BUFFER_AVAILABLE=true'
|
|
342
|
-
: capabilityVariantSet;
|
|
343
|
-
return `${explicitCapabilityVariantSet}+PROBE_BLEND_AVAILABLE=true`;
|
|
352
|
+
return `${capabilityVariantSet}+PROBE_BLEND_AVAILABLE=true`;
|
|
344
353
|
}
|
|
345
354
|
|
|
346
355
|
/**
|
|
@@ -406,7 +415,8 @@ export function buildPipelineDescriptor(
|
|
|
406
415
|
// A supplied projection is the geometry owner's immutable GPU descriptor.
|
|
407
416
|
// Do not re-derive it from a possibly stale attribute map.
|
|
408
417
|
const vertexBuffers =
|
|
409
|
-
geometry.
|
|
418
|
+
geometry.vertexBuffers ??
|
|
419
|
+
(geometry.vertexLayoutProjection === undefined
|
|
410
420
|
? deriveVertexBufferLayout(geometry.vertexLayout, {
|
|
411
421
|
...(geometry.shaderUvSetCount !== undefined
|
|
412
422
|
? { shaderUvSetCount: geometry.shaderUvSetCount }
|
|
@@ -416,7 +426,7 @@ export function buildPipelineDescriptor(
|
|
|
416
426
|
...(geometry.shaderUvSetCount !== undefined
|
|
417
427
|
? { shaderUvSetCount: geometry.shaderUvSetCount }
|
|
418
428
|
: {}),
|
|
419
|
-
});
|
|
429
|
+
}));
|
|
420
430
|
|
|
421
431
|
const descriptor: Record<string, unknown> = {
|
|
422
432
|
vertex: {
|
|
@@ -431,6 +441,9 @@ export function buildPipelineDescriptor(
|
|
|
431
441
|
descriptor.fragment = {
|
|
432
442
|
module: modules.fragment,
|
|
433
443
|
entryPoint: spec.shader.fragmentEntry ?? modules.fragmentEntryPoint ?? 'fs_main',
|
|
444
|
+
...(spec.shader.fragmentConstants === undefined
|
|
445
|
+
? {}
|
|
446
|
+
: { constants: spec.shader.fragmentConstants }),
|
|
434
447
|
targets: attachments.colorFormats.map((fmt) => {
|
|
435
448
|
const target: Record<string, unknown> = { format: fmt };
|
|
436
449
|
if (renderState?.blend !== undefined) {
|
|
@@ -952,12 +965,7 @@ export function getOrBuildPipeline(
|
|
|
952
965
|
// SPEC_CONST_TABLE — 12 boot-time pre-warm variants (M1-T5)
|
|
953
966
|
// ══════════════════════════════════════════════════════════════════════════════
|
|
954
967
|
|
|
955
|
-
const PROCEDURAL_ATTR_LAYOUT
|
|
956
|
-
position: new Float32Array(0),
|
|
957
|
-
normal: new Float32Array(0),
|
|
958
|
-
uv: new Float32Array(0),
|
|
959
|
-
tangent: new Float32Array(0),
|
|
960
|
-
};
|
|
968
|
+
const PROCEDURAL_ATTR_LAYOUT = DEFAULT_VERTEX_ATTRIBUTE_MAP;
|
|
961
969
|
|
|
962
970
|
const HDR_FORMAT: GPUTextureFormat = 'rgba16float';
|
|
963
971
|
const DEPTH_DS: GPUTextureFormat = 'depth24plus-stencil8';
|
package/src/plugin.ts
CHANGED
|
@@ -3,12 +3,14 @@ import type { Plugin } from '@forgeax/engine-plugin';
|
|
|
3
3
|
import { Atmosphere } from './components/atmosphere';
|
|
4
4
|
import { Camera } from './components/camera';
|
|
5
5
|
import { DirectionalLight } from './components/directional-light';
|
|
6
|
+
import { DynamicResolution } from './components/dynamic-resolution';
|
|
6
7
|
import { Instances } from './components/instances';
|
|
7
8
|
import { Layer } from './components/layer';
|
|
8
9
|
import { LightProbe } from './components/light-probe';
|
|
9
10
|
import { Lines } from './components/lines';
|
|
10
11
|
import { MeshFilter } from './components/mesh-filter';
|
|
11
12
|
import { MeshRenderer } from './components/mesh-renderer';
|
|
13
|
+
import { MotionBlur } from './components/motion-blur';
|
|
12
14
|
import { PointLight } from './components/point-light';
|
|
13
15
|
import { PointLightShadow } from './components/point-light-shadow';
|
|
14
16
|
import { Points } from './components/points';
|
|
@@ -30,11 +32,13 @@ const RENDER_COMPONENTS: readonly Component[] = [
|
|
|
30
32
|
Atmosphere,
|
|
31
33
|
Camera,
|
|
32
34
|
DirectionalLight,
|
|
35
|
+
DynamicResolution,
|
|
33
36
|
Instances,
|
|
34
37
|
Layer,
|
|
35
38
|
LightProbe,
|
|
36
39
|
MeshFilter,
|
|
37
40
|
MeshRenderer,
|
|
41
|
+
MotionBlur,
|
|
38
42
|
PointLight,
|
|
39
43
|
PointLightShadow,
|
|
40
44
|
Points,
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { resolveAssetHandle } from '@forgeax/engine-assets-runtime';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_VERTEX_ATTRIBUTE_MAP,
|
|
4
|
+
deriveVertexLayoutProjection,
|
|
5
|
+
} from '@forgeax/engine-geometry';
|
|
3
6
|
import { err, ok } from '@forgeax/engine-rhi';
|
|
4
7
|
import type { MaterialAsset, MeshAsset } from '@forgeax/engine-types';
|
|
5
8
|
import { toShared } from '@forgeax/engine-types';
|
|
@@ -15,7 +18,7 @@ import type {
|
|
|
15
18
|
PointsLinesRecordSubmission,
|
|
16
19
|
RenderSystemInternals,
|
|
17
20
|
} from '../record/render-context';
|
|
18
|
-
import type { RecoveryPointsLinesCandidate } from '../
|
|
21
|
+
import type { RecoveryPointsLinesCandidate } from '../recovery/types';
|
|
19
22
|
import { admitPointsLines } from './admission';
|
|
20
23
|
import { PointsLinesExpansionCache } from './expansion-cache';
|
|
21
24
|
import type { PointsLinesInspection, PointsLinesSourceError } from './inspection';
|
|
@@ -50,12 +53,7 @@ export class StandardPointsLinesOwner implements PointsLinesRecordOwner {
|
|
|
50
53
|
private readonly cache = new PointsLinesExpansionCache();
|
|
51
54
|
private readonly preparations = new Map<string, PointsLinesPreparationAdapter>();
|
|
52
55
|
private readonly active = new Map<string, PointsLinesInspection>();
|
|
53
|
-
private readonly layoutProjection = deriveVertexLayoutProjection(
|
|
54
|
-
position: new Float32Array(0),
|
|
55
|
-
normal: new Float32Array(0),
|
|
56
|
-
uv: new Float32Array(0),
|
|
57
|
-
tangent: new Float32Array(0),
|
|
58
|
-
});
|
|
56
|
+
private readonly layoutProjection = deriveVertexLayoutProjection(DEFAULT_VERTEX_ATTRIBUTE_MAP);
|
|
59
57
|
|
|
60
58
|
constructor(private readonly internals: RenderSystemInternals) {}
|
|
61
59
|
|
|
@@ -193,14 +191,8 @@ export class StandardPointsLinesOwner implements PointsLinesRecordOwner {
|
|
|
193
191
|
const prepKey = `${geometryKey}:${lane}:${backend}`;
|
|
194
192
|
let preparation = preparations.get(prepKey);
|
|
195
193
|
if (preparation === undefined) {
|
|
196
|
-
// A new expansion is visible cold upload work. Candidate preparation
|
|
197
|
-
// uses an unarmed runtime and stages the result; the published runtime
|
|
198
|
-
// is armed, so a missing staged resource fails before any RHI create.
|
|
199
|
-
runtime.recoveryColdWorkGuard?.noteUploadColdWork();
|
|
200
194
|
preparation = this.createPreparation(runtime, geometryKey, lane, backend);
|
|
201
195
|
preparations.set(prepKey, preparation);
|
|
202
|
-
} else if (preparation.lastKnownGood()?.geometry.key !== geometryKey) {
|
|
203
|
-
runtime.recoveryColdWorkGuard?.noteUploadColdWork();
|
|
204
196
|
}
|
|
205
197
|
const prepared = preparation.prepare(snapshot, meshResult.value);
|
|
206
198
|
if (!prepared.ok) {
|