@forgeax/engine-render 0.1.7 → 0.1.20
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 +140 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/assembly/backend-contract.d.ts +12 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -1
- package/dist/assembly/factory.d.ts +26 -5
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/host-contract.d.ts +4 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/renderer-frame-transaction.d.ts +39 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -0
- package/dist/assembly/renderer-inspection.d.ts +22 -0
- package/dist/assembly/renderer-inspection.d.ts.map +1 -0
- package/dist/assembly/renderer-lifecycle.d.ts +4 -0
- package/dist/assembly/renderer-lifecycle.d.ts.map +1 -0
- package/dist/authoring.mjs +4 -2
- package/dist/authoring.mjs.map +1 -1
- package/dist/chunk-4XINDLAY.mjs +9404 -0
- package/dist/chunk-4XINDLAY.mjs.map +1 -0
- package/dist/chunk-CDTWTHZR.mjs +752 -0
- package/dist/chunk-CDTWTHZR.mjs.map +1 -0
- package/dist/chunk-FJ6P52EE.mjs +46 -0
- package/dist/chunk-FJ6P52EE.mjs.map +1 -0
- package/dist/chunk-JDWARUOI.mjs +44 -0
- package/dist/chunk-JDWARUOI.mjs.map +1 -0
- package/dist/chunk-M2MP4ZOU.mjs +73 -0
- package/dist/chunk-M2MP4ZOU.mjs.map +1 -0
- package/dist/chunk-PCHBPYML.mjs +385 -0
- package/dist/chunk-PCHBPYML.mjs.map +1 -0
- package/dist/chunk-RXZ3RGOU.mjs +53 -0
- package/dist/chunk-RXZ3RGOU.mjs.map +1 -0
- package/dist/{chunk-YEJIUW7D.mjs → chunk-TBQJOK2L.mjs} +356 -543
- package/dist/chunk-TBQJOK2L.mjs.map +1 -0
- package/dist/{chunk-CQXZC5XI.mjs → chunk-VFPLTKCU.mjs} +79 -69
- package/dist/chunk-VFPLTKCU.mjs.map +1 -0
- package/dist/components/atmosphere.d.ts +9 -0
- package/dist/components/atmosphere.d.ts.map +1 -0
- package/dist/components/camera.d.ts +2 -1
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/fog.d.ts +8 -0
- package/dist/components/fog.d.ts.map +1 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/motion-blur.d.ts +7 -0
- package/dist/components/motion-blur.d.ts.map +1 -0
- package/dist/components/spot-light.d.ts +12 -0
- package/dist/components/spot-light.d.ts.map +1 -1
- package/dist/construct-renderer.d.ts +2 -2
- package/dist/construct-renderer.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +11146 -14507
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/device-scope.d.ts +4 -0
- package/dist/device/device-scope.d.ts.map +1 -1
- package/dist/device/gpu-residency.d.ts +19 -2
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/environment/frame.d.ts +60 -0
- package/dist/environment/frame.d.ts.map +1 -0
- package/dist/environment/generation.d.ts +21 -0
- package/dist/environment/generation.d.ts.map +1 -0
- package/dist/environment/graph.d.ts +4 -0
- package/dist/environment/graph.d.ts.map +1 -0
- package/dist/environment/inspection.d.ts +48 -0
- package/dist/environment/inspection.d.ts.map +1 -0
- package/dist/environment/lifecycle.d.ts +39 -0
- package/dist/environment/lifecycle.d.ts.map +1 -0
- package/dist/environment/signature.d.ts +25 -0
- package/dist/environment/signature.d.ts.map +1 -0
- package/dist/errors/render.d.ts +204 -1
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/camera.d.ts +5 -0
- package/dist/extract/camera.d.ts.map +1 -0
- package/dist/extract/environment.d.ts +74 -0
- package/dist/extract/environment.d.ts.map +1 -0
- package/dist/extract/visibility.d.ts +1 -1
- package/dist/extract/visibility.d.ts.map +1 -1
- package/dist/features/host.d.ts +9 -2
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/motion-blur/motion-blur-feature.d.ts +16 -0
- package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -0
- package/dist/features/motion-blur/motion-blur-params.d.ts +25 -0
- package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -0
- package/dist/features/plan.d.ts +17 -2
- package/dist/features/plan.d.ts.map +1 -1
- package/dist/features/prepared-gpu-work.d.ts +3 -1
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics.d.ts +2 -1
- package/dist/features/prepared-graphics.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +2 -1
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/targets.d.ts +3 -0
- package/dist/features/targets.d.ts.map +1 -1
- package/dist/features/types.d.ts +12 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +7 -1
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +2 -0
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/gpu-usage.d.ts +2 -0
- package/dist/gpu-usage.d.ts.map +1 -1
- package/dist/ibl/skylight-bind-group.d.ts +5 -6
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +24 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +6 -4
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +43 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +2 -0
- package/dist/light-buffer-layout.d.ts +20 -12
- package/dist/light-buffer-layout.d.ts.map +1 -1
- package/dist/materials.d.ts +22 -0
- package/dist/materials.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +16 -9
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-pipeline.d.ts +3 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts +48 -0
- package/dist/pipeline/standard-post.d.ts.map +1 -0
- package/dist/pipeline/standard-profile.d.ts +12 -2
- package/dist/pipeline/standard-profile.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +18 -0
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/record/frame-lighting.d.ts +2 -0
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +137 -6
- 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 +6 -3
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/gpu-timing.d.ts +32 -0
- package/dist/record/gpu-timing.d.ts.map +1 -0
- package/dist/record/main-pass-geometry.d.ts +11 -0
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +9 -6
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts +8 -1
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +2 -0
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +81 -19
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts +1 -11
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +36 -4
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +4 -1
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/render-contract.d.ts +157 -8
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-data.d.ts +10 -6
- package/dist/render-data.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +86 -6
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +84 -8
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +30 -5
- package/dist/render-system.d.ts.map +1 -1
- package/dist/renderer-inspect.d.ts +29 -0
- package/dist/renderer-inspect.d.ts.map +1 -0
- package/dist/scene/render-scene.d.ts +36 -2
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/temporal/coverage.d.ts +42 -0
- package/dist/temporal/coverage.d.ts.map +1 -0
- package/dist/temporal/frame-coordinator.d.ts +99 -0
- package/dist/temporal/frame-coordinator.d.ts.map +1 -0
- package/dist/temporal/frame.d.ts +44 -0
- package/dist/temporal/frame.d.ts.map +1 -0
- package/dist/temporal/gpu.d.ts +39 -0
- package/dist/temporal/gpu.d.ts.map +1 -0
- package/dist/temporal/history.d.ts +37 -0
- package/dist/temporal/history.d.ts.map +1 -0
- package/dist/temporal/index.d.ts +7 -0
- package/dist/temporal/index.d.ts.map +1 -0
- package/dist/temporal/index.mjs +8 -0
- package/dist/temporal/index.mjs.map +1 -0
- package/dist/temporal/inspection.d.ts +36 -0
- package/dist/temporal/inspection.d.ts.map +1 -0
- package/dist/temporal/scene-data-catalog.d.ts +48 -0
- package/dist/temporal/scene-data-catalog.d.ts.map +1 -0
- package/dist/temporal/scene-data.d.ts +43 -0
- package/dist/temporal/scene-data.d.ts.map +1 -0
- package/dist/temporal/standard-scene-data.d.ts +61 -0
- package/dist/temporal/standard-scene-data.d.ts.map +1 -0
- package/dist/temporal/taa-history-resources.d.ts +22 -0
- package/dist/temporal/taa-history-resources.d.ts.map +1 -0
- package/dist/temporal/taa-history-store.d.ts +27 -0
- package/dist/temporal/taa-history-store.d.ts.map +1 -0
- package/dist/temporal/taa-resolve.d.ts +15 -0
- package/dist/temporal/taa-resolve.d.ts.map +1 -0
- package/dist/temporal/temporal-view.d.ts +40 -0
- package/dist/temporal/temporal-view.d.ts.map +1 -0
- package/dist/temporal/transaction.d.ts +9 -0
- package/dist/temporal/transaction.d.ts.map +1 -0
- package/dist/temporal/view.d.ts +56 -0
- package/dist/temporal/view.d.ts.map +1 -0
- package/dist/transmission/backdrop.d.ts +147 -0
- package/dist/transmission/backdrop.d.ts.map +1 -0
- package/dist/transmission/inspection.d.ts +57 -0
- package/dist/transmission/inspection.d.ts.map +1 -0
- package/dist/transmission/oracle.d.ts +42 -0
- package/dist/transmission/oracle.d.ts.map +1 -0
- package/dist/transmission/projection.d.ts +37 -0
- package/dist/transmission/projection.d.ts.map +1 -0
- package/dist/typed-render-graph-primitives.d.ts +30 -2
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/typed-shadow-atlas.d.ts +10 -0
- package/dist/typed-shadow-atlas.d.ts.map +1 -0
- package/dist/typed-shadow-passes.d.ts.map +1 -1
- package/dist/volume/capability.d.ts +57 -0
- package/dist/volume/capability.d.ts.map +1 -0
- package/dist/volume/component.d.ts +61 -0
- package/dist/volume/component.d.ts.map +1 -0
- package/dist/volume/extract.d.ts +11 -0
- package/dist/volume/extract.d.ts.map +1 -0
- package/dist/volume/inspection.d.ts +38 -0
- package/dist/volume/inspection.d.ts.map +1 -0
- package/dist/volume/passes.d.ts +38 -0
- package/dist/volume/passes.d.ts.map +1 -0
- package/dist/volume/recovery.d.ts +38 -0
- package/dist/volume/recovery.d.ts.map +1 -0
- package/dist/volume/resources.d.ts +57 -0
- package/dist/volume/resources.d.ts.map +1 -0
- package/dist/volume/temporal.d.ts +35 -0
- package/dist/volume/temporal.d.ts.map +1 -0
- package/package.json +24 -19
- package/src/__tests__/ai-user-cold-start.integration.test.ts +59 -0
- package/src/__tests__/ai-user-public-surface.test-d.ts +45 -0
- package/src/__tests__/bloom-exact-zero.unit.test.ts +202 -0
- package/src/__tests__/bloom-lifecycle.integration.test.ts +125 -0
- package/src/__tests__/construct-renderer-identity.unit.test.ts +4 -3
- package/src/__tests__/detached-inspection.integration.test.ts +177 -0
- package/src/__tests__/environment-fog-lanes.integration.test.ts +219 -0
- package/src/__tests__/environment-generation.integration.test.ts +141 -0
- package/src/__tests__/environment-selection.unit.test.ts +245 -0
- package/src/__tests__/factory-contract.integration.test.ts +1380 -9
- package/src/__tests__/frame-plan-contract.unit.test.ts +90 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +7 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +74 -22
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +37 -0
- package/src/__tests__/gpu-scene.unit.test.ts +10 -0
- package/src/__tests__/injection-kind-owner.test-d.ts +2 -1
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -14
- package/src/__tests__/material-contract-inventory.unit.test.ts +62 -0
- package/src/__tests__/material-cooked-projection.unit.test.ts +18 -146
- package/src/__tests__/materials-transmission-validation.unit.test.ts +36 -0
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +1 -1
- package/src/__tests__/morph-feature-plan.unit.test.ts +7 -0
- package/src/__tests__/motion-blur.pixel.integration.test.ts +121 -0
- package/src/__tests__/public-surface.test-d.ts +15 -1
- package/src/__tests__/render-error-code-owner.test-d.ts +14 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +11 -2
- package/src/__tests__/render-error-exhaustive.test-d.ts +3 -0
- package/src/__tests__/render-feature-errors.unit.test.ts +33 -3
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +44 -0
- package/src/__tests__/render-feature-plan.test-d.ts +22 -89
- package/src/__tests__/render-scene-projection.unit.test.ts +28 -0
- package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +26 -0
- package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +21 -0
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +423 -1
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +405 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +22 -0
- package/src/__tests__/scene-data-catalog.unit.test.ts +59 -0
- package/src/__tests__/scene-data-consumer.integration.test.ts +67 -0
- package/src/__tests__/scene-data-contract.test-d.ts +35 -0
- package/src/__tests__/scene-data-inspection.unit.test.ts +41 -0
- package/src/__tests__/scene-data-public-surface.test-d.ts +34 -0
- package/src/__tests__/shader-manifest-fixture.ts +111 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +123 -0
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +24 -3
- package/src/__tests__/standard-pipeline.dawn.test.ts +15 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +543 -1
- package/src/__tests__/standard-profile-oracle.unit.test.ts +12 -2
- package/src/__tests__/standard-temporal-producer.integration.test.ts +35 -0
- package/src/__tests__/surface-configuration.unit.test.ts +211 -12
- package/src/__tests__/taa-transaction.integration.test.ts +30 -0
- package/src/__tests__/temporal-admission.integration.test.ts +40 -0
- package/src/__tests__/temporal-coverage.unit.test.ts +35 -0
- package/src/__tests__/temporal-demand.unit.test.ts +44 -0
- package/src/__tests__/temporal-frame-coordinator.unit.test.ts +64 -0
- package/src/__tests__/temporal-graph-topology.unit.test.ts +51 -0
- package/src/__tests__/temporal-history-lifecycle.unit.test.ts +170 -0
- package/src/__tests__/temporal-performance.integration.test.ts +615 -0
- package/src/__tests__/temporal-reset-matrix.unit.test.ts +97 -0
- package/src/__tests__/temporal-transaction.integration.test.ts +60 -0
- package/src/__tests__/temporal-view.unit.test.ts +152 -0
- package/src/__tests__/transmission-prewarm.unit.test.ts +93 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +230 -1
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +25 -1
- package/src/__tests__/urp-pipeline.unit.test.ts +4 -3
- package/src/__tests__/visibility-extract.integration.test.ts +27 -1
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +10 -0
- package/src/__tests__/volume-optics-oracle.unit.test.ts +85 -0
- package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +655 -0
- package/src/__tests__/volumetric-fog-component.unit.test.ts +71 -0
- package/src/__tests__/volumetric-fog-composite-stage-readback.dawn.test.ts +376 -0
- package/src/__tests__/volumetric-fog-errors.unit.test.ts +51 -0
- package/src/__tests__/volumetric-fog-inspection.unit.test.ts +77 -0
- package/src/__tests__/volumetric-fog-light-capability.unit.test.ts +19 -0
- package/src/__tests__/volumetric-fog-light-consumers.integration.test.ts +18 -0
- package/src/__tests__/volumetric-fog-light-errors.unit.test.ts +17 -0
- package/src/__tests__/volumetric-fog-light-topology.unit.test.ts +21 -0
- package/src/__tests__/volumetric-fog-light-transaction.integration.test.ts +53 -0
- package/src/__tests__/volumetric-fog-m9-watcher.integration.test.ts +27 -0
- package/src/__tests__/volumetric-fog-point-light-owner.integration.test.ts +44 -0
- package/src/__tests__/volumetric-fog-point-spot-accumulation.integration.test.ts +49 -0
- package/src/__tests__/volumetric-fog-point-spot-contract.unit.test.ts +28 -0
- package/src/__tests__/volumetric-fog-point-spot-lkg.integration.test.ts +65 -0
- package/src/__tests__/volumetric-fog-point-spot-selection.integration.test.ts +49 -0
- package/src/__tests__/volumetric-fog-point-spot-temporal.unit.test.ts +55 -0
- package/src/__tests__/volumetric-fog-projector-contract.unit.test.ts +22 -0
- package/src/__tests__/volumetric-fog-projector-inspection.unit.test.ts +12 -0
- package/src/__tests__/volumetric-fog-projector-surface-volume.integration.test.ts +11 -0
- package/src/__tests__/volumetric-fog-projector-transaction.integration.test.ts +26 -0
- package/src/__tests__/volumetric-fog-recovery.integration.test.ts +47 -0
- package/src/__tests__/volumetric-fog-selected-light-resolution.integration.test.ts +63 -0
- package/src/__tests__/volumetric-fog-spot-closure.integration.test.ts +26 -0
- package/src/__tests__/volumetric-fog-spot-contract.test-d.ts +21 -0
- package/src/__tests__/volumetric-fog-spot-contract.unit.test.ts +27 -0
- package/src/__tests__/volumetric-fog-spot-frame-optics.integration.test.ts +14 -0
- package/src/__tests__/volumetric-fog-spot-optics.integration.test.ts +29 -0
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +550 -0
- package/src/__tests__/volumetric-fog-temporal-selected-light.unit.test.ts +33 -0
- package/src/__tests__/volumetric-fog-temporal.unit.test.ts +45 -0
- package/src/__tests__/volumetric-fog-topology.unit.test.ts +237 -0
- package/src/__tests__/volumetric-fog-transparent.integration.test.ts +27 -0
- package/src/assembly/backend-contract.ts +47 -1
- package/src/assembly/factory.ts +1480 -505
- package/src/assembly/host-contract.ts +4 -0
- package/src/assembly/renderer-frame-transaction.ts +75 -0
- package/src/assembly/renderer-inspection.ts +112 -0
- package/src/assembly/renderer-lifecycle.ts +6 -0
- package/src/components/__tests__/motion-blur.unit.test.ts +14 -0
- package/src/components/__tests__/schema-contract.unit.test.ts +6 -1
- package/src/components/atmosphere.ts +10 -0
- package/src/components/camera.ts +2 -1
- package/src/components/fog.ts +9 -0
- package/src/components/index.ts +3 -0
- package/src/components/light-helpers.ts +4 -0
- package/src/components/motion-blur.ts +8 -0
- package/src/components/spot-light.ts +22 -3
- package/src/construct-renderer.ts +40 -3
- package/src/device/device-scope.ts +15 -1
- package/src/device/gpu-residency.ts +168 -58
- package/src/environment/frame.ts +185 -0
- package/src/environment/generation.ts +23 -0
- package/src/environment/graph.ts +9 -0
- package/src/environment/inspection.ts +87 -0
- package/src/environment/lifecycle.ts +250 -0
- package/src/environment/signature.ts +55 -0
- package/src/errors/render.ts +404 -1
- package/src/extract/camera.ts +78 -0
- package/src/extract/environment.ts +171 -0
- package/src/extract/visibility.ts +38 -19
- package/src/features/host.ts +36 -5
- package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +67 -0
- package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +53 -0
- package/src/features/motion-blur/motion-blur-feature.ts +119 -0
- package/src/features/motion-blur/motion-blur-params.ts +89 -0
- package/src/features/plan.ts +32 -3
- package/src/features/prepared-gpu-work.ts +21 -6
- package/src/features/prepared-graphics.ts +2 -1
- package/src/features/render-graph-raster.ts +2 -1
- package/src/features/targets.ts +24 -2
- package/src/features/types.ts +13 -0
- package/src/fullscreen-post-process-pass.ts +34 -4
- package/src/gpu-scene.ts +24 -0
- package/src/gpu-usage.ts +2 -0
- package/src/ibl/skylight-bind-group.ts +30 -38
- package/src/index.ts +104 -7
- package/src/inspection-types.ts +48 -0
- package/src/internal.ts +5 -0
- package/src/light-buffer-layout.ts +59 -26
- package/src/materials.ts +119 -24
- package/src/pbr-pipeline.ts +91 -29
- package/src/pipeline/standard-forward-lane.ts +178 -101
- package/src/pipeline/standard-pipeline.ts +176 -105
- package/src/pipeline/standard-post.ts +373 -0
- package/src/pipeline/standard-profile.ts +26 -3
- package/src/pipeline-builder.ts +102 -12
- package/src/pipeline-spec.ts +9 -0
- package/src/plugin.ts +2 -0
- package/src/record/__tests__/fullscreen-temporal-routing.unit.test.ts +25 -0
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +47 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +12 -1
- package/src/record/__tests__/material-pipeline-pending-cache.unit.test.ts +22 -0
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +75 -0
- package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +67 -0
- package/src/record/__tests__/temporal-payload.unit.test.ts +164 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +127 -0
- package/src/record/frame-lighting.ts +103 -89
- package/src/record/frame-snapshot.ts +170 -6
- package/src/record/frame-targets.ts +21 -8
- package/src/record/frame.ts +1014 -7
- package/src/record/gpu-timing.ts +224 -0
- package/src/record/main-pass-geometry.ts +86 -40
- package/src/record/main-pass-material.ts +120 -68
- package/src/record/main-pass-sprite-draws.ts +78 -101
- package/src/record/main-pass.ts +77 -4
- package/src/record/mesh-ssbo.ts +22 -3
- package/src/record/render-context.ts +194 -23
- package/src/record/shadow-pass.ts +197 -58
- package/src/record/skybox-post-pass.ts +97 -41
- package/src/record/typed-frame-graph.ts +704 -30
- package/src/record/view-ubo.ts +52 -4
- package/src/render-contract.ts +181 -6
- package/src/render-data.ts +50 -22
- package/src/render-graph-primitives.ts +18 -1
- package/src/render-pipeline.ts +144 -27
- package/src/render-system-extract.ts +522 -72
- package/src/render-system.ts +561 -41
- package/src/renderer-inspect.ts +66 -0
- package/src/scene/render-scene.ts +252 -7
- package/src/temporal/__tests__/taa-history-resources.unit.test.ts +45 -0
- package/src/temporal/coverage.ts +76 -0
- package/src/temporal/frame-coordinator.ts +311 -0
- package/src/temporal/frame.ts +128 -0
- package/src/temporal/gpu.ts +287 -0
- package/src/temporal/history.ts +92 -0
- package/src/temporal/index.ts +6 -0
- package/src/temporal/inspection.ts +97 -0
- package/src/temporal/scene-data-catalog.ts +200 -0
- package/src/temporal/scene-data.ts +149 -0
- package/src/temporal/standard-scene-data.ts +182 -0
- package/src/temporal/taa-history-resources.ts +128 -0
- package/src/temporal/taa-history-store.ts +79 -0
- package/src/temporal/taa-resolve.ts +34 -0
- package/src/temporal/temporal-view.ts +169 -0
- package/src/temporal/transaction.ts +17 -0
- package/src/temporal/view.ts +161 -0
- package/src/transmission/__tests__/capability.unit.test.ts +83 -0
- package/src/transmission/__tests__/composition.integration.test.ts +161 -0
- package/src/transmission/__tests__/inspection.unit.test.ts +241 -0
- package/src/transmission/__tests__/lifecycle.integration.test.ts +96 -0
- package/src/transmission/__tests__/oracle.unit.test.ts +131 -0
- package/src/transmission/__tests__/projection.unit.test.ts +71 -0
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +437 -0
- package/src/transmission/__tests__/transmission-backdrop-topology.unit.test.ts +109 -0
- package/src/transmission/__tests__/transmission-backdrop.dawn.test.ts +105 -0
- package/src/transmission/backdrop.ts +572 -0
- package/src/transmission/inspection.ts +190 -0
- package/src/transmission/oracle.ts +141 -0
- package/src/transmission/projection.ts +83 -0
- package/src/typed-render-graph-primitives.ts +194 -11
- package/src/typed-shadow-atlas.ts +17 -0
- package/src/typed-shadow-passes.ts +6 -5
- package/src/volume/capability.ts +173 -0
- package/src/volume/component.ts +110 -0
- package/src/volume/extract.ts +21 -0
- package/src/volume/inspection.ts +78 -0
- package/src/volume/passes.ts +680 -0
- package/src/volume/recovery.ts +86 -0
- package/src/volume/resources.ts +236 -0
- package/src/volume/temporal.ts +89 -0
- package/dist/__tests__/authoring-path.unit.test.d.ts +0 -2
- package/dist/__tests__/authoring-path.unit.test.d.ts.map +0 -1
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +0 -2
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +0 -1
- package/dist/__tests__/callback-inference.test-d.d.ts +0 -2
- package/dist/__tests__/callback-inference.test-d.d.ts.map +0 -1
- package/dist/__tests__/cluster-binner.test.d.ts +0 -2
- package/dist/__tests__/cluster-binner.test.d.ts.map +0 -1
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +0 -2
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +0 -1
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +0 -2
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +0 -1
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +0 -2
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +0 -1
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +0 -2
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +0 -1
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +0 -2
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +0 -1
- package/dist/__tests__/factory-contract.integration.test.d.ts +0 -2
- package/dist/__tests__/factory-contract.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/frame-observation.contract.test.d.ts +0 -2
- package/dist/__tests__/frame-observation.contract.test.d.ts.map +0 -1
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +0 -2
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +0 -1
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +0 -2
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +0 -6
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +0 -18
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view-reference.d.ts +0 -15
- package/dist/__tests__/gpu-driven-view-reference.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +0 -7
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +0 -2
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +0 -1
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +0 -2
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +0 -1
- package/dist/__tests__/injection-kind-owner.test-d.d.ts +0 -2
- package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +0 -2
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts +0 -2
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts +0 -2
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts +0 -2
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +0 -2
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +0 -1
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +0 -2
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-stride-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +0 -2
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +0 -1
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +0 -2
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +0 -2
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +0 -1
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts +0 -2
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +0 -1
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +0 -2
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +0 -1
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +0 -2
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-default-off.test.d.ts +0 -2
- package/dist/__tests__/profiler-default-off.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-phase-catalog.test.d.ts +0 -2
- package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-phase-integration.test.d.ts +0 -2
- package/dist/__tests__/profiler-phase-integration.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-phase-token.test.d.ts +0 -2
- package/dist/__tests__/profiler-phase-token.test.d.ts.map +0 -1
- package/dist/__tests__/public-surface.test-d.d.ts +0 -2
- package/dist/__tests__/public-surface.test-d.d.ts.map +0 -1
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-error-code-owner.test-d.d.ts +0 -2
- package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +0 -2
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts +0 -2
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-assembly.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-context.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-context.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-contract.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-contract.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-docs.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-errors.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +0 -2
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-plan.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-plan.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-plan.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-retry.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +0 -7
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +0 -1
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +0 -2
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +0 -2
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-hzb-gpu.d.ts +0 -7
- package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +0 -1
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts +0 -2
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +0 -2
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts +0 -2
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +0 -12
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +0 -1
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +0 -2
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +0 -2
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/render-scene-projection.unit.test.d.ts +0 -2
- package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +0 -1
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +0 -2
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +0 -1
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +0 -2
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +0 -1
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +0 -2
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +0 -1
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +0 -2
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +0 -1
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ssao-config.unit.test.d.ts +0 -2
- package/dist/__tests__/ssao-config.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/standard-descriptors.test-d.d.ts +0 -2
- package/dist/__tests__/standard-descriptors.test-d.d.ts.map +0 -1
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts +0 -2
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/standard-pipeline.integration.test.d.ts +0 -2
- package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +0 -1
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +0 -2
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +0 -1
- package/dist/__tests__/surface-configuration.unit.test.d.ts +0 -2
- package/dist/__tests__/surface-configuration.unit.test.d.ts.map +0 -1
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +0 -2
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +0 -1
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +0 -2
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +0 -1
- package/dist/__tests__/urp-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +0 -2
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-extract.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-extract.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-extract.perf.test.d.ts +0 -2
- package/dist/__tests__/visibility-extract.perf.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-instances.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-instances.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-public-surface.test-d.d.ts +0 -2
- package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +0 -1
- package/dist/__tests__/visibility-resolver.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +0 -1
- package/dist/__tests__/vocabulary.unit.test.d.ts +0 -2
- package/dist/__tests__/vocabulary.unit.test.d.ts.map +0 -1
- package/dist/chunk-CQXZC5XI.mjs.map +0 -1
- package/dist/chunk-HCOGPHKS.mjs +0 -93
- package/dist/chunk-HCOGPHKS.mjs.map +0 -1
- package/dist/chunk-YEJIUW7D.mjs.map +0 -1
- package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +0 -2
- package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +0 -2
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/schema-contract.unit.test.d.ts +0 -2
- package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/schema-parity.unit.test.d.ts +0 -2
- package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts +0 -2
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/bounds.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +0 -2
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +0 -2
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/points-lines.bench.d.ts +0 -2
- package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +0 -1
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +0 -2
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +0 -2
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +0 -2
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +0 -2
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts +0 -2
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +0 -1
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
type RhiQueue,
|
|
8
8
|
type RhiRenderPassEncoder,
|
|
9
9
|
} from '@forgeax/engine-rhi';
|
|
10
|
-
import type { PassSelector } from '@forgeax/engine-types';
|
|
10
|
+
import type { MaterialRenderState, PassSelector } from '@forgeax/engine-types';
|
|
11
11
|
import { GpuBuffer } from '../gpu-resource';
|
|
12
12
|
import {
|
|
13
13
|
GPU_BUFFER_USAGE_COPY_DST,
|
|
@@ -16,7 +16,11 @@ import {
|
|
|
16
16
|
} from '../gpu-usage';
|
|
17
17
|
import { assembleMaterialWithSkylightEntries } from '../ibl/skylight-bind-group';
|
|
18
18
|
import type { InstanceBufferCacheEntry } from '../instance-buffer-cache';
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
buildPbrMaterialUserRegionEntries,
|
|
21
|
+
SHADOW_CASTER_SHADER_ID,
|
|
22
|
+
shadowCasterVariantSet,
|
|
23
|
+
} from '../pbr-pipeline';
|
|
20
24
|
import type { DispatchEntry, ExtractedLights } from '../render-system-extract';
|
|
21
25
|
import { matchPass } from '../systems/pass-selector';
|
|
22
26
|
import { worldEntityKey } from './frame-snapshot';
|
|
@@ -25,6 +29,8 @@ import {
|
|
|
25
29
|
getOrCreatePerEntity,
|
|
26
30
|
MAX_UNIFORM_INSTANCES,
|
|
27
31
|
MESH_PER_ENTITY_STRIDE,
|
|
32
|
+
MESH_SSBO_BYTES,
|
|
33
|
+
MESH_UBO_FULL_ARRAY_BYTES,
|
|
28
34
|
packInstanceStorageBuffer,
|
|
29
35
|
} from './mesh-ssbo';
|
|
30
36
|
import type { _InternalRenderPipelineContext } from './render-context';
|
|
@@ -75,6 +81,7 @@ function ensureTypedShadowViewBg(
|
|
|
75
81
|
const { runtime, frameState, pipelineState } = c;
|
|
76
82
|
const shadowSampler = pipelineState.perPassResources.shadowSampler;
|
|
77
83
|
if (shadowSampler === null) return null;
|
|
84
|
+
const projectorAvailable = pipelineState.projectorAvailable !== false;
|
|
78
85
|
try {
|
|
79
86
|
return getOrCreateFromChain(
|
|
80
87
|
frameState.viewBindGroupCache,
|
|
@@ -88,6 +95,9 @@ function ensureTypedShadowViewBg(
|
|
|
88
95
|
pipelineState.shadowParamsBuffer,
|
|
89
96
|
pipelineState.shadowCasterCascadeBuffer,
|
|
90
97
|
pipelineState.shadowFallbackTextureView,
|
|
98
|
+
...(projectorAvailable
|
|
99
|
+
? [pipelineState.defaultWhiteTextureView, pipelineState.defaultSampler]
|
|
100
|
+
: []),
|
|
91
101
|
pipelineState.pointsLinesViewBuffer ?? pipelineState.viewUniformBuffer,
|
|
92
102
|
],
|
|
93
103
|
variant,
|
|
@@ -159,6 +169,21 @@ function ensureTypedShadowViewBg(
|
|
|
159
169
|
},
|
|
160
170
|
},
|
|
161
171
|
},
|
|
172
|
+
...(projectorAvailable
|
|
173
|
+
? [
|
|
174
|
+
{
|
|
175
|
+
binding: 11,
|
|
176
|
+
resource: {
|
|
177
|
+
kind: 'textureView' as const,
|
|
178
|
+
value: pipelineState.defaultWhiteTextureView,
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
binding: 12,
|
|
183
|
+
resource: { kind: 'sampler' as const, value: pipelineState.defaultSampler },
|
|
184
|
+
},
|
|
185
|
+
]
|
|
186
|
+
: []),
|
|
162
187
|
],
|
|
163
188
|
});
|
|
164
189
|
if (!created.ok) throw created.error;
|
|
@@ -175,11 +200,26 @@ function ensureTypedShadowViewBg(
|
|
|
175
200
|
}
|
|
176
201
|
}
|
|
177
202
|
|
|
178
|
-
|
|
179
|
-
|
|
203
|
+
interface ShadowDispatch {
|
|
204
|
+
readonly materialShaderId: string;
|
|
205
|
+
readonly renderState: MaterialRenderState | undefined;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
type ShadowDispatchMap = ReadonlyMap<number, ReadonlyMap<number, ShadowDispatch>>;
|
|
209
|
+
|
|
210
|
+
function shadowShaderMap(c: _InternalRenderPipelineContext): ShadowDispatchMap {
|
|
211
|
+
const shaders = new Map<number, Map<number, ShadowDispatch>>();
|
|
180
212
|
for (const entry of c.dispatch) {
|
|
181
213
|
if (entry.tags.LightMode === 'ShadowCaster' && entry.materialShaderId !== undefined) {
|
|
182
|
-
shaders.
|
|
214
|
+
let byMaterial = shaders.get(entry.renderableIndex);
|
|
215
|
+
if (byMaterial === undefined) {
|
|
216
|
+
byMaterial = new Map<number, ShadowDispatch>();
|
|
217
|
+
shaders.set(entry.renderableIndex, byMaterial);
|
|
218
|
+
}
|
|
219
|
+
byMaterial.set(entry.materialHandle, {
|
|
220
|
+
materialShaderId: entry.materialShaderId,
|
|
221
|
+
renderState: entry.renderState,
|
|
222
|
+
});
|
|
183
223
|
}
|
|
184
224
|
}
|
|
185
225
|
return shaders;
|
|
@@ -188,17 +228,97 @@ function shadowShaderMap(c: _InternalRenderPipelineContext): ReadonlyMap<number,
|
|
|
188
228
|
function shadowPipeline(c: _InternalRenderPipelineContext): RenderPipeline | null {
|
|
189
229
|
return (
|
|
190
230
|
c.runtime.getMaterialShaderPipeline?.(
|
|
191
|
-
|
|
231
|
+
SHADOW_CASTER_SHADER_ID,
|
|
192
232
|
false,
|
|
193
233
|
undefined,
|
|
194
234
|
'triangle-list',
|
|
195
235
|
undefined,
|
|
236
|
+
shadowCasterVariantSet(c.runtime.device.caps.storageBuffer, false),
|
|
237
|
+
'shadow-caster',
|
|
238
|
+
undefined,
|
|
239
|
+
undefined,
|
|
240
|
+
undefined,
|
|
241
|
+
undefined,
|
|
242
|
+
undefined,
|
|
243
|
+
undefined,
|
|
244
|
+
undefined,
|
|
196
245
|
undefined,
|
|
246
|
+
'pbr',
|
|
247
|
+
) ?? null
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function skinnedShadowPipeline(
|
|
252
|
+
c: _InternalRenderPipelineContext,
|
|
253
|
+
entry: _InternalRenderPipelineContext['validatedOrdered'][number],
|
|
254
|
+
): RenderPipeline | null {
|
|
255
|
+
return (
|
|
256
|
+
c.runtime.getMaterialShaderPipeline?.(
|
|
257
|
+
SHADOW_CASTER_SHADER_ID,
|
|
258
|
+
false,
|
|
259
|
+
undefined,
|
|
260
|
+
entry.mesh.submeshes[0]?.topology ?? 'triangle-list',
|
|
261
|
+
entry.mesh.indexFormat,
|
|
262
|
+
shadowCasterVariantSet(c.runtime.device.caps.storageBuffer, true),
|
|
197
263
|
'shadow-caster',
|
|
264
|
+
undefined,
|
|
265
|
+
1,
|
|
266
|
+
undefined,
|
|
267
|
+
undefined,
|
|
268
|
+
undefined,
|
|
269
|
+
undefined,
|
|
270
|
+
entry.mesh.layoutProjection,
|
|
271
|
+
undefined,
|
|
272
|
+
'pbr-skin',
|
|
198
273
|
) ?? null
|
|
199
274
|
);
|
|
200
275
|
}
|
|
201
276
|
|
|
277
|
+
function skinnedShadowMeshBindGroup(
|
|
278
|
+
c: _InternalRenderPipelineContext,
|
|
279
|
+
entry: _InternalRenderPipelineContext['validatedOrdered'][number],
|
|
280
|
+
): BindGroup | null {
|
|
281
|
+
const skin = entry.source.skin;
|
|
282
|
+
const layout = c.pipelineState.pbrSkinMeshBindGroupLayout;
|
|
283
|
+
const allocator = c.pipelineState.skinPaletteAllocator;
|
|
284
|
+
if (skin === undefined || layout === null || allocator === null) return null;
|
|
285
|
+
return getOrCreateFromChain(
|
|
286
|
+
c.frameState.meshBindGroupCache,
|
|
287
|
+
[c.pipelineState.meshStorageBuffer.buffer, skin.buffer],
|
|
288
|
+
'shadow-pbr-skin-mesh',
|
|
289
|
+
() => {
|
|
290
|
+
const created = c.runtime.device.createBindGroup({
|
|
291
|
+
label: 'shadow-pbr-skin-mesh-bg',
|
|
292
|
+
layout,
|
|
293
|
+
entries: [
|
|
294
|
+
{
|
|
295
|
+
binding: 0,
|
|
296
|
+
resource: {
|
|
297
|
+
kind: 'buffer',
|
|
298
|
+
value: {
|
|
299
|
+
buffer: c.pipelineState.meshStorageBuffer.buffer,
|
|
300
|
+
size: c.runtime.device.caps.storageBuffer
|
|
301
|
+
? MESH_SSBO_BYTES
|
|
302
|
+
: MESH_UBO_FULL_ARRAY_BYTES,
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
binding: 1,
|
|
308
|
+
resource: {
|
|
309
|
+
kind: 'buffer',
|
|
310
|
+
value: { buffer: skin.buffer, size: allocator.bindingWindowBytes },
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
],
|
|
314
|
+
});
|
|
315
|
+
if (!created.ok) throw created.error;
|
|
316
|
+
return created.value;
|
|
317
|
+
},
|
|
318
|
+
c.bindGroupCounts,
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
|
|
202
322
|
export function encodeDirectionalShadowPass(
|
|
203
323
|
c: _InternalRenderPipelineContext,
|
|
204
324
|
pass: RhiRenderPassEncoder,
|
|
@@ -402,8 +522,8 @@ export function buildMatchedMaterialHandlesByRenderable(
|
|
|
402
522
|
* groups (@group 0/1) are already set by the caller; this loop owns @group
|
|
403
523
|
* 2/3 + the vertex/index/pipeline de-dup state. Receives the explicit
|
|
404
524
|
* `_InternalRenderPipelineContext` (`c`) plus the caller-resolved shadow
|
|
405
|
-
* pipeline, mesh bind group, pass-selector match set, and per-
|
|
406
|
-
*
|
|
525
|
+
* pipeline, mesh bind group, pass-selector match set, and per-material
|
|
526
|
+
* ShadowCaster dispatch map so no cross-function mutable state is introduced.
|
|
407
527
|
*/
|
|
408
528
|
function recordShadowCasterDraws(
|
|
409
529
|
c: _InternalRenderPipelineContext,
|
|
@@ -411,7 +531,7 @@ function recordShadowCasterDraws(
|
|
|
411
531
|
shadowPipeline: RenderPipeline,
|
|
412
532
|
shadowMeshBindGroup: BindGroup,
|
|
413
533
|
matchedIndices: Set<number> | null,
|
|
414
|
-
|
|
534
|
+
shadowDispatchByRenderableIdx: ShadowDispatchMap,
|
|
415
535
|
): void {
|
|
416
536
|
const { runtime, pipelineState, validatedOrdered } = c;
|
|
417
537
|
// M-3 / w12: vertexBuffer/indexBuffer state locals migrate to GpuBuffer
|
|
@@ -434,37 +554,14 @@ function recordShadowCasterDraws(
|
|
|
434
554
|
// feat-20260609 M2: skip entities that don't match the pass selector.
|
|
435
555
|
if (matchedIndices !== null && !matchedIndices.has(entry.renderableIndex)) continue;
|
|
436
556
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
if (
|
|
445
|
-
entryShadowShaderId !== undefined &&
|
|
446
|
-
entryShadowShaderId !== 'forgeax::default-shadow-caster'
|
|
447
|
-
) {
|
|
448
|
-
// Custom ShadowCaster PSO; same cache path as the default above
|
|
449
|
-
// (passKind 'shadow-caster'). On a cache miss (async build in
|
|
450
|
-
// flight / build failure) fall back to the default PSO so the
|
|
451
|
-
// caster still writes depth rather than dropping its draw.
|
|
452
|
-
entryShadowPipeline =
|
|
453
|
-
runtime.getMaterialShaderPipeline?.(
|
|
454
|
-
entryShadowShaderId,
|
|
455
|
-
false, // isHdr — shadow depth pass is always LDR
|
|
456
|
-
undefined, // renderState
|
|
457
|
-
'triangle-list', // topology — shadow PSO targets triangle-list
|
|
458
|
-
undefined, // indexFormat
|
|
459
|
-
undefined, // variantSet — shadow caster has no variant axes
|
|
460
|
-
'shadow-caster', // passKind
|
|
461
|
-
) ?? shadowPipeline;
|
|
462
|
-
}
|
|
463
|
-
if (entryShadowPipeline !== shadowLastPipeline && entryShadowPipeline !== null) {
|
|
464
|
-
shadowPass.setPipeline(entryShadowPipeline);
|
|
465
|
-
shadowLastPipeline = entryShadowPipeline;
|
|
557
|
+
if (entry.source.skin !== undefined) {
|
|
558
|
+
const skinPipeline = skinnedShadowPipeline(c, entry);
|
|
559
|
+
if (skinPipeline === null) continue;
|
|
560
|
+
if (skinPipeline !== shadowLastPipeline) {
|
|
561
|
+
shadowPass.setPipeline(skinPipeline);
|
|
562
|
+
shadowLastPipeline = skinPipeline;
|
|
563
|
+
}
|
|
466
564
|
}
|
|
467
|
-
|
|
468
565
|
// feat-20260604-mesh-topology-debug-draw M5 / w14 (AC-09, D-A6): the
|
|
469
566
|
// shadow caster PSO is triangle-list; it only projects triangle faces.
|
|
470
567
|
// line-list / line-strip / point-list meshes have no surface to cast a
|
|
@@ -494,7 +591,16 @@ function recordShadowCasterDraws(
|
|
|
494
591
|
}
|
|
495
592
|
}
|
|
496
593
|
|
|
497
|
-
|
|
594
|
+
if (entry.source.skin !== undefined) {
|
|
595
|
+
const skinMeshBindGroup = skinnedShadowMeshBindGroup(c, entry);
|
|
596
|
+
if (skinMeshBindGroup === null) continue;
|
|
597
|
+
shadowPass.setBindGroup(2, skinMeshBindGroup, [
|
|
598
|
+
i * MESH_PER_ENTITY_STRIDE,
|
|
599
|
+
entry.source.skin.byteOffset,
|
|
600
|
+
]);
|
|
601
|
+
} else {
|
|
602
|
+
shadowPass.setBindGroup(2, shadowMeshBindGroup, [i * MESH_PER_ENTITY_STRIDE]);
|
|
603
|
+
}
|
|
498
604
|
|
|
499
605
|
// C1 + C2 (w12): per-entity instance buffer + instanceCount
|
|
500
606
|
let shadowInstanceBuffer: Buffer = pipelineState.identityInstanceBuffer;
|
|
@@ -609,6 +715,48 @@ function recordShadowCasterDraws(
|
|
|
609
715
|
if (sm.topology !== 'triangle-list' && sm.topology !== 'triangle-strip') {
|
|
610
716
|
continue;
|
|
611
717
|
}
|
|
718
|
+
|
|
719
|
+
// Resolve the ShadowCaster PSO for the material bound to this submesh.
|
|
720
|
+
// Built-in materials normally use the shared vertex-only caster, but an
|
|
721
|
+
// authored `cullMode:'none'`/`frontFace` must still reach that PSO so
|
|
722
|
+
// two-sided casters (such as the Three.js teapot) populate the atlas
|
|
723
|
+
// from both faces. Custom ShadowCaster shaders retain their own path.
|
|
724
|
+
const submeshMaterial = entry.source.materials[sm.materialSlot] ?? entry.source.material;
|
|
725
|
+
const shadowDispatch = shadowDispatchByRenderableIdx
|
|
726
|
+
.get(entry.renderableIndex)
|
|
727
|
+
?.get(submeshMaterial.materialHandle ?? 0);
|
|
728
|
+
const entryShadowShaderId = shadowDispatch?.materialShaderId;
|
|
729
|
+
const entryShadowRenderState = shadowDispatch?.renderState;
|
|
730
|
+
// A skinned caster's pipeline was selected above together with its
|
|
731
|
+
// two-binding mesh/palette group. Keep that pairing for every submesh;
|
|
732
|
+
// resetting to the static shadow pipeline here would bind the skin
|
|
733
|
+
// group against `pbr-pl` and Dawn rejects the draw at submit time.
|
|
734
|
+
let entryShadowPipeline =
|
|
735
|
+
entry.source.skin !== undefined ? shadowLastPipeline : shadowPipeline;
|
|
736
|
+
if (
|
|
737
|
+
entry.source.skin === undefined &&
|
|
738
|
+
entryShadowShaderId !== undefined &&
|
|
739
|
+
(entryShadowShaderId !== 'forgeax::default-shadow-caster' ||
|
|
740
|
+
entryShadowRenderState !== undefined)
|
|
741
|
+
) {
|
|
742
|
+
// On a cache miss (async build in flight / build failure), fall back
|
|
743
|
+
// to the default PSO so the caster still writes depth rather than
|
|
744
|
+
// dropping its draw.
|
|
745
|
+
entryShadowPipeline =
|
|
746
|
+
runtime.getMaterialShaderPipeline?.(
|
|
747
|
+
entryShadowShaderId,
|
|
748
|
+
false, // isHdr — shadow depth pass is always LDR
|
|
749
|
+
entryShadowRenderState,
|
|
750
|
+
'triangle-list', // topology — shadow PSO targets triangle-list
|
|
751
|
+
undefined, // indexFormat
|
|
752
|
+
undefined, // variantSet — shadow caster has no variant axes
|
|
753
|
+
'shadow-caster', // passKind
|
|
754
|
+
) ?? shadowPipeline;
|
|
755
|
+
}
|
|
756
|
+
if (entryShadowPipeline !== shadowLastPipeline && entryShadowPipeline !== null) {
|
|
757
|
+
shadowPass.setPipeline(entryShadowPipeline);
|
|
758
|
+
shadowLastPipeline = entryShadowPipeline;
|
|
759
|
+
}
|
|
612
760
|
if (entry.mesh.indexed) {
|
|
613
761
|
shadowPass.drawIndexed(sm.indexCount, shadowInstanceCount, sm.indexOffset, 0, 0);
|
|
614
762
|
} else {
|
|
@@ -663,24 +811,15 @@ function ensureSpotShadowMaterialBg(c: _InternalRenderPipelineContext): BindGrou
|
|
|
663
811
|
});
|
|
664
812
|
const merged =
|
|
665
813
|
fb !== null
|
|
666
|
-
? assembleMaterialWithSkylightEntries(
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
intensityBuffer: fb.intensityBuffer,
|
|
676
|
-
},
|
|
677
|
-
{
|
|
678
|
-
emissiveSampler: pipelineState.defaultSampler,
|
|
679
|
-
emissiveView: pipelineState.defaultWhiteTextureView,
|
|
680
|
-
occlusionSampler: pipelineState.defaultSampler,
|
|
681
|
-
occlusionView: pipelineState.defaultWhiteTextureView,
|
|
682
|
-
},
|
|
683
|
-
)
|
|
814
|
+
? assembleMaterialWithSkylightEntries(fallbackEntries, {
|
|
815
|
+
irradianceView: fb.irradianceView,
|
|
816
|
+
irradianceSampler: fb.sampler,
|
|
817
|
+
prefilterView: fb.prefilterView,
|
|
818
|
+
prefilterSampler: fb.sampler,
|
|
819
|
+
brdfLutView: fb.brdfLutView,
|
|
820
|
+
brdfLutSampler: fb.sampler,
|
|
821
|
+
intensityBuffer: fb.intensityBuffer,
|
|
822
|
+
})
|
|
684
823
|
: fallbackEntries;
|
|
685
824
|
const r = runtime.device.createBindGroup({
|
|
686
825
|
label: 'shadow-material-bg',
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ResolveContext } from '@forgeax/engine-render-graph';
|
|
2
|
-
import type
|
|
2
|
+
import { RhiError, type RhiRenderPassEncoder, type TextureView } from '@forgeax/engine-rhi';
|
|
3
3
|
import { toShared } from '@forgeax/engine-types';
|
|
4
4
|
import { buildBeginRenderPassDescriptor } from '../pipeline-spec';
|
|
5
|
+
import type { BloomFrameReceipts } from './frame-snapshot';
|
|
5
6
|
import { getOrCreateFromChain } from './mesh-ssbo';
|
|
6
7
|
import type { _InternalRenderPipelineContext } from './render-context';
|
|
7
8
|
import { VIEW_UNIFORM_BYTES } from './view-ubo';
|
|
@@ -177,30 +178,72 @@ export function encodeSkyboxPass(
|
|
|
177
178
|
// Gate: bloom === 'off' || !tonemapActive => early-return (AC-04/AC-05).
|
|
178
179
|
// The closures receive RenderPipelineContext and route to w15 record functions.
|
|
179
180
|
|
|
181
|
+
const EMPTY_BLOOM_RECEIPTS: BloomFrameReceipts = {
|
|
182
|
+
uploadCount: 0,
|
|
183
|
+
bindGroupCount: 0,
|
|
184
|
+
encodeCount: 0,
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
function updateBloomReceipts(
|
|
188
|
+
c: _InternalRenderPipelineContext,
|
|
189
|
+
field: keyof BloomFrameReceipts,
|
|
190
|
+
): void {
|
|
191
|
+
const current = c.frameState.bloomFrameReceipts ?? EMPTY_BLOOM_RECEIPTS;
|
|
192
|
+
c.frameState.bloomFrameReceipts = {
|
|
193
|
+
...current,
|
|
194
|
+
[field]: current[field] + 1,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function stageBloomUpload(c: _InternalRenderPipelineContext): void {
|
|
199
|
+
updateBloomReceipts(c, 'uploadCount');
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function stageBloomBindGroup(c: _InternalRenderPipelineContext): void {
|
|
203
|
+
updateBloomReceipts(c, 'bindGroupCount');
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function stageBloomEncode(c: _InternalRenderPipelineContext): void {
|
|
207
|
+
updateBloomReceipts(c, 'encodeCount');
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function throwBloomRecordFailure(expected: string): never {
|
|
211
|
+
throw new RhiError({
|
|
212
|
+
code: 'webgpu-runtime-error',
|
|
213
|
+
expected,
|
|
214
|
+
hint: 'repair the Bloom candidate resources before retrying the frame',
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
|
|
180
218
|
export function recordBloomBrightPass(
|
|
181
219
|
_c: _InternalRenderPipelineContext,
|
|
182
220
|
resolve?: ResolveContext,
|
|
183
221
|
graphPass?: RhiRenderPassEncoder,
|
|
184
222
|
): void {
|
|
185
|
-
const { runtime,
|
|
186
|
-
|
|
187
|
-
const pp = pipelineState.perPassResources;
|
|
223
|
+
const { runtime, encoder, camera, tonemapActive, frameState, bindGroupCounts } = _c;
|
|
224
|
+
const pp = _c.bloomResources;
|
|
188
225
|
|
|
189
226
|
// Double gate: bloom=off => zero-overhead; tonemap=none => no HDR domain
|
|
190
227
|
if (camera.bloom !== 'on' || !tonemapActive) return;
|
|
228
|
+
if (pp === null || pp === undefined) {
|
|
229
|
+
throwBloomRecordFailure('Bloom persistent resources are ready before bright-pass encoding');
|
|
230
|
+
}
|
|
191
231
|
if (
|
|
192
232
|
pp.bloomBrightPipeline === null ||
|
|
193
233
|
pp.bloomBrightBindGroupLayout === null ||
|
|
194
234
|
pp.bloomSampler === null ||
|
|
195
235
|
pp.bloomBrightParamsBuffer === null
|
|
196
|
-
)
|
|
197
|
-
|
|
236
|
+
) {
|
|
237
|
+
throwBloomRecordFailure('Bloom bright pass has pipeline, layout, sampler, and params buffer');
|
|
238
|
+
}
|
|
198
239
|
|
|
199
240
|
// M1 / w7: bloom intermediate textures owned by render-graph. Resolve
|
|
200
241
|
// the GPU TextureView via the resolve context passed by graph.execute().
|
|
201
242
|
const bloomBrightView = resolve?.resolve('bloomBright') as TextureView | undefined;
|
|
202
243
|
const hdrColorView = resolve?.resolve('hdrColor') as TextureView | undefined;
|
|
203
|
-
if (!bloomBrightView || !hdrColorView)
|
|
244
|
+
if (!bloomBrightView || !hdrColorView) {
|
|
245
|
+
throwBloomRecordFailure('Bloom bright pass resolves its source and target views');
|
|
246
|
+
}
|
|
204
247
|
const bglBright = pp.bloomBrightBindGroupLayout;
|
|
205
248
|
const bloomSampler = pp.bloomSampler;
|
|
206
249
|
const paramsBuffer = pp.bloomBrightParamsBuffer;
|
|
@@ -213,6 +256,7 @@ export function recordBloomBrightPass(
|
|
|
213
256
|
brightParams[3] = 0;
|
|
214
257
|
const paramsWrite = runtime.device.queue.writeBuffer(paramsBuffer, 0, brightParams);
|
|
215
258
|
if (!paramsWrite.ok) throw paramsWrite.error;
|
|
259
|
+
stageBloomUpload(_c);
|
|
216
260
|
|
|
217
261
|
// 3. Identity-cached BindGroup (1 tex + 1 sampler + 1 UBO). Keyed on the
|
|
218
262
|
// graph-resolved hdrColor TextureView: resize retires hdrColor and the new
|
|
@@ -249,7 +293,9 @@ export function recordBloomBrightPass(
|
|
|
249
293
|
);
|
|
250
294
|
pass.setPipeline(pp.bloomBrightPipeline);
|
|
251
295
|
pass.setBindGroup(0, bindGroup);
|
|
296
|
+
stageBloomBindGroup(_c);
|
|
252
297
|
pass.draw(3, 1, 0, 0);
|
|
298
|
+
stageBloomEncode(_c);
|
|
253
299
|
if (graphPass === undefined) pass.end();
|
|
254
300
|
}
|
|
255
301
|
|
|
@@ -258,32 +304,29 @@ export function recordBloomBlurHPass(
|
|
|
258
304
|
resolve?: ResolveContext,
|
|
259
305
|
graphPass?: RhiRenderPassEncoder,
|
|
260
306
|
): void {
|
|
261
|
-
const {
|
|
262
|
-
|
|
263
|
-
pipelineState,
|
|
264
|
-
encoder,
|
|
265
|
-
camera,
|
|
266
|
-
targetW,
|
|
267
|
-
tonemapActive,
|
|
268
|
-
frameState,
|
|
269
|
-
bindGroupCounts,
|
|
270
|
-
} = _c;
|
|
271
|
-
const pp = pipelineState.perPassResources;
|
|
307
|
+
const { runtime, encoder, camera, targetW, tonemapActive, frameState, bindGroupCounts } = _c;
|
|
308
|
+
const pp = _c.bloomResources;
|
|
272
309
|
|
|
273
310
|
if (camera.bloom !== 'on' || !tonemapActive) return;
|
|
311
|
+
if (pp === null || pp === undefined) {
|
|
312
|
+
throwBloomRecordFailure('Bloom persistent resources are ready before blur-H encoding');
|
|
313
|
+
}
|
|
274
314
|
if (
|
|
275
315
|
pp.bloomBlurHPipeline === null ||
|
|
276
316
|
pp.bloomBlurBindGroupLayout === null ||
|
|
277
317
|
pp.bloomSampler === null ||
|
|
278
318
|
pp.bloomBlurHParamsBuffer === null
|
|
279
|
-
)
|
|
280
|
-
|
|
319
|
+
) {
|
|
320
|
+
throwBloomRecordFailure('Bloom blur-H pass has pipeline, layout, sampler, and params buffer');
|
|
321
|
+
}
|
|
281
322
|
|
|
282
323
|
// M1 / w7: bloom intermediate textures owned by render-graph. Resolve
|
|
283
324
|
// via the resolve context passed by graph.execute().
|
|
284
325
|
const bloomBlurHView = resolve?.resolve('bloomBlurH') as TextureView | undefined;
|
|
285
326
|
const bloomBrightView = resolve?.resolve('bloomBright') as TextureView | undefined;
|
|
286
|
-
if (!bloomBlurHView || !bloomBrightView)
|
|
327
|
+
if (!bloomBlurHView || !bloomBrightView) {
|
|
328
|
+
throwBloomRecordFailure('Bloom blur-H pass resolves its source and target views');
|
|
329
|
+
}
|
|
287
330
|
const bglBlur = pp.bloomBlurBindGroupLayout;
|
|
288
331
|
const bloomSampler = pp.bloomSampler;
|
|
289
332
|
const paramsBuffer = pp.bloomBlurHParamsBuffer;
|
|
@@ -299,6 +342,7 @@ export function recordBloomBlurHPass(
|
|
|
299
342
|
blurParams[3] = 0;
|
|
300
343
|
const paramsWrite = runtime.device.queue.writeBuffer(paramsBuffer, 0, blurParams);
|
|
301
344
|
if (!paramsWrite.ok) throw paramsWrite.error;
|
|
345
|
+
stageBloomUpload(_c);
|
|
302
346
|
|
|
303
347
|
// 3. Identity-cached BindGroup (reads bloomBright from graph). Keyed on the
|
|
304
348
|
// graph-resolved bloomBright view so resize rebuilds against the new texture.
|
|
@@ -334,7 +378,9 @@ export function recordBloomBlurHPass(
|
|
|
334
378
|
);
|
|
335
379
|
pass.setPipeline(pp.bloomBlurHPipeline);
|
|
336
380
|
pass.setBindGroup(0, bindGroup);
|
|
381
|
+
stageBloomBindGroup(_c);
|
|
337
382
|
pass.draw(3, 1, 0, 0);
|
|
383
|
+
stageBloomEncode(_c);
|
|
338
384
|
if (graphPass === undefined) pass.end();
|
|
339
385
|
}
|
|
340
386
|
|
|
@@ -343,32 +389,29 @@ export function recordBloomBlurVPass(
|
|
|
343
389
|
resolve?: ResolveContext,
|
|
344
390
|
graphPass?: RhiRenderPassEncoder,
|
|
345
391
|
): void {
|
|
346
|
-
const {
|
|
347
|
-
|
|
348
|
-
pipelineState,
|
|
349
|
-
encoder,
|
|
350
|
-
camera,
|
|
351
|
-
targetH,
|
|
352
|
-
tonemapActive,
|
|
353
|
-
frameState,
|
|
354
|
-
bindGroupCounts,
|
|
355
|
-
} = _c;
|
|
356
|
-
const pp = pipelineState.perPassResources;
|
|
392
|
+
const { runtime, encoder, camera, targetH, tonemapActive, frameState, bindGroupCounts } = _c;
|
|
393
|
+
const pp = _c.bloomResources;
|
|
357
394
|
|
|
358
395
|
if (camera.bloom !== 'on' || !tonemapActive) return;
|
|
396
|
+
if (pp === null || pp === undefined) {
|
|
397
|
+
throwBloomRecordFailure('Bloom persistent resources are ready before blur-V encoding');
|
|
398
|
+
}
|
|
359
399
|
if (
|
|
360
400
|
pp.bloomBlurVPipeline === null ||
|
|
361
401
|
pp.bloomBlurBindGroupLayout === null ||
|
|
362
402
|
pp.bloomSampler === null ||
|
|
363
403
|
pp.bloomBlurVParamsBuffer === null
|
|
364
|
-
)
|
|
365
|
-
|
|
404
|
+
) {
|
|
405
|
+
throwBloomRecordFailure('Bloom blur-V pass has pipeline, layout, sampler, and params buffer');
|
|
406
|
+
}
|
|
366
407
|
|
|
367
408
|
// M1 / w7: bloom intermediate textures owned by render-graph. Resolve
|
|
368
409
|
// via the resolve context passed by graph.execute().
|
|
369
410
|
const bloomBlurVView = resolve?.resolve('bloomBlurV') as TextureView | undefined;
|
|
370
411
|
const bloomBlurHView = resolve?.resolve('bloomBlurH') as TextureView | undefined;
|
|
371
|
-
if (!bloomBlurVView || !bloomBlurHView)
|
|
412
|
+
if (!bloomBlurVView || !bloomBlurHView) {
|
|
413
|
+
throwBloomRecordFailure('Bloom blur-V pass resolves its source and target views');
|
|
414
|
+
}
|
|
372
415
|
const bglBlur = pp.bloomBlurBindGroupLayout;
|
|
373
416
|
const bloomSampler = pp.bloomSampler;
|
|
374
417
|
const paramsBuffer = pp.bloomBlurVParamsBuffer;
|
|
@@ -384,6 +427,7 @@ export function recordBloomBlurVPass(
|
|
|
384
427
|
blurParams[3] = 0;
|
|
385
428
|
const paramsWrite = runtime.device.queue.writeBuffer(paramsBuffer, 0, blurParams);
|
|
386
429
|
if (!paramsWrite.ok) throw paramsWrite.error;
|
|
430
|
+
stageBloomUpload(_c);
|
|
387
431
|
|
|
388
432
|
// 3. Identity-cached BindGroup (reads bloomBlurH from graph). Keyed on the
|
|
389
433
|
// graph-resolved bloomBlurH view so resize rebuilds against the new texture.
|
|
@@ -419,7 +463,9 @@ export function recordBloomBlurVPass(
|
|
|
419
463
|
);
|
|
420
464
|
pass.setPipeline(pp.bloomBlurVPipeline);
|
|
421
465
|
pass.setBindGroup(0, bindGroup);
|
|
466
|
+
stageBloomBindGroup(_c);
|
|
422
467
|
pass.draw(3, 1, 0, 0);
|
|
468
|
+
stageBloomEncode(_c);
|
|
423
469
|
if (graphPass === undefined) pass.end();
|
|
424
470
|
}
|
|
425
471
|
|
|
@@ -428,18 +474,23 @@ export function recordBloomCompositePass(
|
|
|
428
474
|
resolve?: ResolveContext,
|
|
429
475
|
graphPass?: RhiRenderPassEncoder,
|
|
430
476
|
): void {
|
|
431
|
-
const { runtime,
|
|
432
|
-
|
|
433
|
-
const pp = pipelineState.perPassResources;
|
|
477
|
+
const { runtime, encoder, camera, tonemapActive, frameState, bindGroupCounts } = _c;
|
|
478
|
+
const pp = _c.bloomResources;
|
|
434
479
|
|
|
435
480
|
if (camera.bloom !== 'on' || !tonemapActive) return;
|
|
481
|
+
if (pp === null || pp === undefined) {
|
|
482
|
+
throwBloomRecordFailure('Bloom persistent resources are ready before composite encoding');
|
|
483
|
+
}
|
|
436
484
|
if (
|
|
437
485
|
pp.bloomCompositePipeline === null ||
|
|
438
486
|
pp.bloomCompositeBindGroupLayout === null ||
|
|
439
487
|
pp.bloomSampler === null ||
|
|
440
488
|
pp.bloomCompositeParamsBuffer === null
|
|
441
|
-
)
|
|
442
|
-
|
|
489
|
+
) {
|
|
490
|
+
throwBloomRecordFailure(
|
|
491
|
+
'Bloom composite pass has pipeline, layout, sampler, and params buffer',
|
|
492
|
+
);
|
|
493
|
+
}
|
|
443
494
|
|
|
444
495
|
// M1 / w7: hdrColor + bloomBlurV textures owned by render-graph.
|
|
445
496
|
// bug-20260625: composite READS hdrColor (scene, binding 0) and WRITES the
|
|
@@ -447,7 +498,9 @@ export function recordBloomCompositePass(
|
|
|
447
498
|
const hdrColorView = resolve?.resolve('hdrColor') as TextureView | undefined;
|
|
448
499
|
const bloomBlurVView = resolve?.resolve('bloomBlurV') as TextureView | undefined;
|
|
449
500
|
const hdrCompositedView = resolve?.resolve('hdrComposited') as TextureView | undefined;
|
|
450
|
-
if (!hdrColorView || !bloomBlurVView || !hdrCompositedView)
|
|
501
|
+
if (!hdrColorView || !bloomBlurVView || !hdrCompositedView) {
|
|
502
|
+
throwBloomRecordFailure('Bloom composite pass resolves its source and target views');
|
|
503
|
+
}
|
|
451
504
|
const bglComposite = pp.bloomCompositeBindGroupLayout;
|
|
452
505
|
const bloomSampler = pp.bloomSampler;
|
|
453
506
|
const paramsBuffer = pp.bloomCompositeParamsBuffer;
|
|
@@ -460,6 +513,7 @@ export function recordBloomCompositePass(
|
|
|
460
513
|
compositeParams[3] = 0;
|
|
461
514
|
const paramsWrite = runtime.device.queue.writeBuffer(paramsBuffer, 0, compositeParams);
|
|
462
515
|
if (!paramsWrite.ok) throw paramsWrite.error;
|
|
516
|
+
stageBloomUpload(_c);
|
|
463
517
|
|
|
464
518
|
// 2. Identity-cached BindGroup (2 tex: hdrColor + bloomBlurV, 1 sampler,
|
|
465
519
|
// 1 UBO). Keys on both sampled views: resize retires both hdrColor and
|
|
@@ -505,7 +559,9 @@ export function recordBloomCompositePass(
|
|
|
505
559
|
);
|
|
506
560
|
pass.setPipeline(pp.bloomCompositePipeline);
|
|
507
561
|
pass.setBindGroup(0, bindGroup);
|
|
562
|
+
stageBloomBindGroup(_c);
|
|
508
563
|
pass.draw(3, 1, 0, 0);
|
|
564
|
+
stageBloomEncode(_c);
|
|
509
565
|
if (graphPass === undefined) pass.end();
|
|
510
566
|
}
|
|
511
567
|
|