@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
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
import type { CompiledRenderGraphInfo, GraphTextureDescriptor } from '@forgeax/engine-render-graph';
|
|
2
|
+
import { RenderGraphError } from '@forgeax/engine-render-graph';
|
|
3
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
4
|
+
import { addTypedDebugOverlayPass } from '../debug-draw-glue';
|
|
5
|
+
import { SceneDataUnavailableError } from '../errors/render';
|
|
6
|
+
import { addMotionBlurPass } from '../features/motion-blur/motion-blur-feature';
|
|
7
|
+
import { GPU_TEXTURE_USAGE_COPY_SRC } from '../gpu-texture-usage';
|
|
8
|
+
import type {
|
|
9
|
+
RenderPipelineBuildContext,
|
|
10
|
+
RenderPipelineBuildError,
|
|
11
|
+
RenderPipelineFrame,
|
|
12
|
+
RenderPipelineTopology,
|
|
13
|
+
} from '../render-pipeline';
|
|
14
|
+
import { createRenderPipelineTarget, type RenderPipelineTarget } from '../render-pipeline';
|
|
15
|
+
import {
|
|
16
|
+
addTypedBloomPasses,
|
|
17
|
+
addTypedCompositePostEffects,
|
|
18
|
+
addTypedFullscreenPass,
|
|
19
|
+
addTypedOutputTransformPass,
|
|
20
|
+
addTypedTemporalResolvePass,
|
|
21
|
+
TYPED_BLOOM_PASS_NAMES,
|
|
22
|
+
type TypedTemporalResolveTargets,
|
|
23
|
+
} from '../typed-render-graph-primitives';
|
|
24
|
+
|
|
25
|
+
interface StandardPostSurface {
|
|
26
|
+
readonly display?: RenderPipelineTarget;
|
|
27
|
+
readonly storage: RenderPipelineTarget;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** One authored Bloom contract drives declaration and compiled-graph validation. */
|
|
31
|
+
export const STANDARD_BLOOM_TARGET_SPEC = {
|
|
32
|
+
composited: { label: 'bloom-composited', format: 'rgba16float', size: 'surface' },
|
|
33
|
+
bright: { label: 'bloom-bright', format: 'rgba16float', size: 'half-surface' },
|
|
34
|
+
blurH: { label: 'bloom-blur-h', format: 'rgba16float', size: 'half-surface' },
|
|
35
|
+
blurV: { label: 'bloom-blur-v', format: 'rgba16float', size: 'half-surface' },
|
|
36
|
+
} as const satisfies Record<
|
|
37
|
+
'composited' | 'bright' | 'blurH' | 'blurV',
|
|
38
|
+
Pick<GraphTextureDescriptor, 'format' | 'size'> & { readonly label: string }
|
|
39
|
+
>;
|
|
40
|
+
|
|
41
|
+
export interface StandardBloomGraphInspection {
|
|
42
|
+
readonly status: 'empty' | 'valid' | 'invalid';
|
|
43
|
+
readonly targetCount: number;
|
|
44
|
+
readonly targetBytes: number;
|
|
45
|
+
readonly passCount: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const emptyBloomGraphInspection = (): StandardBloomGraphInspection => ({
|
|
49
|
+
status: 'empty',
|
|
50
|
+
targetCount: 0,
|
|
51
|
+
targetBytes: 0,
|
|
52
|
+
passCount: 0,
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const invalidBloomGraphInspection = (): StandardBloomGraphInspection => ({
|
|
56
|
+
status: 'invalid',
|
|
57
|
+
targetCount: 0,
|
|
58
|
+
targetBytes: 0,
|
|
59
|
+
passCount: 0,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
function textureBytes(
|
|
63
|
+
resource: CompiledRenderGraphInfo['resources'][number],
|
|
64
|
+
expected: (typeof STANDARD_BLOOM_TARGET_SPEC)[keyof typeof STANDARD_BLOOM_TARGET_SPEC],
|
|
65
|
+
): number {
|
|
66
|
+
const descriptor = resource.descriptor;
|
|
67
|
+
if (
|
|
68
|
+
descriptor === undefined ||
|
|
69
|
+
descriptor.kind !== 'texture' ||
|
|
70
|
+
descriptor.format !== expected.format ||
|
|
71
|
+
!('size' in descriptor) ||
|
|
72
|
+
descriptor.size !== expected.size
|
|
73
|
+
)
|
|
74
|
+
return 0;
|
|
75
|
+
const texelBytes = 8;
|
|
76
|
+
let bytes = 0;
|
|
77
|
+
for (let level = 0; level < descriptor.mipLevelCount; level += 1) {
|
|
78
|
+
bytes +=
|
|
79
|
+
Math.max(1, descriptor.width >> level) *
|
|
80
|
+
Math.max(1, descriptor.height >> level) *
|
|
81
|
+
descriptor.depthOrArrayLayers *
|
|
82
|
+
texelBytes;
|
|
83
|
+
}
|
|
84
|
+
return bytes * descriptor.sampleCount;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Derive Bloom target/pass facts solely from the compiled Standard graph. */
|
|
88
|
+
export function inspectStandardBloomGraph(
|
|
89
|
+
graph: CompiledRenderGraphInfo | undefined,
|
|
90
|
+
): StandardBloomGraphInspection {
|
|
91
|
+
if (graph === undefined) return emptyBloomGraphInspection();
|
|
92
|
+
type BloomTargetSpec =
|
|
93
|
+
(typeof STANDARD_BLOOM_TARGET_SPEC)[keyof typeof STANDARD_BLOOM_TARGET_SPEC];
|
|
94
|
+
const targetSpec = new Map<string, BloomTargetSpec>(
|
|
95
|
+
Object.values(STANDARD_BLOOM_TARGET_SPEC).map((entry) => [entry.label, entry] as const),
|
|
96
|
+
);
|
|
97
|
+
const targets = graph.resources.flatMap((resource) => {
|
|
98
|
+
const expected = targetSpec.get(resource.label);
|
|
99
|
+
return expected === undefined ? [] : [{ resource, expected }];
|
|
100
|
+
});
|
|
101
|
+
const passNames = new Set<string>(Object.values(TYPED_BLOOM_PASS_NAMES));
|
|
102
|
+
const passes = graph.passes.filter((pass) => passNames.has(pass.name));
|
|
103
|
+
if (targets.length === 0 && passes.length === 0) return emptyBloomGraphInspection();
|
|
104
|
+
const completeTargetSet =
|
|
105
|
+
targets.length === Object.values(STANDARD_BLOOM_TARGET_SPEC).length &&
|
|
106
|
+
targets.every(({ resource, expected }) => textureBytes(resource, expected) > 0);
|
|
107
|
+
const completePassSet = passes.length === Object.values(TYPED_BLOOM_PASS_NAMES).length;
|
|
108
|
+
if (!completeTargetSet || !completePassSet) {
|
|
109
|
+
return invalidBloomGraphInspection();
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
status: 'valid',
|
|
113
|
+
targetCount: targets.length,
|
|
114
|
+
targetBytes: targets.reduce(
|
|
115
|
+
(bytes, target) => bytes + textureBytes(target.resource, target.expected),
|
|
116
|
+
0,
|
|
117
|
+
),
|
|
118
|
+
passCount: passes.length,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function target(
|
|
123
|
+
context: RenderPipelineBuildContext<RenderPipelineFrame>,
|
|
124
|
+
label: string,
|
|
125
|
+
descriptor: GraphTextureDescriptor,
|
|
126
|
+
): Result<RenderPipelineTarget, RenderGraphError> {
|
|
127
|
+
return createRenderPipelineTarget(context.graph, label, descriptor);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function missingTemporalContributor(
|
|
131
|
+
topology: RenderPipelineTopology,
|
|
132
|
+
contributorId: string,
|
|
133
|
+
): SceneDataUnavailableError {
|
|
134
|
+
return new SceneDataUnavailableError({
|
|
135
|
+
featureIdentity: 'forgeax::standard',
|
|
136
|
+
schema: 'forgeax::scene-data::temporal-v1',
|
|
137
|
+
lane: topology.lane.compute ? (topology.standardProfile?.lighting ?? 'direct') : 'cpu-webgl2',
|
|
138
|
+
reason: 'producer-missing',
|
|
139
|
+
missingContributorIds: [contributorId],
|
|
140
|
+
omittedMissingContributorCount: 0,
|
|
141
|
+
recovery: 'renderer-recover',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Build the one Standard post chain shared by direct and clustered lighting.
|
|
147
|
+
* Bloom is admitted before any Bloom target is declared, keeping the disabled
|
|
148
|
+
* path exact-zero while preserving the existing half-resolution four-pass
|
|
149
|
+
* implementation for the enabled path.
|
|
150
|
+
*/
|
|
151
|
+
export function addStandardPost(
|
|
152
|
+
context: RenderPipelineBuildContext<RenderPipelineFrame>,
|
|
153
|
+
topology: RenderPipelineTopology,
|
|
154
|
+
scene: RenderPipelineTarget,
|
|
155
|
+
depth: RenderPipelineTarget,
|
|
156
|
+
surface: StandardPostSurface,
|
|
157
|
+
sceneTemporal?: RenderPipelineTarget,
|
|
158
|
+
): Result<void, RenderPipelineBuildError> {
|
|
159
|
+
const clearOnly = topology.clearOnly === true;
|
|
160
|
+
const hdr =
|
|
161
|
+
!clearOnly && (topology.camera.tonemap !== 'none' || topology.camera.antialias === 'taa');
|
|
162
|
+
// Bloom is an HDR-domain effect and its recorders intentionally no-op when
|
|
163
|
+
// tone mapping is disabled. Keep the graph in the same no-op state for the
|
|
164
|
+
// TAA + tonemap:none combination; otherwise the declared Bloom composite is
|
|
165
|
+
// left clear and the following Output Transform presents a black frame.
|
|
166
|
+
const bloomActive = hdr && topology.camera.bloom === 'on' && topology.camera.tonemap !== 'none';
|
|
167
|
+
const fxaa = !clearOnly && topology.camera.antialias === 'fxaa';
|
|
168
|
+
const msaa = !clearOnly && topology.camera.antialias === 'msaa' && topology.lane.multisample;
|
|
169
|
+
const linearLdr = !clearOnly && ((!hdr && topology.lane.storageBuffer) || fxaa || msaa);
|
|
170
|
+
const rawOnly = !clearOnly && topology.surface.profile?.kind === 'raw-only';
|
|
171
|
+
const motionBlur = !clearOnly && topology.temporal?.motionBlur === true;
|
|
172
|
+
const postEffects = clearOnly ? [] : (topology.config?.postEffects ?? []);
|
|
173
|
+
const rawOnlyPostInput =
|
|
174
|
+
rawOnly && topology.lane.storageBuffer && postEffects.length > 0
|
|
175
|
+
? target(context, 'standard-post-effects-input', {
|
|
176
|
+
format: 'rgba16float',
|
|
177
|
+
size: 'surface',
|
|
178
|
+
usage: GPU_TEXTURE_USAGE_COPY_SRC,
|
|
179
|
+
domain: 'display-encoded',
|
|
180
|
+
})
|
|
181
|
+
: undefined;
|
|
182
|
+
if (rawOnlyPostInput !== undefined && !rawOnlyPostInput.ok) return rawOnlyPostInput;
|
|
183
|
+
// Every Standard route terminates at the same encoded raw storage endpoint.
|
|
184
|
+
// The raw-only profile has no alternate display view, so its debug overlay
|
|
185
|
+
// and optional post effects are kept in graph-owned float targets until the
|
|
186
|
+
// single Output Transform performs the first 8-bit quantization.
|
|
187
|
+
const finalPresent = surface.storage;
|
|
188
|
+
let postInput = scene;
|
|
189
|
+
|
|
190
|
+
if (topology.camera.antialias === 'taa') {
|
|
191
|
+
if (sceneTemporal === undefined) {
|
|
192
|
+
return err(missingTemporalContributor(topology, 'forgeax::standard::scene-data'));
|
|
193
|
+
}
|
|
194
|
+
const history = context.taaHistory;
|
|
195
|
+
if (history === undefined) {
|
|
196
|
+
return err(missingTemporalContributor(topology, 'forgeax::standard::taa-history'));
|
|
197
|
+
}
|
|
198
|
+
const resolveTargets: TypedTemporalResolveTargets = {
|
|
199
|
+
scene,
|
|
200
|
+
depth,
|
|
201
|
+
currentTemporal: sceneTemporal,
|
|
202
|
+
historyColor: history.previousColor,
|
|
203
|
+
historyTemporal: history.previousTemporal,
|
|
204
|
+
writeColor: history.currentColor,
|
|
205
|
+
writeTemporal: history.currentTemporal,
|
|
206
|
+
};
|
|
207
|
+
const resolve = addTypedTemporalResolvePass(context.graph, resolveTargets);
|
|
208
|
+
if (!resolve.ok) return resolve;
|
|
209
|
+
postInput = history.currentColor;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Feature projection and the built-in fallback share one target contract.
|
|
213
|
+
// The projection runs after TAA so Motion Blur consumes the resolved color,
|
|
214
|
+
// then both paths feed the same linear float target into Bloom/Output.
|
|
215
|
+
if (!clearOnly) {
|
|
216
|
+
const featureTargets = [
|
|
217
|
+
{
|
|
218
|
+
kind: 'scene-color' as const,
|
|
219
|
+
texture: scene.texture,
|
|
220
|
+
view: scene.view,
|
|
221
|
+
format: scene.format,
|
|
222
|
+
sampleCount: scene.sampleCount,
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
kind: 'scene-depth' as const,
|
|
226
|
+
texture: depth.texture,
|
|
227
|
+
view: depth.view,
|
|
228
|
+
format: depth.format,
|
|
229
|
+
sampleCount: depth.sampleCount,
|
|
230
|
+
},
|
|
231
|
+
];
|
|
232
|
+
if (motionBlur) {
|
|
233
|
+
if (sceneTemporal === undefined) {
|
|
234
|
+
return err(
|
|
235
|
+
new Error('Motion Blur requires the Standard scene-data producer') as RenderGraphError,
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
const blurred = target(context, 'motion-blurred-color', {
|
|
239
|
+
format: 'rgba16float',
|
|
240
|
+
size: 'surface',
|
|
241
|
+
domain: hdr ? 'linear-hdr' : 'linear-ldr',
|
|
242
|
+
});
|
|
243
|
+
if (!blurred.ok) return blurred;
|
|
244
|
+
const features = context.contributeFeatures(featureTargets, [sceneTemporal], {
|
|
245
|
+
'motion-input': postInput,
|
|
246
|
+
'motion-output': blurred.value,
|
|
247
|
+
});
|
|
248
|
+
if (!features.ok) return features;
|
|
249
|
+
if (context.hasFeature?.('forgeax.motion-blur') === true) {
|
|
250
|
+
postInput = blurred.value;
|
|
251
|
+
} else {
|
|
252
|
+
const fallback = addMotionBlurPass(context.graph, postInput, sceneTemporal, blurred.value);
|
|
253
|
+
if (!fallback.ok) return fallback;
|
|
254
|
+
postInput = blurred.value;
|
|
255
|
+
}
|
|
256
|
+
} else {
|
|
257
|
+
const features = context.contributeFeatures(
|
|
258
|
+
featureTargets,
|
|
259
|
+
sceneTemporal === undefined ? [] : [sceneTemporal],
|
|
260
|
+
);
|
|
261
|
+
if (!features.ok) return features;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
if (bloomActive) {
|
|
266
|
+
const composited = target(
|
|
267
|
+
context,
|
|
268
|
+
STANDARD_BLOOM_TARGET_SPEC.composited.label,
|
|
269
|
+
STANDARD_BLOOM_TARGET_SPEC.composited,
|
|
270
|
+
);
|
|
271
|
+
if (!composited.ok) return composited;
|
|
272
|
+
const bright = target(
|
|
273
|
+
context,
|
|
274
|
+
STANDARD_BLOOM_TARGET_SPEC.bright.label,
|
|
275
|
+
STANDARD_BLOOM_TARGET_SPEC.bright,
|
|
276
|
+
);
|
|
277
|
+
if (!bright.ok) return bright;
|
|
278
|
+
const blurH = target(
|
|
279
|
+
context,
|
|
280
|
+
STANDARD_BLOOM_TARGET_SPEC.blurH.label,
|
|
281
|
+
STANDARD_BLOOM_TARGET_SPEC.blurH,
|
|
282
|
+
);
|
|
283
|
+
if (!blurH.ok) return blurH;
|
|
284
|
+
const blurV = target(
|
|
285
|
+
context,
|
|
286
|
+
STANDARD_BLOOM_TARGET_SPEC.blurV.label,
|
|
287
|
+
STANDARD_BLOOM_TARGET_SPEC.blurV,
|
|
288
|
+
);
|
|
289
|
+
if (!blurV.ok) return blurV;
|
|
290
|
+
const bloom = addTypedBloomPasses(context.graph, {
|
|
291
|
+
scene: postInput,
|
|
292
|
+
composited: composited.value,
|
|
293
|
+
bright: bright.value,
|
|
294
|
+
blurH: blurH.value,
|
|
295
|
+
blurV: blurV.value,
|
|
296
|
+
});
|
|
297
|
+
if (!bloom.ok) return bloom;
|
|
298
|
+
postInput = composited.value;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
if (rawOnly) {
|
|
302
|
+
const overlay = addTypedDebugOverlayPass(context.graph, postInput);
|
|
303
|
+
if (!overlay.ok) return overlay;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (hdr || linearLdr || fxaa || rawOnly || motionBlur) {
|
|
307
|
+
if (fxaa) {
|
|
308
|
+
const output = target(context, 'standard-output-color', {
|
|
309
|
+
format: 'rgba16float',
|
|
310
|
+
size: 'surface',
|
|
311
|
+
usage: GPU_TEXTURE_USAGE_COPY_SRC,
|
|
312
|
+
domain: 'display-encoded',
|
|
313
|
+
});
|
|
314
|
+
if (!output.ok) return output;
|
|
315
|
+
const outputTransform = addTypedOutputTransformPass(context.graph, postInput, output.value);
|
|
316
|
+
if (!outputTransform.ok) return outputTransform;
|
|
317
|
+
const aa = addTypedFullscreenPass(context.graph, {
|
|
318
|
+
name: 'fxaa',
|
|
319
|
+
shader: 'fxaa',
|
|
320
|
+
input: output.value,
|
|
321
|
+
output: rawOnlyPostInput !== undefined ? rawOnlyPostInput.value : finalPresent,
|
|
322
|
+
});
|
|
323
|
+
if (!aa.ok) return aa;
|
|
324
|
+
} else if (rawOnlyPostInput !== undefined) {
|
|
325
|
+
const transformed = addTypedOutputTransformPass(
|
|
326
|
+
context.graph,
|
|
327
|
+
postInput,
|
|
328
|
+
rawOnlyPostInput.value,
|
|
329
|
+
);
|
|
330
|
+
if (!transformed.ok) return transformed;
|
|
331
|
+
} else if (rawOnly || linearLdr) {
|
|
332
|
+
const transformed = addTypedOutputTransformPass(context.graph, postInput, finalPresent);
|
|
333
|
+
if (!transformed.ok) return transformed;
|
|
334
|
+
} else {
|
|
335
|
+
const outputTransform = addTypedOutputTransformPass(context.graph, postInput, finalPresent);
|
|
336
|
+
if (!outputTransform.ok) return outputTransform;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
if (topology.lane.storageBuffer && postEffects.length > 0) {
|
|
341
|
+
const postInputTarget = rawOnly
|
|
342
|
+
? rawOnlyPostInput?.value
|
|
343
|
+
: (surface.display ?? surface.storage);
|
|
344
|
+
if (postInputTarget === undefined) {
|
|
345
|
+
return err(
|
|
346
|
+
new RenderGraphError({
|
|
347
|
+
code: 'resource-descriptor-invalid',
|
|
348
|
+
expected: 'raw-only post effects have a graph-owned encoded input target',
|
|
349
|
+
hint: 'retain the candidate LKG when the post-effect input target cannot be declared',
|
|
350
|
+
detail: {
|
|
351
|
+
resourceLabel: 'standard-post-effects-input',
|
|
352
|
+
field: 'descriptor',
|
|
353
|
+
expected: 'rgba16float display-encoded target',
|
|
354
|
+
actual: 'absent',
|
|
355
|
+
},
|
|
356
|
+
}),
|
|
357
|
+
);
|
|
358
|
+
}
|
|
359
|
+
const effects = addTypedCompositePostEffects(
|
|
360
|
+
context.graph,
|
|
361
|
+
postEffects,
|
|
362
|
+
postInputTarget,
|
|
363
|
+
surface.storage,
|
|
364
|
+
depth,
|
|
365
|
+
topology.surface,
|
|
366
|
+
);
|
|
367
|
+
if (!effects.ok) return effects;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
return rawOnly
|
|
371
|
+
? ok(undefined)
|
|
372
|
+
: addTypedDebugOverlayPass(context.graph, surface.display ?? surface.storage);
|
|
373
|
+
}
|
|
@@ -20,7 +20,15 @@ export type StandardTone =
|
|
|
20
20
|
| 'reinhard'
|
|
21
21
|
| 'reinhard-extended';
|
|
22
22
|
export type StandardAntialias = 'none' | 'fxaa' | 'msaa';
|
|
23
|
-
export
|
|
23
|
+
export const STANDARD_POST_STAGE_NAMES = [
|
|
24
|
+
'transparent-blend',
|
|
25
|
+
'bloom',
|
|
26
|
+
'output-transform',
|
|
27
|
+
'fxaa',
|
|
28
|
+
'post-effect',
|
|
29
|
+
'present',
|
|
30
|
+
] as const;
|
|
31
|
+
export type StandardPostStage = (typeof STANDARD_POST_STAGE_NAMES)[number];
|
|
24
32
|
|
|
25
33
|
export interface StandardProfile {
|
|
26
34
|
readonly pipelineId: typeof STANDARD_PIPELINE_ID;
|
|
@@ -30,12 +38,8 @@ export interface StandardProfile {
|
|
|
30
38
|
readonly pbr: boolean;
|
|
31
39
|
readonly ibl: boolean;
|
|
32
40
|
readonly ssao: boolean;
|
|
33
|
-
readonly bloom: boolean;
|
|
34
|
-
readonly tone: StandardTone;
|
|
35
|
-
readonly antialias: StandardAntialias;
|
|
36
|
-
readonly sky: boolean;
|
|
37
41
|
readonly fallback: StandardFallbackLane;
|
|
38
|
-
readonly postStages:
|
|
42
|
+
readonly postStages: typeof STANDARD_POST_STAGE_NAMES;
|
|
39
43
|
}
|
|
40
44
|
|
|
41
45
|
export const DEFAULT_STANDARD_PROFILE: StandardProfile = Object.freeze({
|
|
@@ -46,12 +50,8 @@ export const DEFAULT_STANDARD_PROFILE: StandardProfile = Object.freeze({
|
|
|
46
50
|
pbr: true,
|
|
47
51
|
ibl: true,
|
|
48
52
|
ssao: false,
|
|
49
|
-
bloom: true,
|
|
50
|
-
tone: 'aces-filmic',
|
|
51
|
-
antialias: 'fxaa',
|
|
52
|
-
sky: true,
|
|
53
53
|
fallback: 'native',
|
|
54
|
-
postStages:
|
|
54
|
+
postStages: STANDARD_POST_STAGE_NAMES,
|
|
55
55
|
});
|
|
56
56
|
|
|
57
57
|
export type StandardLane = StandardLightingLane | 'cpu-webgl2';
|
package/src/pipeline-builder.ts
CHANGED
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
import {
|
|
45
45
|
err,
|
|
46
|
+
ok,
|
|
46
47
|
type PipelineLayout,
|
|
47
48
|
type RenderPipeline,
|
|
48
49
|
type RenderPipelineDescriptor,
|
|
@@ -130,6 +131,8 @@ export interface PipelineBuilderContext {
|
|
|
130
131
|
* feat).
|
|
131
132
|
*/
|
|
132
133
|
readonly vertexBuffers: readonly GPUVertexBufferLayout[];
|
|
134
|
+
/** Explicit layout family selected by the renderer assembly. */
|
|
135
|
+
readonly layoutKind?: 'pbr-skin' | undefined;
|
|
133
136
|
/** Pipeline label (for GPU debug captures); defaults to `pbr-pipeline-${id}`. */
|
|
134
137
|
readonly label?: string | undefined;
|
|
135
138
|
/**
|
|
@@ -150,6 +153,81 @@ export interface PipelineBuilderContext {
|
|
|
150
153
|
* `moduleLabel` so two `#define` prefixes do not collide on one module.
|
|
151
154
|
*/
|
|
152
155
|
readonly moduleLabel?: string | undefined;
|
|
156
|
+
/** Device facts used to reject a temporal PSO before it reaches submit. */
|
|
157
|
+
readonly capabilities?: {
|
|
158
|
+
readonly storageBuffer: boolean;
|
|
159
|
+
readonly rgba16floatRenderable: boolean;
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Validate the temporal material contract at the PSO creation boundary.
|
|
165
|
+
*
|
|
166
|
+
* Downlevel WebGL2 implementations can accept a pipeline whose shader/layout
|
|
167
|
+
* pair is invalid and report the failure only when the command buffer is
|
|
168
|
+
* submitted. The temporal producer is the one material path where this is
|
|
169
|
+
* especially damaging: the invalid handle is cached and every frame then
|
|
170
|
+
* fails. Keep this check beside descriptor construction so the caller gets a
|
|
171
|
+
* structured shader failure before a handle is cached.
|
|
172
|
+
*/
|
|
173
|
+
export function validateTemporalPipelineContract(
|
|
174
|
+
source: string,
|
|
175
|
+
ctx: Pick<PipelineBuilderContext, 'colorFormat' | 'depthFormat' | 'capabilities'>,
|
|
176
|
+
): Result<void, RhiError> {
|
|
177
|
+
if (!source.includes('fn vs_temporal') || !source.includes('fn fs_temporal')) {
|
|
178
|
+
return err(
|
|
179
|
+
new RhiError({
|
|
180
|
+
code: 'shader-compile-failed',
|
|
181
|
+
expected: 'temporal material source declares vs_temporal and fs_temporal entry points',
|
|
182
|
+
hint: 'compile the temporal material variant that owns the temporal producer ABI',
|
|
183
|
+
}),
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
if (ctx.colorFormat !== 'rgba16float') {
|
|
187
|
+
return err(
|
|
188
|
+
new RhiError({
|
|
189
|
+
code: 'shader-compile-failed',
|
|
190
|
+
expected: 'temporal material target format is rgba16float',
|
|
191
|
+
hint: `temporal producer received color format ${ctx.colorFormat}; use its physical rgba16float target`,
|
|
192
|
+
}),
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
if (ctx.depthFormat === undefined) {
|
|
196
|
+
return err(
|
|
197
|
+
new RhiError({
|
|
198
|
+
code: 'shader-compile-failed',
|
|
199
|
+
expected: 'temporal material pipeline has a depth format',
|
|
200
|
+
hint: 'provide the shared scene depth attachment for the temporal producer',
|
|
201
|
+
}),
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
const capabilities = ctx.capabilities;
|
|
205
|
+
if (capabilities !== undefined) {
|
|
206
|
+
const sourceUsesStorageBuffer = /var\s*<\s*storage(?:\s*,|\s*>)/u.test(source);
|
|
207
|
+
if (sourceUsesStorageBuffer !== capabilities.storageBuffer) {
|
|
208
|
+
return err(
|
|
209
|
+
new RhiError({
|
|
210
|
+
code: 'shader-compile-failed',
|
|
211
|
+
expected: `temporal shader storage-buffer variant matches device capability (${capabilities.storageBuffer})`,
|
|
212
|
+
hint: 'resolve the material variant against the active WebGL2/native capability before creating the PSO',
|
|
213
|
+
}),
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
if (!capabilities.rgba16floatRenderable) {
|
|
217
|
+
return err(
|
|
218
|
+
new RhiError({
|
|
219
|
+
code: 'shader-compile-failed',
|
|
220
|
+
expected: 'rgba16float temporal target is renderable on the active device',
|
|
221
|
+
hint: 'preserve the structured capability refusal instead of creating a deferred-invalid PSO',
|
|
222
|
+
}),
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return ok(undefined);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function pipelineCreationHint(error: RhiError): string {
|
|
230
|
+
return `inspect compiler messages on the shader module; verify pipeline layout matches shader bindings (cause: ${error.code}; underlying hint: ${error.hint}; raw: ${error.message})`;
|
|
153
231
|
}
|
|
154
232
|
|
|
155
233
|
/**
|
|
@@ -194,8 +272,10 @@ export function buildPipelineForMaterialShader(
|
|
|
194
272
|
sampleCount: number = 1,
|
|
195
273
|
): Result<RenderPipeline, RhiError> {
|
|
196
274
|
const label = ctx.label ?? `pbr-pipeline-${id}`;
|
|
197
|
-
const vsEntry = vertexEntry ?? 'vs_main';
|
|
198
|
-
const fsEntry =
|
|
275
|
+
const vsEntry = vertexEntry ?? (passKind === 'temporal' ? 'vs_temporal' : 'vs_main');
|
|
276
|
+
const fsEntry =
|
|
277
|
+
fragmentEntry ??
|
|
278
|
+
(passKind === 'temporal' ? 'fs_temporal' : passKind === 'deferred' ? 'fs_gbuffer' : 'fs_main');
|
|
199
279
|
|
|
200
280
|
let source = entry.source;
|
|
201
281
|
if (defines !== undefined && Object.keys(defines).length > 0) {
|
|
@@ -226,6 +306,11 @@ export function buildPipelineForMaterialShader(
|
|
|
226
306
|
}
|
|
227
307
|
const shaderModule = moduleResult.value;
|
|
228
308
|
|
|
309
|
+
if (passKind === 'temporal') {
|
|
310
|
+
const temporalContract = validateTemporalPipelineContract(source, ctx);
|
|
311
|
+
if (!temporalContract.ok) return temporalContract;
|
|
312
|
+
}
|
|
313
|
+
|
|
229
314
|
// feat-20260609 M4 / R3-fixup: shadow-caster branch.
|
|
230
315
|
// The shadow render pass beginRenderPass desc is `{ colorAttachments: [],
|
|
231
316
|
// depthStencilAttachment: { format: 'depth32float', ... } }` (see
|
|
@@ -235,8 +320,10 @@ export function buildPipelineForMaterialShader(
|
|
|
235
320
|
// compatible with [RenderPassEncoder]". Ground truth descriptor was the
|
|
236
321
|
// hardcoded shadowCasterPipeline removed in T-009 (commit 6416e9de~);
|
|
237
322
|
// this branch reconstructs that exact shape via the lazy cache path.
|
|
238
|
-
//
|
|
239
|
-
//
|
|
323
|
+
// The ordinary shadow variant reads only position from the canonical 12F
|
|
324
|
+
// layout. The skinned variant additionally reads JOINTS_0 / WEIGHTS_0;
|
|
325
|
+
// both layouts come from the same geometry projection used by the main
|
|
326
|
+
// pass, so shadow rendering cannot silently reinterpret an 18F stream.
|
|
240
327
|
if (colorFormatsForPassKind(passKind, ctx.colorFormat).length === 0) {
|
|
241
328
|
// bug-20260619-csm RC-3 (AC-10): a material may supply a custom
|
|
242
329
|
// ShadowCaster pass shader that carries a fragment stage (e.g. an
|
|
@@ -255,12 +342,15 @@ export function buildPipelineForMaterialShader(
|
|
|
255
342
|
vertex: {
|
|
256
343
|
module: shaderModule,
|
|
257
344
|
entryPoint: vsEntry,
|
|
258
|
-
buffers:
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
345
|
+
buffers:
|
|
346
|
+
ctx.layoutKind === 'pbr-skin'
|
|
347
|
+
? [...ctx.vertexBuffers]
|
|
348
|
+
: [
|
|
349
|
+
{
|
|
350
|
+
arrayStride: 12 * 4,
|
|
351
|
+
attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x3' as const }],
|
|
352
|
+
},
|
|
353
|
+
],
|
|
264
354
|
},
|
|
265
355
|
// Vertex-only depth pass writes `fragment: undefined` (GPU derives
|
|
266
356
|
// depth from gl_Position.z). A custom ShadowCaster shader with a
|
|
@@ -295,7 +385,7 @@ export function buildPipelineForMaterialShader(
|
|
|
295
385
|
new RhiError({
|
|
296
386
|
code: 'shader-compile-failed',
|
|
297
387
|
expected: `shadow-caster pipeline for material shader '${id}' builds successfully`,
|
|
298
|
-
hint:
|
|
388
|
+
hint: pipelineCreationHint(shadowPipelineResult.error),
|
|
299
389
|
}),
|
|
300
390
|
);
|
|
301
391
|
}
|
|
@@ -374,7 +464,7 @@ export function buildPipelineForMaterialShader(
|
|
|
374
464
|
new RhiError({
|
|
375
465
|
code: 'shader-compile-failed',
|
|
376
466
|
expected: `pipeline for material shader '${id}' builds successfully`,
|
|
377
|
-
hint:
|
|
467
|
+
hint: pipelineCreationHint(pipelineResult.error),
|
|
378
468
|
}),
|
|
379
469
|
);
|
|
380
470
|
}
|
package/src/pipeline-spec.ts
CHANGED
|
@@ -513,6 +513,15 @@ export const passKindPolicyTable: Readonly<Record<string, PassKindAttachmentPoli
|
|
|
513
513
|
},
|
|
514
514
|
defaultDepthOps: { loadOp: 'clear', storeOp: 'store', clearValue: 1 },
|
|
515
515
|
},
|
|
516
|
+
temporal: {
|
|
517
|
+
shape: 'color-and-depth',
|
|
518
|
+
defaultColorOps: {
|
|
519
|
+
loadOp: 'clear',
|
|
520
|
+
storeOp: 'store',
|
|
521
|
+
clearValue: { r: 0, g: 0, b: -1, a: 1 },
|
|
522
|
+
},
|
|
523
|
+
defaultDepthOps: { loadOp: 'clear', storeOp: 'store', clearValue: 1 },
|
|
524
|
+
},
|
|
516
525
|
'shadow-caster': {
|
|
517
526
|
shape: 'depth-only',
|
|
518
527
|
defaultColorOps: undefined,
|
package/src/plugin.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Component, World } from '@forgeax/engine-ecs';
|
|
2
2
|
import type { Plugin } from '@forgeax/engine-plugin';
|
|
3
|
+
import { Atmosphere } from './components/atmosphere';
|
|
3
4
|
import { Camera } from './components/camera';
|
|
4
5
|
import { DirectionalLight } from './components/directional-light';
|
|
5
6
|
import { Instances } from './components/instances';
|
|
@@ -24,6 +25,7 @@ import { Tilemap } from './components/tilemap';
|
|
|
24
25
|
import { Visibility } from './components/visibility';
|
|
25
26
|
|
|
26
27
|
const RENDER_COMPONENTS: readonly Component[] = [
|
|
28
|
+
Atmosphere,
|
|
27
29
|
Camera,
|
|
28
30
|
DirectionalLight,
|
|
29
31
|
Instances,
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { isTemporalFullscreenBinding } from '../../fullscreen-post-process-pass';
|
|
3
|
+
import { shouldUseTemporalFrameTransaction } from '../typed-frame-graph';
|
|
4
|
+
|
|
5
|
+
describe('fullscreen temporal routing', () => {
|
|
6
|
+
it('keeps ordinary fullscreen bindings on the non-temporal path', () => {
|
|
7
|
+
expect(isTemporalFullscreenBinding({ fullscreen: true, shader: 'forgeax.fxaa' })).toBe(false);
|
|
8
|
+
expect(isTemporalFullscreenBinding({ fullscreen: true, shader: 'forgeax.tonemap' })).toBe(
|
|
9
|
+
false,
|
|
10
|
+
);
|
|
11
|
+
expect(isTemporalFullscreenBinding({ fullscreen: true, shader: 'forgeax.motion-blur' })).toBe(
|
|
12
|
+
true,
|
|
13
|
+
);
|
|
14
|
+
expect(
|
|
15
|
+
isTemporalFullscreenBinding({ fullscreen: true, temporal: { kind: 'scene-data' } }),
|
|
16
|
+
).toBe(true);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('opens the coordinator only for TAA frames', () => {
|
|
20
|
+
expect(shouldUseTemporalFrameTransaction('none')).toBe(false);
|
|
21
|
+
expect(shouldUseTemporalFrameTransaction('fxaa')).toBe(false);
|
|
22
|
+
expect(shouldUseTemporalFrameTransaction('msaa')).toBe(false);
|
|
23
|
+
expect(shouldUseTemporalFrameTransaction('taa')).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
});
|