@forgeax/engine-render 0.1.7 → 0.1.19
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 +12 -2
- 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-FJ6P52EE.mjs +46 -0
- package/dist/chunk-FJ6P52EE.mjs.map +1 -0
- package/dist/chunk-IPXCABEP.mjs +73 -0
- package/dist/chunk-IPXCABEP.mjs.map +1 -0
- package/dist/chunk-JDWARUOI.mjs +44 -0
- package/dist/chunk-JDWARUOI.mjs.map +1 -0
- package/dist/{chunk-YEJIUW7D.mjs → chunk-LOSO4CTV.mjs} +296 -547
- package/dist/chunk-LOSO4CTV.mjs.map +1 -0
- package/dist/chunk-PCHBPYML.mjs +385 -0
- package/dist/chunk-PCHBPYML.mjs.map +1 -0
- package/dist/chunk-RJRUS55L.mjs +9323 -0
- package/dist/chunk-RJRUS55L.mjs.map +1 -0
- package/dist/chunk-RXZ3RGOU.mjs +53 -0
- package/dist/chunk-RXZ3RGOU.mjs.map +1 -0
- package/dist/{chunk-CQXZC5XI.mjs → chunk-VFPLTKCU.mjs} +79 -69
- package/dist/chunk-VFPLTKCU.mjs.map +1 -0
- package/dist/chunk-YTQ5C7YQ.mjs +584 -0
- package/dist/chunk-YTQ5C7YQ.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/motion-blur.d.ts +7 -0
- package/dist/components/motion-blur.d.ts.map +1 -0
- package/dist/construct-renderer.d.ts +2 -2
- package/dist/construct-renderer.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +10914 -16392
- 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/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 +136 -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/ibl/skylight-bind-group.d.ts +5 -6
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +17 -6
- 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/materials.d.ts +22 -0
- package/dist/materials.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +10 -6
- 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 +3 -6
- 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-snapshot.d.ts +100 -5
- 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 +4 -2
- package/dist/record/frame.d.ts.map +1 -1
- 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 +8 -5
- 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 +76 -18
- 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 +26 -2
- 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 +92 -8
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +50 -6
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +29 -5
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +23 -4
- package/dist/render-system.d.ts.map +1 -1
- 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/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 +25 -2
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- 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__/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__/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 +9 -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 +395 -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 +102 -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 +10 -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/assembly/backend-contract.ts +47 -1
- package/src/assembly/factory.ts +1224 -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/motion-blur.ts +8 -0
- package/src/construct-renderer.ts +40 -3
- package/src/device/device-scope.ts +15 -1
- 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 +285 -0
- 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/ibl/skylight-bind-group.ts +30 -38
- package/src/index.ts +66 -6
- package/src/inspection-types.ts +48 -0
- package/src/internal.ts +5 -0
- package/src/materials.ts +119 -24
- package/src/pbr-pipeline.ts +58 -19
- package/src/pipeline/standard-forward-lane.ts +158 -101
- package/src/pipeline/standard-pipeline.ts +156 -105
- package/src/pipeline/standard-post.ts +373 -0
- package/src/pipeline/standard-profile.ts +11 -11
- 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-snapshot.ts +129 -5
- package/src/record/frame-targets.ts +15 -6
- package/src/record/frame.ts +107 -3
- package/src/record/main-pass-geometry.ts +86 -40
- package/src/record/main-pass-material.ts +114 -66
- 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 +189 -23
- package/src/record/shadow-pass.ts +113 -23
- package/src/record/skybox-post-pass.ts +97 -41
- package/src/record/typed-frame-graph.ts +565 -26
- package/src/record/view-ubo.ts +52 -4
- package/src/render-contract.ts +109 -6
- package/src/render-graph-primitives.ts +18 -1
- package/src/render-pipeline.ts +100 -27
- package/src/render-system-extract.ts +193 -69
- package/src/render-system.ts +482 -41
- package/src/scene/render-scene.ts +250 -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/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 +438 -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 +162 -9
- 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/features/host.ts
CHANGED
|
@@ -15,9 +15,12 @@ import type {
|
|
|
15
15
|
PreparedGraphicsResolver,
|
|
16
16
|
PreparedGraphicsResourceLease,
|
|
17
17
|
} from '../prepare/prepared-graphics-resolver';
|
|
18
|
+
import type { SceneDataTarget } from '../temporal/scene-data';
|
|
19
|
+
import { createSceneDataCatalog, type SceneDataCatalog } from '../temporal/scene-data-catalog';
|
|
18
20
|
import {
|
|
19
21
|
freezeRenderFeaturePlan,
|
|
20
22
|
type RenderFeatureLogicalTarget,
|
|
23
|
+
type RenderFeatureMaterialShaderBindingContract,
|
|
21
24
|
type RenderFeaturePassDeclaration,
|
|
22
25
|
type RenderFeaturePlan,
|
|
23
26
|
type RenderFeaturePlannedFrame,
|
|
@@ -53,6 +56,7 @@ import type {
|
|
|
53
56
|
RenderFeatureExtractContext,
|
|
54
57
|
RenderFeatureHiddenEntityReport,
|
|
55
58
|
RenderFeatureRecoverInput,
|
|
59
|
+
RenderFeatureShaderModuleMode,
|
|
56
60
|
RenderFeatureStatus,
|
|
57
61
|
RenderFeatureTargetHandle,
|
|
58
62
|
RenderFeatureWorldVisibilitySnapshot,
|
|
@@ -102,8 +106,14 @@ export interface RenderFeatureFrameInput {
|
|
|
102
106
|
readonly hiddenEntityReports?: readonly RenderFeatureHiddenEntityReport[];
|
|
103
107
|
/** Active-pipeline logical targets available to producer-owned features. */
|
|
104
108
|
readonly targets?: readonly RenderFeatureTargetHandle[];
|
|
109
|
+
/** Optional renderer-owned semantic catalog for the current plan generation. */
|
|
110
|
+
readonly sceneData?: SceneDataCatalog;
|
|
105
111
|
readonly generation?: number;
|
|
106
112
|
readonly caps: Readonly<RhiCaps>;
|
|
113
|
+
/** Renderer-owned material binding contract projection for producer plans. */
|
|
114
|
+
readonly materialShaderBindingContract?: (
|
|
115
|
+
materialShaderId: string,
|
|
116
|
+
) => RenderFeatureMaterialShaderBindingContract;
|
|
107
117
|
readonly createPreparedGraphicsResolver?: (
|
|
108
118
|
input: RenderFeaturePreparedGraphicsResolverInput,
|
|
109
119
|
) => PreparedGraphicsResolver;
|
|
@@ -115,6 +125,8 @@ export interface RenderFeaturePreparedGraphicsResolverInput {
|
|
|
115
125
|
readonly featureIdentity: string;
|
|
116
126
|
readonly order: number;
|
|
117
127
|
readonly generation: number;
|
|
128
|
+
/** Shader preparation policy selected by the owning feature. */
|
|
129
|
+
readonly shaderModuleMode?: RenderFeatureShaderModuleMode;
|
|
118
130
|
readonly transaction: PreparedGraphicsTransaction;
|
|
119
131
|
readonly fullscreenEffects: ReadonlyMap<string, PostProcessShaderEntry>;
|
|
120
132
|
readonly lookup: (
|
|
@@ -428,7 +440,7 @@ function logicalTargets(
|
|
|
428
440
|
): readonly RenderFeatureLogicalTarget[] {
|
|
429
441
|
return Object.freeze(
|
|
430
442
|
targets.map((target) => ({
|
|
431
|
-
name: target.kind === 'scene-color' ? 'color' : 'depth',
|
|
443
|
+
name: target.name ?? (target.kind === 'scene-color' ? 'color' : 'depth'),
|
|
432
444
|
kind: target.kind === 'scene-color' ? ('color' as const) : ('depth' as const),
|
|
433
445
|
format: target.format,
|
|
434
446
|
sampleCount: target.sampleCount,
|
|
@@ -451,14 +463,17 @@ function planFailure(slot: FeatureSlot): RenderFeatureStageFailedError {
|
|
|
451
463
|
}
|
|
452
464
|
|
|
453
465
|
function targetHandle(
|
|
454
|
-
name: string,
|
|
466
|
+
name: string | SceneDataTarget,
|
|
455
467
|
targets: readonly RenderFeatureTargetHandle[],
|
|
456
|
-
): string | RenderFeatureTargetHandle | undefined {
|
|
468
|
+
): string | RenderFeatureTargetHandle | SceneDataTarget | undefined {
|
|
457
469
|
if (name === 'swapchain') return 'swapchain';
|
|
470
|
+
if (typeof name !== 'string') return name;
|
|
458
471
|
return targets.find(
|
|
459
472
|
(target) =>
|
|
460
|
-
|
|
461
|
-
(name ===
|
|
473
|
+
target.name === name ||
|
|
474
|
+
(target.name === undefined &&
|
|
475
|
+
((name === 'color' && target.kind === 'scene-color') ||
|
|
476
|
+
(name === 'depth' && target.kind === 'scene-depth'))),
|
|
462
477
|
);
|
|
463
478
|
}
|
|
464
479
|
|
|
@@ -1169,6 +1184,7 @@ export function runRenderFeatureFrame(
|
|
|
1169
1184
|
const gpu: RenderFeatureGpuPrepareSession | undefined = input.gpuWork?.beginFeature(
|
|
1170
1185
|
identity,
|
|
1171
1186
|
input.generation ?? 0,
|
|
1187
|
+
feature.shaderModuleMode,
|
|
1172
1188
|
);
|
|
1173
1189
|
const featureHiddenEntityReports: RenderFeatureHiddenEntityReport[] = [];
|
|
1174
1190
|
const extractContext = {
|
|
@@ -1194,6 +1210,14 @@ export function runRenderFeatureFrame(
|
|
|
1194
1210
|
}
|
|
1195
1211
|
|
|
1196
1212
|
const targets = logicalTargets(input.targets ?? []);
|
|
1213
|
+
const sceneData =
|
|
1214
|
+
input.sceneData ??
|
|
1215
|
+
createSceneDataCatalog({
|
|
1216
|
+
featureIdentity: identity,
|
|
1217
|
+
generation: transaction.generation,
|
|
1218
|
+
planIdentity: `${identity}:${transaction.generation}`,
|
|
1219
|
+
rgba16floatRenderable: input.caps.rgba16floatRenderable === true,
|
|
1220
|
+
});
|
|
1197
1221
|
const declared = invokeStage(
|
|
1198
1222
|
slot,
|
|
1199
1223
|
'plan',
|
|
@@ -1203,6 +1227,10 @@ export function runRenderFeatureFrame(
|
|
|
1203
1227
|
frame: { frameNumber: input.frameNumber },
|
|
1204
1228
|
generation: transaction.generation,
|
|
1205
1229
|
targets,
|
|
1230
|
+
sceneData,
|
|
1231
|
+
...(input.materialShaderBindingContract === undefined
|
|
1232
|
+
? {}
|
|
1233
|
+
: { materialShaderBindingContract: input.materialShaderBindingContract }),
|
|
1206
1234
|
}),
|
|
1207
1235
|
stageEvents,
|
|
1208
1236
|
errors,
|
|
@@ -1246,6 +1274,9 @@ export function runRenderFeatureFrame(
|
|
|
1246
1274
|
featureIdentity: identity,
|
|
1247
1275
|
order,
|
|
1248
1276
|
generation: transaction.generation,
|
|
1277
|
+
...(feature.shaderModuleMode === undefined
|
|
1278
|
+
? {}
|
|
1279
|
+
: { shaderModuleMode: feature.shaderModuleMode }),
|
|
1249
1280
|
transaction,
|
|
1250
1281
|
fullscreenEffects,
|
|
1251
1282
|
lookup: (reference) =>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { SCENE_DATA_TEMPORAL_V1_SCHEMA } from '../../../temporal/scene-data';
|
|
3
|
+
import { createSceneDataCatalog } from '../../../temporal/scene-data-catalog';
|
|
4
|
+
import { freezeRenderFeaturePlan } from '../../plan';
|
|
5
|
+
import { planMotionBlur } from '../motion-blur-feature';
|
|
6
|
+
import { DEFAULT_MOTION_BLUR_PARAMS } from '../motion-blur-params';
|
|
7
|
+
|
|
8
|
+
const caps = {
|
|
9
|
+
rgba16floatRenderable: true,
|
|
10
|
+
compute: true,
|
|
11
|
+
storageBuffer: true,
|
|
12
|
+
} as never;
|
|
13
|
+
|
|
14
|
+
describe('Motion Blur feature plan', () => {
|
|
15
|
+
it('declares one projected fullscreen draw with semantic reads', () => {
|
|
16
|
+
const catalog = createSceneDataCatalog({
|
|
17
|
+
featureIdentity: 'forgeax.motion-blur',
|
|
18
|
+
generation: 4,
|
|
19
|
+
planIdentity: 'forgeax.motion-blur:4',
|
|
20
|
+
rgba16floatRenderable: true,
|
|
21
|
+
});
|
|
22
|
+
const planned = planMotionBlur(DEFAULT_MOTION_BLUR_PARAMS, {
|
|
23
|
+
caps,
|
|
24
|
+
frame: { frameNumber: 7 },
|
|
25
|
+
generation: 4,
|
|
26
|
+
targets: [
|
|
27
|
+
{ name: 'motion-input', kind: 'color', format: 'rgba16float', sampleCount: 1 },
|
|
28
|
+
{ name: 'motion-output', kind: 'color', format: 'rgba16float', sampleCount: 1 },
|
|
29
|
+
],
|
|
30
|
+
sceneData: catalog,
|
|
31
|
+
});
|
|
32
|
+
expect(planned.ok).toBe(true);
|
|
33
|
+
if (!planned.ok) return;
|
|
34
|
+
const frozen = freezeRenderFeaturePlan('forgeax.motion-blur', planned.value, [
|
|
35
|
+
{ name: 'motion-input', kind: 'color', format: 'rgba16float', sampleCount: 1 },
|
|
36
|
+
{ name: 'motion-output', kind: 'color', format: 'rgba16float', sampleCount: 1 },
|
|
37
|
+
]);
|
|
38
|
+
expect(frozen.ok).toBe(true);
|
|
39
|
+
if (!frozen.ok) return;
|
|
40
|
+
const bindings = frozen.value.resources.find(
|
|
41
|
+
(resource) => resource.kind === 'graphics-bindings',
|
|
42
|
+
);
|
|
43
|
+
expect(bindings?.kind).toBe('graphics-bindings');
|
|
44
|
+
const program = frozen.value.resources.find(
|
|
45
|
+
(resource) => resource.kind === 'fullscreen-program',
|
|
46
|
+
);
|
|
47
|
+
expect(program?.kind).toBe('fullscreen-program');
|
|
48
|
+
if (program?.kind === 'fullscreen-program') {
|
|
49
|
+
expect(program.reads).toEqual(['scene-color', 'scene-temporal']);
|
|
50
|
+
expect(program.reads).not.toContainEqual({ key: 'scene-depth', sampleType: 'depth' });
|
|
51
|
+
}
|
|
52
|
+
if (bindings?.kind === 'graphics-bindings') {
|
|
53
|
+
expect(bindings.values).not.toHaveProperty('depth');
|
|
54
|
+
expect(bindings.logicalTargets).toEqual({ input: 'motion-input' });
|
|
55
|
+
}
|
|
56
|
+
expect(frozen.value.passes).toHaveLength(1);
|
|
57
|
+
const pass = frozen.value.passes[0];
|
|
58
|
+
expect(pass?.kind).toBe('raster');
|
|
59
|
+
if (pass?.kind !== 'raster') return;
|
|
60
|
+
expect(pass.draws[0]?.vertexLayout).toBe('none');
|
|
61
|
+
expect(pass.sampledTargets).toEqual(
|
|
62
|
+
expect.arrayContaining(['motion-input', catalog.require(SCENE_DATA_TEMPORAL_V1_SCHEMA)]),
|
|
63
|
+
);
|
|
64
|
+
expect(pass.sampledTargets).not.toContain('motion-depth');
|
|
65
|
+
expect(catalog.schema).toBe(SCENE_DATA_TEMPORAL_V1_SCHEMA);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_MOTION_BLUR_PARAMS,
|
|
4
|
+
motionBlurTemporalDemand,
|
|
5
|
+
validateMotionBlurParams,
|
|
6
|
+
} from '../motion-blur-params';
|
|
7
|
+
|
|
8
|
+
describe('Motion Blur parameter validation', () => {
|
|
9
|
+
it('applies the bounded defaults', () => {
|
|
10
|
+
expect(validateMotionBlurParams({})).toEqual({ ok: true, value: DEFAULT_MOTION_BLUR_PARAMS });
|
|
11
|
+
expect(DEFAULT_MOTION_BLUR_PARAMS).toEqual({
|
|
12
|
+
shutterAngle: 180,
|
|
13
|
+
maxRadiusPixels: 32,
|
|
14
|
+
sampleCount: 8,
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it.each([
|
|
19
|
+
[{ shutterAngle: 0 }, 'identity shutter'],
|
|
20
|
+
[{ shutterAngle: 360, maxRadiusPixels: 0, sampleCount: 4 }, 'lower and upper bounds'],
|
|
21
|
+
[{ shutterAngle: 12, maxRadiusPixels: 64, sampleCount: 16 }, 'valid upper bounds'],
|
|
22
|
+
] as const)('accepts %s (%s)', (input, _label) => {
|
|
23
|
+
const result = validateMotionBlurParams(input);
|
|
24
|
+
expect(result.ok).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it.each([
|
|
28
|
+
['shutterAngle', -0.01],
|
|
29
|
+
['shutterAngle', 360.01],
|
|
30
|
+
['maxRadiusPixels', -0.01],
|
|
31
|
+
['maxRadiusPixels', 64.01],
|
|
32
|
+
['sampleCount', 3],
|
|
33
|
+
['sampleCount', 17],
|
|
34
|
+
['sampleCount', 8.5],
|
|
35
|
+
] as const)('returns structured failure for %s=%s', (field, value) => {
|
|
36
|
+
const result = validateMotionBlurParams({ [field]: value });
|
|
37
|
+
expect(result.ok).toBe(false);
|
|
38
|
+
if (!result.ok) {
|
|
39
|
+
expect(result.error.code).toBe('motion-blur-invalid-params');
|
|
40
|
+
expect(result.error.detail.field).toBe(field);
|
|
41
|
+
expect(result.error.expected).toContain(field);
|
|
42
|
+
expect(result.error.hint).toContain(field);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('does no temporal work when omitted or shutter is zero', () => {
|
|
47
|
+
expect(motionBlurTemporalDemand(undefined)).toBe(false);
|
|
48
|
+
expect(motionBlurTemporalDemand({ shutterAngle: 0, maxRadiusPixels: 32, sampleCount: 8 })).toBe(
|
|
49
|
+
false,
|
|
50
|
+
);
|
|
51
|
+
expect(motionBlurTemporalDemand(DEFAULT_MOTION_BLUR_PARAMS)).toBe(true);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { RenderGraphBuilder, RenderGraphError } from '@forgeax/engine-render-graph';
|
|
2
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
3
|
+
import type { RenderError } from '../../errors/render';
|
|
4
|
+
import type { RenderPipelineFrame, RenderPipelineTarget } from '../../render-pipeline';
|
|
5
|
+
import { SCENE_DATA_TEMPORAL_V1_SCHEMA } from '../../temporal/scene-data';
|
|
6
|
+
import { addTypedFullscreenPass } from '../../typed-render-graph-primitives';
|
|
7
|
+
import type { RenderFeaturePlan, RenderFeaturePlanContext } from '../plan';
|
|
8
|
+
import type { RenderFeature, RenderFeatureExtractContext } from '../types';
|
|
9
|
+
import {
|
|
10
|
+
type MotionBlurParams,
|
|
11
|
+
motionBlurTemporalDemand,
|
|
12
|
+
validateMotionBlurParams,
|
|
13
|
+
} from './motion-blur-params';
|
|
14
|
+
|
|
15
|
+
export const MOTION_BLUR_FEATURE_IDENTITY = 'forgeax.motion-blur';
|
|
16
|
+
|
|
17
|
+
export function addMotionBlurPass(
|
|
18
|
+
graph: RenderGraphBuilder<RenderPipelineFrame>,
|
|
19
|
+
input: RenderPipelineTarget,
|
|
20
|
+
temporal: RenderPipelineTarget,
|
|
21
|
+
output: RenderPipelineTarget,
|
|
22
|
+
): Result<void, RenderGraphError> {
|
|
23
|
+
return addTypedFullscreenPass(graph, {
|
|
24
|
+
name: 'motion-blur',
|
|
25
|
+
shader: MOTION_BLUR_FEATURE_IDENTITY,
|
|
26
|
+
input,
|
|
27
|
+
additionalReads: [{ key: 'scene-temporal', target: temporal }],
|
|
28
|
+
output,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface MotionBlurFeatureFrame {
|
|
33
|
+
readonly params: MotionBlurParams | undefined;
|
|
34
|
+
readonly demanded: boolean;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function planMotionBlur(
|
|
38
|
+
params: MotionBlurParams,
|
|
39
|
+
context: RenderFeaturePlanContext,
|
|
40
|
+
): Result<RenderFeaturePlan, RenderError> {
|
|
41
|
+
if (!motionBlurTemporalDemand(params)) return ok({ resources: [], passes: [] });
|
|
42
|
+
try {
|
|
43
|
+
const temporal = context.sceneData.require(SCENE_DATA_TEMPORAL_V1_SCHEMA);
|
|
44
|
+
const outputFormat =
|
|
45
|
+
context.targets.find((target) => target.name === 'motion-output')?.format ?? 'rgba16float';
|
|
46
|
+
return ok({
|
|
47
|
+
resources: [
|
|
48
|
+
{
|
|
49
|
+
kind: 'fullscreen-program',
|
|
50
|
+
name: 'motion-blur',
|
|
51
|
+
source: 'forgeax::shader::motion-blur',
|
|
52
|
+
reads: ['scene-color', 'scene-temporal'],
|
|
53
|
+
params: { byteSize: 16, defaultValue: new Uint8Array(16) },
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
kind: 'graphics-program',
|
|
57
|
+
name: 'motion-blur-pipeline',
|
|
58
|
+
program: {
|
|
59
|
+
shader: MOTION_BLUR_FEATURE_IDENTITY,
|
|
60
|
+
vertexLayout: 'none',
|
|
61
|
+
colorFormats: [outputFormat],
|
|
62
|
+
sampleCount: 1,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
kind: 'graphics-bindings',
|
|
67
|
+
name: 'motion-blur-bindings',
|
|
68
|
+
program: 'motion-blur-pipeline',
|
|
69
|
+
values: {
|
|
70
|
+
group: 1,
|
|
71
|
+
fullscreen: true,
|
|
72
|
+
shader: MOTION_BLUR_FEATURE_IDENTITY,
|
|
73
|
+
input: 'motion-input',
|
|
74
|
+
temporal,
|
|
75
|
+
},
|
|
76
|
+
logicalTargets: { input: 'motion-input' },
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
passes: [
|
|
80
|
+
{
|
|
81
|
+
kind: 'raster',
|
|
82
|
+
name: 'motion-blur',
|
|
83
|
+
colorAttachments: [{ target: 'motion-output', loadOp: 'clear', storeOp: 'store' }],
|
|
84
|
+
sampledTargets: ['motion-input', temporal],
|
|
85
|
+
draws: [
|
|
86
|
+
{
|
|
87
|
+
program: 'motion-blur-pipeline',
|
|
88
|
+
bindings: ['motion-blur-bindings'],
|
|
89
|
+
vertexData: [],
|
|
90
|
+
vertexLayout: 'none',
|
|
91
|
+
draw: { kind: 'draw', vertexCount: 3, instanceCount: 1 },
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
});
|
|
97
|
+
} catch (cause) {
|
|
98
|
+
return err(cause as RenderError);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function createMotionBlurFeature(
|
|
103
|
+
read: () => Partial<MotionBlurParams> | undefined,
|
|
104
|
+
): RenderFeature<MotionBlurFeatureFrame> {
|
|
105
|
+
return Object.freeze({
|
|
106
|
+
identity: MOTION_BLUR_FEATURE_IDENTITY,
|
|
107
|
+
extract: (_context: RenderFeatureExtractContext) => {
|
|
108
|
+
const input = read();
|
|
109
|
+
const validated = validateMotionBlurParams(input);
|
|
110
|
+
if (!validated.ok) return err(validated.error as unknown as RenderError);
|
|
111
|
+
const params = input === undefined ? undefined : validated.value;
|
|
112
|
+
return ok({ params, demanded: motionBlurTemporalDemand(params) });
|
|
113
|
+
},
|
|
114
|
+
plan: (frame: MotionBlurFeatureFrame, context: RenderFeaturePlanContext) =>
|
|
115
|
+
frame.params === undefined
|
|
116
|
+
? ok({ resources: [], passes: [] })
|
|
117
|
+
: planMotionBlur(frame.params, context),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
@@ -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 =
|