@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
package/README.md
CHANGED
|
@@ -8,6 +8,30 @@
|
|
|
8
8
|
|
|
9
9
|
## Public frame contract
|
|
10
10
|
|
|
11
|
+
## 灯光最短入口
|
|
12
|
+
|
|
13
|
+
三条最短入口:
|
|
14
|
+
|
|
15
|
+
1. `RectAreaLight`:在现有 `Transform` 上声明单面矩形发光体,尺寸由 `width` 与 `height` 持有。
|
|
16
|
+
2. `SpotLight`:用 `iesProfile` 和 `cookie` 绑定现有资产,用 `rollDeg` 共享方位角;缺席 handle 是乘法单位元。
|
|
17
|
+
3. `LightProbe`:声明 27 个 `irradiance` 值和唯一的 `radius`,位置与朝向仍来自 `Transform`。
|
|
18
|
+
|
|
19
|
+
这些是 authored/render 输入,不是 GPU slot、LTC、probe asset 或第二个 Renderer API。尺寸、半径和 `rollDeg` 在场景序列化中保留;资产 GUID 通过 Pack/Catalog 的 `refs` 往返,不能从 URL 或数组位置推断身份。
|
|
20
|
+
|
|
21
|
+
### Extended-lighting consumer route
|
|
22
|
+
|
|
23
|
+
The three smallest public examples are `RectAreaLight(width, height)`,
|
|
24
|
+
`SpotLight(iesProfile, cookie, rollDeg)`, and `LightProbe(irradiance, radius)`.
|
|
25
|
+
Probe diffuse uses `A={admitted && d<r}`, `c=1-(d/r)^2`, scaled finite `qhat`,
|
|
26
|
+
`alpha=q/Q`, `C=1-prod(1-c)`, and `S=1-C`; Sky is only
|
|
27
|
+
`S*E_sky(N)`. It never enters probe admission, `Q`, `alpha`, specular, or
|
|
28
|
+
`DirectLightSlot`. `recordByteLength=160` is the per-object ABI receipt.
|
|
29
|
+
|
|
30
|
+
Recovery is inspected as data: read `code`, `expected`, `hint`, and typed
|
|
31
|
+
`detail`; keep the current LKG until the replacement generation is accepted.
|
|
32
|
+
GPU, Browser, and Dawn evidence that cannot execute is `not-run` or
|
|
33
|
+
`unavailable`, never a verified structural substitute.
|
|
34
|
+
|
|
11
35
|
The public frame vocabulary is intentionally small. `Camera` is the authoring
|
|
12
36
|
owner for tone, antialiasing, bloom, and `historyVersion`; `Atmosphere` and
|
|
13
37
|
`Fog` are independent ECS components. The renderer extracts these facts into
|
|
@@ -18,17 +42,76 @@ capability facts, then `observe(receipt, request)` for receipt-bound evidence.
|
|
|
18
42
|
|
|
19
43
|
### AI cold-start route
|
|
20
44
|
|
|
21
|
-
An AI consumer can start with the public sequence `
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
45
|
+
An AI consumer can start with the public sequence `state -> inspect -> recover
|
|
46
|
+
-> FrameReceipt`. `Renderer.state()` is the closed lifecycle union: only
|
|
47
|
+
`alive` admits a frame; `device-lost` permits one explicit recovery flight;
|
|
48
|
+
`recovering` shares that flight; `faulted` requires a new Renderer; and
|
|
49
|
+
`disposed` is terminal. `inspect()` is detached POD evidence for the current
|
|
50
|
+
state and recovery attempt. After `recover()` succeeds, submit the unchanged
|
|
51
|
+
draw input and use the new `FrameReceipt` as the proof for that generation.
|
|
52
|
+
|
|
53
|
+
`inspect().recovery` is always present. Its `phase` is `null` outside an active
|
|
54
|
+
attempt and otherwise follows `quiesce`, `acquire-adapter`, `acquire-device`,
|
|
55
|
+
`rehydrate`, `compile-graph`, `publish`, and `cleanup`. The projection also
|
|
56
|
+
reports the `fromGeneration`/`candidateGeneration` fence, monotonic `attempt`,
|
|
57
|
+
`lastOutcome`, committed `rehydratedRoots`, and bounded `staleLossEvents`.
|
|
58
|
+
These are detached facts; they never expose devices, graphs, textures, or
|
|
59
|
+
mutable resource collections.
|
|
60
|
+
|
|
61
|
+
During `device-lost` or `recovering`, the App keeps its host heartbeat but does
|
|
62
|
+
not advance the World or submit a frame. A failed `Result` is repaired from
|
|
63
|
+
`error.code`, `expected`, `hint`, and typed `detail`: wait for the shared
|
|
64
|
+
recovery flight, explicitly retry, repair the named owner, or create a new
|
|
65
|
+
Renderer according to the closed error. Do not parse `message`. Target and
|
|
66
|
+
history tokens retain logical identity, but their new-generation contents are
|
|
67
|
+
uninitialized until a successful receipt; a neutral target or last-known-good
|
|
68
|
+
fallback is not proof of real recovery. Public consumers never receive graph
|
|
69
|
+
nodes, devices, history textures, or prepared handles.
|
|
70
|
+
|
|
71
|
+
The current-source manifest and schema identify `source`, `build`, `backend`,
|
|
72
|
+
`runner`, and `frameIdentity`. Structural graph receipts, Browser/Dawn
|
|
73
|
+
readback or PNG evidence, and historical oracle data are separate evidence
|
|
74
|
+
classes. An unavailable backend is reported as unavailable.
|
|
75
|
+
|
|
76
|
+
## RenderFeature: the producer seam (first-read index)
|
|
77
|
+
|
|
78
|
+
### Material contract projection
|
|
79
|
+
|
|
80
|
+
Render consumes only the Pack-owned material publication projection. Its
|
|
81
|
+
inputs are runtime bool/value data, composed module slots, and the closed
|
|
82
|
+
compiler context; render never authors, cooks, writes DDC, or selects a
|
|
83
|
+
fallback material. The projection preserves `layoutIdentity`,
|
|
84
|
+
`programIdentity`, `cookIdentity`, and `materialPublicationIdentity` so a
|
|
85
|
+
stale draw can be traced to the first producer divergence.
|
|
86
|
+
|
|
87
|
+
The public route is one `RenderFeature<FrameData>` through the Standard
|
|
88
|
+
Pipeline and the active RenderGraph pass. In the examples below, `type FrameData`
|
|
89
|
+
is the producer-owned extracted value. A feature extracts one frame value,
|
|
90
|
+
then its mandatory `plan(data, context)` declares named resources and passes;
|
|
91
|
+
the host derives graph access, preparation, recording, and recovery from that
|
|
92
|
+
plan. Register it at construction with
|
|
93
|
+
`createRenderer(canvas, { features: [feature] })`. A feature never receives a
|
|
94
|
+
device, queue, encoder, staging builder, or submit callback.
|
|
95
|
+
|
|
96
|
+
## RenderFeature: the producer seam (first-read index)
|
|
97
|
+
|
|
98
|
+
The public route is one `RenderFeature<FrameData>` through the active RenderGraph
|
|
99
|
+
and `Standard Pipeline`. Here `type FrameData` is the
|
|
100
|
+
producer-owned extracted value; `plan(data, context)` declares named resources and passes.
|
|
101
|
+
Register it with
|
|
102
|
+
`createRenderer(canvas, { features: [feature] })`. The renderer derives graph
|
|
103
|
+
access, preparation, recording, and recovery; the feature never receives a
|
|
104
|
+
device, queue, encoder, or submit callback. Each declaration becomes a
|
|
105
|
+
`RenderGraph pass` inside the active frame submit boundary.
|
|
106
|
+
|
|
107
|
+
### Material contract projection
|
|
27
108
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
109
|
+
Render consumes only the Pack-owned material publication projection. Its
|
|
110
|
+
inputs are runtime bool/value data, composed module slots, and the closed
|
|
111
|
+
compiler context; render never authors, cooks, writes DDC, or selects a
|
|
112
|
+
fallback material. The projection preserves `layoutIdentity`,
|
|
113
|
+
`programIdentity`, `cookIdentity`, and `materialPublicationIdentity` so a
|
|
114
|
+
stale draw can be traced to the first producer divergence.
|
|
32
115
|
|
|
33
116
|
### Directional shadow quality: author → inspect → recover
|
|
34
117
|
|
|
@@ -231,10 +314,74 @@ if (!frame.ok) throw frame.error;
|
|
|
231
314
|
const observation = await renderer.observe(frame.value, { include: ['timings'] });
|
|
232
315
|
```
|
|
233
316
|
|
|
234
|
-
The Standard pipeline
|
|
235
|
-
PBR, IBL, SSAO, bloom, tone, antialiasing, sky, material, VFX, and debug feature
|
|
236
|
-
the same graph and submit boundary. CPU and WebGL2
|
|
237
|
-
not
|
|
317
|
+
The Standard pipeline uses one Cluster transport for every local light on storage-capable devices
|
|
318
|
+
and keeps shadow, PBR, IBL, SSAO, bloom, tone, antialiasing, sky, material, VFX, and debug feature
|
|
319
|
+
ownership inside the same graph and submit boundary. CPU and WebGL2 remain capability lanes for the
|
|
320
|
+
Cluster membership producer or for mesh/instance storage fallback; they do not reintroduce a
|
|
321
|
+
PointLight/SpotLight buffer or a fixed four-light ABI.
|
|
322
|
+
## SSR M0 admission: inspect owners, then decide
|
|
323
|
+
|
|
324
|
+
> [!IMPORTANT]
|
|
325
|
+
> SSR M0 is a consumer-only admission boundary. It reads detached producer,
|
|
326
|
+
> r32float format, and temporal receipts with one four-field integration
|
|
327
|
+
> identity. Any missing, stale, structural-only, or mismatched receipt stays
|
|
328
|
+
> `fallback-only` and emits zero SSR work; this section does not describe SSR
|
|
329
|
+
> capture, ray tracing, Hi-Z, temporal resolve, composition, or history.
|
|
330
|
+
|
|
331
|
+
```mermaid
|
|
332
|
+
flowchart LR
|
|
333
|
+
P["producer detached receipt"] --> A["admitSsrM0"]
|
|
334
|
+
F["format stage receipt"] --> A
|
|
335
|
+
T["temporal submit receipt"] --> A
|
|
336
|
+
A -->|"all identity and verdict checks pass"| E["admitted: parent M1 may unlock"]
|
|
337
|
+
A -->|"missing, stale, unavailable, or mismatched"| B["fallback-only: zero work"]
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
The inspection route is deliberately progressive:
|
|
341
|
+
|
|
342
|
+
| Layer | Read first | Owner action on failure |
|
|
343
|
+
|:--|:--|:--|
|
|
344
|
+
| Status | `status`, `failure.code`, `failure.expected` | branch on the closed failure code |
|
|
345
|
+
| Identity | `sourceHead`, `sourceTree`, `lockSha256`, `buildSha256` | rebuild the owner receipt for the current identity |
|
|
346
|
+
| Generation | producer `generation`, format `deviceGeneration`, temporal `generation` | discard stale completion and reinspect |
|
|
347
|
+
| Recovery | `failure.hint`, typed `detail.owner`, `detail.action` | use LKG/Skylight/neutral, recapture, rebuild, or retry through that owner |
|
|
348
|
+
| Work | attachment/pass/binding/resource/history/temporal counters | require exact zero on every blocked path |
|
|
349
|
+
|
|
350
|
+
```ts
|
|
351
|
+
const admission = admitSsrM0({ requested, identity, reflectionFallback, format, temporal });
|
|
352
|
+
if (admission.status === 'fallback-only') {
|
|
353
|
+
// Read admission.failure.code and route recovery to its owner.
|
|
354
|
+
console.log(admission.work); // every SSR counter is zero
|
|
355
|
+
}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
Use `inspect -> owner recovery -> matching submit -> reinspect` as the complete
|
|
359
|
+
AI route. No returned field is a device, graph node, texture, buffer, encoder,
|
|
360
|
+
or other live handle. A stable generation keeps `resetCount`, `rebuildCount`,
|
|
361
|
+
and additional format probe work at zero; a changed generation must be
|
|
362
|
+
reinspected before admission can be considered again.
|
|
363
|
+
|
|
364
|
+
`inspect()` is a synchronous snapshot. The first snapshot after binding may show
|
|
365
|
+
an absent format or temporal receipt while the owner probe and first submit are
|
|
366
|
+
still in flight; it is not a `pending` verdict. Run the ordinary owner frame,
|
|
367
|
+
await `FrameReceipt.completed`, then inspect again before routing recovery.
|
|
368
|
+
|
|
369
|
+
There are two action projections. `admission.failure.detail.action` is the coarse
|
|
370
|
+
M0 gate instruction (`retry` for demand/readiness and `rebuild` for a missing or
|
|
371
|
+
mismatched receipt). `reflectionFallbackInspection.recoveryAction` is the
|
|
372
|
+
producer's more specific source/recapture instruction. Neither is a second SSR
|
|
373
|
+
API; use the existing owner operation shown here, then submit and inspect again:
|
|
374
|
+
|
|
375
|
+
| Action field | Owner operation | Next observation |
|
|
376
|
+
|:--|:--|:--|
|
|
377
|
+
| `reflectionFallbackInspection.recoveryAction = use-LKG` | Keep the compatible probe row and draw the next frame | Read the committed row and matching temporal receipt |
|
|
378
|
+
| `reflectionFallbackInspection.recoveryAction = use-Skylight` / `use-neutral` | Change the World-owned probe/`Skylight` source, then draw | Confirm selected source and committed generation |
|
|
379
|
+
| `reflectionFallbackInspection.recoveryAction = recapture` / `rebuild` / `retry` | Draw again so the producer/RHI owner retries pending work | Await completion and inspect the owner receipt/failure |
|
|
380
|
+
| `admission.failure.detail.action = retry` / `rebuild` | Retry the consumer frame, or rebuild the named owner receipt | Reinspect admission and all three receipt generations |
|
|
381
|
+
| device-loss recovery | `await renderer.recover()` before the next draw | Confirm the replacement `deviceGeneration`, then re-probe |
|
|
382
|
+
|
|
383
|
+
SSR never invokes these operations or mutates producer/device state; this table
|
|
384
|
+
maps the typed action to the existing public World and Renderer seams.
|
|
238
385
|
|
|
239
386
|
## Target and probe lifecycle index
|
|
240
387
|
|
|
@@ -250,6 +397,12 @@ Use `inspect()` for bounded target/probe counts, pending work, and the last stru
|
|
|
250
397
|
or reports `{ kind: 'skylight' }` for the explicit fallback. `recover()` is meaningful only from `device-lost`; on a healthy renderer its structured
|
|
251
398
|
`renderer-state-invalid` result is a guard. Device recovery invalidates old generations and
|
|
252
399
|
rebuilds producer-owned physical resources, so old tickets and sources must not be reused.
|
|
400
|
+
For the SSR dependency producer, `inspection.reflectionProbes.reflectionFallbackInspection`
|
|
401
|
+
is the bounded recovery projection: its `receipt` is the committed source row selected for
|
|
402
|
+
the current lighting selection, while `failureStage`, `failureCode`, `expected`, and
|
|
403
|
+
`recoveryAction` describe the latest closed failure without exposing a texture, graph, or
|
|
404
|
+
device handle. `reflectionFallbackReadback` is the separate completed attachment fact; it
|
|
405
|
+
must match the committed row's frame and device generation before it is used as evidence.
|
|
253
406
|
The exact public names and stable consumer IDs are machine-readable in
|
|
254
407
|
`src/__tests__/render-target-public-schema.json`.
|
|
255
408
|
|
|
@@ -355,26 +508,6 @@ gate exercises the browser delivery path. Runtime inspection uses the public
|
|
|
355
508
|
belongs in `packages/render/bench` and its dev-verify producer. Render does
|
|
356
509
|
not expose a timing controller or a second membership-specific API.
|
|
357
510
|
|
|
358
|
-
## RenderFeature: the producer seam (first-read index)
|
|
359
|
-
|
|
360
|
-
### Material contract projection
|
|
361
|
-
|
|
362
|
-
Render consumes only the Pack-owned material publication projection. Its
|
|
363
|
-
inputs are runtime bool/value data, composed module slots, and the closed
|
|
364
|
-
compiler context; render never authors, cooks, writes DDC, or selects a
|
|
365
|
-
fallback material. The projection preserves `layoutIdentity`,
|
|
366
|
-
`programIdentity`, `cookIdentity`, and `materialPublicationIdentity` so a
|
|
367
|
-
stale draw can be traced to the first producer divergence.
|
|
368
|
-
|
|
369
|
-
The public route is one `RenderFeature<FrameData>` through the Standard
|
|
370
|
-
Pipeline and the active RenderGraph pass. In the examples below, `type FrameData`
|
|
371
|
-
is the producer-owned extracted value. A feature extracts one frame value,
|
|
372
|
-
then its mandatory `plan(data, context)` declares named resources and passes;
|
|
373
|
-
the host derives graph access, preparation, recording, and recovery from that
|
|
374
|
-
plan. Register it at construction with
|
|
375
|
-
`createRenderer(canvas, { features: [feature] })`. A feature never receives a
|
|
376
|
-
device, queue, encoder, staging builder, or submit callback.
|
|
377
|
-
|
|
378
511
|
## Motion Blur temporal consumer
|
|
379
512
|
|
|
380
513
|
The Standard camera may carry the presence-enabled `MotionBlur` component. Its
|
|
@@ -407,6 +540,70 @@ Render owns this consumption route:
|
|
|
407
540
|
| `cook` output | Record only validated shader artifacts. |
|
|
408
541
|
| `recovery` | Preserve the structured failure so the source contract or cooked module can be repaired. |
|
|
409
542
|
|
|
543
|
+
## Standard physical material authoring
|
|
544
|
+
|
|
545
|
+
`Materials.standard` is the public authoring entry point for the Standard
|
|
546
|
+
root. It emits one `MaterialAsset.parameters` contract; values and texture
|
|
547
|
+
coordinates are projections of that contract, not a second feature mask. A
|
|
548
|
+
base-only root keeps `forward + deferred + shadow`, while declaring any
|
|
549
|
+
second-stage layer or physical texture selects `forward + shadow`.
|
|
550
|
+
|
|
551
|
+
```ts
|
|
552
|
+
import { Materials } from '@forgeax/engine-render';
|
|
553
|
+
|
|
554
|
+
const material = Materials.standard({
|
|
555
|
+
baseColor: [0.72, 0.48, 0.22, 1],
|
|
556
|
+
metallic: 0,
|
|
557
|
+
roughness: 0.34,
|
|
558
|
+
clearcoat: 0.7,
|
|
559
|
+
clearcoatRoughness: 0.18,
|
|
560
|
+
anisotropyStrength: 0.35,
|
|
561
|
+
anisotropyRotation: Math.PI / 2,
|
|
562
|
+
sheenColor: [0.08, 0.03, 0.02],
|
|
563
|
+
sheenRoughness: 0.25,
|
|
564
|
+
iridescence: 0.5,
|
|
565
|
+
iridescenceIor: 1.4,
|
|
566
|
+
iridescenceThicknessMinimum: 120,
|
|
567
|
+
iridescenceThicknessMaximum: 380,
|
|
568
|
+
specular: 0.9,
|
|
569
|
+
specularColor: [1, 0.92, 0.8],
|
|
570
|
+
ior: 1.5,
|
|
571
|
+
});
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
The layer contract and texture semantics are fixed at the root:
|
|
575
|
+
|
|
576
|
+
| Layer / slot | Defaults | Texture facts | Pass / frame rule |
|
|
577
|
+
|:--|:--|:--|:--|
|
|
578
|
+
| `clearcoat`, `clearcoatRoughness` | `0`, `0` | `clearcoatTexture.R`, `clearcoatRoughnessTexture.G`, `clearcoatNormalTexture.RG` | coat normal needs `NORMAL + UV + tangent`; coat energy attenuates the base |
|
|
579
|
+
| `anisotropyStrength`, `anisotropyRotation` | `0`, `0` radians | `anisotropyTexture.RG` direction, `.B` strength | always needs a tangent frame; rotation changes the GGX highlight axis |
|
|
580
|
+
| `sheenColor`, `sheenRoughness` | `[0,0,0]`, `0` | color RGB is sRGB; roughness A is linear | Charlie lobe stays below clearcoat and uses existing IBL resources |
|
|
581
|
+
| `iridescence`, `iridescenceIor`, `iridescenceThickness*` | `0`, `1.3`, `100..400 nm` | strength R, thickness G; min may exceed max | bounded thin-film Fresnel modifies base reflection |
|
|
582
|
+
| `specular`, `specularColor`, `ior` | `1`, `[1,1,1]`, `1.5` | `specularTexture.A` and `specularColorTexture.RGB` (sRGB for color) | dielectric F0 uses valid IOR; metallic uses the base metal response |
|
|
583
|
+
|
|
584
|
+
> [!CAUTION]
|
|
585
|
+
> A missing or conflicting anisotropy tangent input returns the structured
|
|
586
|
+
> `material-tangent-required` error. Repair the mesh producer by supplying a
|
|
587
|
+
> finite `TANGENT : vec4` (including `.w` handedness), or by supplying
|
|
588
|
+
> `NORMAL`, the selected UV set, and triangle topology so the importer can
|
|
589
|
+
> generate and persist the frame. Do not substitute an identity or derivative
|
|
590
|
+
> fallback.
|
|
591
|
+
|
|
592
|
+
For a texture, pass a `MaterialTextureValue` when the slot needs a sampler or
|
|
593
|
+
non-default coordinates; `coordinates.set` and `coordinates.transform` stay
|
|
594
|
+
with that slot. glTF authors use the same fields through the importer, which
|
|
595
|
+
preserves the chain `parse → MaterialAsset → cook → Pack refs → load`.
|
|
596
|
+
|
|
597
|
+
The public recovery path is:
|
|
598
|
+
|
|
599
|
+
```mermaid
|
|
600
|
+
flowchart LR
|
|
601
|
+
A["inspect root and receipt"] --> B["branch on error.code"]
|
|
602
|
+
B --> C["repair source, mesh, or root"]
|
|
603
|
+
C --> D["re-import / re-cook"]
|
|
604
|
+
D --> E["load the new generation and draw"]
|
|
605
|
+
```
|
|
606
|
+
|
|
410
607
|
### Mesh material binding resolution
|
|
411
608
|
|
|
412
609
|
Render resolves one effective material table per logical mesh slot before
|
|
@@ -424,6 +621,25 @@ uses the neutral engine material.
|
|
|
424
621
|
|
|
425
622
|
The render path is `MaterialAsset` -> extract snapshot -> prepare resources -> record the per-slot `coordinates` and values. The effective `parent` is already resolved before extract. If a material contract or reflection binding fails, preserve the structured error and repair the source contract or cooked module before drawing again; that is the recovery route. The render package owns consumption, not material import or cook policy.
|
|
426
623
|
|
|
624
|
+
### Materials factory color inputs
|
|
625
|
+
|
|
626
|
+
The high-level `Materials.standard` and `Materials.unlit` factories normalize
|
|
627
|
+
authored colors at their boundary. Numeric RGB/RGBA tuples are linear-sRGB and
|
|
628
|
+
are copied unchanged; CSS/Hex strings and `0xRRGGBB` integers are sRGB inputs
|
|
629
|
+
and are decoded once. Use `Materials.srgb(tuple)` when a numeric tuple is known
|
|
630
|
+
to be sRGB. Generated assets carry `colorSpace: 'linear'`, so extraction does
|
|
631
|
+
not decode them a second time. The low-level `MaterialAsset` contract remains
|
|
632
|
+
authored-sRGB by default for serialized `type: 'color'` values; mark those
|
|
633
|
+
values `colorSpace: 'linear'` when they are already linear. Texture color space
|
|
634
|
+
continues to come from each texture asset and is not overridden by material
|
|
635
|
+
array metadata.
|
|
636
|
+
|
|
637
|
+
```ts
|
|
638
|
+
const linear = Materials.standard({ baseColor: [0.5, 0.5, 0.5, 1] });
|
|
639
|
+
const css = Materials.standard({ baseColor: '#808080' });
|
|
640
|
+
const explicitSrgb = Materials.unlit(Materials.srgb([0.5, 0.5, 0.5, 1]));
|
|
641
|
+
```
|
|
642
|
+
|
|
427
643
|
### Resident material observation
|
|
428
644
|
|
|
429
645
|
`renderer.inspect().meshMaterialBindings[]` is the detached observation of the
|
|
@@ -660,7 +876,7 @@ authority.
|
|
|
660
876
|
|
|
661
877
|
Inspect the current path through `renderer.inspect()`. Its detached CPU snapshot exposes
|
|
662
878
|
full rebuilds, no-change and delta frames, transform/material/instance updates,
|
|
663
|
-
removals, the
|
|
879
|
+
removals, the consumer-owned read version, projection cardinality, and the last resync
|
|
664
880
|
reason. The nested `gpu` status is one of `inactive`, `unsupported`, `resident`,
|
|
665
881
|
`rebuild-pending`, or `error`; resident state additionally reports capacity,
|
|
666
882
|
upload ranges and bytes, grows, clears, rebuilds, and no-change frames. The
|
|
@@ -684,9 +900,9 @@ and emits indirect arguments with `firstInstance = 0`.
|
|
|
684
900
|
|
|
685
901
|
The Standard frame activates the production raster lane when compute, storage
|
|
686
902
|
buffers, and indirect drawing are available. The current lane accepts opaque,
|
|
687
|
-
rigid default-unlit passes with batch-stable render state,
|
|
688
|
-
indexed or non-indexed geometry, multiple submeshes and
|
|
689
|
-
canonical `12F` vertex layout. It also accepts persistent rigid multi-World
|
|
903
|
+
rigid default-unlit triangle-list passes with batch-stable render state,
|
|
904
|
+
ordinary instances, indexed or non-indexed geometry, multiple submeshes and
|
|
905
|
+
material slots, and the canonical `12F` vertex layout. It also accepts persistent rigid multi-World
|
|
690
906
|
composition. Candidates come from the complete persistent projection rather
|
|
691
907
|
than the CPU-visible snapshot. The same typed graph imports the scene and mesh
|
|
692
908
|
buffers, runs the three compute passes, and consumes generated arguments with
|
|
@@ -998,3 +1214,30 @@ const temporal = catalog.require('forgeax::scene-data::temporal-v1');
|
|
|
998
1214
|
available, `SceneDataUnavailableError` exposes the closed `reason`, missing
|
|
999
1215
|
producer IDs (at most 32 plus an omission count), and explicit `recovery`.
|
|
1000
1216
|
Repair capability or producer coverage at its owner, then retry the next frame.
|
|
1217
|
+
|
|
1218
|
+
## AI-readable SSR fallback route
|
|
1219
|
+
|
|
1220
|
+
For the reflection fallback dependency evidence, call `renderer.inspect()` first
|
|
1221
|
+
and run the paired fixture. The fixture writes the current Browser/Dawn manifests;
|
|
1222
|
+
the collector then seals a fresh joint M0 guard for the current checkout:
|
|
1223
|
+
|
|
1224
|
+
```bash
|
|
1225
|
+
pnpm --filter @forgeax/app-learn-render-6-pbr-4-render-target-reflection smoke:ssr-fallback
|
|
1226
|
+
pnpm --filter @forgeax/app-learn-render-6-pbr-4-render-target-reflection smoke:browser
|
|
1227
|
+
node scripts/forgeax/collect-ssr-dependency-report.mjs \
|
|
1228
|
+
--input artifacts/ssr-fallback/dawn/ssr-dependencies-input.json \
|
|
1229
|
+
--build-summary packages/render/dist/index.mjs \
|
|
1230
|
+
--output artifacts/ssr-fallback/ssr-dependency-report.json
|
|
1231
|
+
```
|
|
1232
|
+
|
|
1233
|
+
Each smoke writes its own detached `ssr-dependencies-input.json` beside the lane
|
|
1234
|
+
manifest; the command above uses the just-completed Dawn input (use the Browser
|
|
1235
|
+
path when inspecting that lane separately). The collector signs the output with
|
|
1236
|
+
the current source/tree/lock/build identity; it never promotes a stale
|
|
1237
|
+
sibling-loop report or an authored manifest. Read identity, generation, evidence
|
|
1238
|
+
level, and closed failure fields before following the named owner recovery action.
|
|
1239
|
+
Submit the same consumer request and reinspect after recovery. The route returns
|
|
1240
|
+
detached facts only: no live GPU handle, second owner, or second ledger is exposed.
|
|
1241
|
+
Missing or mismatched receipts remain
|
|
1242
|
+
`fallback-only` with zero SSR work; SSR v1, Hi-Z, ray marching, temporal resolve,
|
|
1243
|
+
compose, and history are out of scope.
|
|
@@ -2,6 +2,19 @@ import type { Result, RhiCanvasContext, RhiDevice, RhiError, RhiInstance, Shader
|
|
|
2
2
|
/** Optional host hooks for recorder and device-lifecycle capabilities. */
|
|
3
3
|
export interface RhiBackendInstrumentation {
|
|
4
4
|
readonly resolveSurfaceDevice?: (device: RhiDevice) => Result<RhiDevice, RhiError>;
|
|
5
|
+
/**
|
|
6
|
+
* Optional deterministic submit fault seam for backend-owned integration
|
|
7
|
+
* fixtures. The callback runs after `finish()` and before the queue submit;
|
|
8
|
+
* returning an error aborts the frame transaction without changing the
|
|
9
|
+
* production queue contract.
|
|
10
|
+
*/
|
|
11
|
+
readonly beforeSubmit?: (device: RhiDevice) => RhiError | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Optional device-loss projection for deterministic recovery fixtures. A
|
|
14
|
+
* backend may compose this promise with its native `device.lost` promise;
|
|
15
|
+
* normal production packs leave it undefined and use the native signal.
|
|
16
|
+
*/
|
|
17
|
+
readonly deviceLost?: (device: RhiDevice) => RhiDevice['lost'];
|
|
5
18
|
readonly onFrameBoundary?: () => void;
|
|
6
19
|
readonly onDeviceLost?: () => void;
|
|
7
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-contract.d.ts","sourceRoot":"","sources":["../../src/assembly/backend-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B,0EAA0E;AAC1E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG;QAC1B,QAAQ,CAAC,oBAAoB,EAAE,CAC7B,MAAM,EAAE,iBAAiB,GAAG,eAAe,KACxC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;KACzC,CAAC;IACF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KAC/C,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C;;;;;;;OAOG;IACH,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CACrC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KAC/C,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACpC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAC3D,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;QACnB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;KAC1B,CAAC;IACF,gBAAgB;IAChB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,GAAG,SAAS,CAAC;IAC7E,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE,yBAAyB,CAAC;CACtD;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;CACnD;AAiCD,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;gBAElC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,4BAAiC;CAWtE"}
|
|
1
|
+
{"version":3,"file":"backend-contract.d.ts","sourceRoot":"","sources":["../../src/assembly/backend-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B,0EAA0E;AAC1E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnF;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,QAAQ,GAAG,SAAS,CAAC;IACpE;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG;QAC1B,QAAQ,CAAC,oBAAoB,EAAE,CAC7B,MAAM,EAAE,iBAAiB,GAAG,eAAe,KACxC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;KACzC,CAAC;IACF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KAC/C,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C;;;;;;;OAOG;IACH,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CACrC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,KAC/C,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACpC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;QAC3D,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;QACnB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;KAC1B,CAAC;IACF,gBAAgB;IAChB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,OAAO,GAAG,SAAS,CAAC;IAC7E,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE,yBAAyB,CAAC;CACtD;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;CACnD;AAiCD,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;gBAElC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,4BAAiC;CAWtE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ImportTransport } from '@forgeax/engine-types';
|
|
2
|
+
/** Build-tool inputs forwarded from the host into renderer assembly. */
|
|
3
|
+
export interface BundlerOptions {
|
|
4
|
+
readonly importTransport?: ImportTransport | undefined;
|
|
5
|
+
readonly shaderManifestUrl?: string | undefined;
|
|
6
|
+
/** Exact checkout revision emitted by the build-tool adapter. */
|
|
7
|
+
readonly build?: string | undefined;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=bundler-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundler-contract.d.ts","sourceRoot":"","sources":["../../src/assembly/bundler-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,iEAAiE;IACjE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { RhiAdapter, RhiDevice } from '@forgeax/engine-rhi';
|
|
2
2
|
export declare const STANDARD_PBR_REQUIRED_SAMPLED_TEXTURES = 17;
|
|
3
|
+
/**
|
|
4
|
+
* The complete Standard physical root can declare all optional texture slots.
|
|
5
|
+
* Its material group therefore needs one more sampled-texture entry than the
|
|
6
|
+
* extended-lighting topology alone. Request this ceiling when the adapter can
|
|
7
|
+
* provide it; lower-capability devices remain fail-closed at material
|
|
8
|
+
* pipeline admission instead of receiving an invalid WebGPU layout.
|
|
9
|
+
*/
|
|
10
|
+
export declare const STANDARD_PHYSICAL_REQUIRED_SAMPLED_TEXTURES = 21;
|
|
3
11
|
export interface DeviceFeatureAdmissionOptions {
|
|
4
12
|
readonly gpuPassTiming?: object | undefined;
|
|
5
13
|
readonly captureGpuTimings?: boolean | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-feature-admission.d.ts","sourceRoot":"","sources":["../../src/assembly/device-feature-admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"device-feature-admission.d.ts","sourceRoot":"","sources":["../../src/assembly/device-feature-admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAejE,eAAO,MAAM,sCAAsC,KAAK,CAAC;AACzD;;;;;;GAMG;AACH,eAAO,MAAM,2CAA2C,KAAK,CAAC;AAE9D,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,gBAAgB,EAAE,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE;QACxB,QAAQ,CAAC,gCAAgC,EAAE,MAAM,CAAC;KACnD,CAAC;CACH;AAED,KAAK,mBAAmB,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE9F,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,6BAA6B,GACtC,sBAAsB,CA0BxB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,6BAA6B,GACtC,sBAAsB,GAAG,SAAS,CAKpC;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,4BAA4B,CAAC,GAC7E,OAAO,CAOT"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Buffer, RhiDevice, Texture, TextureView } from '@forgeax/engine-rhi';
|
|
2
|
+
export interface ExtendedLightingFallbackResources {
|
|
3
|
+
readonly iesProfileTexture: Texture;
|
|
4
|
+
readonly cookieTexture: Texture;
|
|
5
|
+
readonly cookieMatrixBuffer: Buffer;
|
|
6
|
+
readonly iesProfileTextureView: TextureView;
|
|
7
|
+
readonly cookieTextureView: TextureView;
|
|
8
|
+
readonly ltcLambertTextureView: TextureView;
|
|
9
|
+
readonly ltcGgxTextureView: TextureView;
|
|
10
|
+
}
|
|
11
|
+
/** Allocate the always-valid fallback resources for the extended-lighting BGL. */
|
|
12
|
+
export declare function createExtendedLightingFallbackResources(device: RhiDevice, enabled: boolean): ExtendedLightingFallbackResources | undefined;
|
|
13
|
+
//# sourceMappingURL=extended-lighting-fallback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extended-lighting-fallback.d.ts","sourceRoot":"","sources":["../../src/assembly/extended-lighting-fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAEN,SAAS,EAET,OAAO,EACP,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAgB7B,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC;IACxC,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC;CACzC;AA0FD,kFAAkF;AAClF,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,OAAO,GACf,iCAAiC,GAAG,SAAS,CA0F/C"}
|