@forgeax/engine-render 0.1.21 → 0.1.24
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 +281 -38
- package/dist/assembly/backend-contract.d.ts +13 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -1
- package/dist/assembly/bundler-contract.d.ts +9 -0
- package/dist/assembly/bundler-contract.d.ts.map +1 -0
- package/dist/assembly/device-feature-admission.d.ts +8 -0
- package/dist/assembly/device-feature-admission.d.ts.map +1 -1
- package/dist/assembly/extended-lighting-fallback.d.ts +13 -0
- package/dist/assembly/extended-lighting-fallback.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +7 -235
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/host-contract.d.ts +10 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/material/assembly.d.ts +3 -2
- package/dist/assembly/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/standard-layer-projection.d.ts +10 -0
- package/dist/assembly/material/standard-layer-projection.d.ts.map +1 -0
- package/dist/assembly/material-shader-policy.d.ts +168 -0
- package/dist/assembly/material-shader-policy.d.ts.map +1 -0
- package/dist/assembly/material-shader-prewarm.d.ts +21 -0
- package/dist/assembly/material-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/mesh-ssbo-grow.d.ts +88 -0
- package/dist/assembly/mesh-ssbo-grow.d.ts.map +1 -0
- package/dist/assembly/recovery/device-loss-fanout.d.ts +14 -0
- package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -0
- package/dist/assembly/recovery/generation.d.ts +46 -0
- package/dist/assembly/recovery/generation.d.ts.map +1 -0
- package/dist/assembly/recovery/recovery-attempt.d.ts +63 -0
- package/dist/assembly/recovery/recovery-attempt.d.ts.map +1 -0
- package/dist/assembly/recovery/renderer-recover.d.ts +115 -0
- package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -0
- package/dist/assembly/renderer-facade.d.ts +10 -0
- package/dist/assembly/renderer-facade.d.ts.map +1 -0
- package/dist/assembly/renderer-frame-transaction.d.ts +17 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
- package/dist/assembly/renderer-helpers.d.ts +19 -0
- package/dist/assembly/renderer-helpers.d.ts.map +1 -0
- package/dist/assembly/renderer-lifecycle.d.ts +34 -0
- package/dist/assembly/renderer-lifecycle.d.ts.map +1 -1
- package/dist/assembly/shader-prewarm-policy.d.ts +15 -0
- package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready-contract.d.ts +9 -0
- package/dist/assembly/webgpu-ready-contract.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready.d.ts +55 -0
- package/dist/assembly/webgpu-ready.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer.d.ts +152 -0
- package/dist/assembly/webgpu-renderer.d.ts.map +1 -0
- package/dist/authoring.mjs +1 -1
- package/dist/{chunk-PCHBPYML.mjs → chunk-GE3SDD72.mjs} +37 -5
- package/dist/chunk-GE3SDD72.mjs.map +1 -0
- package/dist/chunk-KZFTK6DO.mjs +1191 -0
- package/dist/chunk-KZFTK6DO.mjs.map +1 -0
- package/dist/{chunk-FS2KNUQH.mjs → chunk-Q752SHI5.mjs} +332 -568
- package/dist/chunk-Q752SHI5.mjs.map +1 -0
- package/dist/{chunk-6OPXDQ2E.mjs → chunk-RR5L4SRS.mjs} +33 -294
- package/dist/chunk-RR5L4SRS.mjs.map +1 -0
- package/dist/chunk-TFH5I7JJ.mjs +296 -0
- package/dist/chunk-TFH5I7JJ.mjs.map +1 -0
- package/dist/chunk-UQYS7FRM.mjs +1003 -0
- package/dist/chunk-UQYS7FRM.mjs.map +1 -0
- package/dist/chunk-YKB5DQV7.mjs +345 -0
- package/dist/chunk-YKB5DQV7.mjs.map +1 -0
- package/dist/{chunk-5YADUCA7.mjs → chunk-YRUYGA4A.mjs} +1189 -1217
- package/dist/chunk-YRUYGA4A.mjs.map +1 -0
- package/dist/chunk-Z3YYH2MB.mjs +5082 -0
- package/dist/chunk-Z3YYH2MB.mjs.map +1 -0
- package/dist/cluster-binner.d.ts +5 -0
- package/dist/cluster-binner.d.ts.map +1 -1
- package/dist/components/index.d.ts +3 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts +4 -0
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/light-probe.d.ts +9 -0
- package/dist/components/light-probe.d.ts.map +1 -0
- package/dist/components/rect-area-light.d.ts +12 -0
- package/dist/components/rect-area-light.d.ts.map +1 -0
- package/dist/components/scene-instance.d.ts +4 -0
- package/dist/components/scene-instance.d.ts.map +1 -1
- package/dist/components/spot-light.d.ts +3 -0
- package/dist/components/spot-light.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +27276 -23232
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/device-scope.d.ts +2 -0
- package/dist/device/device-scope.d.ts.map +1 -1
- package/dist/device/gpu-residency.d.ts +32 -5
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/device/lifecycle-transaction.d.ts +2 -0
- package/dist/device/lifecycle-transaction.d.ts.map +1 -0
- package/dist/environment/frame.d.ts +5 -0
- package/dist/environment/frame.d.ts.map +1 -1
- package/dist/environment/inspection.d.ts +7 -0
- package/dist/environment/inspection.d.ts.map +1 -1
- package/dist/environment/lifecycle.d.ts +20 -2
- package/dist/environment/lifecycle.d.ts.map +1 -1
- package/dist/errors/gpu-driven.d.ts +26 -0
- package/dist/errors/gpu-driven.d.ts.map +1 -0
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/recover.d.ts +67 -3
- package/dist/errors/recover.d.ts.map +1 -1
- package/dist/errors/render.d.ts +39 -1
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/contracts.d.ts +899 -0
- package/dist/extract/contracts.d.ts.map +1 -0
- package/dist/extract/gpu-driven.d.ts +50 -0
- package/dist/extract/gpu-driven.d.ts.map +1 -0
- package/dist/extract/visibility.d.ts.map +1 -1
- package/dist/features/host.d.ts +2 -0
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/prepared-gpu-work.d.ts +3 -0
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics-store.d.ts +2 -0
- package/dist/features/prepared-graphics-store.d.ts.map +1 -1
- package/dist/gpu-driven/batch-topology.d.ts +34 -0
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/prepared-draw.d.ts +63 -0
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -0
- package/dist/gpu-driven/production-raster.d.ts +126 -2
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/view-gpu.d.ts +64 -1
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-scene-schema.d.ts +14 -0
- package/dist/gpu-scene-schema.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +9 -1
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/gpu-usage.d.ts +0 -1
- package/dist/gpu-usage.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +3 -3
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/IblPipelineCache.d.ts +7 -6
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
- package/dist/ibl/skylight-bind-group.d.ts +7 -1
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +90 -5
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +163 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/internal.d.ts +9 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +23 -2
- package/dist/internal.mjs.map +1 -1
- package/dist/light-buffer-layout.d.ts +60 -148
- package/dist/light-buffer-layout.d.ts.map +1 -1
- package/dist/materials.d.ts +34 -10
- package/dist/materials.d.ts.map +1 -1
- package/dist/mesh-material-bindings.d.ts +56 -0
- package/dist/mesh-material-bindings.d.ts.map +1 -1
- package/dist/occlusion-proxy.d.ts +4 -0
- package/dist/occlusion-proxy.d.ts.map +1 -0
- package/dist/pbr-pipeline.d.ts +58 -21
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-lighting/graph.d.ts.map +1 -1
- package/dist/pipeline/standard-lighting/light-frame.d.ts +3 -3
- package/dist/pipeline/standard-lighting/light-frame.d.ts.map +1 -1
- package/dist/pipeline/standard-lighting/topology.d.ts +1 -1
- package/dist/pipeline/standard-lighting/topology.d.ts.map +1 -1
- package/dist/pipeline/standard-lighting/transport.d.ts.map +1 -1
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +2 -0
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts +1 -1
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/points-lines/prepare.d.ts +3 -0
- package/dist/points-lines/prepare.d.ts.map +1 -1
- package/dist/points-lines/standard-owner.d.ts +33 -0
- package/dist/points-lines/standard-owner.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/ltc-resources.d.ts +31 -0
- package/dist/prepare/extended-lighting/ltc-resources.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/resources.d.ts +72 -0
- package/dist/prepare/extended-lighting/resources.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/spot-modifiers.d.ts +42 -0
- package/dist/prepare/extended-lighting/spot-modifiers.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/state.d.ts +24 -0
- package/dist/prepare/extended-lighting/state.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +8 -6
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +55 -10
- 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 +21 -5
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/gpu-timing.d.ts +19 -7
- package/dist/record/gpu-timing.d.ts.map +1 -1
- package/dist/record/helpers.d.ts +0 -20
- package/dist/record/helpers.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +20 -2
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +10 -18
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts +11 -3
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/recovery-pipeline.d.ts +30 -0
- package/dist/record/recovery-pipeline.d.ts.map +1 -0
- package/dist/record/render-context.d.ts +82 -9
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +49 -2
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +1 -2
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/recovery/render-system-candidate.d.ts +65 -0
- package/dist/recovery/render-system-candidate.d.ts.map +1 -0
- package/dist/reflection/inspection.d.ts +10 -0
- package/dist/reflection/inspection.d.ts.map +1 -0
- package/dist/reflection/projection.d.ts +49 -0
- package/dist/reflection/projection.d.ts.map +1 -1
- package/dist/reflection/record-owner.d.ts +60 -0
- package/dist/reflection/record-owner.d.ts.map +1 -0
- package/dist/render-contract.d.ts +78 -15
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +7 -0
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts +12 -0
- package/dist/render-system-extract-tail.d.ts.map +1 -0
- package/dist/render-system-extract.d.ts +252 -30
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +140 -5
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/probe-blend-record.d.ts +22 -0
- package/dist/scene/probe-blend-record.d.ts.map +1 -0
- package/dist/scene/probe-blend.d.ts +142 -0
- package/dist/scene/probe-blend.d.ts.map +1 -0
- package/dist/scene/render-scene-types.d.ts +0 -6
- package/dist/scene/render-scene-types.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +122 -9
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/scene/visibility/bounds.d.ts +20 -0
- package/dist/scene/visibility/bounds.d.ts.map +1 -0
- package/dist/scene/visibility/budget.d.ts +16 -0
- package/dist/scene/visibility/budget.d.ts.map +1 -0
- package/dist/scene/visibility/facet.d.ts +73 -0
- package/dist/scene/visibility/facet.d.ts.map +1 -0
- package/dist/scene/visibility/gpu-frame-timing.d.ts +41 -0
- package/dist/scene/visibility/gpu-frame-timing.d.ts.map +1 -0
- package/dist/scene/visibility/gpu-lod.d.ts +46 -0
- package/dist/scene/visibility/gpu-lod.d.ts.map +1 -0
- package/dist/scene/visibility/inspection.d.ts +132 -0
- package/dist/scene/visibility/inspection.d.ts.map +1 -0
- package/dist/scene/visibility/lod-selector.d.ts +25 -0
- package/dist/scene/visibility/lod-selector.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-confidence.d.ts +81 -0
- package/dist/scene/visibility/occlusion-confidence.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-pass.d.ts +57 -0
- package/dist/scene/visibility/occlusion-pass.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-query-pool.d.ts +57 -0
- package/dist/scene/visibility/occlusion-query-pool.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-runtime.d.ts +96 -0
- package/dist/scene/visibility/occlusion-runtime.d.ts.map +1 -0
- package/dist/scene/visibility/types.d.ts +34 -0
- package/dist/scene/visibility/types.d.ts.map +1 -0
- package/dist/ssr/admission.d.ts +122 -0
- package/dist/ssr/admission.d.ts.map +1 -0
- package/dist/ssr/composition.d.ts +32 -0
- package/dist/ssr/composition.d.ts.map +1 -0
- package/dist/ssr/errors.d.ts +39 -0
- package/dist/ssr/errors.d.ts.map +1 -0
- package/dist/ssr/identity.d.ts +13 -0
- package/dist/ssr/identity.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts +1 -1
- package/dist/temporal/frame-coordinator.d.ts +13 -0
- package/dist/temporal/frame-coordinator.d.ts.map +1 -1
- package/dist/temporal/frame.d.ts +2 -0
- package/dist/temporal/frame.d.ts.map +1 -1
- package/dist/temporal/index.mjs +6 -5
- package/dist/temporal/taa-history-store.d.ts +15 -1
- package/dist/temporal/taa-history-store.d.ts.map +1 -1
- package/dist/temporal/transaction.d.ts +5 -0
- package/dist/temporal/transaction.d.ts.map +1 -1
- package/dist/temporal/view.d.ts +7 -0
- package/dist/temporal/view.d.ts.map +1 -1
- package/dist/tilemap-chunk-extract-system.d.ts +1 -1
- package/dist/typed-render-graph-primitives.d.ts +4 -0
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/volume/passes.d.ts +8 -4
- package/dist/volume/passes.d.ts.map +1 -1
- package/package.json +20 -20
- package/src/__tests__/cluster-grid-default-surface.unit.test.ts +5 -0
- package/src/__tests__/detached-inspection.integration.test.ts +6 -0
- package/src/__tests__/device-feature-admission.unit.test.ts +19 -1
- package/src/__tests__/device-loss-fanout.unit.test.ts +107 -0
- package/src/__tests__/device-scope-lifecycle.unit.test.ts +21 -0
- package/src/__tests__/direct-light-snapshot.unit.test.ts +59 -3
- package/src/__tests__/environment-generation.integration.test.ts +39 -0
- package/src/__tests__/evidence-identity.ts +13 -0
- package/src/__tests__/evidence-identity.unit.test.ts +24 -0
- package/src/__tests__/expose-renderer-errors.unit.test.ts +34 -0
- package/src/__tests__/extended-lighting-recovery.browser.test.ts +14 -0
- package/src/__tests__/extended-lighting-recovery.dawn.test.ts +14 -0
- package/src/__tests__/extended-lighting-recovery.integration.test.ts +81 -0
- package/src/__tests__/extended-lighting-resources.unit.test.ts +51 -0
- package/src/__tests__/extended-lighting-zero-feature.integration.test.ts +52 -0
- package/src/__tests__/factory-contract.integration.test.ts +154 -6
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +4 -1
- package/src/__tests__/frame-observation.contract.test.ts +15 -0
- package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +146 -0
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +1 -0
- package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +1 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +572 -9
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +66 -2
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +26 -1
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +89 -2
- package/src/__tests__/gpu-driven-view.browser.test.ts +3 -3
- package/src/__tests__/gpu-driven-view.dawn.test.ts +3 -3
- package/src/__tests__/gpu-driven-view.unit.test.ts +50 -0
- package/src/__tests__/gpu-lod-evidence.ts +188 -0
- package/src/__tests__/gpu-lod-fallback.integration.test.ts +10 -0
- package/src/__tests__/gpu-lod-indirect.integration.test.ts +40 -0
- package/src/__tests__/gpu-lod-parity.dawn.test.ts +29 -0
- package/src/__tests__/gpu-lod-readiness.integration.test.ts +52 -0
- package/src/__tests__/gpu-lod-schema.unit.test.ts +66 -0
- package/src/__tests__/gpu-lod-selector.unit.test.ts +28 -0
- package/src/__tests__/gpu-lod-silhouette.browser.test.ts +13 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +66 -1
- package/src/__tests__/gpu-scene.dawn.test.ts +8 -1
- package/src/__tests__/gpu-scene.unit.test.ts +49 -3
- package/src/__tests__/ibl/face-uniforms.unit.test.ts +2 -0
- package/src/__tests__/ibl-residency-publication.unit.test.ts +113 -0
- package/src/__tests__/light-buffer-layout.unit.test.ts +113 -3
- package/src/__tests__/light-inspection.unit.test.ts +55 -0
- package/src/__tests__/light-resource-error.unit.test.ts +43 -0
- package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +109 -0
- package/src/__tests__/lod-bounds.unit.test.ts +42 -0
- package/src/__tests__/lod-cpu-lane.integration.test.ts +55 -0
- package/src/__tests__/lod-cpu-no-change.perf.test.ts +19 -0
- package/src/__tests__/lod-gpu-frame-timing.unit.test.ts +49 -0
- package/src/__tests__/lod-multi-view.integration.test.ts +63 -0
- package/src/__tests__/lod-occlusion-device-loss.integration.test.ts +27 -0
- package/src/__tests__/lod-occlusion-final-decision.integration.test.ts +47 -0
- package/src/__tests__/lod-occlusion-inspection.integration.test.ts +217 -0
- package/src/__tests__/lod-occlusion-inspection.schema.test-d.ts +14 -0
- package/src/__tests__/lod-occlusion-inspection.unit.test.ts +72 -0
- package/src/__tests__/lod-occlusion-visual-evidence.ts +91 -0
- package/src/__tests__/lod-occlusion.browser.test.ts +15 -0
- package/src/__tests__/lod-occlusion.dawn.test.ts +20 -0
- package/src/__tests__/lod-selector.profile.test.ts +35 -0
- package/src/__tests__/lod-selector.unit.test.ts +68 -0
- package/src/__tests__/lod-visibility-identity.unit.test.ts +198 -0
- package/src/__tests__/lod-visibility-lifecycle.integration.test.ts +132 -0
- package/src/__tests__/ltc-resources.unit.test.ts +32 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +41 -9
- package/src/__tests__/material-cooked-projection.unit.test.ts +19 -1
- package/src/__tests__/material-static-dynamic-route.unit.test.ts +29 -0
- package/src/__tests__/material-stride-surface.unit.test.ts +7 -3
- package/src/__tests__/materials-standard-contract.unit.test.ts +104 -0
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +1 -1
- package/src/__tests__/occlusion-confidence.unit.test.ts +168 -0
- package/src/__tests__/occlusion-invalidation.integration.test.ts +37 -0
- package/src/__tests__/occlusion-pass-routing.unit.test.ts +16 -0
- package/src/__tests__/occlusion-pass.dawn.test.ts +20 -0
- package/src/__tests__/occlusion-pass.integration.test.ts +43 -0
- package/src/__tests__/occlusion-pass.rhi-null.test.ts +22 -0
- package/src/__tests__/occlusion-query-pool.rhi-null.test.ts +21 -0
- package/src/__tests__/occlusion-query-pool.unit.test.ts +95 -0
- package/src/__tests__/occlusion-query-ticket.integration.test.ts +47 -0
- package/src/__tests__/occlusion-query.dawn.test.ts +16 -0
- package/src/__tests__/occlusion-query.evidence.ts +178 -0
- package/src/__tests__/occlusion-query.rhi-null.test.ts +31 -0
- package/src/__tests__/occlusion-runtime.unit.test.ts +120 -0
- package/src/__tests__/physical-clearcoat.integration.test.ts +89 -0
- package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +196 -0
- package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +1 -1
- package/src/__tests__/probe-bindings.unit.test.ts +200 -0
- package/src/__tests__/probe-blend-numeric.unit.test.ts +67 -0
- package/src/__tests__/probe-blend-oracle.unit.test.ts +136 -0
- package/src/__tests__/probe-capacity.integration.test.ts +97 -0
- package/src/__tests__/probe-recovery.integration.test.ts +104 -0
- package/src/__tests__/probe-scene-dirty.integration.test.ts +211 -0
- package/src/__tests__/profiler-phase-catalog.test.ts +4 -1
- package/src/__tests__/profiler-phase-token.test.ts +1 -0
- package/src/__tests__/recover-error-policy-owner.unit.test.ts +6 -3
- package/src/__tests__/recovery-candidate-prepare.contract.test.ts +140 -0
- package/src/__tests__/rect-area-boundary.unit.test.ts +24 -0
- package/src/__tests__/reflection-fallback-graph.unit.test.ts +67 -0
- package/src/__tests__/reflection-fallback-inspection.unit.test.ts +77 -0
- package/src/__tests__/reflection-fallback-lifecycle.integration.test.ts +21 -0
- package/src/__tests__/reflection-fallback-projection.unit.test.ts +90 -0
- package/src/__tests__/reflection-fallback-source.unit.test.ts +32 -0
- package/src/__tests__/reflection-probe-owner-placement.unit.test.ts +39 -0
- package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +120 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +1 -0
- package/src/__tests__/render-feature-docs.unit.test.ts +12 -7
- package/src/__tests__/render-graph-fallback.integration.test.ts +24 -0
- package/src/__tests__/render-perf/extended-lighting.bench.test.ts +66 -0
- package/src/__tests__/render-scene-projection.unit.test.ts +447 -18
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +160 -17
- package/src/__tests__/renderer-frame-generation-fence.integration.test.ts +47 -0
- package/src/__tests__/renderer-generation-assembly.unit.test.ts +77 -0
- package/src/__tests__/renderer-generation-failure.unit.test.ts +108 -0
- package/src/__tests__/renderer-producer-root-matrix.integration.test.ts +33 -0
- package/src/__tests__/renderer-recovery-capability-matrix.unit.test.ts +59 -0
- package/src/__tests__/renderer-recovery-contract.unit.test.ts +73 -0
- package/src/__tests__/renderer-recovery-lifecycle.unit.test.ts +216 -0
- package/src/__tests__/renderer-target-history-recovery.integration.test.ts +80 -0
- package/src/__tests__/shader-manifest-fixture.ts +13 -16
- package/src/__tests__/shader-stage-surface.unit.test.ts +1 -1
- package/src/__tests__/skin-motion-regression.unit.test.ts +22 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +2 -2
- package/src/__tests__/spot-modifier-projection.unit.test.ts +70 -0
- package/src/__tests__/ssr-admission-matrix.integration.test.ts +206 -0
- package/src/__tests__/ssr-composition.unit.test.ts +46 -0
- package/src/__tests__/ssr-fallback-zero-work.bench.test.ts +94 -0
- package/src/__tests__/ssr-recovery-errors.unit.test.ts +58 -0
- package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +67 -0
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +7 -0
- package/src/__tests__/standard-layer-projection.unit.test.ts +23 -0
- package/src/__tests__/standard-lighting-inspection.integration.test.ts +1 -1
- package/src/__tests__/standard-lighting-write.unit.test.ts +66 -2
- package/src/__tests__/temporal-fallback-generation.integration.test.ts +16 -0
- package/src/__tests__/temporal-view.unit.test.ts +3 -3
- package/src/__tests__/transmission-prewarm.unit.test.ts +111 -32
- package/src/__tests__/visibility-budget.integration.test.ts +140 -0
- package/src/__tests__/visibility-budget.unit.test.ts +70 -0
- package/src/__tests__/visibility-extract.integration.test.ts +11 -6
- package/src/__tests__/volumetric-fog-point-spot-accumulation.integration.test.ts +6 -3
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +31 -28
- package/src/__tests__/volumetric-fog-topology.unit.test.ts +3 -1
- package/src/assembly/backend-contract.ts +13 -0
- package/src/assembly/bundler-contract.ts +9 -0
- package/src/assembly/device-feature-admission.ts +26 -9
- package/src/assembly/extended-lighting-fallback.ts +216 -0
- package/src/assembly/factory.ts +81 -9634
- package/src/assembly/host-contract.ts +10 -0
- package/src/assembly/material/assembly.ts +18 -2
- package/src/assembly/material/standard-layer-projection.ts +16 -0
- package/src/assembly/material-shader-policy.ts +854 -0
- package/src/assembly/material-shader-prewarm.ts +88 -0
- package/src/assembly/mesh-ssbo-grow.ts +270 -0
- package/src/assembly/recovery/device-loss-fanout.ts +89 -0
- package/src/assembly/recovery/generation.ts +141 -0
- package/src/assembly/recovery/recovery-attempt.ts +800 -0
- package/src/assembly/recovery/renderer-recover.ts +906 -0
- package/src/assembly/renderer-facade.ts +342 -0
- package/src/assembly/renderer-frame-transaction.ts +45 -0
- package/src/assembly/renderer-helpers.ts +99 -0
- package/src/assembly/renderer-lifecycle.ts +159 -0
- package/src/assembly/shader-prewarm-policy.ts +157 -0
- package/src/assembly/webgpu-ready-contract.ts +14 -0
- package/src/assembly/webgpu-ready.ts +4079 -0
- package/src/assembly/webgpu-renderer.ts +4095 -0
- package/src/cluster-binner.ts +31 -0
- package/src/components/__tests__/lighting-authoring.unit.test.ts +39 -0
- package/src/components/__tests__/rect-area-light.unit.test.ts +33 -0
- package/src/components/camera.ts +1 -1
- package/src/components/index.ts +3 -0
- package/src/components/light-helpers.ts +52 -1
- package/src/components/light-probe.ts +13 -0
- package/src/components/rect-area-light.ts +15 -0
- package/src/components/scene-instance.ts +6 -0
- package/src/components/spot-light.ts +3 -0
- package/src/debug-draw-glue.ts +1 -1
- package/src/device/__tests__/extended-lighting-recovery.unit.test.ts +24 -0
- package/src/device/device-scope.ts +35 -6
- package/src/device/gpu-residency.ts +334 -35
- package/src/device/lifecycle-transaction.ts +12 -0
- package/src/environment/frame.ts +6 -0
- package/src/environment/inspection.ts +10 -0
- package/src/environment/lifecycle.ts +122 -9
- package/src/errors/gpu-driven.ts +92 -0
- package/src/errors/index.ts +1 -0
- package/src/errors/recover.ts +108 -5
- package/src/errors/render.ts +72 -1
- package/src/extract/camera.ts +3 -3
- package/src/extract/contracts.ts +974 -0
- package/src/extract/gpu-driven.ts +108 -0
- package/src/extract/visibility.ts +0 -23
- package/src/features/host.ts +16 -0
- package/src/features/prepared-gpu-work.ts +20 -2
- package/src/features/prepared-graphics-store.ts +17 -0
- package/src/gpu-driven/batch-topology.ts +206 -28
- package/src/gpu-driven/prepared-draw.ts +208 -0
- package/src/gpu-driven/production-raster.ts +1046 -39
- package/src/gpu-driven/view-gpu.ts +411 -29
- package/src/gpu-scene-schema.ts +13 -0
- package/src/gpu-scene.ts +137 -67
- package/src/gpu-usage.ts +0 -1
- package/src/hdrp-buffers.ts +6 -6
- package/src/ibl/IblPipelineCache.ts +134 -50
- package/src/ibl/skylight-bind-group.ts +26 -0
- package/src/index.ts +83 -1
- package/src/inspection-types.ts +220 -1
- package/src/internal.ts +38 -0
- package/src/light-buffer-layout.ts +157 -324
- package/src/materials.ts +278 -47
- package/src/mesh-material-bindings.ts +59 -0
- package/src/occlusion-proxy.ts +64 -0
- package/src/pbr-pipeline.ts +290 -60
- package/src/pipeline/standard-forward-lane.ts +47 -0
- package/src/pipeline/standard-lighting/graph.ts +2 -1
- package/src/pipeline/standard-lighting/light-frame.ts +3 -2
- package/src/pipeline/standard-lighting/topology.ts +1 -1
- package/src/pipeline/standard-lighting/transport.ts +2 -1
- package/src/pipeline/standard-pipeline.ts +2 -0
- package/src/pipeline-builder.ts +5 -2
- package/src/pipeline-spec.ts +12 -1
- package/src/plugin.ts +4 -0
- package/src/points-lines/__tests__/cache-recovery.unit.test.ts +22 -0
- package/src/points-lines/prepare.ts +9 -0
- package/src/points-lines/standard-owner.ts +403 -0
- package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +56 -0
- package/src/prepare/extended-lighting/ltc-resources.ts +136 -0
- package/src/prepare/extended-lighting/resources.ts +389 -0
- package/src/prepare/extended-lighting/spot-modifiers.ts +194 -0
- package/src/prepare/extended-lighting/state.ts +92 -0
- package/src/record/__tests__/frame-targets-recovery.unit.test.ts +60 -0
- package/src/record/__tests__/gpu-timing.unit.test.ts +177 -0
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +26 -1
- package/src/record/__tests__/mesh-ssbo.unit.test.ts +38 -0
- package/src/record/__tests__/recovery-pipeline.unit.test.ts +124 -0
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +28 -13
- package/src/record/__tests__/standard-pbr-ubo-layout.unit.test.ts +47 -4
- package/src/record/__tests__/temporal-payload.unit.test.ts +29 -28
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +21 -2
- package/src/record/frame-lighting.ts +252 -53
- package/src/record/frame-snapshot.ts +72 -12
- package/src/record/frame-targets.ts +11 -1
- package/src/record/frame.ts +416 -95
- package/src/record/gpu-timing.ts +108 -44
- package/src/record/helpers.ts +1 -59
- package/src/record/main-pass-geometry.ts +434 -44
- package/src/record/main-pass-material.ts +324 -210
- package/src/record/main-pass-sprite-draws.ts +58 -92
- package/src/record/main-pass.ts +94 -6
- package/src/record/mesh-ssbo.ts +79 -46
- package/src/record/recovery-pipeline.ts +695 -0
- package/src/record/render-context.ts +99 -7
- package/src/record/shadow-pass.ts +66 -40
- package/src/record/typed-frame-graph.ts +270 -84
- package/src/record/view-ubo.ts +17 -27
- package/src/recovery/render-system-candidate.ts +839 -0
- package/src/reflection/inspection.ts +67 -0
- package/src/reflection/projection.ts +196 -1
- package/src/reflection/record-owner.ts +1283 -0
- package/src/render-contract.ts +82 -12
- package/src/render-pipeline.ts +5 -0
- package/src/render-system-extract-tail.ts +2983 -0
- package/src/render-system-extract.ts +290 -2784
- package/src/render-system.ts +1597 -1192
- package/src/scene/__tests__/changed-block-summary.candidate.test.ts +36 -0
- package/src/scene/probe-blend-record.ts +54 -0
- package/src/scene/probe-blend.ts +813 -0
- package/src/scene/render-scene-types.ts +0 -7
- package/src/scene/render-scene.ts +972 -184
- package/src/scene/visibility/bounds.ts +57 -0
- package/src/scene/visibility/budget.ts +40 -0
- package/src/scene/visibility/facet.ts +400 -0
- package/src/scene/visibility/gpu-frame-timing.ts +101 -0
- package/src/scene/visibility/gpu-lod.ts +119 -0
- package/src/scene/visibility/inspection.ts +313 -0
- package/src/scene/visibility/lod-selector.ts +84 -0
- package/src/scene/visibility/occlusion-confidence.ts +478 -0
- package/src/scene/visibility/occlusion-pass.ts +165 -0
- package/src/scene/visibility/occlusion-query-pool.ts +178 -0
- package/src/scene/visibility/occlusion-runtime.ts +672 -0
- package/src/scene/visibility/types.ts +50 -0
- package/src/ssr/admission.ts +451 -0
- package/src/ssr/composition.ts +73 -0
- package/src/ssr/errors.ts +76 -0
- package/src/ssr/identity.ts +12 -0
- package/src/systems/skin-palette-allocator.ts +1 -1
- package/src/temporal/frame-coordinator.ts +30 -1
- package/src/temporal/frame.ts +14 -1
- package/src/temporal/taa-history-store.ts +46 -2
- package/src/temporal/temporal-view.ts +1 -1
- package/src/temporal/transaction.ts +9 -0
- package/src/temporal/view.ts +11 -0
- package/src/tilemap-chunk-extract-system.ts +5 -5
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +19 -12
- package/src/typed-render-graph-primitives.ts +48 -0
- package/src/volume/passes.ts +46 -49
- package/dist/.tsbuildinfo +0 -1
- package/dist/chunk-5YADUCA7.mjs.map +0 -1
- package/dist/chunk-6OPXDQ2E.mjs.map +0 -1
- package/dist/chunk-BXBQQKFQ.mjs +0 -67
- package/dist/chunk-BXBQQKFQ.mjs.map +0 -1
- package/dist/chunk-FS2KNUQH.mjs.map +0 -1
- package/dist/chunk-PCHBPYML.mjs.map +0 -1
- package/dist/chunk-VFPLTKCU.mjs +0 -192
- package/dist/chunk-VFPLTKCU.mjs.map +0 -1
|
@@ -2,16 +2,26 @@ import type { World } from '@forgeax/engine-ecs';
|
|
|
2
2
|
import type { RenderReadLease } from '@forgeax/engine-ecs/projection';
|
|
3
3
|
import { type RhiDevice, RhiError } from '@forgeax/engine-rhi';
|
|
4
4
|
import { type Result } from '@forgeax/engine-types';
|
|
5
|
+
import type { DeviceScope, LifecycleResourceSpec } from '../device/device-scope';
|
|
5
6
|
import { type SubmissionPlan } from '../gpu-driven/batch-topology';
|
|
6
7
|
import { GpuScene } from '../gpu-scene';
|
|
7
8
|
import type { PersistentRenderSceneInspection } from '../inspection-types';
|
|
8
9
|
import type { PointsLinesInspection } from '../points-lines/inspection';
|
|
9
10
|
import type { PointsLinesRetainedSnapshot } from '../points-lines/snapshot';
|
|
10
11
|
import { type ReflectionProbeFact, ReflectionProbeProjection, type ReflectionProbeSelectionResult } from '../reflection/projection';
|
|
11
|
-
import type {
|
|
12
|
+
import type { CameraSnapshot } from '../render-contract';
|
|
13
|
+
import type { DispatchEntry, ExtractedFrame, MaterialSnapshotCachesByWorld, RenderableSnapshot, RenderableTemporalSnapshot } from '../render-system-extract';
|
|
12
14
|
import { type TransmissionDemand } from '../transmission/projection';
|
|
13
|
-
import type { RenderSceneApplyResult, RenderSceneBounds,
|
|
14
|
-
|
|
15
|
+
import type { RenderSceneApplyResult, RenderSceneBounds, RenderSceneInspection, RenderSceneOperation, RenderSceneSlot } from './render-scene-types';
|
|
16
|
+
import { type VisibilityBudget } from './visibility/budget';
|
|
17
|
+
import { VisibilityFacetStore } from './visibility/facet';
|
|
18
|
+
import type { PrimitiveKey, ViewKey, VisibilityCandidate } from './visibility/types';
|
|
19
|
+
export type { RenderSceneApplyResult, RenderSceneBounds, RenderSceneIdentity, RenderSceneInspection, RenderSceneOperation, RenderSceneRecord, RenderSceneResyncReason, RenderSceneSlot, } from './render-scene-types';
|
|
20
|
+
interface WorldTransformSpan {
|
|
21
|
+
readonly worldId: number;
|
|
22
|
+
readonly entities: Readonly<Uint32Array>;
|
|
23
|
+
readonly worlds: Readonly<Float32Array>;
|
|
24
|
+
}
|
|
15
25
|
export interface RenderSceneSubmissionCapture {
|
|
16
26
|
readonly revision: number;
|
|
17
27
|
readonly slots: readonly {
|
|
@@ -34,14 +44,17 @@ export interface RenderSceneSubmissionDelta {
|
|
|
34
44
|
export declare class RenderScene {
|
|
35
45
|
private readonly slots;
|
|
36
46
|
private readonly lastSubmittedSlots;
|
|
47
|
+
private readonly previousWorldBySlot;
|
|
37
48
|
private readonly generations;
|
|
38
49
|
private readonly freeSlots;
|
|
39
50
|
private readonly slotsByWorld;
|
|
40
51
|
private readonly slotsByMaterial;
|
|
41
52
|
private readonly dirtySinceSubmitted;
|
|
53
|
+
private readonly transformUpdatedSlots;
|
|
54
|
+
private temporalTracking;
|
|
42
55
|
private lastSubmittedVisible;
|
|
43
56
|
private submittedEpoch;
|
|
44
|
-
private readonly
|
|
57
|
+
private readonly worldBoundsBySlot;
|
|
45
58
|
private readonly instanceBoundsCache;
|
|
46
59
|
private orderedSlots;
|
|
47
60
|
private materialized;
|
|
@@ -56,11 +69,14 @@ export declare class RenderScene {
|
|
|
56
69
|
/** Bounded current-scene facts for the Standard temporal producer. */
|
|
57
70
|
temporalContributorCount(): number;
|
|
58
71
|
apply(operations: readonly RenderSceneOperation[]): RenderSceneApplyResult;
|
|
59
|
-
|
|
72
|
+
/** Apply version-selected GlobalTransform columns without allocating per-entity operations. */
|
|
73
|
+
applyTransformSpans(spans: readonly WorldTransformSpan[]): RenderSceneApplyResult;
|
|
60
74
|
/** Reconcile the current identity set while retaining slots for survivors. */
|
|
61
75
|
reset(snapshots: readonly RenderableSnapshot[], countAsRebuild?: boolean): void;
|
|
62
76
|
rebuild(snapshots: readonly RenderableSnapshot[]): void;
|
|
63
|
-
|
|
77
|
+
/** Enable previous-frame publication only while a temporal feature consumes it. */
|
|
78
|
+
setTemporalTracking(enabled: boolean): void;
|
|
79
|
+
materialize(): RenderableSnapshot[];
|
|
64
80
|
lastSubmittedSlotByIndex(slot: number): RenderSceneSlot | undefined;
|
|
65
81
|
temporalSnapshotBySlot(slot: number): RenderableTemporalSnapshot | undefined;
|
|
66
82
|
withTemporal(snapshot: RenderableSnapshot): RenderableSnapshot;
|
|
@@ -89,21 +105,73 @@ export declare class RenderScene {
|
|
|
89
105
|
* bounds for its independent per-instance visibility pass. Unknown or
|
|
90
106
|
* empty instance facts deliberately return undefined (conservative no-cull).
|
|
91
107
|
*/
|
|
108
|
+
cullingWorldBoundsAt(slot: RenderSceneSlot): RenderSceneBounds | undefined;
|
|
92
109
|
cullingWorldBounds(snapshot: RenderableSnapshot): RenderSceneBounds | undefined;
|
|
93
110
|
}
|
|
94
111
|
export interface PersistentRenderSceneOptions {
|
|
95
112
|
readonly getDevice?: (() => RhiDevice) | undefined;
|
|
96
113
|
readonly onGpuError?: ((error: RhiError) => void) | undefined;
|
|
97
114
|
readonly onSharedRefMutation?: ((worldId: number, handle: number) => void) | undefined;
|
|
115
|
+
readonly configuredQueryBudget?: number | undefined;
|
|
98
116
|
}
|
|
99
117
|
export interface PersistentGpuDrivenState {
|
|
100
118
|
readonly scene: GpuScene;
|
|
101
119
|
readonly plan: SubmissionPlan;
|
|
102
120
|
readonly slots: readonly RenderSceneSlot[];
|
|
121
|
+
/** Stable renderer-local World keys aligned with RenderSceneSlot.worldId. */
|
|
122
|
+
readonly worldKeys?: readonly number[];
|
|
123
|
+
}
|
|
124
|
+
export interface CpuDirectViewInput {
|
|
125
|
+
readonly view: ViewKey;
|
|
126
|
+
readonly primitives: readonly PrimitiveKey[];
|
|
127
|
+
}
|
|
128
|
+
export interface CpuDirectCandidate {
|
|
129
|
+
readonly view: ViewKey;
|
|
130
|
+
readonly primitive: PrimitiveKey;
|
|
131
|
+
readonly candidate: VisibilityCandidate;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The one renderer-owned submission projection for a display view.
|
|
135
|
+
*
|
|
136
|
+
* Occlusion completion updates the facet asynchronously, so extraction must
|
|
137
|
+
* retain every query candidate while record/prepare consume this projection.
|
|
138
|
+
* Keeping the dispatch reindex here prevents CPU direct and GPU indirect
|
|
139
|
+
* lanes from rebuilding a second visibility map with different identity
|
|
140
|
+
* semantics.
|
|
141
|
+
*/
|
|
142
|
+
export interface PersistentVisibilityProjection {
|
|
143
|
+
readonly renderables: readonly RenderableSnapshot[];
|
|
144
|
+
readonly dispatch: readonly DispatchEntry[];
|
|
145
|
+
readonly activeEntityKeys: ReadonlySet<number>;
|
|
146
|
+
/** Monotonic owner revision for exactly this active-key projection. */
|
|
147
|
+
readonly activeEntityRevision: number;
|
|
148
|
+
readonly suppressed: number;
|
|
149
|
+
}
|
|
150
|
+
/** Project one selected candidate per view and primitive from the facet owner. */
|
|
151
|
+
export declare function projectCpuDirectCandidates(facets: VisibilityFacetStore, views: readonly CpuDirectViewInput[]): readonly CpuDirectCandidate[];
|
|
152
|
+
/** Detached GPU scene prepared from the retained CPU composition. */
|
|
153
|
+
export interface PersistentGpuDrivenCandidate {
|
|
154
|
+
readonly state: PersistentGpuDrivenState | undefined;
|
|
155
|
+
/** Candidate-owned scene root; never references the active GPU scene. */
|
|
156
|
+
createRecoveryRoot(scope: DeviceScope): LifecycleResourceSpec<unknown>;
|
|
157
|
+
publish(): void;
|
|
158
|
+
discard(): void;
|
|
159
|
+
/** Release the candidate scene even after it has crossed publication. */
|
|
160
|
+
release(): void;
|
|
161
|
+
}
|
|
162
|
+
export interface RenderSceneRecoveryRoot {
|
|
163
|
+
readonly generation: number;
|
|
164
|
+
readonly revision: number;
|
|
165
|
+
readonly visibleSlots: number;
|
|
103
166
|
}
|
|
104
167
|
/** Persistent scene projection used by the renderer's multi-World composition path. */
|
|
105
168
|
export declare class PersistentRenderScene {
|
|
106
169
|
private readonly options;
|
|
170
|
+
private readonly visibilityBudget;
|
|
171
|
+
private readonly visibilityFacets;
|
|
172
|
+
/** World identity is the author/runtime identity; array position is only a frame routing detail. */
|
|
173
|
+
private readonly visibilityWorldKeys;
|
|
174
|
+
private nextVisibilityWorldKey;
|
|
107
175
|
private readonly materialSnapshotCaches;
|
|
108
176
|
private fullRebuilds;
|
|
109
177
|
private worldEntitiesScanned;
|
|
@@ -117,11 +185,52 @@ export declare class PersistentRenderScene {
|
|
|
117
185
|
private gpuDevice;
|
|
118
186
|
private gpuStatus;
|
|
119
187
|
private temporalCapture;
|
|
188
|
+
/** Monotonic token for camera/dynamic frame facts consumed by visibility caches. */
|
|
189
|
+
private frameEpoch;
|
|
190
|
+
private visibilityFacetFrame;
|
|
191
|
+
private visibilityProjectionCache;
|
|
192
|
+
private visibilityProjectionRevision;
|
|
193
|
+
private lastActiveEntityKeys;
|
|
194
|
+
/** Stable renderer-world/entity lookup; rebuilt only with composition topology. */
|
|
195
|
+
private readonly stableSlotByEntity;
|
|
120
196
|
private pointsLinesInspections;
|
|
121
197
|
private readonly reflectionProbes;
|
|
122
198
|
constructor(options?: PersistentRenderSceneOptions);
|
|
123
199
|
/** RenderScene owns the per-World material fact cache used during extraction. */
|
|
124
200
|
materialSnapshotCacheStore(): MaterialSnapshotCachesByWorld;
|
|
201
|
+
/** The sole renderer-owned ViewKey x PrimitiveKey visibility state. */
|
|
202
|
+
visibilityFacetStore(): VisibilityFacetStore;
|
|
203
|
+
visibilityBudgetValue(): VisibilityBudget;
|
|
204
|
+
private visibilityWorldKey;
|
|
205
|
+
private worldKeyAt;
|
|
206
|
+
/** Stable World routing keys for the current worlds[] frame projection. */
|
|
207
|
+
visibilityWorldKeysFor(worlds: readonly World[]): readonly number[];
|
|
208
|
+
/** Current retained slots, available to CPU query transport as well as GPU. */
|
|
209
|
+
compositionSlots(): readonly RenderSceneSlot[];
|
|
210
|
+
/** Stable renderer-world/entity lookup shared by query and final projection paths. */
|
|
211
|
+
compositionSlotByStableEntity(): ReadonlyMap<number, RenderSceneSlot>;
|
|
212
|
+
private stableEntityKey;
|
|
213
|
+
/** Feed the facet from extracted renderables using persistent slot identity. */
|
|
214
|
+
updateVisibilityFacet(worlds: readonly World[], camera: CameraSnapshot | undefined, renderables: readonly RenderableSnapshot[]): void;
|
|
215
|
+
/**
|
|
216
|
+
* Project the current facet into the final primary-raster submission.
|
|
217
|
+
*
|
|
218
|
+
* Only renderables carrying authored lower-detail levels are queryable. A
|
|
219
|
+
* plain mesh therefore remains on the ordinary visibility path, while an
|
|
220
|
+
* LOD candidate with two accepted zero-sample results is suppressed until
|
|
221
|
+
* the confidence scheduler requests its bounded re-test. Unknown identity,
|
|
222
|
+
* invalid bounds, and non-queryable confidence all remain conservatively
|
|
223
|
+
* visible through `decideVisibility`.
|
|
224
|
+
*/
|
|
225
|
+
projectVisibility(worlds: readonly World[], camera: CameraSnapshot | undefined, renderables: readonly RenderableSnapshot[], dispatch: readonly DispatchEntry[]): PersistentVisibilityProjection;
|
|
226
|
+
/**
|
|
227
|
+
* Advance the projection revision only when the active stable-entity set
|
|
228
|
+
* changes. Camera fingerprints and scene-plan identity cover view/topology
|
|
229
|
+
* changes; keeping this token set-stable preserves the GPU filtered-plan
|
|
230
|
+
* cache on ordinary no-change frames.
|
|
231
|
+
*/
|
|
232
|
+
private activeEntityRevision;
|
|
233
|
+
private invalidateActiveEntityRevision;
|
|
125
234
|
/** Project probe facts and per-primitive selection into the persistent scene owner. */
|
|
126
235
|
projectReflectionProbes(probes: readonly ReflectionProbeFact[]): void;
|
|
127
236
|
reflectionProbeSelection(worldId: number, entityKey: number): ReflectionProbeSelectionResult;
|
|
@@ -129,12 +238,15 @@ export declare class PersistentRenderScene {
|
|
|
129
238
|
extractComposition(worlds: readonly World[], owner: {
|
|
130
239
|
readonly cameraOwner: number;
|
|
131
240
|
readonly resourceOwner: number;
|
|
132
|
-
}, catalogEpoch: number, buildCandidateFrame: () => ExtractedFrame, leases?: readonly RenderReadLease[]): ExtractedFrame;
|
|
241
|
+
}, catalogEpoch: number, buildCandidateFrame: (renderables: 'full' | 'none') => ExtractedFrame, leases?: readonly RenderReadLease[]): ExtractedFrame;
|
|
133
242
|
invalidate(): void;
|
|
134
|
-
|
|
243
|
+
setCompositionGpuSceneDemand(sceneRowsRequired: boolean): void;
|
|
135
244
|
detach(world: World): void;
|
|
136
245
|
/** Drop only device-owned tables; the CPU projection remains the recovery authority. */
|
|
137
246
|
resetGpuForRecover(): void;
|
|
247
|
+
/** Prepare a detached GPU scene without changing the active scene owner. */
|
|
248
|
+
prepareRecoveryGpuDrivenCandidate(device: RhiDevice): Result<PersistentGpuDrivenCandidate, RhiError>;
|
|
249
|
+
createRecoveryRoot(scope: DeviceScope): LifecycleResourceSpec<unknown>;
|
|
138
250
|
setPointsLinesInspections(inspections: readonly PointsLinesInspection[]): void;
|
|
139
251
|
dispose(): void;
|
|
140
252
|
inspect(): PersistentRenderSceneInspection;
|
|
@@ -150,9 +262,10 @@ export declare class PersistentRenderScene {
|
|
|
150
262
|
transmissionTopologyDemand(): TransmissionDemand;
|
|
151
263
|
/**
|
|
152
264
|
* Derive an ephemeral frame plan from persistent scene facts. The scene
|
|
153
|
-
* retains identity/topology/
|
|
265
|
+
* retains identity/topology/read versions; no prior frame object is an authority.
|
|
154
266
|
*/
|
|
155
267
|
private deriveFramePlan;
|
|
268
|
+
private projectProbes;
|
|
156
269
|
private syncGpuOwner;
|
|
157
270
|
private acquireGpuScene;
|
|
158
271
|
private failGpu;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-scene.d.ts","sourceRoot":"","sources":["../../src/scene/render-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"render-scene.d.ts","sourceRoot":"","sources":["../../src/scene/render-scene.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface ConservativeBounds {
|
|
2
|
+
readonly min: readonly [number, number, number];
|
|
3
|
+
readonly max: readonly [number, number, number];
|
|
4
|
+
}
|
|
5
|
+
export interface BoundsCandidate {
|
|
6
|
+
readonly bounds: ConservativeBounds | undefined;
|
|
7
|
+
readonly transparent: boolean;
|
|
8
|
+
readonly deformed: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function conservativeBounds(localMin: readonly [number, number, number], localMax: readonly [number, number, number]): ConservativeBounds;
|
|
11
|
+
export declare function encloseBounds(boundsList: readonly (ConservativeBounds | undefined)[]): ConservativeBounds | undefined;
|
|
12
|
+
export declare function conservativeVisibleCandidate(candidate: BoundsCandidate): {
|
|
13
|
+
readonly visible: true;
|
|
14
|
+
readonly queryable: false;
|
|
15
|
+
} | {
|
|
16
|
+
readonly visible: false;
|
|
17
|
+
readonly queryable: true;
|
|
18
|
+
readonly bounds: ConservativeBounds;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=bounds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bounds.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/bounds.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC3C,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC1C,kBAAkB,CAapB;AAED,wBAAgB,aAAa,CAC3B,UAAU,EAAE,SAAS,CAAC,kBAAkB,GAAG,SAAS,CAAC,EAAE,GACtD,kBAAkB,GAAG,SAAS,CAchC;AAED,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,eAAe,GAExB;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAK7F"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const DEFAULT_CONFIGURED_QUERY_BUDGET = 2048;
|
|
2
|
+
export declare const MAX_QUERY_BUDGET = 4096;
|
|
3
|
+
export declare const VISIBILITY_CANDIDATE_COUNT = 100000;
|
|
4
|
+
export declare const VISIBILITY_OCCLUDED_COUNT = 90000;
|
|
5
|
+
export interface VisibilityBudget {
|
|
6
|
+
readonly configuredQueryBudget: number;
|
|
7
|
+
readonly effectiveQueryBudget: number;
|
|
8
|
+
readonly oneSweepCandidates: number;
|
|
9
|
+
readonly oneSweepOccluded: number;
|
|
10
|
+
readonly settleSubmits: number;
|
|
11
|
+
readonly retestSubmits: number;
|
|
12
|
+
readonly expirySubmits: number;
|
|
13
|
+
}
|
|
14
|
+
/** Derive every renderer visibility window from one bounded query budget. */
|
|
15
|
+
export declare function createVisibilityBudget(configuredQueryBudget?: number): VisibilityBudget;
|
|
16
|
+
//# sourceMappingURL=budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/budget.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B,OAAO,CAAC;AACpD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAClD,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,6EAA6E;AAC7E,wBAAgB,sBAAsB,CACpC,qBAAqB,SAAkC,GACtD,gBAAgB,CAiBlB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type VisibilityBudget } from './budget';
|
|
2
|
+
import { type ConfidenceEvent, type ConfidenceState } from './occlusion-confidence';
|
|
3
|
+
import { type PrimitiveKey, type ViewKey, type VisibilityCandidate, type VisibilityFacetInspection } from './types';
|
|
4
|
+
interface QueryEntry {
|
|
5
|
+
readonly view: ViewKey;
|
|
6
|
+
readonly primitive: PrimitiveKey;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Renderer-owned CPU visibility state indexed by ViewKey x PrimitiveKey.
|
|
10
|
+
*
|
|
11
|
+
* Attachment order is intentionally not part of the key. This keeps world
|
|
12
|
+
* reorder, detach, and slot ABA recovery generation-safe without a second
|
|
13
|
+
* lane-specific visibility map.
|
|
14
|
+
*/
|
|
15
|
+
export declare class VisibilityFacetStore {
|
|
16
|
+
private readonly budget;
|
|
17
|
+
private readonly views;
|
|
18
|
+
private readonly confidence;
|
|
19
|
+
private visibilityRevision;
|
|
20
|
+
private drawRevision;
|
|
21
|
+
private queryRevision;
|
|
22
|
+
private readonly queryEntries;
|
|
23
|
+
private readonly readyQueryKeys;
|
|
24
|
+
private readonly inFlightQueryKeys;
|
|
25
|
+
private readonly queryQueues;
|
|
26
|
+
/** Intrusive FIFO nodes make removal/requeue O(1), so dequeue never walks stale rows. */
|
|
27
|
+
private readonly queryNodes;
|
|
28
|
+
constructor(budget?: VisibilityBudget);
|
|
29
|
+
visibilityBudget(): VisibilityBudget;
|
|
30
|
+
/** Monotonic token for confidence changes that can alter draw admission. */
|
|
31
|
+
get revision(): number;
|
|
32
|
+
/** Revision for the bounded query-candidate admission set only. */
|
|
33
|
+
get queryRevisionValue(): number;
|
|
34
|
+
/** Revision for the active draw admission set (status/queryable identity). */
|
|
35
|
+
get drawRevisionValue(): number;
|
|
36
|
+
activateView(key: ViewKey): void;
|
|
37
|
+
retireView(key: ViewKey): void;
|
|
38
|
+
detachAttachment(attachmentId: string): void;
|
|
39
|
+
/** Drop every view/row when a composition owner is detached. */
|
|
40
|
+
clear(): void;
|
|
41
|
+
reorderAttachments(_attachmentIds: readonly string[]): void;
|
|
42
|
+
setCandidate(view: ViewKey, primitive: PrimitiveKey, candidate: VisibilityCandidate): boolean;
|
|
43
|
+
/** Remove rows that are no longer queryable in the extracted frame. */
|
|
44
|
+
pruneCandidates(view: ViewKey, activePrimitives: ReadonlySet<string>): void;
|
|
45
|
+
applyConfidence(view: ViewKey, primitive: PrimitiveKey, event: ConfidenceEvent): ConfidenceState;
|
|
46
|
+
/** Advance hidden rows on a successful frame, excluding rows queried now. */
|
|
47
|
+
advanceSuccessfulSubmits(submissionGeneration: number, excluded?: readonly {
|
|
48
|
+
readonly view: ViewKey;
|
|
49
|
+
readonly primitive: PrimitiveKey;
|
|
50
|
+
}[]): void;
|
|
51
|
+
getConfidence(view: ViewKey, primitive: PrimitiveKey): ConfidenceState;
|
|
52
|
+
/** Whether this candidate needs a bounded query this frame. */
|
|
53
|
+
shouldQuery(view: ViewKey, primitive: PrimitiveKey): boolean;
|
|
54
|
+
drainConfidenceRetests(limit: number): string[];
|
|
55
|
+
/**
|
|
56
|
+
* Remove a bounded page of ready query work for one view. Queue entries are
|
|
57
|
+
* identity keyed, so confidence completion and resource failure can safely
|
|
58
|
+
* requeue the same primitive without scanning the scene.
|
|
59
|
+
*/
|
|
60
|
+
dequeueQueryCandidates(view: ViewKey, limit: number): readonly QueryEntry[];
|
|
61
|
+
/** Put a candidate back after a query page could not be reserved. */
|
|
62
|
+
requeueQueryCandidate(view: ViewKey, primitive: PrimitiveKey): void;
|
|
63
|
+
getCandidate(view: ViewKey, primitive: PrimitiveKey): VisibilityCandidate | undefined;
|
|
64
|
+
beginViewEpoch(view: ViewKey): number;
|
|
65
|
+
applyCompletion(view: ViewKey, primitive: PrimitiveKey, epoch: number, candidate: VisibilityCandidate): boolean;
|
|
66
|
+
inspect(): VisibilityFacetInspection;
|
|
67
|
+
private syncQueryKey;
|
|
68
|
+
private removeQueryKey;
|
|
69
|
+
private removeQueuedKey;
|
|
70
|
+
}
|
|
71
|
+
export type { PrimitiveKey, ViewKey, VisibilityCandidate, VisibilityFacetInspection, } from './types';
|
|
72
|
+
export { primitiveKey, primitiveKeyId, viewKey, viewKeyId } from './types';
|
|
73
|
+
//# sourceMappingURL=facet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facet.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/facet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** Renderer-owned timestamp facts spanning one graph and one queue submit. */
|
|
2
|
+
export interface GpuFrameTimingProtocol {
|
|
3
|
+
readonly firstMarker: 'frame.first-pass';
|
|
4
|
+
readonly terminalMarker: 'occlusion.resolve-copy';
|
|
5
|
+
readonly sameGraph: true;
|
|
6
|
+
readonly sameSubmit: true;
|
|
7
|
+
}
|
|
8
|
+
export interface GpuFrameTiming {
|
|
9
|
+
readonly frameId: number;
|
|
10
|
+
readonly deviceGeneration: number;
|
|
11
|
+
readonly protocol: GpuFrameTimingProtocol;
|
|
12
|
+
aborted: boolean;
|
|
13
|
+
submitId: number | undefined;
|
|
14
|
+
}
|
|
15
|
+
export interface GpuFrameTimingRecord {
|
|
16
|
+
readonly firstPassTimestampNs: number;
|
|
17
|
+
readonly occlusionResolveTimestampNs: number;
|
|
18
|
+
readonly submitted: boolean;
|
|
19
|
+
readonly graphGeneration: number;
|
|
20
|
+
readonly submitId: number;
|
|
21
|
+
}
|
|
22
|
+
export interface GpuFrameTimingSample {
|
|
23
|
+
readonly frameId: number;
|
|
24
|
+
readonly deviceGeneration: number;
|
|
25
|
+
readonly durationUs: number;
|
|
26
|
+
readonly protocol: GpuFrameTimingProtocol;
|
|
27
|
+
readonly graphGeneration: number;
|
|
28
|
+
readonly submitId: number;
|
|
29
|
+
}
|
|
30
|
+
export interface GpuFrameTimingSummary {
|
|
31
|
+
readonly medianUs: number;
|
|
32
|
+
readonly p95Us: number;
|
|
33
|
+
readonly samples: number;
|
|
34
|
+
}
|
|
35
|
+
export declare function createGpuFrameTiming(input: {
|
|
36
|
+
readonly frameId: number;
|
|
37
|
+
readonly deviceGeneration: number;
|
|
38
|
+
}): GpuFrameTiming;
|
|
39
|
+
export declare function recordGpuFrameTiming(timing: GpuFrameTiming, record: GpuFrameTimingRecord): GpuFrameTimingSample;
|
|
40
|
+
export declare function summarizeGpuFrameTiming(samples: readonly GpuFrameTimingSample[]): GpuFrameTimingSummary;
|
|
41
|
+
//# sourceMappingURL=gpu-frame-timing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-frame-timing.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/gpu-frame-timing.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,wBAAwB,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AASD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC,GAAG,cAAc,CAEjB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,oBAAoB,GAC3B,oBAAoB,CA2BtB;AAOD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GACvC,qBAAqB,CAOvB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type LodSelection } from './lod-selector';
|
|
2
|
+
export declare const GPU_LOD_ROW_SCHEMA: {
|
|
3
|
+
name: string;
|
|
4
|
+
fields: ({
|
|
5
|
+
name: string;
|
|
6
|
+
type: "u32";
|
|
7
|
+
} | {
|
|
8
|
+
name: string;
|
|
9
|
+
type: "i32";
|
|
10
|
+
} | {
|
|
11
|
+
name: string;
|
|
12
|
+
type: "f32";
|
|
13
|
+
})[];
|
|
14
|
+
};
|
|
15
|
+
export declare const GPU_LOD_ROW_LAYOUT: import("../../gpu-scene-schema").GpuSceneTableLayout;
|
|
16
|
+
export interface LodDrawRange {
|
|
17
|
+
readonly firstIndex: number;
|
|
18
|
+
readonly indexCount: number;
|
|
19
|
+
readonly baseVertex: number;
|
|
20
|
+
}
|
|
21
|
+
export interface GpuLodRowsInput {
|
|
22
|
+
readonly generation: number;
|
|
23
|
+
readonly hysteresis: number;
|
|
24
|
+
readonly ranges: readonly LodDrawRange[];
|
|
25
|
+
/** Absolute projected-height thresholds, including root at index zero. */
|
|
26
|
+
readonly coverages: readonly number[];
|
|
27
|
+
readonly ready: readonly boolean[];
|
|
28
|
+
}
|
|
29
|
+
export interface GpuLodRow extends LodDrawRange {
|
|
30
|
+
readonly generation: number;
|
|
31
|
+
readonly level: number;
|
|
32
|
+
readonly screenCoverage: number;
|
|
33
|
+
readonly hysteresis: number;
|
|
34
|
+
readonly ready: boolean;
|
|
35
|
+
}
|
|
36
|
+
/** Projects one stable row per draw range; it never contains a per-view choice. */
|
|
37
|
+
export declare function buildGpuLodRows(input: GpuLodRowsInput): readonly GpuLodRow[];
|
|
38
|
+
export declare function encodeGpuLodRows(rows: readonly GpuLodRow[]): Uint8Array;
|
|
39
|
+
export interface GpuLodSelectionInput {
|
|
40
|
+
readonly projectedHeight: number;
|
|
41
|
+
readonly previousLevel: number;
|
|
42
|
+
readonly historyValid: boolean;
|
|
43
|
+
}
|
|
44
|
+
/** CPU reference used by both the GPU selector contract and unsupported fallback. */
|
|
45
|
+
export declare function selectGpuLod(rows: readonly GpuLodRow[], input: GpuLodSelectionInput): LodSelection;
|
|
46
|
+
//# sourceMappingURL=gpu-lod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-lod.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/gpu-lod.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAa,MAAM,gBAAgB,CAAC;AAE9D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;CAAwB,CAAC;AACxD,eAAO,MAAM,kBAAkB,sDAAwB,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAgBD,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,SAAS,EAAE,CAkC5E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,UAAU,CAevE;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,SAAS,EAAE,EAC1B,KAAK,EAAE,oBAAoB,GAC1B,YAAY,CAWd"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/** Detached, bounded LOD/occlusion facts for renderer inspection consumers. */
|
|
2
|
+
export declare const LOD_OCCLUSION_INSPECTION_SCHEMA: "forgeax::lod-occlusion-inspection::v2";
|
|
3
|
+
export declare const LOD_OCCLUSION_INSPECTION_MAX_BYTES: number;
|
|
4
|
+
export type LodOcclusionInspectionError = {
|
|
5
|
+
readonly code: string;
|
|
6
|
+
readonly expected: string;
|
|
7
|
+
readonly hint: string;
|
|
8
|
+
readonly detail?: Readonly<Record<string, string | number | boolean>>;
|
|
9
|
+
};
|
|
10
|
+
export type LodOcclusionFallback = {
|
|
11
|
+
readonly active: false;
|
|
12
|
+
} | {
|
|
13
|
+
readonly active: true;
|
|
14
|
+
readonly reason: 'producer-failed' | 'page-exhausted' | 'query-failed' | 'device-loss';
|
|
15
|
+
readonly error: LodOcclusionInspectionError;
|
|
16
|
+
};
|
|
17
|
+
export type LodOcclusionDegradation = {
|
|
18
|
+
readonly active: false;
|
|
19
|
+
} | {
|
|
20
|
+
readonly active: true;
|
|
21
|
+
readonly reason: 'all-visible' | 'query-unavailable';
|
|
22
|
+
};
|
|
23
|
+
export interface LodOcclusionInspectionSample {
|
|
24
|
+
readonly primitiveSlot: number;
|
|
25
|
+
readonly level: number;
|
|
26
|
+
readonly visible: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface LodOcclusionInspectionRow {
|
|
29
|
+
readonly root: {
|
|
30
|
+
readonly guid: string;
|
|
31
|
+
readonly sourceKey: string;
|
|
32
|
+
};
|
|
33
|
+
readonly view: {
|
|
34
|
+
readonly attachmentId: string;
|
|
35
|
+
readonly cameraEntity: number;
|
|
36
|
+
readonly viewRole: 'main' | 'shadow' | 'reflection' | 'probe';
|
|
37
|
+
readonly viewGeneration: number;
|
|
38
|
+
};
|
|
39
|
+
readonly slot: {
|
|
40
|
+
readonly primitiveSlot: number;
|
|
41
|
+
readonly slotGeneration: number;
|
|
42
|
+
};
|
|
43
|
+
readonly generation: number;
|
|
44
|
+
readonly count: {
|
|
45
|
+
readonly candidates: number;
|
|
46
|
+
readonly visible: number;
|
|
47
|
+
readonly occluded: number;
|
|
48
|
+
};
|
|
49
|
+
readonly lodHistogram: readonly {
|
|
50
|
+
readonly level: number;
|
|
51
|
+
readonly count: number;
|
|
52
|
+
}[];
|
|
53
|
+
/** Map latency for the most recently completed query page (bounded POD). */
|
|
54
|
+
readonly queryLatencyUs: {
|
|
55
|
+
readonly median: number;
|
|
56
|
+
readonly p95: number;
|
|
57
|
+
readonly last: number;
|
|
58
|
+
};
|
|
59
|
+
readonly pagePressure: {
|
|
60
|
+
readonly used: number;
|
|
61
|
+
readonly capacity: number;
|
|
62
|
+
};
|
|
63
|
+
readonly fallback: LodOcclusionFallback;
|
|
64
|
+
readonly degradation: LodOcclusionDegradation;
|
|
65
|
+
readonly samples: readonly LodOcclusionInspectionSample[];
|
|
66
|
+
}
|
|
67
|
+
export interface LodOcclusionInspectionSubmit {
|
|
68
|
+
readonly frameId: number;
|
|
69
|
+
readonly build: string;
|
|
70
|
+
readonly deviceGeneration: number;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Per-World attribution is only authoritative when the renderer publishes
|
|
74
|
+
* the GPU facts from the same submit that owns the parent inspection. The
|
|
75
|
+
* normal projection path remains useful diagnostics, but it must not be used
|
|
76
|
+
* as evidence for a World-reorder or per-World LOD claim.
|
|
77
|
+
*/
|
|
78
|
+
export type LodOcclusionWorldAttribution = {
|
|
79
|
+
readonly status: 'unavailable';
|
|
80
|
+
readonly reason: 'projection-only';
|
|
81
|
+
} | {
|
|
82
|
+
readonly status: 'same-submit';
|
|
83
|
+
readonly submit: LodOcclusionInspectionSubmit;
|
|
84
|
+
};
|
|
85
|
+
export interface LodOcclusionWorldInspection {
|
|
86
|
+
readonly attachmentId: string;
|
|
87
|
+
readonly rows: readonly LodOcclusionInspectionRow[];
|
|
88
|
+
readonly attribution: LodOcclusionWorldAttribution;
|
|
89
|
+
}
|
|
90
|
+
export interface LodOcclusionInspectionBudget {
|
|
91
|
+
readonly configuredQueryBudget: number;
|
|
92
|
+
readonly effectiveQueryBudget: number;
|
|
93
|
+
readonly settleSubmits: number;
|
|
94
|
+
readonly retestSubmits: number;
|
|
95
|
+
readonly expirySubmits: number;
|
|
96
|
+
}
|
|
97
|
+
export interface LodOcclusionInspection extends LodOcclusionInspectionRow {
|
|
98
|
+
readonly schema: typeof LOD_OCCLUSION_INSPECTION_SCHEMA;
|
|
99
|
+
/** Atomic identity for the submit that produced every row below. */
|
|
100
|
+
readonly submit: LodOcclusionInspectionSubmit;
|
|
101
|
+
/** Immutable budget values used by the query and confidence owners. */
|
|
102
|
+
readonly budget: LodOcclusionInspectionBudget;
|
|
103
|
+
/** Stable attachment identity; array order is never an attribution key. */
|
|
104
|
+
readonly worlds: readonly LodOcclusionWorldInspection[];
|
|
105
|
+
}
|
|
106
|
+
export type LodOcclusionInspectionInput = Omit<LodOcclusionInspection, 'schema' | 'submit' | 'budget' | 'worlds'> & {
|
|
107
|
+
readonly submit?: LodOcclusionInspectionSubmit;
|
|
108
|
+
readonly budget?: LodOcclusionInspectionBudget;
|
|
109
|
+
readonly worlds?: readonly LodOcclusionWorldInspectionInput[];
|
|
110
|
+
};
|
|
111
|
+
export type LodOcclusionWorldInspectionInput = Omit<LodOcclusionWorldInspection, 'attribution'> & {
|
|
112
|
+
readonly attribution?: LodOcclusionWorldAttribution;
|
|
113
|
+
};
|
|
114
|
+
export type LodOcclusionInspectionAction = {
|
|
115
|
+
readonly action: 'none';
|
|
116
|
+
} | {
|
|
117
|
+
readonly action: 'rebuild';
|
|
118
|
+
readonly sourceKey: string;
|
|
119
|
+
readonly reason: string;
|
|
120
|
+
} | {
|
|
121
|
+
readonly action: 'cold-cook';
|
|
122
|
+
readonly sourceKey: string;
|
|
123
|
+
readonly reason: string;
|
|
124
|
+
} | {
|
|
125
|
+
readonly action: 'retry';
|
|
126
|
+
readonly sourceKey: string;
|
|
127
|
+
readonly reason: string;
|
|
128
|
+
};
|
|
129
|
+
export declare function inspectLodOcclusion(input: LodOcclusionInspectionInput): LodOcclusionInspection;
|
|
130
|
+
export declare function serializeLodOcclusionInspection(inspection: LodOcclusionInspection): string;
|
|
131
|
+
export declare function consumeLodOcclusionInspection(inspection: LodOcclusionInspection): LodOcclusionInspectionAction;
|
|
132
|
+
//# sourceMappingURL=inspection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspection.d.ts","sourceRoot":"","sources":["../../../src/scene/visibility/inspection.ts"],"names":[],"mappings":"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"}
|