@forgeax/engine-render 0.1.7 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +140 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/assembly/backend-contract.d.ts +12 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -1
- package/dist/assembly/factory.d.ts +12 -2
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/host-contract.d.ts +4 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/renderer-frame-transaction.d.ts +39 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -0
- package/dist/assembly/renderer-inspection.d.ts +22 -0
- package/dist/assembly/renderer-inspection.d.ts.map +1 -0
- package/dist/assembly/renderer-lifecycle.d.ts +4 -0
- package/dist/assembly/renderer-lifecycle.d.ts.map +1 -0
- package/dist/authoring.mjs +4 -2
- package/dist/authoring.mjs.map +1 -1
- package/dist/chunk-FJ6P52EE.mjs +46 -0
- package/dist/chunk-FJ6P52EE.mjs.map +1 -0
- package/dist/chunk-IPXCABEP.mjs +73 -0
- package/dist/chunk-IPXCABEP.mjs.map +1 -0
- package/dist/chunk-JDWARUOI.mjs +44 -0
- package/dist/chunk-JDWARUOI.mjs.map +1 -0
- package/dist/{chunk-YEJIUW7D.mjs → chunk-LOSO4CTV.mjs} +296 -547
- package/dist/chunk-LOSO4CTV.mjs.map +1 -0
- package/dist/chunk-PCHBPYML.mjs +385 -0
- package/dist/chunk-PCHBPYML.mjs.map +1 -0
- package/dist/chunk-RJRUS55L.mjs +9323 -0
- package/dist/chunk-RJRUS55L.mjs.map +1 -0
- package/dist/chunk-RXZ3RGOU.mjs +53 -0
- package/dist/chunk-RXZ3RGOU.mjs.map +1 -0
- package/dist/{chunk-CQXZC5XI.mjs → chunk-VFPLTKCU.mjs} +79 -69
- package/dist/chunk-VFPLTKCU.mjs.map +1 -0
- package/dist/chunk-YTQ5C7YQ.mjs +584 -0
- package/dist/chunk-YTQ5C7YQ.mjs.map +1 -0
- package/dist/components/atmosphere.d.ts +9 -0
- package/dist/components/atmosphere.d.ts.map +1 -0
- package/dist/components/camera.d.ts +2 -1
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/fog.d.ts +8 -0
- package/dist/components/fog.d.ts.map +1 -0
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/motion-blur.d.ts +7 -0
- package/dist/components/motion-blur.d.ts.map +1 -0
- package/dist/construct-renderer.d.ts +2 -2
- package/dist/construct-renderer.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +10914 -16392
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/device-scope.d.ts +4 -0
- package/dist/device/device-scope.d.ts.map +1 -1
- package/dist/environment/frame.d.ts +60 -0
- package/dist/environment/frame.d.ts.map +1 -0
- package/dist/environment/generation.d.ts +21 -0
- package/dist/environment/generation.d.ts.map +1 -0
- package/dist/environment/graph.d.ts +4 -0
- package/dist/environment/graph.d.ts.map +1 -0
- package/dist/environment/inspection.d.ts +48 -0
- package/dist/environment/inspection.d.ts.map +1 -0
- package/dist/environment/lifecycle.d.ts +39 -0
- package/dist/environment/lifecycle.d.ts.map +1 -0
- package/dist/environment/signature.d.ts +25 -0
- package/dist/environment/signature.d.ts.map +1 -0
- package/dist/errors/render.d.ts +136 -1
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/camera.d.ts +5 -0
- package/dist/extract/camera.d.ts.map +1 -0
- package/dist/extract/environment.d.ts +74 -0
- package/dist/extract/environment.d.ts.map +1 -0
- package/dist/extract/visibility.d.ts +1 -1
- package/dist/extract/visibility.d.ts.map +1 -1
- package/dist/features/host.d.ts +9 -2
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/motion-blur/motion-blur-feature.d.ts +16 -0
- package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -0
- package/dist/features/motion-blur/motion-blur-params.d.ts +25 -0
- package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -0
- package/dist/features/plan.d.ts +17 -2
- package/dist/features/plan.d.ts.map +1 -1
- package/dist/features/prepared-gpu-work.d.ts +3 -1
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics.d.ts +2 -1
- package/dist/features/prepared-graphics.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +2 -1
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/targets.d.ts +3 -0
- package/dist/features/targets.d.ts.map +1 -1
- package/dist/features/types.d.ts +12 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +7 -1
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +2 -0
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/ibl/skylight-bind-group.d.ts +5 -6
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +17 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +6 -4
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +43 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +2 -0
- package/dist/materials.d.ts +22 -0
- package/dist/materials.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +10 -6
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-pipeline.d.ts +3 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts +48 -0
- package/dist/pipeline/standard-post.d.ts.map +1 -0
- package/dist/pipeline/standard-profile.d.ts +3 -6
- package/dist/pipeline/standard-profile.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +18 -0
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +100 -5
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame-targets.d.ts.map +1 -1
- package/dist/record/frame.d.ts +4 -2
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +11 -0
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +8 -5
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts +8 -1
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +2 -0
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +76 -18
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts +1 -11
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +26 -2
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +4 -1
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/render-contract.d.ts +92 -8
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +50 -6
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +29 -5
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +23 -4
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +36 -2
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/temporal/coverage.d.ts +42 -0
- package/dist/temporal/coverage.d.ts.map +1 -0
- package/dist/temporal/frame-coordinator.d.ts +99 -0
- package/dist/temporal/frame-coordinator.d.ts.map +1 -0
- package/dist/temporal/gpu.d.ts +39 -0
- package/dist/temporal/gpu.d.ts.map +1 -0
- package/dist/temporal/history.d.ts +37 -0
- package/dist/temporal/history.d.ts.map +1 -0
- package/dist/temporal/index.d.ts +7 -0
- package/dist/temporal/index.d.ts.map +1 -0
- package/dist/temporal/index.mjs +8 -0
- package/dist/temporal/index.mjs.map +1 -0
- package/dist/temporal/inspection.d.ts +36 -0
- package/dist/temporal/inspection.d.ts.map +1 -0
- package/dist/temporal/scene-data-catalog.d.ts +48 -0
- package/dist/temporal/scene-data-catalog.d.ts.map +1 -0
- package/dist/temporal/scene-data.d.ts +43 -0
- package/dist/temporal/scene-data.d.ts.map +1 -0
- package/dist/temporal/standard-scene-data.d.ts +61 -0
- package/dist/temporal/standard-scene-data.d.ts.map +1 -0
- package/dist/temporal/taa-history-resources.d.ts +22 -0
- package/dist/temporal/taa-history-resources.d.ts.map +1 -0
- package/dist/temporal/taa-history-store.d.ts +27 -0
- package/dist/temporal/taa-history-store.d.ts.map +1 -0
- package/dist/temporal/taa-resolve.d.ts +15 -0
- package/dist/temporal/taa-resolve.d.ts.map +1 -0
- package/dist/temporal/temporal-view.d.ts +40 -0
- package/dist/temporal/temporal-view.d.ts.map +1 -0
- package/dist/temporal/transaction.d.ts +9 -0
- package/dist/temporal/transaction.d.ts.map +1 -0
- package/dist/temporal/view.d.ts +56 -0
- package/dist/temporal/view.d.ts.map +1 -0
- package/dist/transmission/backdrop.d.ts +147 -0
- package/dist/transmission/backdrop.d.ts.map +1 -0
- package/dist/transmission/inspection.d.ts +57 -0
- package/dist/transmission/inspection.d.ts.map +1 -0
- package/dist/transmission/oracle.d.ts +42 -0
- package/dist/transmission/oracle.d.ts.map +1 -0
- package/dist/transmission/projection.d.ts +37 -0
- package/dist/transmission/projection.d.ts.map +1 -0
- package/dist/typed-render-graph-primitives.d.ts +25 -2
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/package.json +24 -19
- package/src/__tests__/ai-user-cold-start.integration.test.ts +59 -0
- package/src/__tests__/ai-user-public-surface.test-d.ts +45 -0
- package/src/__tests__/bloom-exact-zero.unit.test.ts +202 -0
- package/src/__tests__/bloom-lifecycle.integration.test.ts +125 -0
- package/src/__tests__/construct-renderer-identity.unit.test.ts +4 -3
- package/src/__tests__/detached-inspection.integration.test.ts +177 -0
- package/src/__tests__/environment-fog-lanes.integration.test.ts +219 -0
- package/src/__tests__/environment-generation.integration.test.ts +141 -0
- package/src/__tests__/environment-selection.unit.test.ts +245 -0
- package/src/__tests__/factory-contract.integration.test.ts +1380 -9
- package/src/__tests__/frame-plan-contract.unit.test.ts +90 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +7 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +74 -22
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +37 -0
- package/src/__tests__/gpu-scene.unit.test.ts +10 -0
- package/src/__tests__/injection-kind-owner.test-d.ts +2 -1
- package/src/__tests__/material-contract-inventory.unit.test.ts +62 -0
- package/src/__tests__/material-cooked-projection.unit.test.ts +18 -146
- package/src/__tests__/materials-transmission-validation.unit.test.ts +36 -0
- package/src/__tests__/morph-feature-plan.unit.test.ts +7 -0
- package/src/__tests__/motion-blur.pixel.integration.test.ts +121 -0
- package/src/__tests__/public-surface.test-d.ts +15 -1
- package/src/__tests__/render-error-code-owner.test-d.ts +9 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +11 -2
- package/src/__tests__/render-error-exhaustive.test-d.ts +3 -0
- package/src/__tests__/render-feature-errors.unit.test.ts +33 -3
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +44 -0
- package/src/__tests__/render-feature-plan.test-d.ts +22 -89
- package/src/__tests__/render-scene-projection.unit.test.ts +28 -0
- package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +26 -0
- package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +21 -0
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +395 -1
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +405 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +22 -0
- package/src/__tests__/scene-data-catalog.unit.test.ts +59 -0
- package/src/__tests__/scene-data-consumer.integration.test.ts +67 -0
- package/src/__tests__/scene-data-contract.test-d.ts +35 -0
- package/src/__tests__/scene-data-inspection.unit.test.ts +41 -0
- package/src/__tests__/scene-data-public-surface.test-d.ts +34 -0
- package/src/__tests__/shader-manifest-fixture.ts +111 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +102 -0
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +24 -3
- package/src/__tests__/standard-pipeline.dawn.test.ts +15 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +543 -1
- package/src/__tests__/standard-profile-oracle.unit.test.ts +10 -2
- package/src/__tests__/standard-temporal-producer.integration.test.ts +35 -0
- package/src/__tests__/surface-configuration.unit.test.ts +211 -12
- package/src/__tests__/taa-transaction.integration.test.ts +30 -0
- package/src/__tests__/temporal-admission.integration.test.ts +40 -0
- package/src/__tests__/temporal-coverage.unit.test.ts +35 -0
- package/src/__tests__/temporal-demand.unit.test.ts +44 -0
- package/src/__tests__/temporal-frame-coordinator.unit.test.ts +64 -0
- package/src/__tests__/temporal-graph-topology.unit.test.ts +51 -0
- package/src/__tests__/temporal-history-lifecycle.unit.test.ts +170 -0
- package/src/__tests__/temporal-performance.integration.test.ts +615 -0
- package/src/__tests__/temporal-reset-matrix.unit.test.ts +97 -0
- package/src/__tests__/temporal-transaction.integration.test.ts +60 -0
- package/src/__tests__/temporal-view.unit.test.ts +152 -0
- package/src/__tests__/transmission-prewarm.unit.test.ts +93 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +230 -1
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +25 -1
- package/src/__tests__/urp-pipeline.unit.test.ts +4 -3
- package/src/__tests__/visibility-extract.integration.test.ts +27 -1
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +10 -0
- package/src/assembly/backend-contract.ts +47 -1
- package/src/assembly/factory.ts +1224 -505
- package/src/assembly/host-contract.ts +4 -0
- package/src/assembly/renderer-frame-transaction.ts +75 -0
- package/src/assembly/renderer-inspection.ts +112 -0
- package/src/assembly/renderer-lifecycle.ts +6 -0
- package/src/components/__tests__/motion-blur.unit.test.ts +14 -0
- package/src/components/__tests__/schema-contract.unit.test.ts +6 -1
- package/src/components/atmosphere.ts +10 -0
- package/src/components/camera.ts +2 -1
- package/src/components/fog.ts +9 -0
- package/src/components/index.ts +3 -0
- package/src/components/motion-blur.ts +8 -0
- package/src/construct-renderer.ts +40 -3
- package/src/device/device-scope.ts +15 -1
- package/src/environment/frame.ts +185 -0
- package/src/environment/generation.ts +23 -0
- package/src/environment/graph.ts +9 -0
- package/src/environment/inspection.ts +87 -0
- package/src/environment/lifecycle.ts +250 -0
- package/src/environment/signature.ts +55 -0
- package/src/errors/render.ts +285 -0
- package/src/extract/camera.ts +78 -0
- package/src/extract/environment.ts +171 -0
- package/src/extract/visibility.ts +38 -19
- package/src/features/host.ts +36 -5
- package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +67 -0
- package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +53 -0
- package/src/features/motion-blur/motion-blur-feature.ts +119 -0
- package/src/features/motion-blur/motion-blur-params.ts +89 -0
- package/src/features/plan.ts +32 -3
- package/src/features/prepared-gpu-work.ts +21 -6
- package/src/features/prepared-graphics.ts +2 -1
- package/src/features/render-graph-raster.ts +2 -1
- package/src/features/targets.ts +24 -2
- package/src/features/types.ts +13 -0
- package/src/fullscreen-post-process-pass.ts +34 -4
- package/src/gpu-scene.ts +24 -0
- package/src/ibl/skylight-bind-group.ts +30 -38
- package/src/index.ts +66 -6
- package/src/inspection-types.ts +48 -0
- package/src/internal.ts +5 -0
- package/src/materials.ts +119 -24
- package/src/pbr-pipeline.ts +58 -19
- package/src/pipeline/standard-forward-lane.ts +158 -101
- package/src/pipeline/standard-pipeline.ts +156 -105
- package/src/pipeline/standard-post.ts +373 -0
- package/src/pipeline/standard-profile.ts +11 -11
- package/src/pipeline-builder.ts +102 -12
- package/src/pipeline-spec.ts +9 -0
- package/src/plugin.ts +2 -0
- package/src/record/__tests__/fullscreen-temporal-routing.unit.test.ts +25 -0
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +47 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +12 -1
- package/src/record/__tests__/material-pipeline-pending-cache.unit.test.ts +22 -0
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +75 -0
- package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +67 -0
- package/src/record/__tests__/temporal-payload.unit.test.ts +164 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +127 -0
- package/src/record/frame-snapshot.ts +129 -5
- package/src/record/frame-targets.ts +15 -6
- package/src/record/frame.ts +107 -3
- package/src/record/main-pass-geometry.ts +86 -40
- package/src/record/main-pass-material.ts +114 -66
- package/src/record/main-pass-sprite-draws.ts +78 -101
- package/src/record/main-pass.ts +77 -4
- package/src/record/mesh-ssbo.ts +22 -3
- package/src/record/render-context.ts +189 -23
- package/src/record/shadow-pass.ts +113 -23
- package/src/record/skybox-post-pass.ts +97 -41
- package/src/record/typed-frame-graph.ts +565 -26
- package/src/record/view-ubo.ts +52 -4
- package/src/render-contract.ts +109 -6
- package/src/render-graph-primitives.ts +18 -1
- package/src/render-pipeline.ts +100 -27
- package/src/render-system-extract.ts +193 -69
- package/src/render-system.ts +482 -41
- package/src/scene/render-scene.ts +250 -7
- package/src/temporal/__tests__/taa-history-resources.unit.test.ts +45 -0
- package/src/temporal/coverage.ts +76 -0
- package/src/temporal/frame-coordinator.ts +311 -0
- package/src/temporal/gpu.ts +287 -0
- package/src/temporal/history.ts +92 -0
- package/src/temporal/index.ts +6 -0
- package/src/temporal/inspection.ts +97 -0
- package/src/temporal/scene-data-catalog.ts +200 -0
- package/src/temporal/scene-data.ts +149 -0
- package/src/temporal/standard-scene-data.ts +182 -0
- package/src/temporal/taa-history-resources.ts +128 -0
- package/src/temporal/taa-history-store.ts +79 -0
- package/src/temporal/taa-resolve.ts +34 -0
- package/src/temporal/temporal-view.ts +169 -0
- package/src/temporal/transaction.ts +17 -0
- package/src/temporal/view.ts +161 -0
- package/src/transmission/__tests__/capability.unit.test.ts +83 -0
- package/src/transmission/__tests__/composition.integration.test.ts +161 -0
- package/src/transmission/__tests__/inspection.unit.test.ts +241 -0
- package/src/transmission/__tests__/lifecycle.integration.test.ts +96 -0
- package/src/transmission/__tests__/oracle.unit.test.ts +131 -0
- package/src/transmission/__tests__/projection.unit.test.ts +71 -0
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +438 -0
- package/src/transmission/__tests__/transmission-backdrop-topology.unit.test.ts +109 -0
- package/src/transmission/__tests__/transmission-backdrop.dawn.test.ts +105 -0
- package/src/transmission/backdrop.ts +572 -0
- package/src/transmission/inspection.ts +190 -0
- package/src/transmission/oracle.ts +141 -0
- package/src/transmission/projection.ts +83 -0
- package/src/typed-render-graph-primitives.ts +162 -9
- package/dist/__tests__/authoring-path.unit.test.d.ts +0 -2
- package/dist/__tests__/authoring-path.unit.test.d.ts.map +0 -1
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +0 -2
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +0 -1
- package/dist/__tests__/callback-inference.test-d.d.ts +0 -2
- package/dist/__tests__/callback-inference.test-d.d.ts.map +0 -1
- package/dist/__tests__/cluster-binner.test.d.ts +0 -2
- package/dist/__tests__/cluster-binner.test.d.ts.map +0 -1
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +0 -2
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +0 -1
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +0 -2
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +0 -1
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +0 -2
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +0 -1
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +0 -2
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +0 -1
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +0 -2
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +0 -1
- package/dist/__tests__/factory-contract.integration.test.d.ts +0 -2
- package/dist/__tests__/factory-contract.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/frame-observation.contract.test.d.ts +0 -2
- package/dist/__tests__/frame-observation.contract.test.d.ts.map +0 -1
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +0 -2
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +0 -1
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +0 -2
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +0 -6
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +0 -18
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view-reference.d.ts +0 -15
- package/dist/__tests__/gpu-driven-view-reference.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +0 -7
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene.dawn.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene.unit.test.d.ts +0 -2
- package/dist/__tests__/gpu-scene.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +0 -2
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +0 -1
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +0 -2
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +0 -1
- package/dist/__tests__/injection-kind-owner.test-d.d.ts +0 -2
- package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +0 -2
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts +0 -2
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts +0 -2
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts +0 -2
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +0 -2
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +0 -1
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +0 -2
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-stride-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +0 -2
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +0 -1
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +0 -2
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +0 -2
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +0 -1
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts +0 -2
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +0 -1
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +0 -2
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +0 -1
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +0 -2
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-default-off.test.d.ts +0 -2
- package/dist/__tests__/profiler-default-off.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-phase-catalog.test.d.ts +0 -2
- package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-phase-integration.test.d.ts +0 -2
- package/dist/__tests__/profiler-phase-integration.test.d.ts.map +0 -1
- package/dist/__tests__/profiler-phase-token.test.d.ts +0 -2
- package/dist/__tests__/profiler-phase-token.test.d.ts.map +0 -1
- package/dist/__tests__/public-surface.test-d.d.ts +0 -2
- package/dist/__tests__/public-surface.test-d.d.ts.map +0 -1
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-error-code-owner.test-d.d.ts +0 -2
- package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +0 -2
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts +0 -2
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-assembly.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-context.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-context.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-contract.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-contract.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-docs.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-errors.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +0 -2
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-plan.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-plan.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-plan.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-retry.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +0 -7
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +0 -1
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +0 -2
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +0 -2
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-hzb-gpu.d.ts +0 -7
- package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +0 -1
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts +0 -2
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +0 -2
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts +0 -2
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +0 -12
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +0 -1
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +0 -2
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +0 -1
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +0 -2
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/render-scene-projection.unit.test.d.ts +0 -2
- package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +0 -1
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +0 -2
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +0 -1
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +0 -2
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +0 -1
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +0 -2
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +0 -1
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +0 -2
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +0 -1
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ssao-config.unit.test.d.ts +0 -2
- package/dist/__tests__/ssao-config.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/standard-descriptors.test-d.d.ts +0 -2
- package/dist/__tests__/standard-descriptors.test-d.d.ts.map +0 -1
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts +0 -2
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +0 -1
- package/dist/__tests__/standard-pipeline.integration.test.d.ts +0 -2
- package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +0 -1
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +0 -2
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +0 -1
- package/dist/__tests__/surface-configuration.unit.test.d.ts +0 -2
- package/dist/__tests__/surface-configuration.unit.test.d.ts.map +0 -1
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts +0 -2
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +0 -1
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +0 -2
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +0 -1
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +0 -2
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +0 -1
- package/dist/__tests__/urp-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +0 -2
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-extract.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-extract.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-extract.perf.test.d.ts +0 -2
- package/dist/__tests__/visibility-extract.perf.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-instances.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-instances.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +0 -2
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-public-surface.test-d.d.ts +0 -2
- package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +0 -1
- package/dist/__tests__/visibility-resolver.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +0 -1
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +0 -2
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +0 -1
- package/dist/__tests__/vocabulary.unit.test.d.ts +0 -2
- package/dist/__tests__/vocabulary.unit.test.d.ts.map +0 -1
- package/dist/chunk-CQXZC5XI.mjs.map +0 -1
- package/dist/chunk-HCOGPHKS.mjs +0 -93
- package/dist/chunk-HCOGPHKS.mjs.map +0 -1
- package/dist/chunk-YEJIUW7D.mjs.map +0 -1
- package/dist/components/__tests__/points-lines-admission.unit.test.d.ts +0 -2
- package/dist/components/__tests__/points-lines-admission.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts +0 -2
- package/dist/components/__tests__/points-lines-schema.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/schema-contract.unit.test.d.ts +0 -2
- package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/schema-parity.unit.test.d.ts +0 -2
- package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +0 -1
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts +0 -2
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/bounds.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/bounds.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/cache-recovery.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts +0 -2
- package/dist/points-lines/__tests__/inspection-lanes.integration.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/inspection.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts +0 -2
- package/dist/points-lines/__tests__/lane-structural.integration.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/points-lines.bench.d.ts +0 -2
- package/dist/points-lines/__tests__/points-lines.bench.d.ts.map +0 -1
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts +0 -2
- package/dist/points-lines/__tests__/raster-lane.integration.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/snapshot.unit.test.d.ts.map +0 -1
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts +0 -2
- package/dist/points-lines/__tests__/view-ubo.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +0 -2
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +0 -2
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +0 -2
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts +0 -2
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +0 -1
package/src/render-system.ts
CHANGED
|
@@ -16,10 +16,11 @@
|
|
|
16
16
|
// .invert` (charter proposition 5: no math reinvention; render-system.test.ts
|
|
17
17
|
// asserts `/@forgeax\/engine-math/` shows up in render-system.ts source).
|
|
18
18
|
|
|
19
|
-
import { resolveAssetHandle } from '@forgeax/engine-assets-runtime';
|
|
19
|
+
import { numMipLevels, resolveAssetHandle } from '@forgeax/engine-assets-runtime';
|
|
20
20
|
import type { World } from '@forgeax/engine-ecs';
|
|
21
21
|
import type { RenderReadLease } from '@forgeax/engine-ecs/projection';
|
|
22
22
|
import type { RecorderSession } from '@forgeax/engine-profiler';
|
|
23
|
+
import type { CompiledRenderGraphInfo } from '@forgeax/engine-render-graph';
|
|
23
24
|
import type { BindGroupEntry, BindGroupLayout, Buffer, RenderPipeline } from '@forgeax/engine-rhi';
|
|
24
25
|
import { err, ok, type Result, RhiError } from '@forgeax/engine-rhi';
|
|
25
26
|
import {
|
|
@@ -34,10 +35,12 @@ import {
|
|
|
34
35
|
toShared,
|
|
35
36
|
} from '@forgeax/engine-types';
|
|
36
37
|
import { createClusterBinScratch } from './cluster-binner';
|
|
38
|
+
import { EnvironmentLifecycle } from './environment/lifecycle';
|
|
37
39
|
import {
|
|
38
40
|
type ObservationUnavailableError,
|
|
39
41
|
PointsLinesMaterialUnsupportedError,
|
|
40
42
|
type RenderError,
|
|
43
|
+
TransmissionCapabilityMissingError,
|
|
41
44
|
} from './errors/render';
|
|
42
45
|
import {
|
|
43
46
|
type RenderFeaturePreparedGraphicsResolverInput,
|
|
@@ -56,7 +59,13 @@ import {
|
|
|
56
59
|
type PostProcessShaderEntry,
|
|
57
60
|
} from './fullscreen-post-process-pass';
|
|
58
61
|
import { GpuDrivenProduction } from './gpu-driven/production-raster';
|
|
59
|
-
import type {
|
|
62
|
+
import type {
|
|
63
|
+
BloomInspection,
|
|
64
|
+
MotionBlurInspection,
|
|
65
|
+
RenderSceneInspection,
|
|
66
|
+
TemporalTargetInspection,
|
|
67
|
+
TransmissionInspection,
|
|
68
|
+
} from './inspection-types';
|
|
60
69
|
import { admitPointsLines } from './points-lines/admission';
|
|
61
70
|
import { PointsLinesExpansionCache } from './points-lines/expansion-cache';
|
|
62
71
|
import {
|
|
@@ -75,6 +84,7 @@ import type { PointsLinesRecordOwner, PointsLinesRecordSubmission } from './reco
|
|
|
75
84
|
export type { RenderSceneInspection } from './inspection-types';
|
|
76
85
|
|
|
77
86
|
import { deriveVertexLayoutProjection } from '@forgeax/engine-geometry';
|
|
87
|
+
import type { EnvironmentInspection } from './environment/inspection';
|
|
78
88
|
import {
|
|
79
89
|
GPU_BUFFER_USAGE_COPY_DST,
|
|
80
90
|
GPU_BUFFER_USAGE_INDEX,
|
|
@@ -85,7 +95,12 @@ import { assembleMaterialWithSkylightEntries } from './ibl/skylight-bind-group';
|
|
|
85
95
|
import { disposeInstanceBuffers, disposeTransientInstanceBuffers } from './instance-buffer-cache';
|
|
86
96
|
import type { MeshMaterialBindingObservation } from './mesh-material-bindings';
|
|
87
97
|
import { validateClusterGrid } from './pipeline/standard-pipeline';
|
|
88
|
-
import {
|
|
98
|
+
import {
|
|
99
|
+
DEFAULT_CLUSTER_GRID,
|
|
100
|
+
DEFAULT_STANDARD_PROFILE,
|
|
101
|
+
resolveStandardLane,
|
|
102
|
+
} from './pipeline/standard-profile';
|
|
103
|
+
import { PipelineSpecError } from './pipeline-spec';
|
|
89
104
|
import { PostProcessError } from './post-process-errors';
|
|
90
105
|
import {
|
|
91
106
|
createPreparedGraphicsResolver,
|
|
@@ -99,7 +114,12 @@ import {
|
|
|
99
114
|
recordFrame,
|
|
100
115
|
} from './record/frame';
|
|
101
116
|
import { buildPerFrameBindGroups } from './record/frame-lighting';
|
|
102
|
-
import type {
|
|
117
|
+
import type {
|
|
118
|
+
CurrentGraphTarget,
|
|
119
|
+
GraphTargetCaptureRequest,
|
|
120
|
+
RenderFrameState,
|
|
121
|
+
} from './record/frame-snapshot';
|
|
122
|
+
import { getTextureIdentity } from './record/frame-snapshot';
|
|
103
123
|
import { applyParamSnapshotToUbo, residentTextureView } from './record/main-pass-material';
|
|
104
124
|
import type { RenderSystemInternals } from './record/render-context';
|
|
105
125
|
import {
|
|
@@ -125,6 +145,19 @@ import {
|
|
|
125
145
|
TRANSPARENT_SORT_MODE_LAYER_YZ,
|
|
126
146
|
TRANSPARENT_SORT_MODE_LAYER_Z,
|
|
127
147
|
} from './systems/transparent-sort-config';
|
|
148
|
+
import { retireTemporalGpuState } from './temporal/gpu';
|
|
149
|
+
import { inspectTemporal, type TemporalInspection } from './temporal/inspection';
|
|
150
|
+
import {
|
|
151
|
+
evaluateTransmissionCapability,
|
|
152
|
+
probeTransmissionCapability,
|
|
153
|
+
resolveTransmissionBackdropTopology,
|
|
154
|
+
TransmissionCandidateAdmission,
|
|
155
|
+
} from './transmission/backdrop';
|
|
156
|
+
import {
|
|
157
|
+
estimateTransmissionBackdropBytes,
|
|
158
|
+
inspectTransmission,
|
|
159
|
+
inspectTransmissionFromAdmission,
|
|
160
|
+
} from './transmission/inspection';
|
|
128
161
|
|
|
129
162
|
export type {
|
|
130
163
|
_InternalRenderPipelineContext,
|
|
@@ -134,12 +167,15 @@ export type {
|
|
|
134
167
|
RenderSystemInternals,
|
|
135
168
|
RenderSystemRuntime,
|
|
136
169
|
SurfaceBackendKind,
|
|
170
|
+
SurfaceCapabilityFacts,
|
|
171
|
+
SurfaceProfile,
|
|
137
172
|
SwapChainFormatPair,
|
|
138
173
|
} from './record/render-context';
|
|
139
174
|
export {
|
|
140
175
|
configureSurface,
|
|
141
176
|
MATERIAL_PER_ENTITY_STRIDE,
|
|
142
177
|
resolveSurfaceFormatPair,
|
|
178
|
+
resolveSurfaceProfile,
|
|
143
179
|
STANDARD_PBR_UBO_SIZE,
|
|
144
180
|
selectSwapChainFormat,
|
|
145
181
|
} from './record/render-context';
|
|
@@ -297,6 +333,10 @@ export interface RenderSystem {
|
|
|
297
333
|
observeCurrentFrame(
|
|
298
334
|
options: FrameObservationOptions,
|
|
299
335
|
): Promise<Result<FrameObservation, ObservationUnavailableError>>;
|
|
336
|
+
/** Internal same-frame graph target access for backend diagnostics. */
|
|
337
|
+
getCurrentGraphTarget(name: string): CurrentGraphTarget | undefined;
|
|
338
|
+
/** Internal test capture copied into the draw's command submission. */
|
|
339
|
+
requestGraphTargetCapture(request: GraphTargetCaptureRequest): void;
|
|
300
340
|
readonly pipelineDispatchCounts: {
|
|
301
341
|
readonly unlit: number;
|
|
302
342
|
};
|
|
@@ -309,6 +349,13 @@ export interface RenderSystem {
|
|
|
309
349
|
readonly visibilityStats: { explicitlyHidden: number };
|
|
310
350
|
/** Persistent scene maintenance evidence from the ordinary single-World path. */
|
|
311
351
|
readonly renderScene: RenderSceneInspection;
|
|
352
|
+
readonly environment: EnvironmentInspection;
|
|
353
|
+
readonly temporal: TemporalInspection;
|
|
354
|
+
readonly bloom: BloomInspection;
|
|
355
|
+
readonly motionBlurInspection: MotionBlurInspection | undefined;
|
|
356
|
+
readonly temporalTargetInspection: TemporalTargetInspection | undefined;
|
|
357
|
+
/** Last completed transmission candidate facts, detached from GPU handles. */
|
|
358
|
+
readonly transmission: TransmissionInspection | undefined;
|
|
312
359
|
/** Retained Points/Lines authoring facts from the single scene projection. */
|
|
313
360
|
readonly pointsLinesSnapshots: readonly PointsLinesRetainedSnapshot[];
|
|
314
361
|
/** Current mesh-slot provenance and active diagnostics from the last frame. */
|
|
@@ -322,6 +369,10 @@ export interface RenderSystem {
|
|
|
322
369
|
* reaching into engine internals.
|
|
323
370
|
*/
|
|
324
371
|
readonly perFramePassNames: readonly string[];
|
|
372
|
+
/** Camera antialias mode for the last successfully submitted frame. */
|
|
373
|
+
readonly lastSuccessfulCameraAntialias: CameraSnapshot['antialias'] | undefined;
|
|
374
|
+
/** Detached compiled-graph facts used by the renderer inspection owner. */
|
|
375
|
+
readonly perFrameGraphInfo: CompiledRenderGraphInfo | undefined;
|
|
325
376
|
/**
|
|
326
377
|
* feat-20260531-per-frame-bind-group-cache M1 / w4: per-frame
|
|
327
378
|
* createBindGroup counter. Reset to 0 on every `draw([world], { cameraOwner: 0, resourceOwner: 0 })` entry,
|
|
@@ -701,6 +752,7 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
701
752
|
let releaseProfilerCatalog =
|
|
702
753
|
phaseCatalogRegistration?.ok === true ? phaseCatalogRegistration.value : undefined;
|
|
703
754
|
let preparedWorlds: readonly World[] = [];
|
|
755
|
+
let latestCamera: CameraSnapshot | undefined;
|
|
704
756
|
const pointsLinesOwner = new StandardPointsLinesOwner(internals);
|
|
705
757
|
const persistentRenderScene = new PersistentRenderScene({
|
|
706
758
|
getDevice: () => internals.device,
|
|
@@ -709,6 +761,131 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
709
761
|
internals.gpuStore.invalidateMesh(handle, preparedWorlds[worldId] ?? worldId);
|
|
710
762
|
},
|
|
711
763
|
});
|
|
764
|
+
const environmentLifecycle = new EnvironmentLifecycle(internals.deviceScope);
|
|
765
|
+
const transmissionAdmission = new TransmissionCandidateAdmission();
|
|
766
|
+
let lastTransmissionInspection: TransmissionInspection | undefined;
|
|
767
|
+
let lastTransmissionKey = '';
|
|
768
|
+
let lastTransmissionAntialias: CameraSnapshot['antialias'] = 'none';
|
|
769
|
+
let transmissionCapabilityGeneration = -1;
|
|
770
|
+
let transmissionCapability:
|
|
771
|
+
| import('./transmission/backdrop').TransmissionCapabilityFacts
|
|
772
|
+
| undefined;
|
|
773
|
+
const prepareTransmissionCandidate = (antialias: CameraSnapshot['antialias']): boolean => {
|
|
774
|
+
const demand = persistentRenderScene.transmissionTopologyDemand();
|
|
775
|
+
if (demand.activeCount === 0) return true;
|
|
776
|
+
const topology = resolveTransmissionBackdropTopology({
|
|
777
|
+
demand,
|
|
778
|
+
sourceSampleCount: antialias === 'msaa' ? 4 : 1,
|
|
779
|
+
});
|
|
780
|
+
if (transmissionCapabilityGeneration !== internals.deviceScope.generation) {
|
|
781
|
+
transmissionCapability = probeTransmissionCapability(internals.device);
|
|
782
|
+
transmissionCapabilityGeneration = internals.deviceScope.generation;
|
|
783
|
+
}
|
|
784
|
+
if (transmissionCapability === undefined) {
|
|
785
|
+
throw new Error('transmission capability probe did not produce a result');
|
|
786
|
+
}
|
|
787
|
+
const capability = {
|
|
788
|
+
...transmissionCapability,
|
|
789
|
+
msaaResolve: antialias === 'msaa' || topology.sourceSampleCount === 1,
|
|
790
|
+
} as const;
|
|
791
|
+
const verdict = evaluateTransmissionCapability(capability);
|
|
792
|
+
if (verdict.ok) return true;
|
|
793
|
+
|
|
794
|
+
const extent = {
|
|
795
|
+
width: Math.max(1, internals.canvas.width),
|
|
796
|
+
height: Math.max(1, internals.canvas.height),
|
|
797
|
+
};
|
|
798
|
+
const resource = {
|
|
799
|
+
extent,
|
|
800
|
+
format: capability.format,
|
|
801
|
+
mipCount: topology.mipCount === 0 ? 1 : numMipLevels(extent),
|
|
802
|
+
bytes: estimateTransmissionBackdropBytes(
|
|
803
|
+
extent,
|
|
804
|
+
topology.mipCount === 0 ? 1 : numMipLevels(extent),
|
|
805
|
+
capability.format,
|
|
806
|
+
),
|
|
807
|
+
deviceGeneration: internals.deviceScope.generation,
|
|
808
|
+
} as const;
|
|
809
|
+
transmissionAdmission.admit(demand, capability, resource);
|
|
810
|
+
internals.errorRegistry.fire(
|
|
811
|
+
new TransmissionCapabilityMissingError('standard transmission', 'prepare', {
|
|
812
|
+
lane: 'standard-forward',
|
|
813
|
+
format: capability.format,
|
|
814
|
+
missing: verdict.missing,
|
|
815
|
+
}),
|
|
816
|
+
);
|
|
817
|
+
return false;
|
|
818
|
+
};
|
|
819
|
+
const updateTransmissionInspection = (
|
|
820
|
+
antialias: CameraSnapshot['antialias'],
|
|
821
|
+
submitted: boolean,
|
|
822
|
+
): void => {
|
|
823
|
+
lastTransmissionAntialias = antialias;
|
|
824
|
+
const demand = persistentRenderScene.transmissionTopologyDemand();
|
|
825
|
+
if (demand.activeCount === 0) {
|
|
826
|
+
lastTransmissionInspection = undefined;
|
|
827
|
+
lastTransmissionKey = '';
|
|
828
|
+
return;
|
|
829
|
+
}
|
|
830
|
+
const extent = {
|
|
831
|
+
width: Math.max(1, internals.canvas.width),
|
|
832
|
+
height: Math.max(1, internals.canvas.height),
|
|
833
|
+
};
|
|
834
|
+
const topology = resolveTransmissionBackdropTopology({
|
|
835
|
+
demand,
|
|
836
|
+
sourceSampleCount: antialias === 'msaa' ? 4 : 1,
|
|
837
|
+
});
|
|
838
|
+
if (transmissionCapabilityGeneration !== internals.deviceScope.generation) {
|
|
839
|
+
transmissionCapability = probeTransmissionCapability(internals.device);
|
|
840
|
+
transmissionCapabilityGeneration = internals.deviceScope.generation;
|
|
841
|
+
}
|
|
842
|
+
if (transmissionCapability === undefined) {
|
|
843
|
+
throw new Error('transmission capability probe did not produce a result');
|
|
844
|
+
}
|
|
845
|
+
const resource = {
|
|
846
|
+
extent,
|
|
847
|
+
format: 'rgba16float',
|
|
848
|
+
mipCount: topology.mipCount === 0 ? 1 : numMipLevels(extent),
|
|
849
|
+
bytes: estimateTransmissionBackdropBytes(
|
|
850
|
+
extent,
|
|
851
|
+
topology.mipCount === 0 ? 1 : numMipLevels(extent),
|
|
852
|
+
),
|
|
853
|
+
deviceGeneration: internals.deviceScope.generation,
|
|
854
|
+
} as const;
|
|
855
|
+
const key = `${demand.activeCount}:${demand.needsRoughMips}:${extent.width}:${extent.height}:${resource.deviceGeneration}:${antialias}:${submitted}`;
|
|
856
|
+
if (key === lastTransmissionKey && lastTransmissionInspection !== undefined) return;
|
|
857
|
+
if (submitted) {
|
|
858
|
+
transmissionAdmission.admit(
|
|
859
|
+
demand,
|
|
860
|
+
{
|
|
861
|
+
...transmissionCapability,
|
|
862
|
+
msaaResolve: antialias === 'msaa' || topology.sourceSampleCount === 1,
|
|
863
|
+
},
|
|
864
|
+
resource,
|
|
865
|
+
);
|
|
866
|
+
}
|
|
867
|
+
const admission = transmissionAdmission.inspectLifecycle();
|
|
868
|
+
lastTransmissionInspection = submitted
|
|
869
|
+
? inspectTransmissionFromAdmission({
|
|
870
|
+
admission,
|
|
871
|
+
topology,
|
|
872
|
+
extent,
|
|
873
|
+
transmissionDrawCount: demand.activeCount,
|
|
874
|
+
})
|
|
875
|
+
: inspectTransmission({
|
|
876
|
+
demand,
|
|
877
|
+
topology,
|
|
878
|
+
extent,
|
|
879
|
+
generation: admission.generation,
|
|
880
|
+
lastKnownGood: admission.lastKnownGood,
|
|
881
|
+
lifecycle: admission.lifecycle,
|
|
882
|
+
recovery: admission.recovery,
|
|
883
|
+
capability: admission.capability,
|
|
884
|
+
resourcePresent: admission.resource !== undefined,
|
|
885
|
+
transmissionDrawCount: demand.activeCount,
|
|
886
|
+
});
|
|
887
|
+
lastTransmissionKey = key;
|
|
888
|
+
};
|
|
712
889
|
const gpuDrivenShaderFactory =
|
|
713
890
|
internals.shaderModuleFactory ??
|
|
714
891
|
({
|
|
@@ -736,6 +913,19 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
736
913
|
}),
|
|
737
914
|
),
|
|
738
915
|
} satisfies import('./pipeline-builder').PipelineBuilderShaderModuleFactory),
|
|
916
|
+
getImmediateShaderModuleFactory: () =>
|
|
917
|
+
internals.immediateShaderModuleFactory ??
|
|
918
|
+
internals.shaderModuleFactory ??
|
|
919
|
+
({
|
|
920
|
+
createShaderModule: () =>
|
|
921
|
+
err(
|
|
922
|
+
new RhiError({
|
|
923
|
+
code: 'rhi-not-available',
|
|
924
|
+
expected: 'the renderer backend exposes shader module creation',
|
|
925
|
+
hint: 'construct the renderer through the backend pack before activating GPU features',
|
|
926
|
+
}),
|
|
927
|
+
),
|
|
928
|
+
} satisfies import('./pipeline-builder').PipelineBuilderShaderModuleFactory),
|
|
739
929
|
});
|
|
740
930
|
const disposeFeatureGpuWork = (): void => {
|
|
741
931
|
const disposed = featureGpuWork.dispose();
|
|
@@ -756,12 +946,23 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
756
946
|
// raw (material-handle-based, cross-world collision semantically correct).
|
|
757
947
|
const frameState: RenderFrameState = {
|
|
758
948
|
frameNumber: 0,
|
|
949
|
+
graphGeneration: 0,
|
|
950
|
+
successfulTemporalFrameIndex: 0,
|
|
951
|
+
lastSuccessfulBloom: 'off',
|
|
759
952
|
directionalShadowCache: null,
|
|
760
953
|
directionalShadowCacheRecorded: false,
|
|
761
954
|
compiledFrameGraph: null,
|
|
762
955
|
compiledFrameGraphTopologyKey: null,
|
|
763
956
|
retiredCompiledFrameGraphs: new Set(),
|
|
764
957
|
currentFrameObservationSource: undefined,
|
|
958
|
+
lastSuccessfulCameraAntialias: undefined,
|
|
959
|
+
temporalGpuState: undefined,
|
|
960
|
+
activeTemporalGpuState: undefined,
|
|
961
|
+
retiringTemporalGpuStates: new Set(),
|
|
962
|
+
lastSuccessfulTemporalView: undefined,
|
|
963
|
+
pendingTemporalCommit: { kind: 'none' },
|
|
964
|
+
environmentGeneration: undefined,
|
|
965
|
+
environmentLifecycle,
|
|
765
966
|
currentDirectionalShadowView: null,
|
|
766
967
|
currentSpotShadowView: null,
|
|
767
968
|
instanceBuffers: new Map(),
|
|
@@ -920,6 +1121,7 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
920
1121
|
...featureEntries.entries(),
|
|
921
1122
|
]);
|
|
922
1123
|
for (const [id, entry] of declarations) {
|
|
1124
|
+
if (id === 'forgeax.taa-resolve') continue;
|
|
923
1125
|
const byteSize =
|
|
924
1126
|
entry.params?.byteSize ?? (entryHasDepthRead(entry) ? DEPTH_MIN_PARAMS_BYTE_SIZE : 0);
|
|
925
1127
|
if (byteSize === 0 || postProcessParamsBuffers.has(id)) continue;
|
|
@@ -970,10 +1172,16 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
970
1172
|
postProcessPipelineCache.set(key, built);
|
|
971
1173
|
return built;
|
|
972
1174
|
};
|
|
1175
|
+
const clearPostProcessPipelineCache = (id: string): void => {
|
|
1176
|
+
for (const key of postProcessPipelineCache.keys()) {
|
|
1177
|
+
if (key.startsWith(`${id}|`)) postProcessPipelineCache.delete(key);
|
|
1178
|
+
}
|
|
1179
|
+
};
|
|
973
1180
|
Object.assign(internals, {
|
|
974
1181
|
lookupPostProcess,
|
|
975
1182
|
getPostProcessParamsBuffer,
|
|
976
1183
|
getPostProcessPipeline,
|
|
1184
|
+
clearPostProcessPipelineCache,
|
|
977
1185
|
});
|
|
978
1186
|
// w15 M5 (plan-strategy D-P4 / AC-07): per-frame dispatch counters. Reset
|
|
979
1187
|
// on every `draw([world], { cameraOwner: 0, resourceOwner: 0 })` entry; bumped once per actual `pass.setPipeline`
|
|
@@ -1121,42 +1329,20 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1121
1329
|
if (buffer !== undefined) internals.device.destroyBuffer(buffer);
|
|
1122
1330
|
return err(new Error('prepared material schema contains unsupported binding kinds'));
|
|
1123
1331
|
}
|
|
1124
|
-
for (let index = fields.length; index < 4; index += 1) {
|
|
1125
|
-
const binding = derived.userRegionBindingEnd + (index - fields.length) * 2;
|
|
1126
|
-
entries.push(
|
|
1127
|
-
{
|
|
1128
|
-
binding,
|
|
1129
|
-
resource: { kind: 'sampler', value: pipelineState.defaultSampler },
|
|
1130
|
-
},
|
|
1131
|
-
{
|
|
1132
|
-
binding: binding + 1,
|
|
1133
|
-
resource: { kind: 'textureView', value: pipelineState.defaultWhiteTextureView },
|
|
1134
|
-
},
|
|
1135
|
-
);
|
|
1136
|
-
}
|
|
1137
1332
|
const fallback = pipelineState.skylightFallback;
|
|
1138
1333
|
if (fallback === null) {
|
|
1139
1334
|
if (buffer !== undefined) internals.device.destroyBuffer(buffer);
|
|
1140
1335
|
return err(new Error('prepared material skylight fallback is unavailable'));
|
|
1141
1336
|
}
|
|
1142
|
-
const completeEntries = assembleMaterialWithSkylightEntries(
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
intensityBuffer: fallback.intensityBuffer,
|
|
1152
|
-
},
|
|
1153
|
-
{
|
|
1154
|
-
emissiveSampler: pipelineState.defaultSampler,
|
|
1155
|
-
emissiveView: pipelineState.defaultWhiteTextureView,
|
|
1156
|
-
occlusionSampler: pipelineState.defaultSampler,
|
|
1157
|
-
occlusionView: pipelineState.defaultWhiteTextureView,
|
|
1158
|
-
},
|
|
1159
|
-
);
|
|
1337
|
+
const completeEntries = assembleMaterialWithSkylightEntries(entries, {
|
|
1338
|
+
irradianceView: fallback.irradianceView,
|
|
1339
|
+
irradianceSampler: fallback.sampler,
|
|
1340
|
+
prefilterView: fallback.prefilterView,
|
|
1341
|
+
prefilterSampler: fallback.sampler,
|
|
1342
|
+
brdfLutView: fallback.brdfLutView,
|
|
1343
|
+
brdfLutSampler: fallback.sampler,
|
|
1344
|
+
intensityBuffer: fallback.intensityBuffer,
|
|
1345
|
+
});
|
|
1160
1346
|
const group = internals.device.createBindGroup({ layout, entries: completeEntries });
|
|
1161
1347
|
if (!group.ok) {
|
|
1162
1348
|
if (buffer !== undefined) internals.device.destroyBuffer(buffer);
|
|
@@ -1232,6 +1418,8 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1232
1418
|
? null
|
|
1233
1419
|
: (descriptor.depthFormat as GPUTextureFormat),
|
|
1234
1420
|
descriptor.vertexLayout,
|
|
1421
|
+
undefined,
|
|
1422
|
+
input.shaderModuleMode,
|
|
1235
1423
|
);
|
|
1236
1424
|
// A requested material shader is an exact pipeline contract. During
|
|
1237
1425
|
// async shader warmup, substituting the generic unlit pipeline can
|
|
@@ -1367,6 +1555,98 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1367
1555
|
gpuDriven: gpuDrivenProduction.inspect(),
|
|
1368
1556
|
};
|
|
1369
1557
|
},
|
|
1558
|
+
get environment(): EnvironmentInspection {
|
|
1559
|
+
return environmentLifecycle.inspect();
|
|
1560
|
+
},
|
|
1561
|
+
get temporal(): TemporalInspection {
|
|
1562
|
+
return inspectTemporal(frameState.lastSuccessfulTemporalView, undefined, {
|
|
1563
|
+
...(frameState.activeTemporalGpuState === undefined
|
|
1564
|
+
? {}
|
|
1565
|
+
: { active: frameState.activeTemporalGpuState }),
|
|
1566
|
+
...(frameState.temporalGpuState === undefined
|
|
1567
|
+
? {}
|
|
1568
|
+
: { candidate: frameState.temporalGpuState }),
|
|
1569
|
+
retiring: [...frameState.retiringTemporalGpuStates],
|
|
1570
|
+
deviceGeneration: internals.deviceScope.generation,
|
|
1571
|
+
});
|
|
1572
|
+
},
|
|
1573
|
+
get motionBlurInspection(): MotionBlurInspection | undefined {
|
|
1574
|
+
const camera = latestCamera;
|
|
1575
|
+
if (camera?.motionBlur === undefined) return undefined;
|
|
1576
|
+
const demanded = camera.motionBlur.shutterAngle > 0;
|
|
1577
|
+
const unavailable = demanded && !internals.device.caps.rgba16floatRenderable;
|
|
1578
|
+
const admitted =
|
|
1579
|
+
frameState.activeTemporalGpuState !== undefined ||
|
|
1580
|
+
frameState.temporalGpuState !== undefined;
|
|
1581
|
+
return {
|
|
1582
|
+
enabled: demanded,
|
|
1583
|
+
status: !demanded ? 'off' : unavailable || !admitted ? 'reset' : 'active',
|
|
1584
|
+
shutterAngle: camera.motionBlur.shutterAngle,
|
|
1585
|
+
maxRadiusPixels: camera.motionBlur.maxRadiusPixels,
|
|
1586
|
+
sampleCount: camera.motionBlur.sampleCount,
|
|
1587
|
+
temporalDemand: demanded ? 'scene-data-temporal-v1' : 'none',
|
|
1588
|
+
passName: 'motion-blur',
|
|
1589
|
+
historyWrites: 0,
|
|
1590
|
+
...(unavailable ? { lastFailure: 'scene-data-unavailable' as const } : {}),
|
|
1591
|
+
};
|
|
1592
|
+
},
|
|
1593
|
+
get temporalTargetInspection(): TemporalTargetInspection | undefined {
|
|
1594
|
+
const graph = frameState.compiledFrameGraph?.inspect();
|
|
1595
|
+
if (graph === undefined) return undefined;
|
|
1596
|
+
const producer = graph.passes.find((pass) => pass.name === 'standard-scene-data');
|
|
1597
|
+
// The producer's semantic target is the graph-owned
|
|
1598
|
+
// `standard-scene-temporal` resource. Resolve it from the compiled
|
|
1599
|
+
// resource table rather than the pass access projection: a backend may
|
|
1600
|
+
// retain a view alias in the access list while the resource owner still
|
|
1601
|
+
// carries the canonical semantic label.
|
|
1602
|
+
const target = graph.resources.find(
|
|
1603
|
+
(resource) => resource.kind === 'texture' && resource.label === 'standard-scene-temporal',
|
|
1604
|
+
);
|
|
1605
|
+
if (producer === undefined || target === undefined) {
|
|
1606
|
+
return undefined;
|
|
1607
|
+
}
|
|
1608
|
+
const width = Math.max(1, internals.canvas.width);
|
|
1609
|
+
const height = Math.max(1, internals.canvas.height);
|
|
1610
|
+
return Object.freeze({
|
|
1611
|
+
identity: 'standard-scene-temporal',
|
|
1612
|
+
producerId: 'forgeax::standard::scene-data',
|
|
1613
|
+
schema: 'forgeax::scene-data::temporal-v1',
|
|
1614
|
+
targetCount: 1,
|
|
1615
|
+
descriptor: Object.freeze({
|
|
1616
|
+
format: 'rgba16float',
|
|
1617
|
+
width,
|
|
1618
|
+
height,
|
|
1619
|
+
sampleCount: 1,
|
|
1620
|
+
bytes: width * height * 8,
|
|
1621
|
+
}),
|
|
1622
|
+
});
|
|
1623
|
+
},
|
|
1624
|
+
get bloom(): BloomInspection {
|
|
1625
|
+
const pipelineState = internals.getPipelineState();
|
|
1626
|
+
const resources = pipelineState?.perPassResources;
|
|
1627
|
+
const lifecycle = resources?.inspectBloomResources?.(
|
|
1628
|
+
frameState.compiledFrameGraph?.inspect(),
|
|
1629
|
+
);
|
|
1630
|
+
return Object.freeze(
|
|
1631
|
+
lifecycle ?? {
|
|
1632
|
+
graphStatus: 'empty',
|
|
1633
|
+
enabled: false,
|
|
1634
|
+
targetCount: 0,
|
|
1635
|
+
targetBytes: 0,
|
|
1636
|
+
resourceCount: 0,
|
|
1637
|
+
passCount: 0,
|
|
1638
|
+
encodeCount: 0,
|
|
1639
|
+
bindGroupCount: 0,
|
|
1640
|
+
uploadCount: 0,
|
|
1641
|
+
residentChildBytes: 0,
|
|
1642
|
+
generation: 0,
|
|
1643
|
+
state: 'off',
|
|
1644
|
+
},
|
|
1645
|
+
);
|
|
1646
|
+
},
|
|
1647
|
+
get transmission(): TransmissionInspection | undefined {
|
|
1648
|
+
return lastTransmissionInspection;
|
|
1649
|
+
},
|
|
1370
1650
|
get pointsLinesSnapshots(): readonly PointsLinesRetainedSnapshot[] {
|
|
1371
1651
|
return persistentRenderScene.pointsLinesSnapshots();
|
|
1372
1652
|
},
|
|
@@ -1450,16 +1730,52 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1450
1730
|
const {
|
|
1451
1731
|
cameras,
|
|
1452
1732
|
lights,
|
|
1733
|
+
environment,
|
|
1734
|
+
environmentReady,
|
|
1453
1735
|
renderables,
|
|
1454
1736
|
dispatch,
|
|
1455
1737
|
skylight,
|
|
1456
1738
|
skylightCount,
|
|
1457
1739
|
skybox,
|
|
1458
1740
|
skyboxCount,
|
|
1741
|
+
fog,
|
|
1459
1742
|
frustumStats,
|
|
1460
1743
|
visibilityStats,
|
|
1461
1744
|
postProcessParams,
|
|
1462
1745
|
} = frame;
|
|
1746
|
+
latestCamera = cameras[0];
|
|
1747
|
+
const temporalDemanded =
|
|
1748
|
+
cameras[0]?.antialias === 'taa' || (cameras[0]?.motionBlur?.shutterAngle ?? 0) > 0;
|
|
1749
|
+
if (temporalDemanded) {
|
|
1750
|
+
persistentRenderScene.prepareTemporalFrame(renderables);
|
|
1751
|
+
}
|
|
1752
|
+
environmentLifecycle.bindScope(internals.deviceScope);
|
|
1753
|
+
if (!environmentReady || environment === undefined) {
|
|
1754
|
+
frameState.pendingTemporalCommit = { kind: 'none' };
|
|
1755
|
+
// A world with no camera still has a valid clear-only render path.
|
|
1756
|
+
// It has no environment candidate and therefore must not publish an
|
|
1757
|
+
// off/taa temporal state; camera-bearing rejected extraction remains
|
|
1758
|
+
// an atomic render failure.
|
|
1759
|
+
if (cameras.length > 0) return false;
|
|
1760
|
+
} else {
|
|
1761
|
+
const environmentCandidate = environmentLifecycle.ensure(environment);
|
|
1762
|
+
if (!environmentCandidate.ok) {
|
|
1763
|
+
environmentLifecycle.recordCandidateFailure(environmentCandidate.error);
|
|
1764
|
+
internals.errorRegistry.fire(environmentCandidate.error);
|
|
1765
|
+
return false;
|
|
1766
|
+
}
|
|
1767
|
+
if (!environmentLifecycle.isActive(environmentCandidate.value)) {
|
|
1768
|
+
frameState.environmentGeneration = environmentCandidate.value;
|
|
1769
|
+
}
|
|
1770
|
+
}
|
|
1771
|
+
const transmissionAntialias = frame.cameras[0]?.antialias ?? 'none';
|
|
1772
|
+
if (!prepareTransmissionCandidate(transmissionAntialias)) {
|
|
1773
|
+
// The candidate gate runs before bind-group preparation, graph
|
|
1774
|
+
// construction, and record/submit. A missing capability therefore
|
|
1775
|
+
// cannot publish or execute a transmission graph.
|
|
1776
|
+
updateTransmissionInspection(transmissionAntialias, false);
|
|
1777
|
+
return false;
|
|
1778
|
+
}
|
|
1463
1779
|
if (lastMeshMaterialBindingFrame !== frame) {
|
|
1464
1780
|
lastMeshMaterialBindingFrame = frame;
|
|
1465
1781
|
lastMeshMaterialBindings = renderables.map((renderable) => ({
|
|
@@ -1530,6 +1846,9 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1530
1846
|
targets: featureTargets,
|
|
1531
1847
|
generation: internals.featureHost?.preparedGeneration ?? 0,
|
|
1532
1848
|
caps: internals.device.caps,
|
|
1849
|
+
...(internals.getMaterialShaderBindingContract === undefined
|
|
1850
|
+
? {}
|
|
1851
|
+
: { materialShaderBindingContract: internals.getMaterialShaderBindingContract }),
|
|
1533
1852
|
createPreparedGraphicsResolver: preparedResolverFactory,
|
|
1534
1853
|
gpuWork: featureGpuWork,
|
|
1535
1854
|
});
|
|
@@ -1605,6 +1924,9 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1605
1924
|
}
|
|
1606
1925
|
return runProfiledRenderPhase(profileSession, phase, action);
|
|
1607
1926
|
};
|
|
1927
|
+
if (cameras[0]?.bloom === 'on') {
|
|
1928
|
+
internals.getPipelineState()?.perPassResources.ensureBloomResources?.();
|
|
1929
|
+
}
|
|
1608
1930
|
submitted = runProfiledRenderPhase(profileSession, 'record', () =>
|
|
1609
1931
|
recordFrame(
|
|
1610
1932
|
internals,
|
|
@@ -1621,6 +1943,7 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1621
1943
|
skybox,
|
|
1622
1944
|
skyboxCount,
|
|
1623
1945
|
postProcessParams,
|
|
1946
|
+
fog,
|
|
1624
1947
|
worlds,
|
|
1625
1948
|
recordProfilePhase,
|
|
1626
1949
|
{
|
|
@@ -1634,8 +1957,36 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1634
1957
|
renderReadLeases,
|
|
1635
1958
|
featureGraphCandidate,
|
|
1636
1959
|
pointsLinesOwner,
|
|
1960
|
+
environment?.environmentSignature ?? '',
|
|
1961
|
+
environment?.fogSignature ?? '',
|
|
1962
|
+
environmentReady && environment !== undefined,
|
|
1963
|
+
persistentRenderScene.transmissionTopologyDemand(),
|
|
1637
1964
|
),
|
|
1638
1965
|
);
|
|
1966
|
+
if (submitted) {
|
|
1967
|
+
const temporalCommit = persistentRenderScene.commitTemporalFrame();
|
|
1968
|
+
if (!temporalCommit.ok) {
|
|
1969
|
+
internals.errorRegistry.fire(temporalCommit.error);
|
|
1970
|
+
}
|
|
1971
|
+
frameState.lastSuccessfulCameraAntialias = cameras[0]?.antialias;
|
|
1972
|
+
internals.getPipelineState()?.perPassResources.commitBloomResources?.();
|
|
1973
|
+
const nextBloom = cameras[0]?.bloom ?? 'off';
|
|
1974
|
+
if (frameState.lastSuccessfulBloom === 'on' && nextBloom !== 'on') {
|
|
1975
|
+
internals
|
|
1976
|
+
.getPipelineState()
|
|
1977
|
+
?.perPassResources.retireBloomResources?.(
|
|
1978
|
+
internals.device.queue.onSubmittedWorkDone(),
|
|
1979
|
+
);
|
|
1980
|
+
}
|
|
1981
|
+
frameState.lastSuccessfulBloom = nextBloom;
|
|
1982
|
+
} else {
|
|
1983
|
+
internals.getPipelineState()?.perPassResources.discardBloomResources?.();
|
|
1984
|
+
}
|
|
1985
|
+
if (!submitted && frameState.environmentGeneration !== undefined) {
|
|
1986
|
+
environmentLifecycle.discard(frameState.environmentGeneration);
|
|
1987
|
+
frameState.environmentGeneration = undefined;
|
|
1988
|
+
}
|
|
1989
|
+
updateTransmissionInspection(transmissionAntialias, submitted);
|
|
1639
1990
|
persistentRenderScene.setPointsLinesInspections(pointsLinesOwner.inspections());
|
|
1640
1991
|
if (internals.featureHost !== undefined && preparedResourceBatches.length > 0) {
|
|
1641
1992
|
const batches = preparedResourceBatches;
|
|
@@ -1653,10 +2004,20 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1653
2004
|
}
|
|
1654
2005
|
}
|
|
1655
2006
|
} catch (err) {
|
|
2007
|
+
if (!submitted) {
|
|
2008
|
+
internals.getPipelineState()?.perPassResources.discardBloomResources?.();
|
|
2009
|
+
}
|
|
1656
2010
|
const innerError =
|
|
1657
|
-
err instanceof
|
|
1658
|
-
?
|
|
1659
|
-
|
|
2011
|
+
err instanceof PipelineSpecError
|
|
2012
|
+
? {
|
|
2013
|
+
name: err.name,
|
|
2014
|
+
code: err.code,
|
|
2015
|
+
message: err.message,
|
|
2016
|
+
detail: err.detail,
|
|
2017
|
+
}
|
|
2018
|
+
: err instanceof RhiError
|
|
2019
|
+
? err
|
|
2020
|
+
: { code: 'unknown' as const, message: String(err), name: (err as Error)?.name };
|
|
1660
2021
|
internals.errorRegistry.fire(
|
|
1661
2022
|
new RhiError({
|
|
1662
2023
|
code: 'webgpu-runtime-error',
|
|
@@ -1681,6 +2042,24 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1681
2042
|
const currentFrameId = frameState.frameNumber - 1;
|
|
1682
2043
|
return observeCurrentFrame(options, frameState.currentFrameObservationSource, currentFrameId);
|
|
1683
2044
|
},
|
|
2045
|
+
getCurrentGraphTarget(name: string) {
|
|
2046
|
+
const graph = frameState.perFrameGraph;
|
|
2047
|
+
if (graph === undefined || graph === null) return undefined;
|
|
2048
|
+
const descriptor = graph.getColorTargetDescriptor(name);
|
|
2049
|
+
const texture = graph.getColorTargetTexture(name);
|
|
2050
|
+
if (descriptor === undefined || texture === undefined) return undefined;
|
|
2051
|
+
return {
|
|
2052
|
+
name,
|
|
2053
|
+
texture,
|
|
2054
|
+
textureIdentity: getTextureIdentity(texture),
|
|
2055
|
+
descriptor,
|
|
2056
|
+
frameId: frameState.frameNumber - 1,
|
|
2057
|
+
graphGeneration: graph.graphGeneration,
|
|
2058
|
+
};
|
|
2059
|
+
},
|
|
2060
|
+
requestGraphTargetCapture(request: GraphTargetCaptureRequest) {
|
|
2061
|
+
frameState.graphTargetCapture = request;
|
|
2062
|
+
},
|
|
1684
2063
|
bindGroupCounts: bindGroupCounts,
|
|
1685
2064
|
frustumStats: lastFrustumStats,
|
|
1686
2065
|
visibilityStats: lastVisibilityStats,
|
|
@@ -1690,6 +2069,12 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1690
2069
|
get perFramePassNames(): readonly string[] {
|
|
1691
2070
|
return frameState.compiledFrameGraph?.inspect().passes.map((pass) => pass.name) ?? [];
|
|
1692
2071
|
},
|
|
2072
|
+
get lastSuccessfulCameraAntialias(): CameraSnapshot['antialias'] | undefined {
|
|
2073
|
+
return frameState.lastSuccessfulCameraAntialias;
|
|
2074
|
+
},
|
|
2075
|
+
get perFrameGraphInfo(): CompiledRenderGraphInfo | undefined {
|
|
2076
|
+
return frameState.compiledFrameGraph?.inspect();
|
|
2077
|
+
},
|
|
1693
2078
|
configureStandard(config: RenderPipelineAsset['config']): void {
|
|
1694
2079
|
const profileConfig = internals.standardProfile;
|
|
1695
2080
|
const resolvedConfig =
|
|
@@ -1723,7 +2108,16 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1723
2108
|
// is a rare boot/swap event, never a per-frame cost.
|
|
1724
2109
|
installEpoch += 1;
|
|
1725
2110
|
frameState.installedPipelineHandle = installEpoch;
|
|
1726
|
-
|
|
2111
|
+
// The installed profile may request clustered lighting, but the actual
|
|
2112
|
+
// graph lane is capability-gated. On WebGL2 (including WebKit's wgpu
|
|
2113
|
+
// fallback) the forward lane is selected when compute/storage buffers
|
|
2114
|
+
// are unavailable; keep the frame bindings on that same lane instead of
|
|
2115
|
+
// advertising HDRP's clustered bind-group layout to URP pipelines.
|
|
2116
|
+
frameState.isHdrpActive =
|
|
2117
|
+
resolveStandardLane(internals.standardProfile ?? DEFAULT_STANDARD_PROFILE, {
|
|
2118
|
+
compute: internals.device.caps.compute,
|
|
2119
|
+
storageBuffer: internals.device.caps.storageBuffer,
|
|
2120
|
+
}) === 'clustered';
|
|
1727
2121
|
frameState.installedPipelineConfig = resolvedConfig;
|
|
1728
2122
|
},
|
|
1729
2123
|
registerBuiltinPostProcess(id: string, entry: PostProcessShaderEntry): () => void {
|
|
@@ -1731,7 +2125,7 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1731
2125
|
// byteSize / defaultValue validation (q5=A).
|
|
1732
2126
|
let paramsBuffer: Buffer | undefined;
|
|
1733
2127
|
try {
|
|
1734
|
-
if (entry.params !== undefined) {
|
|
2128
|
+
if (id !== 'forgeax.taa-resolve' && entry.params !== undefined) {
|
|
1735
2129
|
const { byteSize, defaultValue } = entry.params;
|
|
1736
2130
|
if (byteSize < 16 || defaultValue.length !== byteSize) {
|
|
1737
2131
|
throw new PostProcessError({
|
|
@@ -1749,7 +2143,7 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1749
2143
|
paramsBuffer = paramsBufferResult.value;
|
|
1750
2144
|
const writeResult = internals.device.queue.writeBuffer(paramsBuffer, 0, defaultValue);
|
|
1751
2145
|
if (!writeResult.ok) throw writeResult.error;
|
|
1752
|
-
} else if (entryHasDepthRead(entry)) {
|
|
2146
|
+
} else if (id !== 'forgeax.taa-resolve' && entryHasDepthRead(entry)) {
|
|
1753
2147
|
const paramsBufferResult = internals.device.createBuffer({
|
|
1754
2148
|
label: `post-process-params-${id}`,
|
|
1755
2149
|
size: DEPTH_MIN_PARAMS_BYTE_SIZE,
|
|
@@ -1789,6 +2183,13 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1789
2183
|
persistentRenderScene.dispose();
|
|
1790
2184
|
gpuDrivenProduction.dispose();
|
|
1791
2185
|
disposeFeatureGpuWork();
|
|
2186
|
+
// Bloom generations are renderer-owned rather than graph-owned. Drain
|
|
2187
|
+
// candidate, active, and fence-retiring bundles before the rest of the
|
|
2188
|
+
// frame state is torn down; the owner callback is idempotent so the
|
|
2189
|
+
// outer Renderer.dispose cascade can safely call this once only.
|
|
2190
|
+
internals.getPipelineState()?.perPassResources.drainBloomResources?.();
|
|
2191
|
+
internals.clearPostProcessPipelineCache?.('forgeax.taa-resolve');
|
|
2192
|
+
internals.invalidateShaderModule?.('post-process-forgeax.taa-resolve-module');
|
|
1792
2193
|
// Retire graph-owned resources and dispose instance-buffer caches.
|
|
1793
2194
|
// Both calls are idempotent + tolerate per-handle errors silently;
|
|
1794
2195
|
// the Renderer.dispose() cascade owns the surrounding try/catch
|
|
@@ -1798,8 +2199,21 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1798
2199
|
frameState.directionalShadowCache = null;
|
|
1799
2200
|
frameState.directionalShadowCacheRecorded = false;
|
|
1800
2201
|
frameState.currentFrameObservationSource = undefined;
|
|
2202
|
+
frameState.lastSuccessfulCameraAntialias = undefined;
|
|
1801
2203
|
frameState.currentDirectionalShadowView = null;
|
|
1802
2204
|
frameState.currentSpotShadowView = null;
|
|
2205
|
+
if (frameState.temporalGpuState !== undefined) {
|
|
2206
|
+
retireTemporalGpuState(frameState.temporalGpuState);
|
|
2207
|
+
frameState.temporalGpuState = undefined;
|
|
2208
|
+
}
|
|
2209
|
+
if (frameState.activeTemporalGpuState !== undefined) {
|
|
2210
|
+
retireTemporalGpuState(frameState.activeTemporalGpuState);
|
|
2211
|
+
frameState.activeTemporalGpuState = undefined;
|
|
2212
|
+
}
|
|
2213
|
+
for (const retiring of frameState.retiringTemporalGpuStates) {
|
|
2214
|
+
retireTemporalGpuState(retiring);
|
|
2215
|
+
}
|
|
2216
|
+
frameState.retiringTemporalGpuStates.clear();
|
|
1803
2217
|
const compiled = frameState.compiledFrameGraph;
|
|
1804
2218
|
frameState.compiledFrameGraph = null;
|
|
1805
2219
|
frameState.compiledFrameGraphTopologyKey = null;
|
|
@@ -1833,10 +2247,23 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1833
2247
|
}
|
|
1834
2248
|
},
|
|
1835
2249
|
resetForRecover(): void {
|
|
2250
|
+
transmissionAdmission.markDeviceLost();
|
|
2251
|
+
lastTransmissionKey = '';
|
|
2252
|
+
transmissionCapabilityGeneration = -1;
|
|
2253
|
+
transmissionCapability = undefined;
|
|
2254
|
+
// Keep the persistent material demand observable across device loss.
|
|
2255
|
+
// The physical resource has already been fenced by markDeviceLost(); the
|
|
2256
|
+
// detached inspection now exposes the rebuild-required lifecycle until a
|
|
2257
|
+
// completed frame admits the replacement resource.
|
|
2258
|
+
updateTransmissionInspection(lastTransmissionAntialias, false);
|
|
1836
2259
|
persistentRenderScene.resetGpuForRecover();
|
|
1837
2260
|
gpuDrivenProduction.dispose();
|
|
1838
2261
|
gpuDrivenProduction = new GpuDrivenProduction(internals.device, gpuDrivenShaderFactory);
|
|
1839
2262
|
disposeFeatureGpuWork();
|
|
2263
|
+
// A recovered device cannot retain handles from the lost device. The
|
|
2264
|
+
// Bloom owner abandons candidates and retires every committed generation
|
|
2265
|
+
// before the new PipelineState is rebuilt.
|
|
2266
|
+
internals.getPipelineState()?.perPassResources.drainBloomResources?.();
|
|
1840
2267
|
// feat-20260622-s5 M3 / B-2 / w18: recover() rebuild drops device-bound
|
|
1841
2268
|
// state minted by the lost device. The active graph and per-entity caches
|
|
1842
2269
|
// must be discarded, not merely marked for destruction: their opaque
|
|
@@ -1848,8 +2275,21 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1848
2275
|
frameState.directionalShadowCache = null;
|
|
1849
2276
|
frameState.directionalShadowCacheRecorded = false;
|
|
1850
2277
|
frameState.currentFrameObservationSource = undefined;
|
|
2278
|
+
frameState.lastSuccessfulCameraAntialias = undefined;
|
|
1851
2279
|
frameState.currentDirectionalShadowView = null;
|
|
1852
2280
|
frameState.currentSpotShadowView = null;
|
|
2281
|
+
if (frameState.temporalGpuState !== undefined) {
|
|
2282
|
+
retireTemporalGpuState(frameState.temporalGpuState);
|
|
2283
|
+
frameState.temporalGpuState = undefined;
|
|
2284
|
+
}
|
|
2285
|
+
if (frameState.activeTemporalGpuState !== undefined) {
|
|
2286
|
+
retireTemporalGpuState(frameState.activeTemporalGpuState);
|
|
2287
|
+
frameState.activeTemporalGpuState = undefined;
|
|
2288
|
+
}
|
|
2289
|
+
for (const retiring of frameState.retiringTemporalGpuStates) {
|
|
2290
|
+
retireTemporalGpuState(retiring);
|
|
2291
|
+
}
|
|
2292
|
+
frameState.retiringTemporalGpuStates.clear();
|
|
1853
2293
|
for (const retired of frameState.retiredCompiledFrameGraphs) {
|
|
1854
2294
|
retired.retire().catch(() => undefined);
|
|
1855
2295
|
}
|
|
@@ -1886,6 +2326,7 @@ export function createRenderSystem(internals: RenderSystemInternals): RenderSyst
|
|
|
1886
2326
|
...activeFeaturePostProcessEntries.entries(),
|
|
1887
2327
|
];
|
|
1888
2328
|
for (const [id, entry] of declarations) {
|
|
2329
|
+
if (id === 'forgeax.taa-resolve') continue;
|
|
1889
2330
|
let buffer: Buffer | undefined;
|
|
1890
2331
|
if (entry.params !== undefined) {
|
|
1891
2332
|
const created = internals.device.createBuffer({
|