@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
package/src/pbr-pipeline.ts
CHANGED
|
@@ -65,7 +65,7 @@ export interface PbrPipelineLayoutBundle {
|
|
|
65
65
|
readonly viewBgl: BindGroupLayout;
|
|
66
66
|
/**
|
|
67
67
|
* PBR material BindGroupLayout (slot 1) -- derived user-region entries plus
|
|
68
|
-
* Skylight and
|
|
68
|
+
* Skylight and transmission injection.
|
|
69
69
|
*/
|
|
70
70
|
readonly materialBgl: BindGroupLayout;
|
|
71
71
|
/** Per-entity mesh BindGroupLayout (slot 2). */
|
|
@@ -89,7 +89,7 @@ export interface PbrPipelineLayoutBundle {
|
|
|
89
89
|
/**
|
|
90
90
|
* The built-in standard-PBR material paramSchema's texture/user-region shape,
|
|
91
91
|
* used as the fallback when the material BGL is built without a registry
|
|
92
|
-
* (the caps-driven `buildPbrPipelineLayouts` seam). Declares the
|
|
92
|
+
* (the caps-driven `buildPbrPipelineLayouts` seam). Declares the 8 Standard
|
|
93
93
|
* user-region textures + a numeric UBO run; `derive()` collapses the numerics
|
|
94
94
|
* into binding 0 and emits sampler/texture pairs at 1..6 — byte-equivalent to
|
|
95
95
|
* the legacy fixed base-7. The shared PBR parameter contract comes from the
|
|
@@ -99,13 +99,13 @@ export interface PbrPipelineLayoutBundle {
|
|
|
99
99
|
* Build the PBR material BGL **user-region** from a paramSchema via the
|
|
100
100
|
* `derive()` SSOT (D-1). The user-region is binding 0 (the run-merged material
|
|
101
101
|
* UBO) followed by one sampler/texture pair per declared texture. Engine
|
|
102
|
-
* injection (IBL +
|
|
102
|
+
* injection (IBL + transmission) is appended AFTER this region by the caller via
|
|
103
103
|
* `appendInjection`, with start binding = `userRegion.length` — so a 4-texture
|
|
104
104
|
* custom schema (e.g. parallax + heightTexture) shifts the injection region by
|
|
105
105
|
* one sampler/texture pair automatically.
|
|
106
106
|
*
|
|
107
|
-
* The built-in `default-standard-pbr` paramSchema declares exactly
|
|
108
|
-
* so this derives to binding 0 UBO +
|
|
107
|
+
* The built-in `default-standard-pbr` paramSchema declares exactly 8 textures,
|
|
108
|
+
* so this derives to binding 0 UBO + 8 pairs = 17 entries. Injection is appended
|
|
109
109
|
* after that derived region.
|
|
110
110
|
*
|
|
111
111
|
* One material-UBO convention is layered on top of the pure `derive()` output:
|
|
@@ -140,7 +140,7 @@ export function buildPbrMaterialUserRegionEntries(
|
|
|
140
140
|
// material-UBO contract. derive() emits binding 0 as the first numeric run's
|
|
141
141
|
// merged UBO; an empty schema has no binding-0 UBO and needs no patch.
|
|
142
142
|
const ubo = entries[0];
|
|
143
|
-
if (ubo !== undefined && ubo.binding === 0 && ubo.buffer
|
|
143
|
+
if (ubo !== undefined && ubo.binding === 0 && ubo.buffer?.type === 'uniform') {
|
|
144
144
|
entries[0] = {
|
|
145
145
|
binding: 0,
|
|
146
146
|
visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
|
|
@@ -178,11 +178,16 @@ export function buildPbrMaterialUserRegionEntries(
|
|
|
178
178
|
// keep that meaning under the generic 'lightmap' label
|
|
179
179
|
// (per-surface secondary-lighting injection) so future
|
|
180
180
|
// lightmap support lands without renaming the kind.
|
|
181
|
+
// - 'transmission' the engine-owned sampler + backdrop texture pair. The
|
|
182
|
+
// record stage supplies a real backdrop only for the active
|
|
183
|
+
// transmission pass; all other variants bind layout-safe
|
|
184
|
+
// placeholders because their shaders do not read these slots.
|
|
181
185
|
export type InjectionKind = keyof typeof INJECTION_KIND_LENGTHS;
|
|
182
186
|
|
|
183
187
|
const IBL_INJECTION_LENGTH = 7;
|
|
184
188
|
const LIGHTMAP_INJECTION_LENGTH = 4;
|
|
185
189
|
const SHADOW_INJECTION_LENGTH = 2;
|
|
190
|
+
const TRANSMISSION_INJECTION_LENGTH = 2;
|
|
186
191
|
|
|
187
192
|
/**
|
|
188
193
|
* Append the engine-injection BGL entries for the given `kind` after the
|
|
@@ -289,6 +294,19 @@ export function appendInjection(
|
|
|
289
294
|
texture: { sampleType: 'depth', viewDimension: '2d' },
|
|
290
295
|
},
|
|
291
296
|
];
|
|
297
|
+
case 'transmission':
|
|
298
|
+
return [
|
|
299
|
+
{
|
|
300
|
+
binding: start,
|
|
301
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
302
|
+
sampler: { type: 'filtering' },
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
binding: start + 1,
|
|
306
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
307
|
+
texture: { sampleType: 'float', viewDimension: '2d' },
|
|
308
|
+
},
|
|
309
|
+
];
|
|
292
310
|
}
|
|
293
311
|
}
|
|
294
312
|
|
|
@@ -297,6 +315,7 @@ export const INJECTION_KIND_LENGTHS = {
|
|
|
297
315
|
shadow: SHADOW_INJECTION_LENGTH,
|
|
298
316
|
ibl: IBL_INJECTION_LENGTH,
|
|
299
317
|
lightmap: LIGHTMAP_INJECTION_LENGTH,
|
|
318
|
+
transmission: TRANSMISSION_INJECTION_LENGTH,
|
|
300
319
|
};
|
|
301
320
|
|
|
302
321
|
/**
|
|
@@ -306,6 +325,8 @@ export const INJECTION_KIND_LENGTHS = {
|
|
|
306
325
|
*/
|
|
307
326
|
export interface PbrCaps {
|
|
308
327
|
readonly storageBuffer: boolean;
|
|
328
|
+
/** Whether the device can carry the optional SpotLight projector texture. */
|
|
329
|
+
readonly projectorAvailable?: boolean;
|
|
309
330
|
}
|
|
310
331
|
|
|
311
332
|
/**
|
|
@@ -357,7 +378,7 @@ export interface PbrCaps {
|
|
|
357
378
|
*/
|
|
358
379
|
export function buildPbrViewBglEntries(caps: PbrCaps): GPUBindGroupLayoutEntry[] {
|
|
359
380
|
const lightBufType: GPUBufferBindingType = caps.storageBuffer ? 'read-only-storage' : 'uniform';
|
|
360
|
-
|
|
381
|
+
const entries: GPUBindGroupLayoutEntry[] = [
|
|
361
382
|
{
|
|
362
383
|
binding: 0,
|
|
363
384
|
visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
|
|
@@ -450,12 +471,32 @@ export function buildPbrViewBglEntries(caps: PbrCaps): GPUBindGroupLayoutEntry[]
|
|
|
450
471
|
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
451
472
|
texture: { sampleType: 'depth', viewDimension: '2d' },
|
|
452
473
|
},
|
|
453
|
-
{
|
|
454
|
-
binding: 10,
|
|
455
|
-
visibility: GPU_SHADER_STAGE_VERTEX,
|
|
456
|
-
buffer: { type: 'uniform', hasDynamicOffset: true },
|
|
457
|
-
},
|
|
458
474
|
];
|
|
475
|
+
// The projector is optional, but when present it is a sampled texture in
|
|
476
|
+
// the fragment stage. Keep it out of the low-limit view layout so the
|
|
477
|
+
// remaining HDRP PBR ABI stays within WebGPU's minimum 16 sampled textures.
|
|
478
|
+
// The corresponding PROJECTOR_AVAILABLE shader variant is selected from
|
|
479
|
+
// the same device capability bit and returns a white modulation.
|
|
480
|
+
if (caps.projectorAvailable !== false) {
|
|
481
|
+
entries.push(
|
|
482
|
+
{
|
|
483
|
+
binding: 11,
|
|
484
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
485
|
+
texture: { sampleType: 'float', viewDimension: '2d' },
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
binding: 12,
|
|
489
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
490
|
+
sampler: { type: 'filtering' },
|
|
491
|
+
},
|
|
492
|
+
);
|
|
493
|
+
}
|
|
494
|
+
entries.push({
|
|
495
|
+
binding: 10,
|
|
496
|
+
visibility: GPU_SHADER_STAGE_VERTEX,
|
|
497
|
+
buffer: { type: 'uniform', hasDynamicOffset: true },
|
|
498
|
+
});
|
|
499
|
+
return entries;
|
|
459
500
|
}
|
|
460
501
|
|
|
461
502
|
// ─── PBR pipeline layout factory ────────────────────────────────────────────
|
|
@@ -479,17 +520,16 @@ export function buildPbrPipelineLayouts(
|
|
|
479
520
|
// D-13 round-2: 4 BGLs route through buildBindGroupLayoutDescriptor.
|
|
480
521
|
// The dispatcher reads kind + caps; spec content is unused without a
|
|
481
522
|
// registry (no shader-axis reflection at this seam — the 4 BGLs are
|
|
482
|
-
// caps-driven literals + the deterministic Skylight +
|
|
523
|
+
// caps-driven literals + the deterministic Skylight + transmission merge
|
|
483
524
|
// sequence that has no dependency on shader.id).
|
|
484
525
|
const viewBglRes = device.createBindGroupLayout(
|
|
485
526
|
buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, { kind: 'pbr-view', caps }),
|
|
486
527
|
);
|
|
487
528
|
if (!viewBglRes.ok) throw viewBglRes.error;
|
|
488
529
|
|
|
489
|
-
// Material BGL: derived user region + Skylight +
|
|
490
|
-
//
|
|
491
|
-
//
|
|
492
|
-
// skylight BGL length (= 14) directly inside appendInjection.
|
|
530
|
+
// Material BGL: derived user region + Skylight + transmission injection.
|
|
531
|
+
// The transmission start binding is computed from the post-Skylight BGL
|
|
532
|
+
// length (= 24 for the built-in Standard schema) by appendInjection.
|
|
493
533
|
const materialBglRes = device.createBindGroupLayout(
|
|
494
534
|
buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, { kind: 'pbr-material-merged' }),
|
|
495
535
|
);
|
|
@@ -542,6 +582,23 @@ export function buildPbrPipelineLayouts(
|
|
|
542
582
|
* `LayoutKind = 'pbr-skin'` upstream.
|
|
543
583
|
*/
|
|
544
584
|
export const SKIN_MATERIAL_SHADER_ID = 'forgeax::pbr-skin' as const;
|
|
585
|
+
export const SHADOW_CASTER_SHADER_ID = 'forgeax::default-shadow-caster' as const;
|
|
586
|
+
|
|
587
|
+
export function shadowCasterVariantSet(storageBuffer: boolean, skinned: boolean): string {
|
|
588
|
+
const skinningDisabled = !skinned;
|
|
589
|
+
if (storageBuffer && skinningDisabled) return '';
|
|
590
|
+
return `SKINNING_DISABLED=${String(skinningDisabled)}+STORAGE_BUFFER_AVAILABLE=${String(storageBuffer)}`;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
export function isSkinnedShadowCasterVariant(
|
|
594
|
+
materialShaderId: string | undefined,
|
|
595
|
+
variantSet: string | undefined,
|
|
596
|
+
): boolean {
|
|
597
|
+
return (
|
|
598
|
+
materialShaderId === SHADOW_CASTER_SHADER_ID &&
|
|
599
|
+
variantSet?.includes('SKINNING_DISABLED=false') === true
|
|
600
|
+
);
|
|
601
|
+
}
|
|
545
602
|
|
|
546
603
|
/** Returns true for the engine-shipped standard-PBR material shader family. */
|
|
547
604
|
export function isStandardPbrMaterialShader(shaderId: string | undefined): boolean {
|
|
@@ -745,13 +802,14 @@ export const SPRITE_PASS_PER_INSTANCE_REGION_VARIANT_SET = '';
|
|
|
745
802
|
*
|
|
746
803
|
* Three groups by derivation source:
|
|
747
804
|
* 1. Shader-derived (paramSchema reflection + injection chain):
|
|
748
|
-
* - `'pbr-material-merged'` — derived user region + Skylight 7 +
|
|
805
|
+
* - `'pbr-material-merged'` — derived user region + Skylight 7 + transmission 2
|
|
749
806
|
* - `'unlit-material'` — 7 entries: base PBR material only (no inject)
|
|
750
807
|
* - `'hdrp-7-slot'` — 7 entries (binding 0 + 3..8): HDRP cluster + SSAO group(2) BGL
|
|
751
808
|
* 2. Caps-driven literal shapes (no shader):
|
|
752
|
-
* - `'pbr-view'` —
|
|
753
|
-
*
|
|
754
|
-
*
|
|
809
|
+
* - `'pbr-view'` — 12 entries: view UBO + lights + shadow bindings,
|
|
810
|
+
* projector texture/sampler (11/12), and the Points/Lines UBO (10)
|
|
811
|
+
* (directional 3/4, point 5/6, cascade 7, spot atlas 8; the former
|
|
812
|
+
* spot lightViewProj matrices moved into the View UBO)
|
|
755
813
|
* - `'pbr-mesh-array'` — 1 entry: per-entity mesh SSBO (dynamic-offset)
|
|
756
814
|
* - `'pbr-instances'` — 1 entry: per-instance SSBO (no dynamic-offset)
|
|
757
815
|
* - `'pbr-skin-mesh-array'` — 2 entries: meshes + skin palette
|
|
@@ -852,7 +910,7 @@ export function createHdrpBindGroupLayoutDescriptor(
|
|
|
852
910
|
* Shader-derived kinds (`'pbr-material-merged'` / `'unlit-material'` /
|
|
853
911
|
* `'hdrp-7-slot'`) require `options.registry` to look up the shader entry
|
|
854
912
|
* and reflect its `paramSchema` via {@link deriveBglShapeFromShader}; they
|
|
855
|
-
* compose the per-entry injection chain (Skylight +
|
|
913
|
+
* compose the per-entry injection chain (Skylight + transmission for material;
|
|
856
914
|
* HDRP variantSet for cluster-forward).
|
|
857
915
|
*
|
|
858
916
|
* Caps-driven kinds (`'pbr-view'` / `'pbr-mesh-array'` / `'pbr-instances'` /
|
|
@@ -951,7 +1009,11 @@ export function buildBindGroupLayoutDescriptor(
|
|
|
951
1009
|
entries: [
|
|
952
1010
|
{
|
|
953
1011
|
binding: 0,
|
|
954
|
-
|
|
1012
|
+
// Standard transmission reads the same per-instance transform in
|
|
1013
|
+
// fs_main to convert glTF unit-space thickness into world metres.
|
|
1014
|
+
// Keep one shared instances BGL and widen its visibility instead
|
|
1015
|
+
// of introducing a second transform upload or six new varyings.
|
|
1016
|
+
visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
|
|
955
1017
|
buffer: { type: meshBufType, hasDynamicOffset: false },
|
|
956
1018
|
},
|
|
957
1019
|
],
|
|
@@ -980,24 +1042,24 @@ export function buildBindGroupLayoutDescriptor(
|
|
|
980
1042
|
}
|
|
981
1043
|
case 'pbr-material-merged': {
|
|
982
1044
|
// Material BGL: per-shader user-region (derive(paramSchema).bglEntries)
|
|
983
|
-
// + IBL injection (7) +
|
|
984
|
-
// the only variable; injection start = userRegion.length so a
|
|
985
|
-
// custom schema shifts IBL/
|
|
986
|
-
//
|
|
1045
|
+
// + IBL injection (7) + transmission injection (2). The user-region
|
|
1046
|
+
// size is the only variable; injection start = userRegion.length so a
|
|
1047
|
+
// custom schema shifts IBL/transmission by its sampler/texture pairs.
|
|
1048
|
+
// The built-in 8-texture standard-PBR schema is 17 + 7 + 2 = 26 entries.
|
|
987
1049
|
//
|
|
988
1050
|
// Schema source priority (D-1): explicit materialParamSchema option >
|
|
989
1051
|
// registry lookup of spec.shader.id > built-in standard-PBR fallback.
|
|
990
1052
|
const resolvedSchema = resolveMaterialParamSchema(spec, options);
|
|
991
1053
|
const userRegion = buildPbrMaterialUserRegionEntries(resolvedSchema);
|
|
992
1054
|
const afterIbl = [...userRegion, ...appendInjection(userRegion, 'ibl')];
|
|
993
|
-
const merged = [...afterIbl, ...appendInjection(afterIbl, '
|
|
1055
|
+
const merged = [...afterIbl, ...appendInjection(afterIbl, 'transmission')];
|
|
994
1056
|
return {
|
|
995
1057
|
label: 'pbr-material-skylight-bgl',
|
|
996
1058
|
entries: merged,
|
|
997
1059
|
};
|
|
998
1060
|
}
|
|
999
1061
|
case 'unlit-material': {
|
|
1000
|
-
// Unlit material BGL: per-shader user-region only. No IBL/
|
|
1062
|
+
// Unlit material BGL: per-shader user-region only. No IBL/transmission
|
|
1001
1063
|
// injection (D-5 round-4: unlit demos do not pay for IBL state).
|
|
1002
1064
|
const resolvedSchema = resolveMaterialParamSchema(spec, options);
|
|
1003
1065
|
return {
|
|
@@ -3,8 +3,8 @@ import type {
|
|
|
3
3
|
RenderGraphBuilder,
|
|
4
4
|
RenderGraphError,
|
|
5
5
|
} from '@forgeax/engine-render-graph';
|
|
6
|
-
import { ok, type Result } from '@forgeax/engine-types';
|
|
7
|
-
import {
|
|
6
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
7
|
+
import { SceneDataUnavailableError } from '../errors/render';
|
|
8
8
|
import type {
|
|
9
9
|
RenderPipeline,
|
|
10
10
|
RenderPipelineBuildContext,
|
|
@@ -17,15 +17,25 @@ import {
|
|
|
17
17
|
type RenderPipelineTarget,
|
|
18
18
|
} from '../render-pipeline';
|
|
19
19
|
import {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
addStandardSceneDataPass,
|
|
21
|
+
aggregateTemporalDemand,
|
|
22
|
+
createStandardSceneDataTarget,
|
|
23
|
+
standardTemporalLaneAdmission,
|
|
24
|
+
} from '../temporal/standard-scene-data';
|
|
25
|
+
import {
|
|
26
|
+
addTransmissionBackdropPasses,
|
|
27
|
+
addTransmissionBackdropTemporalPass,
|
|
28
|
+
resolveTransmissionBackdropTopology,
|
|
29
|
+
transmissionDemandForTopology,
|
|
30
|
+
} from '../transmission/backdrop';
|
|
31
|
+
import {
|
|
22
32
|
addTypedFrameObservationPass,
|
|
23
|
-
addTypedFullscreenPass,
|
|
24
33
|
addTypedScenePass,
|
|
25
34
|
addTypedSkyboxPass,
|
|
26
|
-
addTypedTonemapPass,
|
|
27
35
|
} from '../typed-render-graph-primitives';
|
|
28
36
|
import { addTypedShadowPasses } from '../typed-shadow-passes';
|
|
37
|
+
import { addAuthoredVolumetricFogPasses } from '../volume/passes';
|
|
38
|
+
import { addStandardPost } from './standard-post';
|
|
29
39
|
|
|
30
40
|
function target(
|
|
31
41
|
graph: RenderGraphBuilder<RenderPipelineFrame>,
|
|
@@ -43,11 +53,32 @@ function buildUrp(
|
|
|
43
53
|
const surface = importRenderPipelineSurface(graph, topology);
|
|
44
54
|
if (!surface.ok) return surface;
|
|
45
55
|
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
const
|
|
56
|
+
const clearOnly = topology.clearOnly === true;
|
|
57
|
+
const msaa = !clearOnly && topology.camera.antialias === 'msaa' && topology.lane.multisample;
|
|
58
|
+
const hdr =
|
|
59
|
+
!clearOnly && (topology.camera.tonemap !== 'none' || topology.camera.antialias === 'taa');
|
|
60
|
+
const fxaa = !clearOnly && topology.camera.antialias === 'fxaa';
|
|
61
|
+
const taa = !clearOnly && topology.camera.antialias === 'taa';
|
|
62
|
+
const rawOnly = !clearOnly && topology.surface.profile?.kind === 'raw-only';
|
|
63
|
+
// A direct no-tone/no-FXAA lane writes the final display view directly;
|
|
64
|
+
// keeping a linear-LDR intermediate would add a redundant fullscreen pass.
|
|
65
|
+
// FXAA samples the scene before the Output Transform, so its input must
|
|
66
|
+
// remain float even when tone mapping is disabled. This prevents an
|
|
67
|
+
// eight-bit quantization before the OETF/display-encoded boundary.
|
|
68
|
+
// MSAA resolves into a separate linear target before presentation. Treat
|
|
69
|
+
// that resolved target like linear LDR so the shared Output Transform owns
|
|
70
|
+
// its write into the surface storage view; without this, the resolve is
|
|
71
|
+
// never presented and MSAA is indistinguishable from the no-AA path.
|
|
72
|
+
const linearLdr = !clearOnly && ((!hdr && topology.lane.storageBuffer) || fxaa || msaa);
|
|
73
|
+
const temporalDemand = aggregateTemporalDemand({
|
|
74
|
+
taa,
|
|
75
|
+
motionBlur: !clearOnly && topology.temporal?.motionBlur === true,
|
|
76
|
+
});
|
|
77
|
+
const needsTemporalIntermediate = temporalDemand.targetCount === 1;
|
|
78
|
+
const sceneFormat =
|
|
79
|
+
hdr || linearLdr || rawOnly || needsTemporalIntermediate
|
|
80
|
+
? 'rgba16float'
|
|
81
|
+
: topology.surface.storageFormat;
|
|
51
82
|
|
|
52
83
|
const depth = target(graph, 'scene-depth', {
|
|
53
84
|
format: 'depth24plus-stencil8',
|
|
@@ -56,24 +87,34 @@ function buildUrp(
|
|
|
56
87
|
});
|
|
57
88
|
if (!depth.ok) return depth;
|
|
58
89
|
|
|
59
|
-
const sceneResolved =
|
|
60
|
-
|
|
90
|
+
const sceneResolved = clearOnly
|
|
91
|
+
? ok(surface.value.display ?? surface.value.storage)
|
|
92
|
+
: hdr || fxaa || linearLdr || msaa || rawOnly || needsTemporalIntermediate
|
|
61
93
|
? target(graph, 'scene-color', {
|
|
62
94
|
format: sceneFormat,
|
|
63
95
|
size: 'surface',
|
|
64
96
|
sampleCount: 1,
|
|
97
|
+
domain: 'linear-ldr',
|
|
65
98
|
...(sceneFormat === topology.surface.storageFormat &&
|
|
66
99
|
topology.surface.storageFormat !== topology.surface.viewFormat
|
|
67
100
|
? { viewFormats: [topology.surface.viewFormat] }
|
|
68
101
|
: {}),
|
|
69
102
|
})
|
|
70
|
-
:
|
|
103
|
+
: surface.value.display === undefined
|
|
104
|
+
? target(graph, 'scene-color', {
|
|
105
|
+
format: topology.surface.storageFormat,
|
|
106
|
+
size: 'surface',
|
|
107
|
+
sampleCount: 1,
|
|
108
|
+
domain: 'display-encoded',
|
|
109
|
+
})
|
|
110
|
+
: ok(surface.value.display);
|
|
71
111
|
if (!sceneResolved.ok) return sceneResolved;
|
|
72
112
|
const scene = msaa
|
|
73
113
|
? target(graph, 'scene-color-msaa', {
|
|
74
114
|
format: sceneFormat,
|
|
75
115
|
size: 'surface',
|
|
76
116
|
sampleCount: 4,
|
|
117
|
+
domain: 'linear-ldr',
|
|
77
118
|
...(sceneFormat === topology.surface.storageFormat &&
|
|
78
119
|
topology.surface.storageFormat !== topology.surface.viewFormat
|
|
79
120
|
? { viewFormats: [topology.surface.viewFormat] }
|
|
@@ -92,6 +133,11 @@ function buildUrp(
|
|
|
92
133
|
sampleCount: scene.value.sampleCount,
|
|
93
134
|
});
|
|
94
135
|
if (!gpuDriven.ok) return gpuDriven;
|
|
136
|
+
const transmissionDemand = transmissionDemandForTopology(topology);
|
|
137
|
+
const transmissionActive = resolveTransmissionBackdropTopology({
|
|
138
|
+
demand: transmissionDemand,
|
|
139
|
+
sourceSampleCount: scene.value.sampleCount,
|
|
140
|
+
}).active;
|
|
95
141
|
const main = addTypedScenePass(graph, {
|
|
96
142
|
name: 'main',
|
|
97
143
|
color: scene.value,
|
|
@@ -106,12 +152,121 @@ function buildUrp(
|
|
|
106
152
|
spotShadow: shadows.value.spot,
|
|
107
153
|
selector: { LightMode: ['Forward'] },
|
|
108
154
|
colorLoadOp: 'load',
|
|
155
|
+
...(transmissionActive ? { recordMode: 'opaque' as const } : {}),
|
|
109
156
|
...(gpuDriven.value === undefined ? {} : { gpuDriven: gpuDriven.value }),
|
|
110
157
|
});
|
|
111
158
|
if (!main.ok) return main;
|
|
112
159
|
|
|
160
|
+
const temporalLane = topology.lane.compute
|
|
161
|
+
? (topology.standardProfile?.lighting ?? 'direct')
|
|
162
|
+
: 'cpu-webgl2';
|
|
163
|
+
const temporalAdmission = standardTemporalLaneAdmission({
|
|
164
|
+
lane: temporalLane,
|
|
165
|
+
demand: temporalDemand,
|
|
166
|
+
capabilities: {
|
|
167
|
+
compute: topology.lane.compute,
|
|
168
|
+
storageBuffer: topology.lane.storageBuffer,
|
|
169
|
+
// Capability probes are the sole authority. A surface/storage format is
|
|
170
|
+
// not evidence that rgba16float render targets are actually renderable.
|
|
171
|
+
rgba16floatRenderable: context.capabilities?.rgba16floatRenderable ?? false,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
if (temporalAdmission.status === 'unavailable' && temporalAdmission.reason !== 'no-demand') {
|
|
175
|
+
return err(
|
|
176
|
+
new SceneDataUnavailableError({
|
|
177
|
+
featureIdentity: 'forgeax::standard',
|
|
178
|
+
schema: 'forgeax::scene-data::temporal-v1',
|
|
179
|
+
lane: temporalLane,
|
|
180
|
+
reason: temporalAdmission.reason,
|
|
181
|
+
missingContributorIds: [],
|
|
182
|
+
omittedMissingContributorCount: 0,
|
|
183
|
+
recovery: 'enable-capability',
|
|
184
|
+
}),
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
const temporal =
|
|
188
|
+
temporalDemand.targetCount === 1 ? createStandardSceneDataTarget(graph) : ok(undefined);
|
|
189
|
+
if (!temporal.ok) return temporal;
|
|
190
|
+
if (temporal.value !== undefined) {
|
|
191
|
+
const producer = addStandardSceneDataPass(graph, temporal.value.temporal, depth.value);
|
|
192
|
+
if (!producer.ok) return producer;
|
|
193
|
+
}
|
|
194
|
+
const transmission = addTransmissionBackdropPasses({
|
|
195
|
+
graph,
|
|
196
|
+
source: sceneResolved.value,
|
|
197
|
+
demand: transmissionDemand,
|
|
198
|
+
copySize: { width: topology.surface.width, height: topology.surface.height },
|
|
199
|
+
encodeRoughMip: context.encodeTransmissionMip,
|
|
200
|
+
includeConsumerPasses: false,
|
|
201
|
+
});
|
|
202
|
+
if (!transmission.ok) return transmission;
|
|
203
|
+
if (transmission.value.topology.active) {
|
|
204
|
+
const transmissionPass = addTypedScenePass(graph, {
|
|
205
|
+
name: 'transmission-forward',
|
|
206
|
+
color: scene.value,
|
|
207
|
+
depth: depth.value,
|
|
208
|
+
...(msaa ? { resolve: sceneResolved.value } : {}),
|
|
209
|
+
sampled: [
|
|
210
|
+
shadows.value.directional,
|
|
211
|
+
shadows.value.spot,
|
|
212
|
+
...(shadows.value.point === undefined ? [] : [shadows.value.point]),
|
|
213
|
+
],
|
|
214
|
+
directionalShadow: shadows.value.directional,
|
|
215
|
+
spotShadow: shadows.value.spot,
|
|
216
|
+
selector: { LightMode: ['Forward'] },
|
|
217
|
+
colorLoadOp: 'load',
|
|
218
|
+
depthLoadOp: 'load',
|
|
219
|
+
recordMode: 'transmission',
|
|
220
|
+
// Inject the complete backdrop view so the Standard shader can select
|
|
221
|
+
// the producer's optional roughness mip level. mipViews[0] is only the
|
|
222
|
+
// copy destination view and intentionally exposes one level.
|
|
223
|
+
transmissionBackdrop: transmission.value.backdrop?.view,
|
|
224
|
+
});
|
|
225
|
+
if (!transmissionPass.ok) return transmissionPass;
|
|
226
|
+
|
|
227
|
+
const transparentPass = addTypedScenePass(graph, {
|
|
228
|
+
name: 'transparent',
|
|
229
|
+
color: scene.value,
|
|
230
|
+
depth: depth.value,
|
|
231
|
+
...(msaa ? { resolve: sceneResolved.value } : {}),
|
|
232
|
+
sampled: [
|
|
233
|
+
shadows.value.directional,
|
|
234
|
+
shadows.value.spot,
|
|
235
|
+
...(shadows.value.point === undefined ? [] : [shadows.value.point]),
|
|
236
|
+
],
|
|
237
|
+
directionalShadow: shadows.value.directional,
|
|
238
|
+
spotShadow: shadows.value.spot,
|
|
239
|
+
selector: { LightMode: ['Forward'] },
|
|
240
|
+
colorLoadOp: 'load',
|
|
241
|
+
depthLoadOp: 'load',
|
|
242
|
+
recordMode: 'transparent',
|
|
243
|
+
});
|
|
244
|
+
if (!transparentPass.ok) return transparentPass;
|
|
245
|
+
const temporal = addTransmissionBackdropTemporalPass(graph, sceneResolved.value);
|
|
246
|
+
if (!temporal.ok) return temporal;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (topology.volumetricFog?.enabled === true) {
|
|
250
|
+
const depthSample = graph.view(depth.value.texture, {
|
|
251
|
+
label: 'scene-depth.sample',
|
|
252
|
+
dimension: '2d',
|
|
253
|
+
aspect: 'depth-only',
|
|
254
|
+
});
|
|
255
|
+
if (!depthSample.ok) return depthSample;
|
|
256
|
+
const volume = addAuthoredVolumetricFogPasses(
|
|
257
|
+
graph,
|
|
258
|
+
topology,
|
|
259
|
+
sceneResolved.value,
|
|
260
|
+
depthSample.value,
|
|
261
|
+
shadows.value.directional.view,
|
|
262
|
+
shadows.value.spot.view,
|
|
263
|
+
);
|
|
264
|
+
if (!volume.ok) return volume;
|
|
265
|
+
}
|
|
266
|
+
|
|
113
267
|
const features = context.contributeFeatures([
|
|
114
268
|
{
|
|
269
|
+
name: 'linear-hdr',
|
|
115
270
|
kind: 'scene-color',
|
|
116
271
|
texture: scene.value.texture,
|
|
117
272
|
view: scene.value.view,
|
|
@@ -129,7 +284,7 @@ function buildUrp(
|
|
|
129
284
|
]);
|
|
130
285
|
if (!features.ok) return features;
|
|
131
286
|
|
|
132
|
-
if (hdr || linearLdr) {
|
|
287
|
+
if (hdr || linearLdr || rawOnly) {
|
|
133
288
|
const observation = addTypedFrameObservationPass(
|
|
134
289
|
graph,
|
|
135
290
|
sceneResolved.value,
|
|
@@ -138,92 +293,14 @@ function buildUrp(
|
|
|
138
293
|
if (!observation.ok) return observation;
|
|
139
294
|
}
|
|
140
295
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
format: 'rgba16float',
|
|
150
|
-
size: 'half-surface',
|
|
151
|
-
});
|
|
152
|
-
if (!bright.ok) return bright;
|
|
153
|
-
const blurH = target(graph, 'bloom-blur-h', {
|
|
154
|
-
format: 'rgba16float',
|
|
155
|
-
size: 'half-surface',
|
|
156
|
-
});
|
|
157
|
-
if (!blurH.ok) return blurH;
|
|
158
|
-
const blurV = target(graph, 'bloom-blur-v', {
|
|
159
|
-
format: 'rgba16float',
|
|
160
|
-
size: 'half-surface',
|
|
161
|
-
});
|
|
162
|
-
if (!blurV.ok) return blurV;
|
|
163
|
-
const bloom = addTypedBloomPasses(graph, {
|
|
164
|
-
scene: sceneResolved.value,
|
|
165
|
-
composited: composited.value,
|
|
166
|
-
bright: bright.value,
|
|
167
|
-
blurH: blurH.value,
|
|
168
|
-
blurV: blurV.value,
|
|
169
|
-
});
|
|
170
|
-
if (!bloom.ok) return bloom;
|
|
171
|
-
postInput = topology.camera.bloom === 'on' ? composited.value : sceneResolved.value;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
if (hdr) {
|
|
175
|
-
if (fxaa) {
|
|
176
|
-
const ldr = target(graph, 'ldr-color', {
|
|
177
|
-
format: topology.surface.storageFormat,
|
|
178
|
-
size: 'surface',
|
|
179
|
-
...(topology.surface.storageFormat === topology.surface.viewFormat
|
|
180
|
-
? {}
|
|
181
|
-
: { viewFormats: [topology.surface.viewFormat] }),
|
|
182
|
-
});
|
|
183
|
-
if (!ldr.ok) return ldr;
|
|
184
|
-
const tonemap = addTypedTonemapPass(graph, postInput, ldr.value);
|
|
185
|
-
if (!tonemap.ok) return tonemap;
|
|
186
|
-
const aa = addTypedFullscreenPass(graph, {
|
|
187
|
-
name: 'fxaa',
|
|
188
|
-
shader: 'fxaa',
|
|
189
|
-
input: ldr.value,
|
|
190
|
-
output: surface.value.storage,
|
|
191
|
-
});
|
|
192
|
-
if (!aa.ok) return aa;
|
|
193
|
-
} else {
|
|
194
|
-
const tonemap = addTypedTonemapPass(graph, postInput, surface.value.display);
|
|
195
|
-
if (!tonemap.ok) return tonemap;
|
|
196
|
-
}
|
|
197
|
-
} else if (fxaa) {
|
|
198
|
-
const aa = addTypedFullscreenPass(graph, {
|
|
199
|
-
name: 'fxaa',
|
|
200
|
-
shader: 'fxaa',
|
|
201
|
-
input: sceneResolved.value,
|
|
202
|
-
output: surface.value.storage,
|
|
203
|
-
});
|
|
204
|
-
if (!aa.ok) return aa;
|
|
205
|
-
} else if (linearLdr) {
|
|
206
|
-
const output = addTypedTonemapPass(graph, sceneResolved.value, surface.value.storage, true);
|
|
207
|
-
if (!output.ok) return output;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
const postEffects = topology.config?.postEffects ?? [];
|
|
211
|
-
if (topology.lane.storageBuffer && postEffects.length > 0) {
|
|
212
|
-
const effects = addTypedCompositePostEffects(
|
|
213
|
-
graph,
|
|
214
|
-
postEffects,
|
|
215
|
-
surface.value.display,
|
|
216
|
-
surface.value.storage,
|
|
217
|
-
depth.value,
|
|
218
|
-
topology.surface,
|
|
219
|
-
);
|
|
220
|
-
if (!effects.ok) return effects;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
const debug = addTypedDebugOverlayPass(graph, surface.value.display);
|
|
224
|
-
if (!debug.ok) return debug;
|
|
225
|
-
|
|
226
|
-
return ok(undefined);
|
|
296
|
+
return addStandardPost(
|
|
297
|
+
context,
|
|
298
|
+
topology,
|
|
299
|
+
sceneResolved.value,
|
|
300
|
+
depth.value,
|
|
301
|
+
surface.value,
|
|
302
|
+
temporal.value?.temporal,
|
|
303
|
+
);
|
|
227
304
|
}
|
|
228
305
|
|
|
229
306
|
export const buildStandardForwardLane = buildUrp;
|