@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
|
@@ -11,10 +11,17 @@ import type {
|
|
|
11
11
|
RenderFeaturePreparedRef,
|
|
12
12
|
RenderFeatureVertexDataDescriptor,
|
|
13
13
|
} from './prepared-graphics';
|
|
14
|
+
import { RENDER_FEATURE_VERTEX_LAYOUTS } from './prepared-graphics';
|
|
14
15
|
import type { RenderFeatureTargetHandle } from './targets';
|
|
15
16
|
|
|
16
17
|
export type PreparedGraphicsKind = Exclude<PreparedKind, 'attachment'>;
|
|
17
18
|
|
|
19
|
+
const PARTICLE_MATERIAL_INPUT_LAYOUTS: ReadonlySet<string> = new Set([
|
|
20
|
+
RENDER_FEATURE_VERTEX_LAYOUTS.billboardMaterialInputInstance,
|
|
21
|
+
RENDER_FEATURE_VERTEX_LAYOUTS.topologySegmentMaterialInputInstance,
|
|
22
|
+
RENDER_FEATURE_VERTEX_LAYOUTS.meshGeometryMaterialInputInstance,
|
|
23
|
+
]);
|
|
24
|
+
|
|
18
25
|
export type PreparedGraphicsRequestByKind = {
|
|
19
26
|
pipeline: RenderFeaturePipelineDescriptor;
|
|
20
27
|
bindings: RenderFeatureBindingsDescriptor;
|
|
@@ -185,6 +192,9 @@ function normalizeDescriptor(
|
|
|
185
192
|
kind,
|
|
186
193
|
shader: pipeline.shader,
|
|
187
194
|
vertexLayout: pipeline.vertexLayout,
|
|
195
|
+
...(pipeline.particleInputLanes === undefined
|
|
196
|
+
? {}
|
|
197
|
+
: { particleInputLanes: pipeline.particleInputLanes }),
|
|
188
198
|
colorFormats: Object.freeze([...pipeline.colorFormats]),
|
|
189
199
|
...(pipeline.depthFormat === undefined ? {} : { depthFormat: pipeline.depthFormat }),
|
|
190
200
|
...(pipeline.sampleCount === undefined ? {} : { sampleCount: pipeline.sampleCount }),
|
|
@@ -263,6 +273,27 @@ class PreparedGraphicsTransactionImpl implements PreparedGraphicsTransaction {
|
|
|
263
273
|
name: string,
|
|
264
274
|
request: PreparedGraphicsRequestByKind[Kind] | PreparedGraphicsSignature,
|
|
265
275
|
): Result<RenderFeaturePreparedRef<Kind>, RenderError> {
|
|
276
|
+
if (kind === 'pipeline' && !('signature' in request)) {
|
|
277
|
+
const pipeline = request as RenderFeaturePipelineDescriptor;
|
|
278
|
+
const lanes = pipeline.particleInputLanes;
|
|
279
|
+
const usesParticleMaterialInputs = PARTICLE_MATERIAL_INPUT_LAYOUTS.has(pipeline.vertexLayout);
|
|
280
|
+
const validLanes =
|
|
281
|
+
typeof lanes === 'number' && Number.isInteger(lanes) && lanes >= 1 && lanes <= 4;
|
|
282
|
+
if (
|
|
283
|
+
(usesParticleMaterialInputs && !validLanes) ||
|
|
284
|
+
(!usesParticleMaterialInputs && lanes !== undefined)
|
|
285
|
+
) {
|
|
286
|
+
return err(
|
|
287
|
+
preparationFailure(
|
|
288
|
+
this.featureIdentity,
|
|
289
|
+
this.generation,
|
|
290
|
+
kind,
|
|
291
|
+
name,
|
|
292
|
+
'particle-input-lanes-require-material-input-layout-and-1-through-4-lanes',
|
|
293
|
+
),
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
266
297
|
const normalized = normalizeDescriptor(kind, request);
|
|
267
298
|
if (this.aborted || this.committed || name.length === 0 || normalized.signature.length === 0) {
|
|
268
299
|
return err(
|
|
@@ -31,8 +31,11 @@ export type { PreparedKind } from './vocabulary';
|
|
|
31
31
|
export const RENDER_FEATURE_VERTEX_LAYOUTS = Object.freeze({
|
|
32
32
|
positionSizeColorInstance: 'position-size-color-instance',
|
|
33
33
|
billboardMaterialInstance: 'billboard-material-instance',
|
|
34
|
+
billboardMaterialInputInstance: 'billboard-material-input-instance',
|
|
34
35
|
topologySegmentInstance: 'topology-segment-instance',
|
|
36
|
+
topologySegmentMaterialInputInstance: 'topology-segment-material-input-instance',
|
|
35
37
|
meshGeometryMaterialInstance: 'mesh-geometry-material-instance',
|
|
38
|
+
meshGeometryMaterialInputInstance: 'mesh-geometry-material-input-instance',
|
|
36
39
|
} as const);
|
|
37
40
|
|
|
38
41
|
/**
|
|
@@ -51,6 +54,8 @@ export interface RenderFeaturePreparedRef<Kind extends PreparedKind = PreparedKi
|
|
|
51
54
|
export interface RenderFeaturePipelineDescriptor {
|
|
52
55
|
readonly shader: string;
|
|
53
56
|
readonly vertexLayout: string;
|
|
57
|
+
/** Number of vec4 lanes in the material-input instance layout (1 through 4). */
|
|
58
|
+
readonly particleInputLanes?: number;
|
|
54
59
|
readonly colorFormats: readonly TextureFormat[];
|
|
55
60
|
readonly depthFormat?: TextureFormat;
|
|
56
61
|
/** Sample count of the target this pipeline will draw into. */
|
|
@@ -3,17 +3,23 @@ import type {
|
|
|
3
3
|
RenderGraphError,
|
|
4
4
|
RenderGraphFrame,
|
|
5
5
|
} from '@forgeax/engine-render-graph';
|
|
6
|
-
import type
|
|
7
|
-
import {
|
|
6
|
+
import { err, type Result } from '@forgeax/engine-types';
|
|
7
|
+
import {
|
|
8
|
+
type RenderError,
|
|
9
|
+
RenderFeatureDrawRecordingFailedError,
|
|
10
|
+
RenderFeatureStageFailedError,
|
|
11
|
+
} from '../errors/render';
|
|
8
12
|
import {
|
|
9
13
|
encodeRenderFeatureGpuComputePass,
|
|
10
14
|
type RenderFeatureResolvedGpuComputePass,
|
|
11
15
|
} from './prepared-gpu-work';
|
|
16
|
+
import type { RenderFeatureGraphTargetResolver } from './render-graph-raster';
|
|
12
17
|
import {
|
|
13
18
|
createRenderFeatureGraphBufferState,
|
|
14
19
|
importRenderFeatureGraphBuffer,
|
|
15
20
|
type RenderFeatureGraphBufferState,
|
|
16
21
|
} from './render-graph-resources';
|
|
22
|
+
import type { RenderFeatureTargetHandle } from './targets';
|
|
17
23
|
|
|
18
24
|
export class RenderFeatureComputeGraphProjection<FrameCtx extends RenderGraphFrame> {
|
|
19
25
|
private readonly resources: RenderFeatureGraphBufferState;
|
|
@@ -22,6 +28,7 @@ export class RenderFeatureComputeGraphProjection<FrameCtx extends RenderGraphFra
|
|
|
22
28
|
private readonly builder: RenderGraphBuilder<FrameCtx>,
|
|
23
29
|
resources?: RenderFeatureGraphBufferState,
|
|
24
30
|
private readonly reportError?: (error: RenderError) => void,
|
|
31
|
+
private readonly resolveTarget?: RenderFeatureGraphTargetResolver,
|
|
25
32
|
) {
|
|
26
33
|
this.resources = resources ?? createRenderFeatureGraphBufferState();
|
|
27
34
|
}
|
|
@@ -31,8 +38,26 @@ export class RenderFeatureComputeGraphProjection<FrameCtx extends RenderGraphFra
|
|
|
31
38
|
featureIdentity: string,
|
|
32
39
|
order: number,
|
|
33
40
|
work: RenderFeatureResolvedGpuComputePass,
|
|
34
|
-
): Result<void, RenderGraphError> {
|
|
41
|
+
): Result<void, RenderGraphError | RenderError> {
|
|
35
42
|
const accesses = [];
|
|
43
|
+
const targets = new Map<
|
|
44
|
+
RenderFeatureTargetHandle,
|
|
45
|
+
NonNullable<ReturnType<RenderFeatureGraphTargetResolver>>
|
|
46
|
+
>();
|
|
47
|
+
for (const handle of work.sampledTargets ?? []) {
|
|
48
|
+
let target = this.resolveTarget?.(handle);
|
|
49
|
+
if (target === undefined)
|
|
50
|
+
return err(
|
|
51
|
+
new RenderFeatureStageFailedError(featureIdentity, order, 'record', 'renderer-recover'),
|
|
52
|
+
);
|
|
53
|
+
if (handle.kind === 'scene-depth') {
|
|
54
|
+
const view = this.builder.view(target.texture, { aspect: 'depth-only' });
|
|
55
|
+
if (!view.ok) return view;
|
|
56
|
+
target = { ...target, view: view.value };
|
|
57
|
+
}
|
|
58
|
+
targets.set(handle, target);
|
|
59
|
+
accesses.push({ resource: target.view, usage: 'sampled-read' as const });
|
|
60
|
+
}
|
|
36
61
|
for (const resource of work.buffers) {
|
|
37
62
|
const imported = importRenderFeatureGraphBuffer(
|
|
38
63
|
this.builder,
|
|
@@ -45,11 +70,17 @@ export class RenderFeatureComputeGraphProjection<FrameCtx extends RenderGraphFra
|
|
|
45
70
|
}
|
|
46
71
|
return this.builder.addComputePass(name, {
|
|
47
72
|
accesses,
|
|
48
|
-
encode: ({ pass }) => {
|
|
73
|
+
encode: ({ pass, resources }) => {
|
|
49
74
|
try {
|
|
50
|
-
encodeRenderFeatureGpuComputePass(pass, work)
|
|
75
|
+
encodeRenderFeatureGpuComputePass(pass, work, (name) => {
|
|
76
|
+
const target = targets.get(name);
|
|
77
|
+
if (target === undefined) throw new Error(`Missing sampled graph target: ${name}`);
|
|
78
|
+
const view = resources.textureView(target.view);
|
|
79
|
+
if (!view.ok) throw view.error;
|
|
80
|
+
return view.value;
|
|
81
|
+
});
|
|
51
82
|
} catch (failure) {
|
|
52
|
-
|
|
83
|
+
const error =
|
|
53
84
|
failure instanceof Error && typeof (failure as Partial<RenderError>).code === 'string'
|
|
54
85
|
? (failure as RenderError)
|
|
55
86
|
: new RenderFeatureDrawRecordingFailedError(
|
|
@@ -60,8 +91,10 @@ export class RenderFeatureComputeGraphProjection<FrameCtx extends RenderGraphFra
|
|
|
60
91
|
'backend-recording-failed',
|
|
61
92
|
failure instanceof Error ? failure.message : String(failure),
|
|
62
93
|
'renderer-recover',
|
|
63
|
-
)
|
|
64
|
-
);
|
|
94
|
+
);
|
|
95
|
+
this.reportError?.(error);
|
|
96
|
+
// A partially encoded intent is not a submitted transaction.
|
|
97
|
+
throw error;
|
|
65
98
|
}
|
|
66
99
|
},
|
|
67
100
|
});
|
|
@@ -1,19 +1,136 @@
|
|
|
1
1
|
import type {
|
|
2
|
+
GraphAccess,
|
|
3
|
+
GraphBufferAccess,
|
|
2
4
|
RenderGraphBuilder,
|
|
3
5
|
RenderGraphError,
|
|
4
6
|
RenderGraphFrame,
|
|
5
7
|
} from '@forgeax/engine-render-graph';
|
|
8
|
+
import type { Buffer } from '@forgeax/engine-rhi';
|
|
6
9
|
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
7
10
|
import { type RenderError, RenderFeatureStageFailedError } from '../errors/render';
|
|
8
|
-
import type { RenderFeaturePlanExecution } from './host';
|
|
11
|
+
import type { RenderFeaturePlanExecution, RenderFeaturePlanExecutionPass } from './host';
|
|
9
12
|
import { RenderFeatureComputeGraphProjection } from './render-graph-compute';
|
|
10
13
|
import {
|
|
11
14
|
type RenderFeatureGraphBindingsResolver,
|
|
12
15
|
type RenderFeatureGraphTargetResolver,
|
|
16
|
+
type RenderFeatureLightingResolver,
|
|
13
17
|
RenderFeatureRasterGraphProjection,
|
|
18
|
+
type RenderFeatureShadowDraws,
|
|
19
|
+
resolveRenderFeatureDrawBuffers,
|
|
14
20
|
} from './render-graph-raster';
|
|
15
21
|
import { createRenderFeatureGraphBufferState } from './render-graph-resources';
|
|
16
22
|
|
|
23
|
+
export function createRenderFeatureProjectionState() {
|
|
24
|
+
return {
|
|
25
|
+
buffers: createRenderFeatureGraphBufferState(),
|
|
26
|
+
projected: new Set<RenderFeaturePlanExecutionPass>(),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function writesBuffer(access: GraphBufferAccess): boolean {
|
|
31
|
+
switch (access) {
|
|
32
|
+
case 'storage-write':
|
|
33
|
+
case 'storage-read-write':
|
|
34
|
+
case 'copy-dst':
|
|
35
|
+
return true;
|
|
36
|
+
case 'uniform-read':
|
|
37
|
+
case 'storage-read':
|
|
38
|
+
case 'indirect-read':
|
|
39
|
+
case 'vertex-read':
|
|
40
|
+
case 'index-read':
|
|
41
|
+
case 'copy-src':
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function projectRenderFeatureShadows<FrameCtx extends RenderGraphFrame>(
|
|
47
|
+
builder: RenderGraphBuilder<FrameCtx>,
|
|
48
|
+
executions: readonly RenderFeaturePlanExecution[],
|
|
49
|
+
state: ReturnType<typeof createRenderFeatureProjectionState>,
|
|
50
|
+
): Result<RenderFeatureShadowDraws<FrameCtx> | undefined, RenderGraphError | RenderError> {
|
|
51
|
+
if (!executions.some((execution) => execution.passes.some((pass) => pass.shadowCaster)))
|
|
52
|
+
return ok(undefined);
|
|
53
|
+
const compute = new RenderFeatureComputeGraphProjection(builder, state.buffers);
|
|
54
|
+
const raster = new RenderFeatureRasterGraphProjection(
|
|
55
|
+
builder,
|
|
56
|
+
() => undefined,
|
|
57
|
+
undefined,
|
|
58
|
+
state.buffers,
|
|
59
|
+
);
|
|
60
|
+
const draws: RenderFeatureShadowDraws<FrameCtx>[] = [];
|
|
61
|
+
// Hoist only work that can cross earlier deferred work without changing its
|
|
62
|
+
// buffer observations. Physical identity catches aliases across features too.
|
|
63
|
+
const deferredAccesses = new Set<Buffer>();
|
|
64
|
+
const deferredWrites = new Set<Buffer>();
|
|
65
|
+
for (const execution of executions) {
|
|
66
|
+
for (const pass of execution.passes) {
|
|
67
|
+
if (pass.graphics !== undefined && pass.resolvedGraphics !== undefined) {
|
|
68
|
+
const inputs = resolveRenderFeatureDrawBuffers(
|
|
69
|
+
execution.featureIdentity,
|
|
70
|
+
execution.order,
|
|
71
|
+
pass.graphics,
|
|
72
|
+
pass.resolvedGraphics,
|
|
73
|
+
);
|
|
74
|
+
if (!inputs.ok) return inputs;
|
|
75
|
+
for (const group of Object.values(inputs.value)) {
|
|
76
|
+
for (const resource of group.values()) deferredAccesses.add(resource.buffer);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (pass.shadowCaster) {
|
|
80
|
+
if (
|
|
81
|
+
pass.graphics === undefined ||
|
|
82
|
+
pass.graphicsState === undefined ||
|
|
83
|
+
pass.resolvedGraphics === undefined
|
|
84
|
+
)
|
|
85
|
+
return err(
|
|
86
|
+
new RenderFeatureStageFailedError(
|
|
87
|
+
execution.featureIdentity,
|
|
88
|
+
execution.order,
|
|
89
|
+
'plan',
|
|
90
|
+
'next-frame',
|
|
91
|
+
),
|
|
92
|
+
);
|
|
93
|
+
const prepared = raster.prepareShadowDraws(
|
|
94
|
+
pass.name,
|
|
95
|
+
execution.featureIdentity,
|
|
96
|
+
execution.order,
|
|
97
|
+
pass.graphics,
|
|
98
|
+
pass.graphicsState,
|
|
99
|
+
pass.resolvedGraphics,
|
|
100
|
+
);
|
|
101
|
+
if (!prepared.ok) return prepared;
|
|
102
|
+
draws.push(prepared.value);
|
|
103
|
+
state.projected.add(pass);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const work = pass.resolvedGpuCompute;
|
|
107
|
+
if (work === undefined) continue;
|
|
108
|
+
const canRunEarly =
|
|
109
|
+
(work.sampledTargets?.length ?? 0) === 0 &&
|
|
110
|
+
work.buffers.every(
|
|
111
|
+
({ buffer, access }) =>
|
|
112
|
+
!deferredWrites.has(buffer) && (!writesBuffer(access) || !deferredAccesses.has(buffer)),
|
|
113
|
+
);
|
|
114
|
+
if (canRunEarly) {
|
|
115
|
+
const added = compute.addPass(pass.name, execution.featureIdentity, execution.order, work);
|
|
116
|
+
if (!added.ok) return added;
|
|
117
|
+
state.projected.add(pass);
|
|
118
|
+
} else {
|
|
119
|
+
for (const { buffer, access } of work.buffers) {
|
|
120
|
+
deferredAccesses.add(buffer);
|
|
121
|
+
if (writesBuffer(access)) deferredWrites.add(buffer);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return ok({
|
|
127
|
+
accesses: draws.flatMap((draw) => [...draw.accesses]),
|
|
128
|
+
encode: (pass, frame, resources, view) => {
|
|
129
|
+
for (const draw of draws) draw.encode(pass, frame, resources, view);
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
17
134
|
/** Project the host-owned plan execution directly into the one typed graph. */
|
|
18
135
|
export function projectRenderFeaturePlans<FrameCtx extends RenderGraphFrame>(
|
|
19
136
|
builder: RenderGraphBuilder<FrameCtx>,
|
|
@@ -22,19 +139,40 @@ export function projectRenderFeaturePlans<FrameCtx extends RenderGraphFrame>(
|
|
|
22
139
|
readonly resolveTarget: RenderFeatureGraphTargetResolver;
|
|
23
140
|
readonly resolveBindings?: RenderFeatureGraphBindingsResolver<FrameCtx> | undefined;
|
|
24
141
|
readonly reportError?: ((error: RenderError) => void) | undefined;
|
|
142
|
+
readonly resolveStandardLighting?: RenderFeatureLightingResolver<FrameCtx> | undefined;
|
|
143
|
+
readonly standardSurfaceAccesses?: readonly GraphAccess[] | undefined;
|
|
144
|
+
readonly state?: ReturnType<typeof createRenderFeatureProjectionState>;
|
|
25
145
|
},
|
|
26
146
|
): Result<void, RenderGraphError | RenderError> {
|
|
27
|
-
const
|
|
28
|
-
const
|
|
147
|
+
const state = options.state ?? createRenderFeatureProjectionState();
|
|
148
|
+
const buffers = state.buffers;
|
|
149
|
+
const compute = new RenderFeatureComputeGraphProjection(
|
|
150
|
+
builder,
|
|
151
|
+
buffers,
|
|
152
|
+
options.reportError,
|
|
153
|
+
options.resolveTarget,
|
|
154
|
+
);
|
|
29
155
|
const raster = new RenderFeatureRasterGraphProjection(
|
|
30
156
|
builder,
|
|
31
157
|
options.resolveTarget,
|
|
32
158
|
options.resolveBindings,
|
|
33
159
|
buffers,
|
|
34
160
|
options.reportError,
|
|
161
|
+
options.resolveStandardLighting,
|
|
162
|
+
options.standardSurfaceAccesses,
|
|
35
163
|
);
|
|
36
164
|
for (const execution of executions) {
|
|
37
165
|
for (const pass of execution.passes) {
|
|
166
|
+
if (state.projected.has(pass)) continue;
|
|
167
|
+
if (pass.shadowCaster)
|
|
168
|
+
return err(
|
|
169
|
+
new RenderFeatureStageFailedError(
|
|
170
|
+
execution.featureIdentity,
|
|
171
|
+
execution.order,
|
|
172
|
+
'plan',
|
|
173
|
+
'next-frame',
|
|
174
|
+
),
|
|
175
|
+
);
|
|
38
176
|
if (pass.resolvedGpuCompute !== undefined) {
|
|
39
177
|
const added = compute.addPass(
|
|
40
178
|
pass.name,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type {
|
|
2
|
+
GraphAccess,
|
|
2
3
|
GraphBuffer,
|
|
3
4
|
GraphResourceResolver,
|
|
4
5
|
GraphTexture,
|
|
@@ -8,7 +9,7 @@ import type {
|
|
|
8
9
|
RenderGraphError,
|
|
9
10
|
RenderGraphFrame,
|
|
10
11
|
} from '@forgeax/engine-render-graph';
|
|
11
|
-
import type { BindGroup, RhiRenderPassEncoder } from '@forgeax/engine-rhi';
|
|
12
|
+
import type { BindGroup, RenderPipeline, RhiRenderPassEncoder } from '@forgeax/engine-rhi';
|
|
12
13
|
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
13
14
|
import {
|
|
14
15
|
type RenderError,
|
|
@@ -58,6 +59,22 @@ export type RenderFeatureGraphBindingsResolver<FrameCtx extends RenderGraphFrame
|
|
|
58
59
|
readonly resolveTarget: RenderFeatureGraphTargetResolver;
|
|
59
60
|
}) => RenderFeatureGraphBindingsResolution | undefined;
|
|
60
61
|
|
|
62
|
+
export type RenderFeatureLightingResolver<FrameCtx extends RenderGraphFrame> = (
|
|
63
|
+
frame: FrameCtx,
|
|
64
|
+
pipeline: RenderPipeline,
|
|
65
|
+
) => BindGroup | undefined;
|
|
66
|
+
|
|
67
|
+
/** Prepared draws embedded by the owning pipeline into its light-view passes. */
|
|
68
|
+
export interface RenderFeatureShadowDraws<FrameCtx extends RenderGraphFrame> {
|
|
69
|
+
readonly accesses: readonly GraphAccess[];
|
|
70
|
+
encode(
|
|
71
|
+
pass: RhiRenderPassEncoder,
|
|
72
|
+
frame: FrameCtx,
|
|
73
|
+
resources: GraphResourceResolver,
|
|
74
|
+
view: BindGroup,
|
|
75
|
+
): void;
|
|
76
|
+
}
|
|
77
|
+
|
|
61
78
|
interface ResolvedDrawBuffers {
|
|
62
79
|
readonly vertex: ReadonlyMap<object, GraphBuffer>;
|
|
63
80
|
readonly index: ReadonlyMap<object, GraphBuffer>;
|
|
@@ -75,6 +92,51 @@ function resolved(
|
|
|
75
92
|
return snapshot.resolve(reference);
|
|
76
93
|
}
|
|
77
94
|
|
|
95
|
+
/** Physical draw inputs shared by readiness ordering and graph imports. */
|
|
96
|
+
export function resolveRenderFeatureDrawBuffers(
|
|
97
|
+
featureIdentity: string,
|
|
98
|
+
order: number,
|
|
99
|
+
descriptor: RenderFeatureGraphicsPassDescriptor,
|
|
100
|
+
snapshot: PreparedGraphicsResolvedSnapshot,
|
|
101
|
+
): Result<
|
|
102
|
+
{
|
|
103
|
+
vertex: Map<object, RenderFeatureResolvedGpuBuffer>;
|
|
104
|
+
index: Map<object, RenderFeatureResolvedGpuBuffer>;
|
|
105
|
+
indirect: Map<object, RenderFeatureResolvedGpuBuffer>;
|
|
106
|
+
},
|
|
107
|
+
RenderError
|
|
108
|
+
> {
|
|
109
|
+
const vertex = new Map<object, RenderFeatureResolvedGpuBuffer>();
|
|
110
|
+
const index = new Map<object, RenderFeatureResolvedGpuBuffer>();
|
|
111
|
+
const indirect = new Map<object, RenderFeatureResolvedGpuBuffer>();
|
|
112
|
+
for (const draw of descriptor.draws) {
|
|
113
|
+
for (const binding of draw.vertexData) {
|
|
114
|
+
const resource = resolved(snapshot, binding.resource);
|
|
115
|
+
if (resource?.kind !== 'vertex-data') return err(missing(featureIdentity, order));
|
|
116
|
+
vertex.set(binding.resource, {
|
|
117
|
+
buffer: resource.handle,
|
|
118
|
+
size: resource.size,
|
|
119
|
+
physicalUsage: resource.physicalUsage,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (draw.indexData !== undefined) {
|
|
123
|
+
const resource = resolved(snapshot, draw.indexData.resource);
|
|
124
|
+
if (resource?.kind !== 'index-data') return err(missing(featureIdentity, order));
|
|
125
|
+
index.set(draw.indexData.resource, {
|
|
126
|
+
buffer: resource.handle,
|
|
127
|
+
size: resource.size,
|
|
128
|
+
physicalUsage: resource.physicalUsage,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
if (draw.kind === 'draw-indirect' || draw.kind === 'draw-indexed-indirect') {
|
|
132
|
+
const resource = snapshot.resolveGpuBuffer?.(draw.command.buffer);
|
|
133
|
+
if (resource === undefined) return err(missing(featureIdentity, order));
|
|
134
|
+
indirect.set(draw.command.buffer, resource);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return ok({ vertex, index, indirect });
|
|
138
|
+
}
|
|
139
|
+
|
|
78
140
|
export class RenderFeatureRasterGraphProjection<FrameCtx extends RenderGraphFrame> {
|
|
79
141
|
private readonly buffers: RenderFeatureGraphBufferState;
|
|
80
142
|
|
|
@@ -84,10 +146,55 @@ export class RenderFeatureRasterGraphProjection<FrameCtx extends RenderGraphFram
|
|
|
84
146
|
private readonly resolveBindings?: RenderFeatureGraphBindingsResolver<FrameCtx>,
|
|
85
147
|
buffers?: RenderFeatureGraphBufferState,
|
|
86
148
|
private readonly reportError?: (error: RenderError) => void,
|
|
149
|
+
private readonly resolveStandardLighting?: RenderFeatureLightingResolver<FrameCtx>,
|
|
150
|
+
private readonly standardSurfaceAccesses: readonly GraphAccess[] = [],
|
|
87
151
|
) {
|
|
88
152
|
this.buffers = buffers ?? createRenderFeatureGraphBufferState();
|
|
89
153
|
}
|
|
90
154
|
|
|
155
|
+
prepareShadowDraws(
|
|
156
|
+
name: string,
|
|
157
|
+
featureIdentity: string,
|
|
158
|
+
order: number,
|
|
159
|
+
descriptor: RenderFeatureGraphicsPassDescriptor,
|
|
160
|
+
state: RenderFeaturePreparedGraphicsState,
|
|
161
|
+
snapshot: PreparedGraphicsResolvedSnapshot,
|
|
162
|
+
): Result<RenderFeatureShadowDraws<FrameCtx>, RenderGraphError | RenderError> {
|
|
163
|
+
const validated = validateRenderFeatureGraphicsPass(featureIdentity, descriptor, state);
|
|
164
|
+
if (!validated.ok) return validated;
|
|
165
|
+
const imported = this.importDrawBuffers(name, featureIdentity, order, descriptor, snapshot);
|
|
166
|
+
if (!imported.ok) return imported;
|
|
167
|
+
const accesses: GraphAccess[] = [
|
|
168
|
+
...[...imported.value.vertex.values()].map((resource) => ({
|
|
169
|
+
resource,
|
|
170
|
+
usage: 'vertex-read' as const,
|
|
171
|
+
})),
|
|
172
|
+
...[...imported.value.index.values()].map((resource) => ({
|
|
173
|
+
resource,
|
|
174
|
+
usage: 'index-read' as const,
|
|
175
|
+
})),
|
|
176
|
+
...[...imported.value.indirect.values()].map((resource) => ({
|
|
177
|
+
resource,
|
|
178
|
+
usage: 'indirect-read' as const,
|
|
179
|
+
})),
|
|
180
|
+
];
|
|
181
|
+
return ok({
|
|
182
|
+
accesses,
|
|
183
|
+
encode: (pass, frame, resources, view) =>
|
|
184
|
+
this.encode(
|
|
185
|
+
featureIdentity,
|
|
186
|
+
order,
|
|
187
|
+
descriptor,
|
|
188
|
+
snapshot,
|
|
189
|
+
imported.value,
|
|
190
|
+
pass,
|
|
191
|
+
frame,
|
|
192
|
+
resources,
|
|
193
|
+
view,
|
|
194
|
+
),
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
91
198
|
addPass(
|
|
92
199
|
name: string,
|
|
93
200
|
featureIdentity: string,
|
|
@@ -100,11 +207,21 @@ export class RenderFeatureRasterGraphProjection<FrameCtx extends RenderGraphFram
|
|
|
100
207
|
if (!validated.ok) return validated;
|
|
101
208
|
|
|
102
209
|
const accesses = [];
|
|
210
|
+
if (
|
|
211
|
+
descriptor.draws.some((draw) => {
|
|
212
|
+
const pipeline = resolved(snapshot, draw.pipeline);
|
|
213
|
+
return pipeline?.kind === 'pipeline' && pipeline.standardLighting === true;
|
|
214
|
+
})
|
|
215
|
+
)
|
|
216
|
+
accesses.push(...this.standardSurfaceAccesses);
|
|
103
217
|
const colors = [];
|
|
104
218
|
for (const attachment of descriptor.attachments.colors) {
|
|
105
219
|
const target = this.resolveTarget(attachment.resource);
|
|
106
220
|
if (target === undefined) return err(missing(featureIdentity, order));
|
|
107
221
|
accesses.push({ resource: target.view, usage: 'color-attachment' } as const);
|
|
222
|
+
if (target.resolveTarget !== undefined) {
|
|
223
|
+
accesses.push({ resource: target.resolveTarget, usage: 'color-attachment' } as const);
|
|
224
|
+
}
|
|
108
225
|
colors.push({
|
|
109
226
|
view: target.view,
|
|
110
227
|
...(target.resolveTarget === undefined ? {} : { resolveTarget: target.resolveTarget }),
|
|
@@ -175,7 +292,7 @@ export class RenderFeatureRasterGraphProjection<FrameCtx extends RenderGraphFram
|
|
|
175
292
|
resources,
|
|
176
293
|
);
|
|
177
294
|
} catch (failure) {
|
|
178
|
-
|
|
295
|
+
const error =
|
|
179
296
|
failure instanceof Error && typeof (failure as Partial<RenderError>).code === 'string'
|
|
180
297
|
? (failure as RenderError)
|
|
181
298
|
: new RenderFeatureDrawRecordingFailedError(
|
|
@@ -186,8 +303,10 @@ export class RenderFeatureRasterGraphProjection<FrameCtx extends RenderGraphFram
|
|
|
186
303
|
'backend-recording-failed',
|
|
187
304
|
failure instanceof Error ? failure.message : String(failure),
|
|
188
305
|
'renderer-recover',
|
|
189
|
-
)
|
|
190
|
-
);
|
|
306
|
+
);
|
|
307
|
+
this.reportError?.(error);
|
|
308
|
+
// A partially encoded intent is not a submitted transaction.
|
|
309
|
+
throw error;
|
|
191
310
|
}
|
|
192
311
|
},
|
|
193
312
|
});
|
|
@@ -215,31 +334,15 @@ export class RenderFeatureRasterGraphProjection<FrameCtx extends RenderGraphFram
|
|
|
215
334
|
return ok(undefined);
|
|
216
335
|
};
|
|
217
336
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
if (!added.ok) return added;
|
|
228
|
-
}
|
|
229
|
-
if (draw.indexData !== undefined) {
|
|
230
|
-
const resource = resolved(snapshot, draw.indexData.resource);
|
|
231
|
-
if (resource?.kind !== 'index-data') return err(missing(featureIdentity, order));
|
|
232
|
-
const added = add(index, draw.indexData.resource as object, {
|
|
233
|
-
buffer: resource.handle,
|
|
234
|
-
size: resource.size,
|
|
235
|
-
physicalUsage: resource.physicalUsage,
|
|
236
|
-
});
|
|
237
|
-
if (!added.ok) return added;
|
|
238
|
-
}
|
|
239
|
-
if (draw.kind === 'draw-indirect' || draw.kind === 'draw-indexed-indirect') {
|
|
240
|
-
const resource = snapshot.resolveGpuBuffer?.(draw.command.buffer);
|
|
241
|
-
if (resource === undefined) return err(missing(featureIdentity, order));
|
|
242
|
-
const added = add(indirect, draw.command.buffer as object, resource);
|
|
337
|
+
const inputs = resolveRenderFeatureDrawBuffers(featureIdentity, order, descriptor, snapshot);
|
|
338
|
+
if (!inputs.ok) return inputs;
|
|
339
|
+
for (const [source, destination] of [
|
|
340
|
+
[inputs.value.vertex, vertex],
|
|
341
|
+
[inputs.value.index, index],
|
|
342
|
+
[inputs.value.indirect, indirect],
|
|
343
|
+
] as const) {
|
|
344
|
+
for (const [key, resource] of source) {
|
|
345
|
+
const added = add(destination, key, resource);
|
|
243
346
|
if (!added.ok) return added;
|
|
244
347
|
}
|
|
245
348
|
}
|
|
@@ -255,14 +358,25 @@ export class RenderFeatureRasterGraphProjection<FrameCtx extends RenderGraphFram
|
|
|
255
358
|
pass: RhiRenderPassEncoder,
|
|
256
359
|
frame: FrameCtx,
|
|
257
360
|
resources: GraphResourceResolver,
|
|
361
|
+
shadowView?: BindGroup,
|
|
258
362
|
): void {
|
|
259
363
|
for (const draw of descriptor.draws) {
|
|
260
364
|
const pipeline = resolved(snapshot, draw.pipeline);
|
|
261
365
|
if (pipeline?.kind !== 'pipeline') throw missing(featureIdentity, order);
|
|
262
366
|
pass.setPipeline(pipeline.handle);
|
|
367
|
+
if (pipeline.standardLighting === true) {
|
|
368
|
+
const lighting = this.resolveStandardLighting?.(frame, pipeline.handle);
|
|
369
|
+
if (lighting === undefined) throw missing(featureIdentity, order);
|
|
370
|
+
pass.setBindGroup(2, lighting);
|
|
371
|
+
}
|
|
263
372
|
for (const [group, reference] of draw.bindings.entries()) {
|
|
264
373
|
const binding = resolved(snapshot, reference);
|
|
265
374
|
if (binding?.kind !== 'bindings') throw missing(featureIdentity, order);
|
|
375
|
+
const targetGroup = binding.descriptor?.values.group ?? group;
|
|
376
|
+
if (shadowView !== undefined && targetGroup === 0) {
|
|
377
|
+
pass.setBindGroup(0, shadowView, [0, 0]);
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
266
380
|
const resolvedBindings =
|
|
267
381
|
binding.handle ??
|
|
268
382
|
this.resolveBindings?.({ frame, binding, resources, resolveTarget: this.resolveTarget });
|
|
@@ -273,7 +387,6 @@ export class RenderFeatureRasterGraphProjection<FrameCtx extends RenderGraphFram
|
|
|
273
387
|
? resolvedBindings.handle
|
|
274
388
|
: resolvedBindings;
|
|
275
389
|
if (handle === undefined) throw missing(featureIdentity, order);
|
|
276
|
-
const targetGroup = binding.descriptor?.values.group ?? group;
|
|
277
390
|
const dynamicOffsets =
|
|
278
391
|
resolvedBindings !== undefined &&
|
|
279
392
|
typeof resolvedBindings === 'object' &&
|
package/src/features/types.ts
CHANGED
|
@@ -110,6 +110,17 @@ export interface RenderFeature<FrameData> {
|
|
|
110
110
|
}[];
|
|
111
111
|
extract(context: RenderFeatureExtractContext): Result<FrameData, RenderError>;
|
|
112
112
|
plan(data: FrameData, context: RenderFeaturePlanContext): Result<RenderFeaturePlan, RenderError>;
|
|
113
|
+
/**
|
|
114
|
+
* Consume frame-owned producer state only after the compiled graph reached
|
|
115
|
+
* queue submission. The host invokes this callback at most once for the
|
|
116
|
+
* extracted frame and never during declarative planning.
|
|
117
|
+
*/
|
|
118
|
+
onFrameSubmitted?(data: FrameData): void;
|
|
119
|
+
/**
|
|
120
|
+
* Discard frame-owned producer state when graph admission or submission is
|
|
121
|
+
* rejected. This is the symmetric recovery path for onFrameSubmitted.
|
|
122
|
+
*/
|
|
123
|
+
onFrameAborted?(data: FrameData): void;
|
|
113
124
|
}
|
|
114
125
|
|
|
115
126
|
export interface RenderFeatureRecoverInput {
|
|
@@ -81,6 +81,8 @@ export type PostProcessReadSampleType = 'depth';
|
|
|
81
81
|
export interface PostProcessShaderEntry {
|
|
82
82
|
/** Composed WGSL source for the fragment stage (post-naga_oil). */
|
|
83
83
|
readonly source: string;
|
|
84
|
+
/** Fragment entry point selected by the typed graph; defaults to `fs_main`. */
|
|
85
|
+
readonly fragmentEntryPoint?: string | undefined;
|
|
84
86
|
/**
|
|
85
87
|
* Params UBO schema. When undefined, the generic shader has no uniform buffer
|
|
86
88
|
* and the BGL degrades to 2 entries (texture@0 + sampler@1). When present, the
|
|
@@ -134,6 +136,7 @@ export function postProcessShaderModuleLabel(identity: string, source: string):
|
|
|
134
136
|
export function postProcessShaderEntrySignature(entry: PostProcessShaderEntry): string {
|
|
135
137
|
return JSON.stringify({
|
|
136
138
|
source: entry.source,
|
|
139
|
+
fragmentEntryPoint: entry.fragmentEntryPoint,
|
|
137
140
|
params:
|
|
138
141
|
entry.params === undefined
|
|
139
142
|
? undefined
|