@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
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
2
|
+
|
|
3
|
+
export interface MotionBlurParams {
|
|
4
|
+
readonly shutterAngle: number;
|
|
5
|
+
readonly maxRadiusPixels: number;
|
|
6
|
+
readonly sampleCount: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const DEFAULT_MOTION_BLUR_PARAMS: MotionBlurParams = Object.freeze({
|
|
10
|
+
shutterAngle: 180,
|
|
11
|
+
maxRadiusPixels: 32,
|
|
12
|
+
sampleCount: 8,
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export interface MotionBlurInvalidParamsDetail {
|
|
16
|
+
readonly field: keyof MotionBlurParams;
|
|
17
|
+
readonly value: unknown;
|
|
18
|
+
readonly min: number;
|
|
19
|
+
readonly max: number;
|
|
20
|
+
readonly integer?: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class MotionBlurValidationError extends Error {
|
|
24
|
+
readonly code = 'motion-blur-invalid-params' as const;
|
|
25
|
+
readonly expected: string;
|
|
26
|
+
readonly hint: string;
|
|
27
|
+
readonly detail: MotionBlurInvalidParamsDetail;
|
|
28
|
+
|
|
29
|
+
constructor(detail: MotionBlurInvalidParamsDetail) {
|
|
30
|
+
const integer = detail.integer === true ? 'integer ' : '';
|
|
31
|
+
const expected = `${detail.field} ${integer}in [${detail.min}, ${detail.max}]`;
|
|
32
|
+
super(`motion-blur-invalid-params: ${expected}`);
|
|
33
|
+
this.name = 'MotionBlurValidationError';
|
|
34
|
+
this.expected = expected;
|
|
35
|
+
this.hint = `set ${detail.field} to an ${integer}value in [${detail.min}, ${detail.max}]`;
|
|
36
|
+
this.detail = detail;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function validateField(
|
|
41
|
+
field: keyof MotionBlurParams,
|
|
42
|
+
value: number,
|
|
43
|
+
min: number,
|
|
44
|
+
max: number,
|
|
45
|
+
integer = false,
|
|
46
|
+
): MotionBlurValidationError | undefined {
|
|
47
|
+
if (
|
|
48
|
+
!Number.isFinite(value) ||
|
|
49
|
+
value < min ||
|
|
50
|
+
value > max ||
|
|
51
|
+
(integer && !Number.isInteger(value))
|
|
52
|
+
) {
|
|
53
|
+
return new MotionBlurValidationError({
|
|
54
|
+
field,
|
|
55
|
+
value,
|
|
56
|
+
min,
|
|
57
|
+
max,
|
|
58
|
+
...(integer ? { integer } : {}),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function validateMotionBlurParams(
|
|
65
|
+
input: Partial<MotionBlurParams> | undefined,
|
|
66
|
+
): Result<MotionBlurParams, MotionBlurValidationError> {
|
|
67
|
+
const value = input ?? {};
|
|
68
|
+
const shutterAngle = value.shutterAngle ?? DEFAULT_MOTION_BLUR_PARAMS.shutterAngle;
|
|
69
|
+
const maxRadiusPixels = value.maxRadiusPixels ?? DEFAULT_MOTION_BLUR_PARAMS.maxRadiusPixels;
|
|
70
|
+
const sampleCount = value.sampleCount ?? DEFAULT_MOTION_BLUR_PARAMS.sampleCount;
|
|
71
|
+
const shutterError = validateField('shutterAngle', shutterAngle, 0, 360);
|
|
72
|
+
if (shutterError !== undefined) return err(shutterError);
|
|
73
|
+
const radiusError = validateField('maxRadiusPixels', maxRadiusPixels, 0, 64);
|
|
74
|
+
if (radiusError !== undefined) return err(radiusError);
|
|
75
|
+
const sampleError = validateField('sampleCount', sampleCount, 4, 16, true);
|
|
76
|
+
if (sampleError !== undefined) return err(sampleError);
|
|
77
|
+
return ok(Object.freeze({ shutterAngle, maxRadiusPixels, sampleCount }));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function motionBlurTemporalDemand(params: MotionBlurParams | undefined): boolean {
|
|
81
|
+
return params !== undefined && params.shutterAngle > 0;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function resolveMotionBlurParams(
|
|
85
|
+
input: Partial<MotionBlurParams> | undefined,
|
|
86
|
+
): Result<MotionBlurParams | undefined, MotionBlurValidationError> {
|
|
87
|
+
if (input === undefined) return ok(undefined);
|
|
88
|
+
return validateMotionBlurParams(input);
|
|
89
|
+
}
|
package/src/features/plan.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { GraphBufferAccess, GraphTextureAccess } from '@forgeax/engine-rend
|
|
|
2
2
|
import type { RhiCaps, TextureFormat } from '@forgeax/engine-rhi';
|
|
3
3
|
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
4
4
|
import type { RenderError } from '../errors/render';
|
|
5
|
+
import type { SceneDataTarget } from '../temporal/scene-data';
|
|
5
6
|
import type {
|
|
6
7
|
RenderFeatureGpuBufferUsage,
|
|
7
8
|
RenderFeatureGpuProgramDescriptor,
|
|
@@ -10,10 +11,27 @@ import type { RenderFeaturePipelineDescriptor } from './prepared-graphics';
|
|
|
10
11
|
|
|
11
12
|
export type RenderFeatureResourceUsage = GraphBufferAccess | GraphTextureAccess;
|
|
12
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Renderer-owned binding layout contract for a material shader.
|
|
16
|
+
*
|
|
17
|
+
* Producer features use this read-only projection to describe which logical
|
|
18
|
+
* scene resources a custom material consumes. The render owner remains the
|
|
19
|
+
* source of truth for the shader source and its pipeline layout.
|
|
20
|
+
*/
|
|
21
|
+
export type RenderFeatureMaterialShaderBindingContract =
|
|
22
|
+
| 'group-0'
|
|
23
|
+
| 'group-0-resource'
|
|
24
|
+
| 'view-only'
|
|
25
|
+
| 'view-and-scene-depth'
|
|
26
|
+
| 'render-material';
|
|
27
|
+
|
|
13
28
|
export type RenderFeatureFullscreenRead =
|
|
14
29
|
| string
|
|
15
30
|
| { readonly key: string; readonly sampleType?: 'depth' };
|
|
16
31
|
|
|
32
|
+
/** A named graph target or an authorized semantic sampled-read target. */
|
|
33
|
+
export type RenderFeatureSampledTarget = string | SceneDataTarget;
|
|
34
|
+
|
|
17
35
|
/** A cooked fullscreen shader declaration owned by a RenderFeature plan. */
|
|
18
36
|
export interface RenderFeatureFullscreenProgramDeclaration {
|
|
19
37
|
readonly kind: 'fullscreen-program';
|
|
@@ -32,6 +50,7 @@ export type RenderFeatureBindingValue =
|
|
|
32
50
|
| number
|
|
33
51
|
| string
|
|
34
52
|
| ArrayBufferView
|
|
53
|
+
| SceneDataTarget
|
|
35
54
|
| readonly RenderFeatureBindingValue[]
|
|
36
55
|
| { readonly [name: string]: RenderFeatureBindingValue };
|
|
37
56
|
|
|
@@ -167,7 +186,7 @@ export type RenderFeaturePassDeclaration =
|
|
|
167
186
|
readonly depthLoadOp: 'load' | 'clear';
|
|
168
187
|
readonly depthStoreOp: 'store' | 'discard';
|
|
169
188
|
};
|
|
170
|
-
readonly sampledTargets?: readonly
|
|
189
|
+
readonly sampledTargets?: readonly RenderFeatureSampledTarget[];
|
|
171
190
|
readonly draws: readonly RenderFeatureDrawDeclaration[];
|
|
172
191
|
};
|
|
173
192
|
|
|
@@ -193,6 +212,12 @@ export interface RenderFeaturePlanContext {
|
|
|
193
212
|
readonly frame: { readonly frameNumber: number };
|
|
194
213
|
readonly generation: number;
|
|
195
214
|
readonly targets: readonly RenderFeatureLogicalTarget[];
|
|
215
|
+
/** Read-only semantic scene-data resolver bound to this plan generation. */
|
|
216
|
+
readonly sceneData: import('../temporal/scene-data-catalog').SceneDataCatalog;
|
|
217
|
+
/** Resolve a material shader's renderer-owned binding contract. */
|
|
218
|
+
readonly materialShaderBindingContract?: (
|
|
219
|
+
materialShaderId: string,
|
|
220
|
+
) => RenderFeatureMaterialShaderBindingContract;
|
|
196
221
|
}
|
|
197
222
|
|
|
198
223
|
/** Frozen declaration produced for one feature in one frame. */
|
|
@@ -303,12 +328,15 @@ export function deriveRenderFeaturePassAccess(
|
|
|
303
328
|
if (pass.depthStencilAttachment !== undefined) {
|
|
304
329
|
accesses.push({
|
|
305
330
|
resource: pass.depthStencilAttachment.target,
|
|
306
|
-
usage: pass.sampledTargets?.
|
|
331
|
+
usage: pass.sampledTargets?.some(
|
|
332
|
+
(target) => typeof target === 'string' && target === pass.depthStencilAttachment?.target,
|
|
333
|
+
)
|
|
307
334
|
? 'depth-stencil-read'
|
|
308
335
|
: 'depth-stencil-write',
|
|
309
336
|
});
|
|
310
337
|
}
|
|
311
338
|
for (const target of pass.sampledTargets ?? []) {
|
|
339
|
+
if (typeof target !== 'string') continue;
|
|
312
340
|
accesses.push({ resource: target, usage: 'sampled-read' });
|
|
313
341
|
}
|
|
314
342
|
for (const draw of pass.draws) {
|
|
@@ -411,7 +439,8 @@ export function freezeRenderFeaturePlan(
|
|
|
411
439
|
pass.colorAttachments.some((attachment) => !targets.has(attachment.target)) ||
|
|
412
440
|
(pass.depthStencilAttachment !== undefined &&
|
|
413
441
|
!targets.has(pass.depthStencilAttachment.target)) ||
|
|
414
|
-
pass.sampledTargets?.some((target) => !targets.has(target)) ===
|
|
442
|
+
pass.sampledTargets?.some((target) => typeof target === 'string' && !targets.has(target)) ===
|
|
443
|
+
true
|
|
415
444
|
) {
|
|
416
445
|
return err(stageFailure(identity));
|
|
417
446
|
}
|
|
@@ -13,6 +13,7 @@ import type {
|
|
|
13
13
|
import { type BindGroupLayoutDescriptor, err, ok, type Result } from '@forgeax/engine-types';
|
|
14
14
|
import { type RenderError, RenderFeaturePreparationFailedError } from '../errors/render';
|
|
15
15
|
import type { PipelineBuilderShaderModuleFactory } from '../pipeline-builder';
|
|
16
|
+
import type { RenderFeatureShaderModuleMode } from './types';
|
|
16
17
|
|
|
17
18
|
declare const RenderFeatureGpuProgramBrand: unique symbol;
|
|
18
19
|
export interface RenderFeatureGpuProgramRef {
|
|
@@ -909,7 +910,11 @@ function createRenderFeatureGpuWorkSession(input: {
|
|
|
909
910
|
* retains the per-feature prepared GPU state and recreates it after recovery.
|
|
910
911
|
*/
|
|
911
912
|
export interface RenderFeatureGpuWorkOwner {
|
|
912
|
-
beginFeature(
|
|
913
|
+
beginFeature(
|
|
914
|
+
featureIdentity: string,
|
|
915
|
+
generation: number,
|
|
916
|
+
shaderModuleMode?: RenderFeatureShaderModuleMode,
|
|
917
|
+
): RenderFeatureGpuPrepareSession;
|
|
913
918
|
resolveBuffer(
|
|
914
919
|
featureIdentity: string,
|
|
915
920
|
reference: RenderFeatureGpuBufferRef,
|
|
@@ -920,27 +925,37 @@ export interface RenderFeatureGpuWorkOwner {
|
|
|
920
925
|
export function createRenderFeatureGpuWorkOwner(input: {
|
|
921
926
|
readonly getDevice: () => RhiDevice;
|
|
922
927
|
readonly getShaderModuleFactory: () => PipelineBuilderShaderModuleFactory;
|
|
928
|
+
readonly getImmediateShaderModuleFactory?: () => PipelineBuilderShaderModuleFactory;
|
|
923
929
|
}): RenderFeatureGpuWorkOwner {
|
|
924
930
|
const sessions = new Map<
|
|
925
931
|
string,
|
|
926
|
-
{
|
|
932
|
+
{
|
|
933
|
+
generation: number;
|
|
934
|
+
shaderModuleMode: RenderFeatureShaderModuleMode;
|
|
935
|
+
session: RenderFeatureGpuPrepareSession;
|
|
936
|
+
}
|
|
927
937
|
>();
|
|
928
938
|
|
|
929
939
|
return {
|
|
930
|
-
beginFeature: (featureIdentity, generation) => {
|
|
940
|
+
beginFeature: (featureIdentity, generation, requestedShaderModuleMode = 'validated') => {
|
|
941
|
+
const shaderModuleMode = requestedShaderModuleMode;
|
|
931
942
|
const existing = sessions.get(featureIdentity);
|
|
932
|
-
if (existing?.generation === generation) {
|
|
943
|
+
if (existing?.generation === generation && existing.shaderModuleMode === shaderModuleMode) {
|
|
933
944
|
existing.session.beginFrame();
|
|
934
945
|
return existing.session;
|
|
935
946
|
}
|
|
936
947
|
if (existing !== undefined) existing.session.dispose();
|
|
948
|
+
const shaderModuleFactory =
|
|
949
|
+
shaderModuleMode === 'immediate'
|
|
950
|
+
? (input.getImmediateShaderModuleFactory?.() ?? input.getShaderModuleFactory())
|
|
951
|
+
: input.getShaderModuleFactory();
|
|
937
952
|
const session = createRenderFeatureGpuWorkSession({
|
|
938
953
|
device: input.getDevice(),
|
|
939
|
-
shaderModuleFactory
|
|
954
|
+
shaderModuleFactory,
|
|
940
955
|
generation,
|
|
941
956
|
featureIdentity,
|
|
942
957
|
});
|
|
943
|
-
sessions.set(featureIdentity, { generation, session });
|
|
958
|
+
sessions.set(featureIdentity, { generation, shaderModuleMode, session });
|
|
944
959
|
session.beginFrame();
|
|
945
960
|
return session;
|
|
946
961
|
},
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
type RenderFeaturePreparedStateMismatchDetail,
|
|
20
20
|
RenderFeaturePreparedStateMismatchError,
|
|
21
21
|
} from '../errors/render';
|
|
22
|
+
import type { SceneDataTarget } from '../temporal/scene-data';
|
|
22
23
|
import type { RenderFeatureGpuBufferRef } from './prepared-gpu-work';
|
|
23
24
|
import type { RenderFeatureTargetHandle } from './targets';
|
|
24
25
|
import type { PreparedKind } from './vocabulary';
|
|
@@ -234,7 +235,7 @@ export type RenderFeatureDrawRecord =
|
|
|
234
235
|
export interface RenderFeatureGraphicsPassDescriptor {
|
|
235
236
|
readonly attachments: RenderFeatureGraphicsPassAttachments;
|
|
236
237
|
/** Targets sampled by shaders but not attached for writing in this pass. */
|
|
237
|
-
readonly sampledTargets?: readonly RenderFeatureTargetHandle[];
|
|
238
|
+
readonly sampledTargets?: readonly (RenderFeatureTargetHandle | SceneDataTarget)[];
|
|
238
239
|
readonly draws: readonly RenderFeatureDrawRecord[];
|
|
239
240
|
}
|
|
240
241
|
|
|
@@ -19,6 +19,7 @@ import type {
|
|
|
19
19
|
PreparedGraphicsResolvedResource,
|
|
20
20
|
PreparedGraphicsResolvedSnapshot,
|
|
21
21
|
} from '../prepare/prepared-graphics-resolver';
|
|
22
|
+
import type { SceneDataTarget } from '../temporal/scene-data';
|
|
22
23
|
import type { RenderFeatureResolvedGpuBuffer } from './prepared-gpu-work';
|
|
23
24
|
import type {
|
|
24
25
|
RenderFeatureGraphicsPassDescriptor,
|
|
@@ -40,7 +41,7 @@ export interface RenderFeatureGraphTarget {
|
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
export type RenderFeatureGraphTargetResolver = (
|
|
43
|
-
resource: string | RenderFeatureTargetHandle,
|
|
44
|
+
resource: string | RenderFeatureTargetHandle | SceneDataTarget,
|
|
44
45
|
) => RenderFeatureGraphTarget | undefined;
|
|
45
46
|
|
|
46
47
|
export type RenderFeatureGraphBindingsResolution =
|
package/src/features/targets.ts
CHANGED
|
@@ -12,6 +12,8 @@ export type RenderFeatureTargetKind = 'scene-color' | 'scene-depth';
|
|
|
12
12
|
* internal graph key.
|
|
13
13
|
*/
|
|
14
14
|
export interface RenderFeatureTargetHandle {
|
|
15
|
+
/** Stable alias used when a pipeline exposes more than one color role. */
|
|
16
|
+
readonly name?: string;
|
|
15
17
|
readonly kind: RenderFeatureTargetKind;
|
|
16
18
|
readonly format: TextureFormat;
|
|
17
19
|
readonly sampleCount: 1 | 4;
|
|
@@ -19,6 +21,7 @@ export interface RenderFeatureTargetHandle {
|
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
export interface RenderFeatureTargetInput {
|
|
24
|
+
readonly name?: string;
|
|
22
25
|
readonly kind: RenderFeatureTargetKind;
|
|
23
26
|
readonly format: TextureFormat;
|
|
24
27
|
readonly sampleCount: 1 | 4;
|
|
@@ -54,17 +57,36 @@ export function resolveStandardRenderFeatureTargets(input: {
|
|
|
54
57
|
readonly colorAttachmentFormat: TextureFormat;
|
|
55
58
|
}): readonly RenderFeatureTargetHandle[] {
|
|
56
59
|
const sampleCount: 1 | 4 = input.antialias === 'msaa' && input.multisample ? 4 : 1;
|
|
57
|
-
const linearLdr =
|
|
60
|
+
const linearLdr =
|
|
61
|
+
(input.tonemap === 'none' && input.storageBuffer) ||
|
|
62
|
+
input.antialias === 'fxaa' ||
|
|
63
|
+
(input.antialias === 'msaa' && input.multisample);
|
|
64
|
+
const colorFormat =
|
|
65
|
+
input.tonemap !== 'none' || linearLdr ? 'rgba16float' : input.colorAttachmentFormat;
|
|
58
66
|
return [
|
|
59
67
|
createRenderFeatureTarget({
|
|
68
|
+
name: 'color',
|
|
60
69
|
kind: 'scene-color',
|
|
61
|
-
format:
|
|
70
|
+
format: colorFormat,
|
|
62
71
|
sampleCount,
|
|
63
72
|
}),
|
|
64
73
|
createRenderFeatureTarget({
|
|
74
|
+
name: 'depth',
|
|
65
75
|
kind: 'scene-depth',
|
|
66
76
|
format: 'depth24plus-stencil8',
|
|
67
77
|
sampleCount,
|
|
68
78
|
}),
|
|
79
|
+
createRenderFeatureTarget({
|
|
80
|
+
name: 'motion-input',
|
|
81
|
+
kind: 'scene-color',
|
|
82
|
+
format: colorFormat,
|
|
83
|
+
sampleCount,
|
|
84
|
+
}),
|
|
85
|
+
createRenderFeatureTarget({
|
|
86
|
+
name: 'motion-output',
|
|
87
|
+
kind: 'scene-color',
|
|
88
|
+
format: colorFormat,
|
|
89
|
+
sampleCount: 1,
|
|
90
|
+
}),
|
|
69
91
|
];
|
|
70
92
|
}
|
package/src/features/types.ts
CHANGED
|
@@ -42,6 +42,17 @@ export type {
|
|
|
42
42
|
/** Closed lifecycle states exposed by the feature host. */
|
|
43
43
|
export type RenderFeatureStatus = 'active' | 'failed' | 'disabled' | 'disposed';
|
|
44
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Shader preparation policy for feature-owned GPU programs.
|
|
47
|
+
*
|
|
48
|
+
* `validated` waits for the backend's diagnostic-rich shader preparation before
|
|
49
|
+
* exposing a module to the render graph. `immediate` is reserved for generated
|
|
50
|
+
* feature programs that must hand a WebGPU module to pipeline creation without
|
|
51
|
+
* serialising first-use on `getCompilationInfo()`; pipeline creation remains
|
|
52
|
+
* the validation boundary for that mode.
|
|
53
|
+
*/
|
|
54
|
+
export type RenderFeatureShaderModuleMode = 'validated' | 'immediate';
|
|
55
|
+
|
|
45
56
|
export interface RenderFeatureResourceHandle {
|
|
46
57
|
readonly __renderFeatureResource: unique symbol;
|
|
47
58
|
}
|
|
@@ -79,6 +90,8 @@ export interface RenderFeatureExtractContext {
|
|
|
79
90
|
export interface RenderFeature<FrameData> {
|
|
80
91
|
readonly identity: string;
|
|
81
92
|
readonly requiredCapabilities?: readonly RenderFeatureCapabilityKey[];
|
|
93
|
+
/** Optional feature-owned shader preparation policy; defaults to `validated`. */
|
|
94
|
+
readonly shaderModuleMode?: RenderFeatureShaderModuleMode;
|
|
82
95
|
/**
|
|
83
96
|
* Material shader identifiers whose modules must be ready before the first
|
|
84
97
|
* frame. The renderer resolves these against the loaded manifest and seeds
|
|
@@ -23,6 +23,7 @@ import type {
|
|
|
23
23
|
Sampler,
|
|
24
24
|
TextureView,
|
|
25
25
|
} from '@forgeax/engine-rhi';
|
|
26
|
+
import { GPU_SHADER_STAGE_FRAGMENT } from './gpu-stage';
|
|
26
27
|
import type { BglKind } from './pipeline-spec';
|
|
27
28
|
import { buildBindGroupLayoutDescriptor, type PipelineSpec } from './pipeline-spec';
|
|
28
29
|
|
|
@@ -103,6 +104,15 @@ export interface PostProcessShaderEntry {
|
|
|
103
104
|
readonly reads?: readonly (string | PostProcessReadEntry)[] | undefined;
|
|
104
105
|
}
|
|
105
106
|
|
|
107
|
+
/** Whether a feature binding opts into the temporal multi-read contract. */
|
|
108
|
+
export function isTemporalFullscreenBinding(values: Readonly<Record<string, unknown>>): boolean {
|
|
109
|
+
return (
|
|
110
|
+
values.temporal !== undefined ||
|
|
111
|
+
values.shader === 'forgeax.taa-resolve' ||
|
|
112
|
+
values.shader === 'forgeax.motion-blur'
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
106
116
|
/**
|
|
107
117
|
* Structured read entry for a post-process shader.
|
|
108
118
|
*
|
|
@@ -252,6 +262,7 @@ export function buildFullscreenPostProcessPass(
|
|
|
252
262
|
bindGroupLayout: BindGroupLayout;
|
|
253
263
|
sampler: Sampler | null;
|
|
254
264
|
depthSampler: Sampler | null;
|
|
265
|
+
extraColorBindings: readonly number[];
|
|
255
266
|
createHandle: (
|
|
256
267
|
name: string,
|
|
257
268
|
pipeline: unknown,
|
|
@@ -279,11 +290,20 @@ export function buildFullscreenPostProcessPass(
|
|
|
279
290
|
: entry.params !== undefined
|
|
280
291
|
? 'fullscreen-post-with-params'
|
|
281
292
|
: 'fullscreen-post';
|
|
282
|
-
const
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
}),
|
|
293
|
+
const descriptor = buildBindGroupLayoutDescriptor(FULLSCREEN_DEFAULT_SPEC, { kind: bglKind });
|
|
294
|
+
const colorReads = (entry.reads ?? []).filter(
|
|
295
|
+
(read) => typeof read === 'string' || read.sampleType !== 'depth',
|
|
286
296
|
);
|
|
297
|
+
const extraColorCount = Math.max(0, colorReads.length - 1);
|
|
298
|
+
const firstExtraBinding = hasDepth ? 5 : entry.params === undefined ? 2 : 3;
|
|
299
|
+
for (let index = 0; index < extraColorCount; index += 1) {
|
|
300
|
+
descriptor.entries.push({
|
|
301
|
+
binding: firstExtraBinding + index,
|
|
302
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
303
|
+
texture: { sampleType: 'float', viewDimension: '2d' },
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
const bglRes = device.createBindGroupLayout(descriptor);
|
|
287
307
|
if (!bglRes.ok) {
|
|
288
308
|
ctx.errorRegistry.fire(bglRes.error);
|
|
289
309
|
return null;
|
|
@@ -297,6 +317,9 @@ export function buildFullscreenPostProcessPass(
|
|
|
297
317
|
bindGroupLayout: bglRes.value,
|
|
298
318
|
sampler,
|
|
299
319
|
depthSampler,
|
|
320
|
+
extraColorBindings: Object.freeze(
|
|
321
|
+
Array.from({ length: extraColorCount }, (_, index) => firstExtraBinding + index),
|
|
322
|
+
),
|
|
300
323
|
createHandle: (name, pipeline, paramsBuffer) => ({
|
|
301
324
|
name,
|
|
302
325
|
paramsBuffer,
|
|
@@ -334,6 +357,7 @@ export function createFullscreenBindGroup(
|
|
|
334
357
|
paramsBuffer?: Buffer | null,
|
|
335
358
|
depthTexView?: TextureView | null,
|
|
336
359
|
depthSampler?: Sampler | null,
|
|
360
|
+
additionalViews: readonly { readonly binding: number; readonly view: TextureView }[] = [],
|
|
337
361
|
): BindGroup | null {
|
|
338
362
|
const entries: { binding: number; resource: { kind: string; value: unknown } }[] = [
|
|
339
363
|
{ binding: 0, resource: { kind: 'textureView', value: inputView } },
|
|
@@ -353,6 +377,12 @@ export function createFullscreenBindGroup(
|
|
|
353
377
|
entries.push({ binding: 3, resource: { kind: 'textureView', value: depthTexView } });
|
|
354
378
|
entries.push({ binding: 4, resource: { kind: 'sampler', value: depthSampler } });
|
|
355
379
|
}
|
|
380
|
+
for (const additional of additionalViews) {
|
|
381
|
+
entries.push({
|
|
382
|
+
binding: additional.binding,
|
|
383
|
+
resource: { kind: 'textureView', value: additional.view },
|
|
384
|
+
});
|
|
385
|
+
}
|
|
356
386
|
const res = device.createBindGroup({
|
|
357
387
|
label: 'fullscreen-post-process-bg',
|
|
358
388
|
layout: bgl,
|
package/src/gpu-scene.ts
CHANGED
|
@@ -294,6 +294,30 @@ export class GpuScene {
|
|
|
294
294
|
});
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
+
/** Publish current transforms as previous only after a successful submit. */
|
|
298
|
+
commitTemporalFrame(): Result<void, RhiError> {
|
|
299
|
+
const nextTransform = this.tableBytes.transform.slice(0);
|
|
300
|
+
const next = new Uint8Array(nextTransform);
|
|
301
|
+
const current = new Uint8Array(this.tableBytes.transform);
|
|
302
|
+
const currentOffset = offset(TRANSFORM, 'currentWorld');
|
|
303
|
+
const previousOffset = offset(TRANSFORM, 'previousWorld');
|
|
304
|
+
for (let index = 0; index < this.capacity; index += 1) {
|
|
305
|
+
next.set(
|
|
306
|
+
current.subarray(
|
|
307
|
+
index * TRANSFORM.stride + currentOffset,
|
|
308
|
+
index * TRANSFORM.stride + currentOffset + 64,
|
|
309
|
+
),
|
|
310
|
+
index * TRANSFORM.stride + previousOffset,
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
const uploaded = this.device.queue.writeBuffer(this.buffers.transform, 0, next);
|
|
314
|
+
if (!uploaded.ok) return uploaded;
|
|
315
|
+
this.tableBytes.transform = nextTransform;
|
|
316
|
+
this.uploadRanges += 1;
|
|
317
|
+
this.uploadBytes += next.byteLength;
|
|
318
|
+
return ok(undefined);
|
|
319
|
+
}
|
|
320
|
+
|
|
297
321
|
rebuild(slots: readonly RenderSceneSlot[]): Result<GpuSceneSyncResult, RhiError> {
|
|
298
322
|
this.allocations.clear();
|
|
299
323
|
this.instances.reset();
|
package/src/gpu-usage.ts
CHANGED
|
@@ -12,3 +12,5 @@ export const GPU_BUFFER_USAGE_UNIFORM = 0x40;
|
|
|
12
12
|
export const GPU_BUFFER_USAGE_STORAGE = 0x80;
|
|
13
13
|
export const GPU_BUFFER_USAGE_INDIRECT = 0x100;
|
|
14
14
|
export const GPU_BUFFER_USAGE_MAP_READ = 0x01;
|
|
15
|
+
/** GPUBufferUsage.QUERY_RESOLVE, used by optional timestamp captures. */
|
|
16
|
+
export const GPU_BUFFER_USAGE_QUERY_RESOLVE = 0x200;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// skylight-bind-group.ts -- Skylight resources merged into @group(1) PBR
|
|
2
|
-
// material BGL (binding 7..13) + fallback identity resource bundle.
|
|
2
|
+
// material BGL (binding 7..13) + fallback identity resource bundle. The
|
|
3
|
+
// complete Standard material group appends transmission entries.
|
|
3
4
|
//
|
|
4
5
|
// Plan-strategy D-5 (round-4 REVISED): the round-2 stand-alone @group(4)
|
|
5
6
|
// Skylight BindGroupLayout collided with WebGPU's default maxBindGroups=4
|
|
@@ -18,9 +19,10 @@
|
|
|
18
19
|
// (createRenderer) is responsible for passing the result to
|
|
19
20
|
// `device.createBindGroupLayout`.
|
|
20
21
|
// - assembleMaterialWithSkylightEntries(materialEntries, skylightResources):
|
|
21
|
-
// given the existing
|
|
22
|
-
// resource bundle (active or fallback), returns the merged
|
|
23
|
-
// array
|
|
22
|
+
// given the existing material BindGroupEntry values + a skylight
|
|
23
|
+
// resource bundle (active or fallback), returns the merged material
|
|
24
|
+
// array with the engine-owned transmission pair at the end, suitable for
|
|
25
|
+
// `device.createBindGroup`. Charter P5 minimal
|
|
24
26
|
// surface: this helper does NOT allocate samplers/textures itself.
|
|
25
27
|
// - createSkylightFallback(device, queue): allocate a 1x1 white
|
|
26
28
|
// irradiance/prefilter cube pair + a 1x1 BRDF approximation + intensity=0 uniform
|
|
@@ -232,22 +234,20 @@ export function mergeSkylightIntoMaterialBgl(
|
|
|
232
234
|
* call site, same layout shape -- charter P4 + F1 (AI users do not need
|
|
233
235
|
* a `if (hasSkylight)` branch when writing demos).
|
|
234
236
|
*/
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
readonly
|
|
238
|
-
readonly
|
|
239
|
-
readonly occlusionView: TextureView;
|
|
237
|
+
/** Engine-owned material transmission injection resources. */
|
|
238
|
+
export interface TransmissionBindGroupResources {
|
|
239
|
+
readonly sampler: Sampler;
|
|
240
|
+
readonly backdropView?: TextureView | null;
|
|
240
241
|
}
|
|
241
242
|
|
|
242
|
-
// Lightmap (emissive + occlusion sampler/texture pair x 2)
|
|
243
|
-
//
|
|
244
|
-
//
|
|
245
|
-
// the lightmap binding land naturally at start = 14 (D-6 / w15).
|
|
243
|
+
// Lightmap (emissive + occlusion sampler/texture pair x 2) and transmission
|
|
244
|
+
// injection starts are computed from the assembled list length on each push —
|
|
245
|
+
// no hardcoded binding literals.
|
|
246
246
|
|
|
247
247
|
export function assembleMaterialWithSkylightEntries(
|
|
248
248
|
materialEntries: readonly BindGroupEntry[],
|
|
249
249
|
skylight: SkylightBindGroupResources,
|
|
250
|
-
|
|
250
|
+
transmission?: TransmissionBindGroupResources | undefined,
|
|
251
251
|
): BindGroupEntry[] {
|
|
252
252
|
// IBL injection start = end of the user-region. The user-region IS
|
|
253
253
|
// `materialEntries` (UBO binding 0 + N sampler/texture pairs), so its length
|
|
@@ -287,30 +287,22 @@ export function assembleMaterialWithSkylightEntries(
|
|
|
287
287
|
resource: { kind: 'buffer', value: { buffer: skylight.intensityBuffer } },
|
|
288
288
|
},
|
|
289
289
|
];
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
},
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
},
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
resource: { kind: 'sampler', value: emissiveAo.occlusionSampler },
|
|
307
|
-
},
|
|
308
|
-
{
|
|
309
|
-
binding: lightmapStart + 3,
|
|
310
|
-
resource: { kind: 'textureView', value: emissiveAo.occlusionView },
|
|
311
|
-
},
|
|
312
|
-
);
|
|
313
|
-
}
|
|
290
|
+
// Transmission injection is always present after IBL. Non-transmission
|
|
291
|
+
// variants bind the existing Skylight resources as layout-only placeholders;
|
|
292
|
+
// they are not a functional fallback and are never sampled by those shaders.
|
|
293
|
+
const transmissionSampler = transmission?.sampler ?? skylight.irradianceSampler;
|
|
294
|
+
const transmissionView = transmission?.backdropView ?? skylight.brdfLutView;
|
|
295
|
+
const transmissionStart = result.length;
|
|
296
|
+
result.push(
|
|
297
|
+
{
|
|
298
|
+
binding: transmissionStart,
|
|
299
|
+
resource: { kind: 'sampler', value: transmissionSampler },
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
binding: transmissionStart + 1,
|
|
303
|
+
resource: { kind: 'textureView', value: transmissionView },
|
|
304
|
+
},
|
|
305
|
+
);
|
|
314
306
|
return result;
|
|
315
307
|
}
|
|
316
308
|
|