@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,47 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { geometryRenderStateForPass } from '../main-pass-geometry';
|
|
3
|
+
|
|
4
|
+
describe('geometry pass render state', () => {
|
|
5
|
+
it('keeps the main depth authority while admitting equal temporal depth', () => {
|
|
6
|
+
const base = {
|
|
7
|
+
cullMode: 'back' as const,
|
|
8
|
+
depthCompare: 'less' as const,
|
|
9
|
+
depthWriteEnabled: true,
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
expect(geometryRenderStateForPass(base, 'temporal')).toMatchObject({
|
|
13
|
+
cullMode: 'back',
|
|
14
|
+
depthCompare: 'less-equal',
|
|
15
|
+
depthWriteEnabled: false,
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('does not rewrite the base state for colour passes', () => {
|
|
20
|
+
const base = {
|
|
21
|
+
cullMode: 'none' as const,
|
|
22
|
+
depthCompare: 'less-equal' as const,
|
|
23
|
+
depthWriteEnabled: false,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
expect(geometryRenderStateForPass(base, 'forward')).toBe(base);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it.each([
|
|
30
|
+
['far then near', [0.8, 0.2]],
|
|
31
|
+
['near then far', [0.2, 0.8]],
|
|
32
|
+
] as const)('keeps the near fragment visible for %s temporal overlap', (_order, depths) => {
|
|
33
|
+
const state = geometryRenderStateForPass(
|
|
34
|
+
{ cullMode: 'back', depthCompare: 'less', depthWriteEnabled: true },
|
|
35
|
+
'temporal',
|
|
36
|
+
);
|
|
37
|
+
if (state === undefined) throw new Error('temporal render state is required');
|
|
38
|
+
const visibleDepth = 0.2;
|
|
39
|
+
const accepted = depths.filter((depth) => {
|
|
40
|
+
if (state.depthCompare === 'less-equal') return depth <= visibleDepth;
|
|
41
|
+
return depth < visibleDepth;
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
expect(state.depthWriteEnabled).toBe(false);
|
|
45
|
+
expect(accepted).toEqual([visibleDepth]);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BindGroup, BindGroupLayout, Buffer } from '@forgeax/engine-rhi';
|
|
1
|
+
import type { BindGroup, BindGroupLayout, Buffer, TextureView } from '@forgeax/engine-rhi';
|
|
2
2
|
import { describe, expect, it } from 'vitest';
|
|
3
3
|
import type { MaterialSnapshot } from '../../render-system-extract';
|
|
4
4
|
import type { MaterialBgAssemblyCacheEntry } from '../frame-snapshot';
|
|
@@ -37,5 +37,16 @@ describe('material bind-group assembly cache', () => {
|
|
|
37
37
|
expect(
|
|
38
38
|
isMaterialBgAssemblyCacheHit(cached, material, materialBgl, oldBuffer, skylightResources, 8),
|
|
39
39
|
).toBe(false);
|
|
40
|
+
expect(
|
|
41
|
+
isMaterialBgAssemblyCacheHit(
|
|
42
|
+
cached,
|
|
43
|
+
material,
|
|
44
|
+
materialBgl,
|
|
45
|
+
oldBuffer,
|
|
46
|
+
skylightResources,
|
|
47
|
+
7,
|
|
48
|
+
{} as TextureView,
|
|
49
|
+
),
|
|
50
|
+
).toBe(false);
|
|
40
51
|
});
|
|
41
52
|
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
|
|
4
|
+
const source = readFileSync(new URL('../main-pass-geometry.ts', import.meta.url), 'utf8');
|
|
5
|
+
|
|
6
|
+
describe('main-pass material pipeline cache', () => {
|
|
7
|
+
it('keeps transient pending pipelines retryable across a tight frame loop', () => {
|
|
8
|
+
const resolverStart = source.indexOf('const resolveMaterialPipeline =');
|
|
9
|
+
const resolverEnd = source.indexOf(
|
|
10
|
+
'for (let i = 0; i < validatedOrdered.length;',
|
|
11
|
+
resolverStart,
|
|
12
|
+
);
|
|
13
|
+
const resolver = source.slice(resolverStart, resolverEnd);
|
|
14
|
+
const pendingGuard = resolver.indexOf('if (handle !== null) {');
|
|
15
|
+
const cachedInsert = resolver.indexOf('cachedLookups.push(nextLookup)', pendingGuard);
|
|
16
|
+
const guardEnd = resolver.indexOf('\n }\n return handle;', pendingGuard);
|
|
17
|
+
|
|
18
|
+
expect(pendingGuard).toBeGreaterThan(-1);
|
|
19
|
+
expect(cachedInsert).toBeGreaterThan(pendingGuard);
|
|
20
|
+
expect(guardEnd).toBeGreaterThan(cachedInsert);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { Buffer, Sampler, TextureView } from '@forgeax/engine-rhi';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { assembleMaterialWithSkylightEntries } from '../../ibl/skylight-bind-group';
|
|
4
|
+
import { buildSpritePassBaseMaterialEntries } from '../main-pass-sprite-draws';
|
|
5
|
+
import type { PipelineState } from '../render-context';
|
|
6
|
+
|
|
7
|
+
describe('sprite Standard material ABI', () => {
|
|
8
|
+
it('covers transmission and thickness before IBL injection', () => {
|
|
9
|
+
const sampler = {} as Sampler;
|
|
10
|
+
const white = {} as TextureView;
|
|
11
|
+
const pipelineState = {
|
|
12
|
+
materialUniformBuffer: { buffer: {} },
|
|
13
|
+
nearestSampler: sampler,
|
|
14
|
+
defaultSampler: sampler,
|
|
15
|
+
defaultWhiteTextureView: white,
|
|
16
|
+
defaultNormalTextureView: {} as TextureView,
|
|
17
|
+
fallbackTextureView: {} as TextureView,
|
|
18
|
+
} as PipelineState;
|
|
19
|
+
const spriteTexture = {} as TextureView;
|
|
20
|
+
|
|
21
|
+
const entries = buildSpritePassBaseMaterialEntries(pipelineState, spriteTexture);
|
|
22
|
+
|
|
23
|
+
expect(entries.map((entry) => entry.binding)).toEqual([
|
|
24
|
+
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
|
|
25
|
+
]);
|
|
26
|
+
expect(entries[13]).toMatchObject({ binding: 13, resource: { kind: 'sampler' } });
|
|
27
|
+
expect(entries[14]).toMatchObject({ binding: 14, resource: { kind: 'textureView' } });
|
|
28
|
+
expect(entries[15]).toMatchObject({ binding: 15, resource: { kind: 'sampler' } });
|
|
29
|
+
expect(entries[16]).toMatchObject({ binding: 16, resource: { kind: 'textureView' } });
|
|
30
|
+
expect(entries[2]?.resource).toMatchObject({ kind: 'textureView', value: spriteTexture });
|
|
31
|
+
expect(entries).toHaveLength(17);
|
|
32
|
+
|
|
33
|
+
const merged = assembleMaterialWithSkylightEntries(entries, {
|
|
34
|
+
irradianceView: {} as TextureView,
|
|
35
|
+
irradianceSampler: sampler,
|
|
36
|
+
prefilterView: {} as TextureView,
|
|
37
|
+
prefilterSampler: sampler,
|
|
38
|
+
brdfLutView: {} as TextureView,
|
|
39
|
+
brdfLutSampler: sampler,
|
|
40
|
+
intensityBuffer: {} as Buffer,
|
|
41
|
+
});
|
|
42
|
+
expect(merged[17]).toMatchObject({
|
|
43
|
+
binding: 17,
|
|
44
|
+
resource: { kind: 'textureView' },
|
|
45
|
+
});
|
|
46
|
+
expect(merged[24]).toMatchObject({
|
|
47
|
+
binding: 24,
|
|
48
|
+
resource: { kind: 'sampler', value: sampler },
|
|
49
|
+
});
|
|
50
|
+
expect(merged[25]).toMatchObject({
|
|
51
|
+
binding: 25,
|
|
52
|
+
resource: { kind: 'textureView' },
|
|
53
|
+
});
|
|
54
|
+
expect(merged).toHaveLength(26);
|
|
55
|
+
|
|
56
|
+
const backdrop = {} as TextureView;
|
|
57
|
+
const active = assembleMaterialWithSkylightEntries(
|
|
58
|
+
entries,
|
|
59
|
+
{
|
|
60
|
+
irradianceView: {} as TextureView,
|
|
61
|
+
irradianceSampler: sampler,
|
|
62
|
+
prefilterView: {} as TextureView,
|
|
63
|
+
prefilterSampler: sampler,
|
|
64
|
+
brdfLutView: {} as TextureView,
|
|
65
|
+
brdfLutSampler: sampler,
|
|
66
|
+
intensityBuffer: {} as Buffer,
|
|
67
|
+
},
|
|
68
|
+
{ sampler, backdropView: backdrop },
|
|
69
|
+
);
|
|
70
|
+
expect(active[25]).toMatchObject({
|
|
71
|
+
binding: 25,
|
|
72
|
+
resource: { kind: 'textureView', value: backdrop },
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { World } from '@forgeax/engine-ecs';
|
|
2
|
+
import { vec3 } from '@forgeax/engine-math';
|
|
3
|
+
import { DEFAULT_STANDARD_PBR_PARAM_SCHEMA } from '@forgeax/engine-shader';
|
|
4
|
+
import { derive } from '@forgeax/engine-types';
|
|
5
|
+
import { describe, expect, it } from 'vitest';
|
|
6
|
+
import type { MaterialSnapshot } from '../../render-system-extract';
|
|
7
|
+
import { applyMaterialTextureUvScales, buildPbrMaterialUboPayload } from '../main-pass-material';
|
|
8
|
+
|
|
9
|
+
describe('Standard PBR UBO layout', () => {
|
|
10
|
+
it('keeps shader, derived schema, and record offsets aligned', () => {
|
|
11
|
+
const derived = derive(DEFAULT_STANDARD_PBR_PARAM_SCHEMA);
|
|
12
|
+
const numeric = new Map(derived.numericMembers.map((member) => [member.name, member.offset]));
|
|
13
|
+
const coordinates = new Map(
|
|
14
|
+
derived.coordinateRecords.map((record) => [record.parameter, record.offset]),
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
expect(derived.totalBytes).toBe(384);
|
|
18
|
+
expect(numeric.get('normalScale')).toBe(92);
|
|
19
|
+
expect(numeric.get('transmission')).toBe(96);
|
|
20
|
+
expect(numeric.get('ior')).toBe(100);
|
|
21
|
+
expect(numeric.get('thickness')).toBe(104);
|
|
22
|
+
expect(numeric.get('attenuationColor')).toBe(112);
|
|
23
|
+
expect(numeric.get('attenuationDistance')).toBe(124);
|
|
24
|
+
expect(coordinates.get('baseColorTexture')).toBe(128);
|
|
25
|
+
expect(coordinates.get('transmissionTexture')).toBe(320);
|
|
26
|
+
expect(coordinates.get('thicknessTexture')).toBe(352);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('writes transmission scalars and defaults at the reflected offsets', () => {
|
|
30
|
+
const material = {
|
|
31
|
+
baseColor: vec3.create(0.7, 0.7, 0.7),
|
|
32
|
+
metallic: 0,
|
|
33
|
+
roughness: 0.4,
|
|
34
|
+
normalScale: 0.25,
|
|
35
|
+
materialShaderId: 'forgeax::default-standard-pbr',
|
|
36
|
+
paramSnapshot: {
|
|
37
|
+
transmission: 0.75,
|
|
38
|
+
ior: 1.6,
|
|
39
|
+
thickness: 0.2,
|
|
40
|
+
attenuationColor: [0.2, 0.4, 0.6],
|
|
41
|
+
attenuationDistance: 3,
|
|
42
|
+
},
|
|
43
|
+
} satisfies MaterialSnapshot;
|
|
44
|
+
const f32 = new Float32Array(buildPbrMaterialUboPayload(material).buffer);
|
|
45
|
+
|
|
46
|
+
expect(f32.slice(23, 32)).toEqual(
|
|
47
|
+
new Float32Array([0.25, 0.75, 1.6, 0.2, 0, 0.2, 0.4, 0.6, 3]),
|
|
48
|
+
);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('uses all eight identity coordinate records in the no-snapshot fallback', () => {
|
|
52
|
+
const material = {
|
|
53
|
+
baseColor: vec3.create(0.7, 0.7, 0.7),
|
|
54
|
+
metallic: 0,
|
|
55
|
+
roughness: 0.4,
|
|
56
|
+
materialShaderId: 'forgeax::default-standard-pbr',
|
|
57
|
+
} satisfies MaterialSnapshot;
|
|
58
|
+
const payload = buildPbrMaterialUboPayload(material);
|
|
59
|
+
|
|
60
|
+
applyMaterialTextureUvScales(payload, material, new World());
|
|
61
|
+
|
|
62
|
+
const f32 = new Float32Array(payload.buffer);
|
|
63
|
+
expect(f32.slice(32, 96)).toEqual(
|
|
64
|
+
new Float32Array(Array(8).fill([0, 0, 1, 1, 0, 0, 1, 1]).flat()),
|
|
65
|
+
);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { vec3 } from '@forgeax/engine-math';
|
|
2
|
+
import type { Buffer, RhiQueue } from '@forgeax/engine-rhi';
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
import type { CameraSnapshot } from '../../render-contract';
|
|
5
|
+
import type { RenderableSnapshot } from '../../render-system-extract';
|
|
6
|
+
import type { TemporalView } from '../../temporal/temporal-view';
|
|
7
|
+
import type { ValidatedRenderable } from '../frame-snapshot';
|
|
8
|
+
import { uploadMeshSsboBatch } from '../mesh-ssbo';
|
|
9
|
+
import { writeViewUbo } from '../view-ubo';
|
|
10
|
+
|
|
11
|
+
function identityMatrix(): Float32Array {
|
|
12
|
+
const matrix = new Float32Array(16);
|
|
13
|
+
matrix[0] = 1;
|
|
14
|
+
matrix[5] = 1;
|
|
15
|
+
matrix[10] = 1;
|
|
16
|
+
matrix[15] = 1;
|
|
17
|
+
return matrix;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function translatedMatrix(x: number): Float32Array {
|
|
21
|
+
const matrix = identityMatrix();
|
|
22
|
+
matrix[12] = x;
|
|
23
|
+
return matrix;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function recordingQueue(): {
|
|
27
|
+
readonly queue: RhiQueue;
|
|
28
|
+
readonly uploads: readonly Uint8Array[];
|
|
29
|
+
} {
|
|
30
|
+
const uploads: Uint8Array[] = [];
|
|
31
|
+
const queue = {
|
|
32
|
+
writeBuffer: (
|
|
33
|
+
_buffer: Buffer,
|
|
34
|
+
_bufferOffset: number,
|
|
35
|
+
data: ArrayBufferView | ArrayBuffer,
|
|
36
|
+
_dataOffset?: number,
|
|
37
|
+
size?: number,
|
|
38
|
+
) => {
|
|
39
|
+
const bytes =
|
|
40
|
+
data instanceof ArrayBuffer
|
|
41
|
+
? new Uint8Array(data, 0, size ?? data.byteLength)
|
|
42
|
+
: new Uint8Array(data.buffer, data.byteOffset, size ?? data.byteLength);
|
|
43
|
+
uploads.push(new Uint8Array(bytes));
|
|
44
|
+
return { ok: true, value: undefined } as const;
|
|
45
|
+
},
|
|
46
|
+
} as unknown as RhiQueue;
|
|
47
|
+
return { queue, uploads };
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function camera(): CameraSnapshot {
|
|
51
|
+
return {
|
|
52
|
+
entityKey: 1,
|
|
53
|
+
worldId: 0,
|
|
54
|
+
historyVersion: 0,
|
|
55
|
+
position: vec3.create(0, 0, 5),
|
|
56
|
+
world: identityMatrix(),
|
|
57
|
+
fov: Math.PI / 3,
|
|
58
|
+
aspect: 1,
|
|
59
|
+
near: 0.1,
|
|
60
|
+
far: 100,
|
|
61
|
+
projection: 'perspective',
|
|
62
|
+
orthoLeft: -1,
|
|
63
|
+
orthoRight: 1,
|
|
64
|
+
orthoBottom: -1,
|
|
65
|
+
orthoTop: 1,
|
|
66
|
+
tonemap: 'none',
|
|
67
|
+
exposure: 1,
|
|
68
|
+
whitePoint: 4,
|
|
69
|
+
antialias: 'none',
|
|
70
|
+
bloom: 'off',
|
|
71
|
+
bloomThreshold: 1,
|
|
72
|
+
bloomIntensity: 1,
|
|
73
|
+
bloomBlurRadius: 4,
|
|
74
|
+
clearColor: [0, 0, 0, 1],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function temporalView(): TemporalView {
|
|
79
|
+
const current = identityMatrix();
|
|
80
|
+
current[0] = 2;
|
|
81
|
+
const previous = identityMatrix();
|
|
82
|
+
previous[0] = 3;
|
|
83
|
+
return {
|
|
84
|
+
viewId: '0:1:0',
|
|
85
|
+
historyVersion: 0,
|
|
86
|
+
temporalFrameIndex: 1,
|
|
87
|
+
historyValid: true,
|
|
88
|
+
resetReason: undefined,
|
|
89
|
+
currentJitterUv: [0, 0],
|
|
90
|
+
previousJitterUv: [0, 0],
|
|
91
|
+
currentJitteredViewProjection: current,
|
|
92
|
+
currentUnjitteredViewProjection: current,
|
|
93
|
+
previousUnjitteredViewProjection: previous,
|
|
94
|
+
projection: 'perspective',
|
|
95
|
+
near: 0.1,
|
|
96
|
+
far: 100,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
describe('temporal GPU payloads', () => {
|
|
101
|
+
it('writes temporal current/previous projection after the spot-light lanes', () => {
|
|
102
|
+
const { queue, uploads } = recordingQueue();
|
|
103
|
+
writeViewUbo(
|
|
104
|
+
queue,
|
|
105
|
+
{} as Buffer,
|
|
106
|
+
camera(),
|
|
107
|
+
{
|
|
108
|
+
kind: 'directional',
|
|
109
|
+
direction: vec3.create(0, -1, 0),
|
|
110
|
+
color: vec3.create(1, 1, 1),
|
|
111
|
+
intensity: 1,
|
|
112
|
+
},
|
|
113
|
+
{ point: [], spot: [] } as never,
|
|
114
|
+
[],
|
|
115
|
+
temporalView(),
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
const payload = new Float32Array(uploads[0]?.buffer ?? new ArrayBuffer(0));
|
|
119
|
+
expect(payload.length).toBe(240);
|
|
120
|
+
expect(payload[196]).toBeCloseTo(Math.sqrt(3));
|
|
121
|
+
expect(payload[212]).toBe(3);
|
|
122
|
+
expect(payload[228]).toBeCloseTo(0.1);
|
|
123
|
+
expect(payload[229]).toBe(100);
|
|
124
|
+
expect(payload[230]).toBe(0);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it('seeds previousWorld on the first frame and uses the submitted snapshot later', () => {
|
|
128
|
+
const first = translatedMatrix(4);
|
|
129
|
+
const previous = translatedMatrix(2);
|
|
130
|
+
const second = translatedMatrix(6);
|
|
131
|
+
const makeEntry = (world: Float32Array, temporal?: object) =>
|
|
132
|
+
({
|
|
133
|
+
source: {
|
|
134
|
+
transform: { world },
|
|
135
|
+
materials: [{ transparent: false }],
|
|
136
|
+
...(temporal === undefined ? {} : { temporal }),
|
|
137
|
+
} as unknown as RenderableSnapshot,
|
|
138
|
+
}) as unknown as ValidatedRenderable;
|
|
139
|
+
const firstRecording = recordingQueue();
|
|
140
|
+
uploadMeshSsboBatch(firstRecording.queue, { buffer: {} as Buffer }, [makeEntry(first)], null);
|
|
141
|
+
const firstPayload = new Float32Array(firstRecording.uploads[0]?.buffer ?? new ArrayBuffer(0));
|
|
142
|
+
expect(firstPayload[12]).toBe(4);
|
|
143
|
+
expect(firstPayload[28 + 12]).toBe(4);
|
|
144
|
+
|
|
145
|
+
const secondRecording = recordingQueue();
|
|
146
|
+
uploadMeshSsboBatch(
|
|
147
|
+
secondRecording.queue,
|
|
148
|
+
{ buffer: {} as Buffer },
|
|
149
|
+
[
|
|
150
|
+
makeEntry(second, {
|
|
151
|
+
previousTransform: { world: previous },
|
|
152
|
+
reactive: false,
|
|
153
|
+
}),
|
|
154
|
+
],
|
|
155
|
+
null,
|
|
156
|
+
);
|
|
157
|
+
const secondPayload = new Float32Array(
|
|
158
|
+
secondRecording.uploads[0]?.buffer ?? new ArrayBuffer(0),
|
|
159
|
+
);
|
|
160
|
+
expect(secondPayload[12]).toBe(6);
|
|
161
|
+
expect(secondPayload[28 + 12]).toBe(2);
|
|
162
|
+
expect(secondPayload[44]).toBe(0);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
@@ -1,10 +1,88 @@
|
|
|
1
|
+
import { ok } from '@forgeax/engine-types';
|
|
1
2
|
import { describe, expect, it } from 'vitest';
|
|
2
3
|
import type { RenderFeaturePlannedFrame } from '../../features/plan';
|
|
4
|
+
import { GPU_TEXTURE_USAGE_COPY_SRC } from '../../gpu-texture-usage';
|
|
5
|
+
import { getTextureIdentity, validateGraphTargetCaptureReadback } from '../frame-snapshot';
|
|
3
6
|
import {
|
|
7
|
+
executeCompiledFrameGraph,
|
|
4
8
|
type RenderFeatureGraphCandidate,
|
|
5
9
|
renderFeatureGraphPlanSignature,
|
|
6
10
|
} from '../typed-frame-graph';
|
|
7
11
|
|
|
12
|
+
const captureDescriptor = {
|
|
13
|
+
texture: {} as never,
|
|
14
|
+
format: 'rgba16float' as const,
|
|
15
|
+
size: { width: 4, height: 2 },
|
|
16
|
+
usage: GPU_TEXTURE_USAGE_COPY_SRC,
|
|
17
|
+
sample: 1,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
type CaptureOverrides = {
|
|
21
|
+
readonly target?: boolean;
|
|
22
|
+
readonly descriptor?: {
|
|
23
|
+
readonly format?: 'rgba16float' | 'rgba8unorm';
|
|
24
|
+
readonly size?: { readonly width: number; readonly height: number };
|
|
25
|
+
readonly usage?: number;
|
|
26
|
+
};
|
|
27
|
+
readonly identity?: { graphGeneration: number; frameId: number; textureIdentity: number };
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
function executeCapture(overrides: CaptureOverrides = {}) {
|
|
31
|
+
const errors: unknown[] = [];
|
|
32
|
+
const copies: unknown[] = [];
|
|
33
|
+
const texture = {} as never;
|
|
34
|
+
const descriptor = { ...captureDescriptor, ...overrides.descriptor, texture };
|
|
35
|
+
const graph = {
|
|
36
|
+
execute: () => ok(undefined),
|
|
37
|
+
};
|
|
38
|
+
const frameState = {
|
|
39
|
+
compiledFrameGraph: graph,
|
|
40
|
+
frameNumber: 13,
|
|
41
|
+
graphTargetCapture: {
|
|
42
|
+
name: 'standard-output-color',
|
|
43
|
+
buffer: {} as never,
|
|
44
|
+
bytesPerRow: 256,
|
|
45
|
+
width: 4,
|
|
46
|
+
height: 2,
|
|
47
|
+
expected: {
|
|
48
|
+
format: 'rgba16float' as const,
|
|
49
|
+
width: 4,
|
|
50
|
+
height: 2,
|
|
51
|
+
usage: GPU_TEXTURE_USAGE_COPY_SRC,
|
|
52
|
+
identity: overrides.identity ?? {
|
|
53
|
+
graphGeneration: 7,
|
|
54
|
+
frameId: 12,
|
|
55
|
+
textureIdentity: getTextureIdentity(texture),
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
perFrameGraph:
|
|
60
|
+
overrides.target === false
|
|
61
|
+
? undefined
|
|
62
|
+
: {
|
|
63
|
+
graphGeneration: 7,
|
|
64
|
+
getColorTargetTexture: () => (overrides.target === false ? undefined : texture),
|
|
65
|
+
getColorTargetDescriptor: () => (overrides.target === false ? undefined : descriptor),
|
|
66
|
+
getColorTargetView: () => undefined,
|
|
67
|
+
},
|
|
68
|
+
} as never;
|
|
69
|
+
const encoder = {
|
|
70
|
+
copyTextureToBuffer: (...args: unknown[]) => copies.push(args),
|
|
71
|
+
finish: () => ok({} as never),
|
|
72
|
+
} as never;
|
|
73
|
+
const internals = {
|
|
74
|
+
errorRegistry: { fire: (error: unknown) => errors.push(error) },
|
|
75
|
+
device: { queue: { submit: () => ok(undefined) } },
|
|
76
|
+
} as never;
|
|
77
|
+
const submitted = executeCompiledFrameGraph(internals, frameState, {} as never, encoder);
|
|
78
|
+
return { submitted, errors, copies };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function failureReason(errors: readonly unknown[]): string {
|
|
82
|
+
const error = errors[0] as { detail?: { error?: { message?: string } } } | undefined;
|
|
83
|
+
return error?.detail?.error?.message ?? '';
|
|
84
|
+
}
|
|
85
|
+
|
|
8
86
|
function planned(generation: number, signature: string): RenderFeaturePlannedFrame {
|
|
9
87
|
return {
|
|
10
88
|
featureIdentity: 'synthetic.feature',
|
|
@@ -38,4 +116,53 @@ describe('typed frame graph feature plan authority', () => {
|
|
|
38
116
|
};
|
|
39
117
|
void invalid;
|
|
40
118
|
});
|
|
119
|
+
|
|
120
|
+
it.each([
|
|
121
|
+
['missing target', { target: false }, 'target-not-present-in-current-graph'],
|
|
122
|
+
['format mismatch', { descriptor: { format: 'rgba8unorm' as const } }, 'descriptor-mismatch'],
|
|
123
|
+
['extent mismatch', { descriptor: { size: { width: 2, height: 2 } } }, 'extent-mismatch'],
|
|
124
|
+
['COPY_SRC missing', { descriptor: { usage: 0 } }, 'copy-src-usage-missing'],
|
|
125
|
+
[
|
|
126
|
+
'identity mismatch',
|
|
127
|
+
{ identity: { graphGeneration: 8, frameId: 12, textureIdentity: 999 } },
|
|
128
|
+
'identity-mismatch',
|
|
129
|
+
],
|
|
130
|
+
])('fails closed for capture %s', (_name, overrides, expectedReason) => {
|
|
131
|
+
const result = executeCapture(overrides);
|
|
132
|
+
expect(result.submitted).toBe(true);
|
|
133
|
+
expect(result.copies).toHaveLength(0);
|
|
134
|
+
expect(result.errors).toHaveLength(1);
|
|
135
|
+
expect(failureReason(result.errors)).toContain(`"reason":"${expectedReason}"`);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('copies the exact target only after all capture identity and descriptor checks pass', () => {
|
|
139
|
+
const result = executeCapture();
|
|
140
|
+
expect(result.submitted).toBe(true);
|
|
141
|
+
expect(result.errors).toHaveLength(0);
|
|
142
|
+
expect(result.copies).toHaveLength(1);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it.each([
|
|
146
|
+
[
|
|
147
|
+
'missing same-submit copy / untouched sentinel',
|
|
148
|
+
new Uint8Array([0xa5, 0xa5, 0xa5, 0xa5]),
|
|
149
|
+
new Uint8Array([0xa5, 0xa5]),
|
|
150
|
+
'capture-readback-untouched-sentinel',
|
|
151
|
+
],
|
|
152
|
+
['all-empty readback', new Uint8Array(4), undefined, 'capture-readback-empty'],
|
|
153
|
+
[
|
|
154
|
+
'non-finite float16',
|
|
155
|
+
new Uint8Array([0x01, 0x7c, 0, 0]),
|
|
156
|
+
undefined,
|
|
157
|
+
'capture-readback-non-finite',
|
|
158
|
+
],
|
|
159
|
+
])('returns a structured failure for %s readback', (_name, bytes, sentinel, expectedCode) => {
|
|
160
|
+
const result = validateGraphTargetCaptureReadback({
|
|
161
|
+
bytes,
|
|
162
|
+
expectedByteLength: 4,
|
|
163
|
+
...(sentinel === undefined ? {} : { sentinel }),
|
|
164
|
+
});
|
|
165
|
+
expect(result.ok).toBe(false);
|
|
166
|
+
if (!result.ok) expect(result.code).toBe(expectedCode);
|
|
167
|
+
});
|
|
41
168
|
});
|