@forgeax/engine-render 0.1.2
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/LICENSE +202 -0
- package/README.md +1019 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/__tests__/analytic-sky-contract.test.d.ts +2 -0
- package/dist/__tests__/analytic-sky-contract.test.d.ts.map +1 -0
- package/dist/__tests__/analytic-sky-falsify.test.d.ts +2 -0
- package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +1 -0
- package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +2 -0
- package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +1 -0
- package/dist/__tests__/authoring-path.unit.test.d.ts +2 -0
- package/dist/__tests__/authoring-path.unit.test.d.ts.map +1 -0
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts +2 -0
- package/dist/__tests__/backend-selection-rhi-capture.test-d.d.ts.map +1 -0
- package/dist/__tests__/backend-selection.integration.test.d.ts +2 -0
- package/dist/__tests__/backend-selection.integration.test.d.ts.map +1 -0
- package/dist/__tests__/callback-inference.test-d.d.ts +2 -0
- package/dist/__tests__/callback-inference.test-d.d.ts.map +1 -0
- package/dist/__tests__/camera-temporal.test-d.d.ts +2 -0
- package/dist/__tests__/camera-temporal.test-d.d.ts.map +1 -0
- package/dist/__tests__/camera-temporal.test.d.ts +2 -0
- package/dist/__tests__/camera-temporal.test.d.ts.map +1 -0
- package/dist/__tests__/cluster-binner.test.d.ts +2 -0
- package/dist/__tests__/cluster-binner.test.d.ts.map +1 -0
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/cluster-grid-default-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts +2 -0
- package/dist/__tests__/construct-renderer-identity.unit.test.d.ts.map +1 -0
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts +2 -0
- package/dist/__tests__/direct-extract-consumer-contract.test-d.d.ts.map +1 -0
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts +2 -0
- package/dist/__tests__/direct-light-snapshot.unit.test.d.ts.map +1 -0
- package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +2 -0
- package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +1 -0
- package/dist/__tests__/environment-inspection.test.d.ts +2 -0
- package/dist/__tests__/environment-inspection.test.d.ts.map +1 -0
- package/dist/__tests__/factory-contract.integration.test.d.ts +2 -0
- package/dist/__tests__/factory-contract.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/fallback-row-stride-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/fog-ai-user.fixture.d.ts +2 -0
- package/dist/__tests__/fog-ai-user.fixture.d.ts.map +1 -0
- package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +16 -0
- package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +1 -0
- package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-inspection.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-inspection.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-owner-state.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-public-surface.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-ray-contract.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-source-absence.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +1 -0
- package/dist/__tests__/fog-temporal.integration.test.d.ts +2 -0
- package/dist/__tests__/fog-temporal.integration.test.d.ts.map +1 -0
- package/dist/__tests__/frame-chain.unit.test.d.ts +2 -0
- package/dist/__tests__/frame-chain.unit.test.d.ts.map +1 -0
- package/dist/__tests__/frame-observation.contract.test.d.ts +2 -0
- package/dist/__tests__/frame-observation.contract.test.d.ts.map +1 -0
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts +2 -0
- package/dist/__tests__/glyph-text-layout-recovery.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts +6 -0
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-indirect-raster.browser.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-indirect-raster.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-production.integration.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-scaling.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +12 -0
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view-graph.integration.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view.browser.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-driven-view.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-resource-store-stride.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +2 -0
- package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts +7 -0
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene-render-graph.browser.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene-render-graph.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene-schema.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene.dawn.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene.unit.test.d.ts +2 -0
- package/dist/__tests__/gpu-scene.unit.test.d.ts.map +1 -0
- package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +2 -0
- package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +1 -0
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts +2 -0
- package/dist/__tests__/infinite-grid-no-vertex-probe.unit.test.d.ts.map +1 -0
- package/dist/__tests__/injection-kind-owner.test-d.d.ts +2 -0
- package/dist/__tests__/injection-kind-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts +2 -0
- package/dist/__tests__/ktx2-basis-gpu-consumer.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts +2 -0
- package/dist/__tests__/light-buffer-layout.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts +2 -0
- package/dist/__tests__/material-contract-inventory.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts +2 -0
- package/dist/__tests__/material-cooked-projection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +2 -0
- package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +1 -0
- package/dist/__tests__/material-derived-payload.integration.test.d.ts +2 -0
- package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +1 -0
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts +2 -0
- package/dist/__tests__/material-snapshot-mutation.integration.test.d.ts.map +1 -0
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts +2 -0
- package/dist/__tests__/material-static-dynamic-route.unit.test.d.ts.map +1 -0
- package/dist/__tests__/material-stride-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/material-stride-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/materials.unit.test.d.ts +2 -0
- package/dist/__tests__/materials.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-buffer-usage-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-material-bindings.unit.test.d.ts.map +1 -0
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/mesh-stride-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts +2 -0
- package/dist/__tests__/morph-culling-reentry.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts +2 -0
- package/dist/__tests__/morph-feature-gpu-work.integration.test.d.ts.map +1 -0
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts +2 -0
- package/dist/__tests__/morph-visual-evidence.integration.test.d.ts.map +1 -0
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/nineslice-handle-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +2 -0
- package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +1 -0
- package/dist/__tests__/persistent-render-scene.unit.test.d.ts +2 -0
- package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +2 -0
- package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-pass-trace.test.d.ts +2 -0
- package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +2 -0
- package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/plugin.test.d.ts +2 -0
- package/dist/__tests__/plugin.test.d.ts.map +1 -0
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts +2 -0
- package/dist/__tests__/post-process-error-policy-owner.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts +2 -0
- package/dist/__tests__/prepared-buffer-kind-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-capability.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-generation.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-pipeline-warmup.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-resolver.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-snapshot.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-store.unit.test.d.ts.map +1 -0
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts +2 -0
- package/dist/__tests__/prepared-graphics-validation.unit.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-default-off.test.d.ts +2 -0
- package/dist/__tests__/profiler-default-off.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-phase-catalog.test.d.ts +2 -0
- package/dist/__tests__/profiler-phase-catalog.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-phase-integration.test.d.ts +2 -0
- package/dist/__tests__/profiler-phase-integration.test.d.ts.map +1 -0
- package/dist/__tests__/profiler-phase-token.test.d.ts +2 -0
- package/dist/__tests__/profiler-phase-token.test.d.ts.map +1 -0
- package/dist/__tests__/public-pipeline-id.test-d.d.ts +2 -0
- package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +1 -0
- package/dist/__tests__/public-surface.test-d.d.ts +2 -0
- package/dist/__tests__/public-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts +2 -0
- package/dist/__tests__/recover-error-policy-owner.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +2 -0
- package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-error-code-owner.test-d.d.ts +2 -0
- package/dist/__tests__/render-error-code-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts +2 -0
- package/dist/__tests__/render-error-detail-ssot.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts +2 -0
- package/dist/__tests__/render-error-exhaustive.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-assembly.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-assembly.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-construction.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-context.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-context.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-contract.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-contract.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-diagnostics.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-docs.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-docs.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-errors.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-errors.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts +2 -0
- package/dist/__tests__/render-feature-gpu-work.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-graph.integration.test.d.ts +2 -0
- package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-order.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-order.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-diagnostics.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-errors.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-docs.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-isolation.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-negative.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-prepared-graphics.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-public-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-retry.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-retry.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-scheduling.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-stage-failed-policy-owner.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-stage-fault-recovery.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-staging.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-visibility-context.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-visibility-context.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-zero-work.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts +7 -0
- package/dist/__tests__/render-graph-compute-raster-gpu.d.ts.map +1 -0
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts +2 -0
- package/dist/__tests__/render-graph-compute-raster.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-graph-compute-raster.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-hzb-gpu.d.ts +7 -0
- package/dist/__tests__/render-graph-hzb-gpu.d.ts.map +1 -0
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts +2 -0
- package/dist/__tests__/render-graph-hzb.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-graph-hzb.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts +2 -0
- package/dist/__tests__/render-graph-primitives.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts +12 -0
- package/dist/__tests__/render-graph-storage-indirect-gpu.d.ts.map +1 -0
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts +2 -0
- package/dist/__tests__/render-graph-storage-indirect.browser.test.d.ts.map +1 -0
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts +2 -0
- package/dist/__tests__/render-graph-storage-indirect.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/render-scene-projection.unit.test.d.ts +2 -0
- package/dist/__tests__/render-scene-projection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/renderer-factory-material-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts +2 -0
- package/dist/__tests__/renderer-lifecycle.integration.test.d.ts.map +1 -0
- package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +2 -0
- package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +1 -0
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts +2 -0
- package/dist/__tests__/rhi-backend-package-boundary.unit.test.d.ts.map +1 -0
- package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +2 -0
- package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +1 -0
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts +2 -0
- package/dist/__tests__/scriptable-pack-consumer.test-d.d.ts.map +1 -0
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/shader-stage-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/ssao-kernel-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/sun-snapshot-consumers.test.d.ts +2 -0
- package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +1 -0
- package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +2 -0
- package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +1 -0
- package/dist/__tests__/surface-configuration.unit.test.d.ts +2 -0
- package/dist/__tests__/surface-configuration.unit.test.d.ts.map +1 -0
- package/dist/__tests__/taa-history-store.unit.test.d.ts +2 -0
- package/dist/__tests__/taa-history-store.unit.test.d.ts.map +1 -0
- package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +2 -0
- package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +1 -0
- package/dist/__tests__/temporal-inspection.unit.test.d.ts +2 -0
- package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +1 -0
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts +2 -0
- package/dist/__tests__/texture-usage-surface.unit.test.d.ts.map +1 -0
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts +2 -0
- package/dist/__tests__/typed-pipeline-topology.unit.test.d.ts.map +1 -0
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts +2 -0
- package/dist/__tests__/urp-pipeline-targets.unit.test.d.ts.map +1 -0
- package/dist/__tests__/urp-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/urp-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/vertex-color-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts +2 -0
- package/dist/__tests__/vertex-layout-consumer.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-diagnostics.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-extract.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-extract.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-extract.perf.test.d.ts +2 -0
- package/dist/__tests__/visibility-extract.perf.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-feature-dedup.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-hidden-report.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-instances.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-instances.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-multi-world.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts +2 -0
- package/dist/__tests__/visibility-producer-matrix.integration.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-producer-matrix.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-public-surface.test-d.d.ts +2 -0
- package/dist/__tests__/visibility-public-surface.test-d.d.ts.map +1 -0
- package/dist/__tests__/visibility-resolver.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-resolver.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-snapshot-contract.unit.test.d.ts.map +1 -0
- package/dist/__tests__/vocabulary.unit.test.d.ts +2 -0
- package/dist/__tests__/vocabulary.unit.test.d.ts.map +1 -0
- package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +2 -0
- package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +1 -0
- package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +2 -0
- package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +1 -0
- package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +2 -0
- package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +1 -0
- package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +2 -0
- package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +1 -0
- package/dist/assets/asset-decoders.d.ts +5 -0
- package/dist/assets/asset-decoders.d.ts.map +1 -0
- package/dist/assets/render-asset-port.d.ts +17 -0
- package/dist/assets/render-asset-port.d.ts.map +1 -0
- package/dist/assets/resolve-render-asset.d.ts +6 -0
- package/dist/assets/resolve-render-asset.d.ts.map +1 -0
- package/dist/authoring.d.ts +12 -0
- package/dist/authoring.d.ts.map +1 -0
- package/dist/authoring.mjs +5 -0
- package/dist/authoring.mjs.map +1 -0
- package/dist/chunk-33UF5SAO.mjs +7397 -0
- package/dist/chunk-33UF5SAO.mjs.map +1 -0
- package/dist/chunk-A5QCJSNL.mjs +29913 -0
- package/dist/chunk-A5QCJSNL.mjs.map +1 -0
- package/dist/chunk-JMSB7AR4.mjs +3 -0
- package/dist/chunk-JMSB7AR4.mjs.map +1 -0
- package/dist/chunk-LXNGO6AO.mjs +569 -0
- package/dist/chunk-LXNGO6AO.mjs.map +1 -0
- package/dist/chunk-QRXPSX4X.mjs +659 -0
- package/dist/chunk-QRXPSX4X.mjs.map +1 -0
- package/dist/chunk-YAKEQPWO.mjs +1439 -0
- package/dist/chunk-YAKEQPWO.mjs.map +1 -0
- package/dist/cluster-binner.d.ts +152 -0
- package/dist/cluster-binner.d.ts.map +1 -0
- package/dist/components/__tests__/atmosphere-red.test.d.ts +2 -0
- package/dist/components/__tests__/atmosphere-red.test.d.ts.map +1 -0
- package/dist/components/__tests__/atmosphere.test.d.ts +2 -0
- package/dist/components/__tests__/atmosphere.test.d.ts.map +1 -0
- package/dist/components/__tests__/fog.test-d.d.ts +2 -0
- package/dist/components/__tests__/fog.test-d.d.ts.map +1 -0
- package/dist/components/__tests__/fog.test.d.ts +2 -0
- package/dist/components/__tests__/fog.test.d.ts.map +1 -0
- package/dist/components/__tests__/schema-parity.unit.test.d.ts +2 -0
- package/dist/components/__tests__/schema-parity.unit.test.d.ts.map +1 -0
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts +2 -0
- package/dist/components/__tests__/visibility-schema.unit.test.d.ts.map +1 -0
- package/dist/components/atmosphere.d.ts +18 -0
- package/dist/components/atmosphere.d.ts.map +1 -0
- package/dist/components/camera.d.ts +311 -0
- package/dist/components/camera.d.ts.map +1 -0
- package/dist/components/directional-light.d.ts +76 -0
- package/dist/components/directional-light.d.ts.map +1 -0
- package/dist/components/environment.d.ts +116 -0
- package/dist/components/environment.d.ts.map +1 -0
- package/dist/components/glyph-text.d.ts +26 -0
- package/dist/components/glyph-text.d.ts.map +1 -0
- package/dist/components/index.d.ts +22 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/instances.d.ts +41 -0
- package/dist/components/instances.d.ts.map +1 -0
- package/dist/components/layer.d.ts +34 -0
- package/dist/components/layer.d.ts.map +1 -0
- package/dist/components/light-helpers.d.ts +53 -0
- package/dist/components/light-helpers.d.ts.map +1 -0
- package/dist/components/mesh-filter.d.ts +24 -0
- package/dist/components/mesh-filter.d.ts.map +1 -0
- package/dist/components/mesh-renderer.d.ts +33 -0
- package/dist/components/mesh-renderer.d.ts.map +1 -0
- package/dist/components/point-light-shadow.d.ts +27 -0
- package/dist/components/point-light-shadow.d.ts.map +1 -0
- package/dist/components/point-light.d.ts +35 -0
- package/dist/components/point-light.d.ts.map +1 -0
- package/dist/components/post-process-params.d.ts +5 -0
- package/dist/components/post-process-params.d.ts.map +1 -0
- package/dist/components/scene-instance.d.ts +140 -0
- package/dist/components/scene-instance.d.ts.map +1 -0
- package/dist/components/sort-key.d.ts +44 -0
- package/dist/components/sort-key.d.ts.map +1 -0
- package/dist/components/spot-light.d.ts +81 -0
- package/dist/components/spot-light.d.ts.map +1 -0
- package/dist/components/sprite-animation.d.ts +75 -0
- package/dist/components/sprite-animation.d.ts.map +1 -0
- package/dist/components/sprite-instances.d.ts +51 -0
- package/dist/components/sprite-instances.d.ts.map +1 -0
- package/dist/components/sprite-playback-mode.d.ts +37 -0
- package/dist/components/sprite-playback-mode.d.ts.map +1 -0
- package/dist/components/sprite-region-override.d.ts +47 -0
- package/dist/components/sprite-region-override.d.ts.map +1 -0
- package/dist/components/tile-layer.d.ts +101 -0
- package/dist/components/tile-layer.d.ts.map +1 -0
- package/dist/components/tilemap.d.ts +25 -0
- package/dist/components/tilemap.d.ts.map +1 -0
- package/dist/components/visibility.d.ts +22 -0
- package/dist/components/visibility.d.ts.map +1 -0
- package/dist/construct-renderer.d.ts +2 -0
- package/dist/construct-renderer.d.ts.map +1 -0
- package/dist/construct-renderer.mjs +6 -0
- package/dist/construct-renderer.mjs.map +1 -0
- package/dist/debug-draw-glue.d.ts +56 -0
- package/dist/debug-draw-glue.d.ts.map +1 -0
- package/dist/deferred-lighting.d.ts +13 -0
- package/dist/deferred-lighting.d.ts.map +1 -0
- package/dist/dynamic-texture-store.d.ts +42 -0
- package/dist/dynamic-texture-store.d.ts.map +1 -0
- package/dist/engine-metrics.d.ts +23 -0
- package/dist/engine-metrics.d.ts.map +1 -0
- package/dist/environment/__tests__/failure-injection.test.d.ts +2 -0
- package/dist/environment/__tests__/failure-injection.test.d.ts.map +1 -0
- package/dist/environment/__tests__/generation-red.test.d.ts +2 -0
- package/dist/environment/__tests__/generation-red.test.d.ts.map +1 -0
- package/dist/environment/__tests__/generation.test.d.ts +2 -0
- package/dist/environment/__tests__/generation.test.d.ts.map +1 -0
- package/dist/environment/__tests__/graph-transaction.test.d.ts +2 -0
- package/dist/environment/__tests__/graph-transaction.test.d.ts.map +1 -0
- package/dist/environment/__tests__/inspection-red.test.d.ts +2 -0
- package/dist/environment/__tests__/inspection-red.test.d.ts.map +1 -0
- package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +2 -0
- package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +1 -0
- package/dist/environment/__tests__/pipeline-topology.test.d.ts +2 -0
- package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +1 -0
- package/dist/environment/__tests__/readiness.test.d.ts +2 -0
- package/dist/environment/__tests__/readiness.test.d.ts.map +1 -0
- package/dist/environment/__tests__/recovery.test.d.ts +2 -0
- package/dist/environment/__tests__/recovery.test.d.ts.map +1 -0
- package/dist/environment/__tests__/resize-dispose.test.d.ts +2 -0
- package/dist/environment/__tests__/resize-dispose.test.d.ts.map +1 -0
- package/dist/environment/__tests__/signature-red.test.d.ts +2 -0
- package/dist/environment/__tests__/signature-red.test.d.ts.map +1 -0
- package/dist/environment/__tests__/signature.test.d.ts +2 -0
- package/dist/environment/__tests__/signature.test.d.ts.map +1 -0
- package/dist/environment/descriptors.d.ts +2 -0
- package/dist/environment/descriptors.d.ts.map +1 -0
- package/dist/environment/extracted-environment.d.ts +53 -0
- package/dist/environment/extracted-environment.d.ts.map +1 -0
- package/dist/environment/generation.d.ts +62 -0
- package/dist/environment/generation.d.ts.map +1 -0
- package/dist/environment/gpu-bundle.d.ts +23 -0
- package/dist/environment/gpu-bundle.d.ts.map +1 -0
- package/dist/environment/graph.d.ts +108 -0
- package/dist/environment/graph.d.ts.map +1 -0
- package/dist/environment/inspection.d.ts +48 -0
- package/dist/environment/inspection.d.ts.map +1 -0
- package/dist/environment/lifecycle.d.ts +22 -0
- package/dist/environment/lifecycle.d.ts.map +1 -0
- package/dist/environment/readiness.d.ts +29 -0
- package/dist/environment/readiness.d.ts.map +1 -0
- package/dist/environment/signature.d.ts +70 -0
- package/dist/environment/signature.d.ts.map +1 -0
- package/dist/errors/ecs-validation.d.ts +3 -0
- package/dist/errors/ecs-validation.d.ts.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/recover.d.ts +78 -0
- package/dist/errors/recover.d.ts.map +1 -0
- package/dist/errors/render.d.ts +633 -0
- package/dist/errors/render.d.ts.map +1 -0
- package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +2 -0
- package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +1 -0
- package/dist/extract/__tests__/environment-source.test.d.ts +2 -0
- package/dist/extract/__tests__/environment-source.test.d.ts.map +1 -0
- package/dist/extract/__tests__/schema-readers.unit.test.d.ts +2 -0
- package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +1 -0
- package/dist/extract/directional-csm.d.ts +129 -0
- package/dist/extract/directional-csm.d.ts.map +1 -0
- package/dist/extract/index.d.ts +5 -0
- package/dist/extract/index.d.ts.map +1 -0
- package/dist/extract/material-interface.d.ts +56 -0
- package/dist/extract/material-interface.d.ts.map +1 -0
- package/dist/extract/schema-readers.d.ts +20 -0
- package/dist/extract/schema-readers.d.ts.map +1 -0
- package/dist/extract/visibility.d.ts +26 -0
- package/dist/extract/visibility.d.ts.map +1 -0
- package/dist/features/graph-contribution.d.ts +64 -0
- package/dist/features/graph-contribution.d.ts.map +1 -0
- package/dist/features/host.d.ts +100 -0
- package/dist/features/host.d.ts.map +1 -0
- package/dist/features/index.d.ts +21 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/morph/index.d.ts +3 -0
- package/dist/features/morph/index.d.ts.map +1 -0
- package/dist/features/morph/morph-bounds.d.ts +42 -0
- package/dist/features/morph/morph-bounds.d.ts.map +1 -0
- package/dist/features/morph/morph-feature.d.ts +45 -0
- package/dist/features/morph/morph-feature.d.ts.map +1 -0
- package/dist/features/prepared-gpu-work.d.ts +113 -0
- package/dist/features/prepared-gpu-work.d.ts.map +1 -0
- package/dist/features/prepared-graphics-store.d.ts +65 -0
- package/dist/features/prepared-graphics-store.d.ts.map +1 -0
- package/dist/features/prepared-graphics.d.ts +225 -0
- package/dist/features/prepared-graphics.d.ts.map +1 -0
- package/dist/features/render-graph-compute.d.ts +13 -0
- package/dist/features/render-graph-compute.d.ts.map +1 -0
- package/dist/features/render-graph-contribution.d.ts +15 -0
- package/dist/features/render-graph-contribution.d.ts.map +1 -0
- package/dist/features/render-graph-raster.d.ts +34 -0
- package/dist/features/render-graph-raster.d.ts.map +1 -0
- package/dist/features/render-graph-resources.d.ts +11 -0
- package/dist/features/render-graph-resources.d.ts.map +1 -0
- package/dist/features/scene-temporal.d.ts +45 -0
- package/dist/features/scene-temporal.d.ts.map +1 -0
- package/dist/features/taa-resolve.d.ts +21 -0
- package/dist/features/taa-resolve.d.ts.map +1 -0
- package/dist/features/targets.d.ts +32 -0
- package/dist/features/targets.d.ts.map +1 -0
- package/dist/features/types.d.ts +247 -0
- package/dist/features/types.d.ts.map +1 -0
- package/dist/frame-chain.d.ts +14 -0
- package/dist/frame-chain.d.ts.map +1 -0
- package/dist/fullscreen-post-process-pass.d.ts +178 -0
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -0
- package/dist/glyph-text-layout-system.d.ts +18 -0
- package/dist/glyph-text-layout-system.d.ts.map +1 -0
- package/dist/gpu-driven/batch-topology.d.ts +124 -0
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -0
- package/dist/gpu-driven/production-raster.d.ts +150 -0
- package/dist/gpu-driven/production-raster.d.ts.map +1 -0
- package/dist/gpu-driven/view-gpu.d.ts +141 -0
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -0
- package/dist/gpu-driven/view-reference.d.ts +15 -0
- package/dist/gpu-driven/view-reference.d.ts.map +1 -0
- package/dist/gpu-resource-store.d.ts +294 -0
- package/dist/gpu-resource-store.d.ts.map +1 -0
- package/dist/gpu-resource.d.ts +73 -0
- package/dist/gpu-resource.d.ts.map +1 -0
- package/dist/gpu-scene-schema.d.ts +171 -0
- package/dist/gpu-scene-schema.d.ts.map +1 -0
- package/dist/gpu-scene.d.ts +81 -0
- package/dist/gpu-scene.d.ts.map +1 -0
- package/dist/gpu-stage.d.ts +4 -0
- package/dist/gpu-stage.d.ts.map +1 -0
- package/dist/gpu-texture-usage.d.ts +6 -0
- package/dist/gpu-texture-usage.d.ts.map +1 -0
- package/dist/gpu-usage.d.ts +9 -0
- package/dist/gpu-usage.d.ts.map +1 -0
- package/dist/hdrp-buffers.d.ts +213 -0
- package/dist/hdrp-buffers.d.ts.map +1 -0
- package/dist/hdrp-cluster-membership.d.ts +2 -0
- package/dist/hdrp-cluster-membership.d.ts.map +1 -0
- package/dist/hdrp-pipeline.d.ts +36 -0
- package/dist/hdrp-pipeline.d.ts.map +1 -0
- package/dist/ibl/IblPipelineCache.d.ts +274 -0
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -0
- package/dist/ibl/cubemap-projection.d.ts +23 -0
- package/dist/ibl/cubemap-projection.d.ts.map +1 -0
- package/dist/ibl/face-uniforms.d.ts +65 -0
- package/dist/ibl/face-uniforms.d.ts.map +1 -0
- package/dist/ibl/skylight-bind-group.d.ts +130 -0
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +5 -0
- package/dist/index.mjs.map +1 -0
- package/dist/instance-buffer-cache.d.ts +59 -0
- package/dist/instance-buffer-cache.d.ts.map +1 -0
- package/dist/internal.d.ts +74 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.mjs +45 -0
- package/dist/internal.mjs.map +1 -0
- package/dist/lifecycle.d.ts +28 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/light-buffer-layout.d.ts +164 -0
- package/dist/light-buffer-layout.d.ts.map +1 -0
- package/dist/materials.d.ts +50 -0
- package/dist/materials.d.ts.map +1 -0
- package/dist/mesh-material-bindings.d.ts +44 -0
- package/dist/mesh-material-bindings.d.ts.map +1 -0
- package/dist/mesh-update-errors.d.ts +71 -0
- package/dist/mesh-update-errors.d.ts.map +1 -0
- package/dist/mipmap-generator.d.ts +39 -0
- package/dist/mipmap-generator.d.ts.map +1 -0
- package/dist/param-schema-projection-census.d.ts +18 -0
- package/dist/param-schema-projection-census.d.ts.map +1 -0
- package/dist/pbr-pipeline.d.ts +253 -0
- package/dist/pbr-pipeline.d.ts.map +1 -0
- package/dist/persistent-render-scene.d.ts +158 -0
- package/dist/persistent-render-scene.d.ts.map +1 -0
- package/dist/pipeline/index.d.ts +11 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline-builder.d.ts +122 -0
- package/dist/pipeline-builder.d.ts.map +1 -0
- package/dist/pipeline-errors.d.ts +110 -0
- package/dist/pipeline-errors.d.ts.map +1 -0
- package/dist/pipeline-spec.d.ts +506 -0
- package/dist/pipeline-spec.d.ts.map +1 -0
- package/dist/plugin.d.ts +17 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/post-process-errors.d.ts +182 -0
- package/dist/post-process-errors.d.ts.map +1 -0
- package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +2 -0
- package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +1 -0
- package/dist/prepare/index.d.ts +4 -0
- package/dist/prepare/index.d.ts.map +1 -0
- package/dist/prepare/prepared-graphics-resolver.d.ts +62 -0
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -0
- package/dist/prepare/schema-readers.d.ts +11 -0
- package/dist/prepare/schema-readers.d.ts.map +1 -0
- package/dist/record/__tests__/environment-record.test.d.ts +2 -0
- package/dist/record/__tests__/environment-record.test.d.ts.map +1 -0
- package/dist/record/__tests__/frame-targets.unit.test.d.ts +2 -0
- package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts +2 -0
- package/dist/record/__tests__/material-bg-cache.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts +2 -0
- package/dist/record/__tests__/material-slot-plan.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/membership-timing.unit.test.d.ts +2 -0
- package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/render-submission.integration.test.d.ts +2 -0
- package/dist/record/__tests__/render-submission.integration.test.d.ts.map +1 -0
- package/dist/record/__tests__/render-submission.perf.test.d.ts +2 -0
- package/dist/record/__tests__/render-submission.perf.test.d.ts.map +1 -0
- package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +2 -0
- package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts +2 -0
- package/dist/record/__tests__/video-texture-view.unit.test.d.ts.map +1 -0
- package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +2 -0
- package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +187 -0
- package/dist/record/frame-lighting.d.ts.map +1 -0
- package/dist/record/frame-observation.d.ts +38 -0
- package/dist/record/frame-observation.d.ts.map +1 -0
- package/dist/record/frame-snapshot.d.ts +429 -0
- package/dist/record/frame-snapshot.d.ts.map +1 -0
- package/dist/record/frame-targets.d.ts +53 -0
- package/dist/record/frame-targets.d.ts.map +1 -0
- package/dist/record/frame.d.ts +59 -0
- package/dist/record/frame.d.ts.map +1 -0
- package/dist/record/helpers.d.ts +101 -0
- package/dist/record/helpers.d.ts.map +1 -0
- package/dist/record/index.d.ts +15 -0
- package/dist/record/index.d.ts.map +1 -0
- package/dist/record/main-pass-geometry.d.ts +20 -0
- package/dist/record/main-pass-geometry.d.ts.map +1 -0
- package/dist/record/main-pass-material.d.ts +173 -0
- package/dist/record/main-pass-material.d.ts.map +1 -0
- package/dist/record/main-pass-skin.d.ts +46 -0
- package/dist/record/main-pass-skin.d.ts.map +1 -0
- package/dist/record/main-pass-sprite-draws.d.ts +18 -0
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -0
- package/dist/record/main-pass-sprite.d.ts +69 -0
- package/dist/record/main-pass-sprite.d.ts.map +1 -0
- package/dist/record/main-pass.d.ts +20 -0
- package/dist/record/main-pass.d.ts.map +1 -0
- package/dist/record/material-payload.d.ts +43 -0
- package/dist/record/material-payload.d.ts.map +1 -0
- package/dist/record/material-slot-plan.d.ts +26 -0
- package/dist/record/material-slot-plan.d.ts.map +1 -0
- package/dist/record/membership-timing.d.ts +232 -0
- package/dist/record/membership-timing.d.ts.map +1 -0
- package/dist/record/mesh-ssbo.d.ts +173 -0
- package/dist/record/mesh-ssbo.d.ts.map +1 -0
- package/dist/record/shadow-caster-uniform.d.ts +8 -0
- package/dist/record/shadow-caster-uniform.d.ts.map +1 -0
- package/dist/record/shadow-pass.d.ts +125 -0
- package/dist/record/shadow-pass.d.ts.map +1 -0
- package/dist/record/shadow-submit-mode.d.ts +66 -0
- package/dist/record/shadow-submit-mode.d.ts.map +1 -0
- package/dist/record/skybox-post-pass.d.ts +33 -0
- package/dist/record/skybox-post-pass.d.ts.map +1 -0
- package/dist/record/typed-frame-graph.d.ts +13 -0
- package/dist/record/typed-frame-graph.d.ts.map +1 -0
- package/dist/record/view-ubo.d.ts +39 -0
- package/dist/record/view-ubo.d.ts.map +1 -0
- package/dist/render-data.d.ts +143 -0
- package/dist/render-data.d.ts.map +1 -0
- package/dist/render-dispatch-membership.d.ts +47 -0
- package/dist/render-dispatch-membership.d.ts.map +1 -0
- package/dist/render-graph-primitives.d.ts +424 -0
- package/dist/render-graph-primitives.d.ts.map +1 -0
- package/dist/render-pipeline-context.d.ts +289 -0
- package/dist/render-pipeline-context.d.ts.map +1 -0
- package/dist/render-pipeline-target.d.ts +16 -0
- package/dist/render-pipeline-target.d.ts.map +1 -0
- package/dist/render-pipeline.d.ts +149 -0
- package/dist/render-pipeline.d.ts.map +1 -0
- package/dist/render-scene-projection.d.ts +174 -0
- package/dist/render-scene-projection.d.ts.map +1 -0
- package/dist/render-system-extract.d.ts +1096 -0
- package/dist/render-system-extract.d.ts.map +1 -0
- package/dist/render-system-fold.d.ts +266 -0
- package/dist/render-system-fold.d.ts.map +1 -0
- package/dist/render-system.d.ts +814 -0
- package/dist/render-system.d.ts.map +1 -0
- package/dist/renderer/asset-service.d.ts +10 -0
- package/dist/renderer/asset-service.d.ts.map +1 -0
- package/dist/renderer/backend-selection.d.ts +26 -0
- package/dist/renderer/backend-selection.d.ts.map +1 -0
- package/dist/renderer/environment-classify.d.ts +6 -0
- package/dist/renderer/environment-classify.d.ts.map +1 -0
- package/dist/renderer/environment-error.d.ts +13 -0
- package/dist/renderer/environment-error.d.ts.map +1 -0
- package/dist/renderer/material/assembly.d.ts +22 -0
- package/dist/renderer/material/assembly.d.ts.map +1 -0
- package/dist/renderer/material/pipeline-projection.d.ts +91 -0
- package/dist/renderer/material/pipeline-projection.d.ts.map +1 -0
- package/dist/renderer/renderer-factory.d.ts +283 -0
- package/dist/renderer/renderer-factory.d.ts.map +1 -0
- package/dist/renderer.d.ts +771 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts +33 -0
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -0
- package/dist/scene-utils/collect-subtree.d.ts +11 -0
- package/dist/scene-utils/collect-subtree.d.ts.map +1 -0
- package/dist/shadow-atlas.d.ts +117 -0
- package/dist/shadow-atlas.d.ts.map +1 -0
- package/dist/ssao-buffers.d.ts +31 -0
- package/dist/ssao-buffers.d.ts.map +1 -0
- package/dist/ssao-config.d.ts +28 -0
- package/dist/ssao-config.d.ts.map +1 -0
- package/dist/ssao-data.d.ts +34 -0
- package/dist/ssao-data.d.ts.map +1 -0
- package/dist/surface-format.d.ts +10 -0
- package/dist/surface-format.d.ts.map +1 -0
- package/dist/systems/active-camera.d.ts +53 -0
- package/dist/systems/active-camera.d.ts.map +1 -0
- package/dist/systems/pass-selector.d.ts +24 -0
- package/dist/systems/pass-selector.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts +51 -0
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -0
- package/dist/systems/transparent-sort-config.d.ts +91 -0
- package/dist/systems/transparent-sort-config.d.ts.map +1 -0
- package/dist/taa-history-store.d.ts +88 -0
- package/dist/taa-history-store.d.ts.map +1 -0
- package/dist/temporal-coverage.d.ts +35 -0
- package/dist/temporal-coverage.d.ts.map +1 -0
- package/dist/temporal-frame-transaction.d.ts +92 -0
- package/dist/temporal-frame-transaction.d.ts.map +1 -0
- package/dist/temporal-inspection.d.ts +57 -0
- package/dist/temporal-inspection.d.ts.map +1 -0
- package/dist/temporal-view.d.ts +43 -0
- package/dist/temporal-view.d.ts.map +1 -0
- package/dist/tilemap/resolve-tileset-runtime.d.ts +23 -0
- package/dist/tilemap/resolve-tileset-runtime.d.ts.map +1 -0
- package/dist/tilemap-chunk-extract-system.d.ts +142 -0
- package/dist/tilemap-chunk-extract-system.d.ts.map +1 -0
- package/dist/typed-render-graph-primitives.d.ts +59 -0
- package/dist/typed-render-graph-primitives.d.ts.map +1 -0
- package/dist/typed-shadow-passes.d.ts +11 -0
- package/dist/typed-shadow-passes.d.ts.map +1 -0
- package/dist/urp-pipeline.d.ts +4 -0
- package/dist/urp-pipeline.d.ts.map +1 -0
- package/package.json +94 -0
- package/src/__tests__/analytic-sky-contract.test.ts +27 -0
- package/src/__tests__/analytic-sky-falsify-carriers.mjs +43 -0
- package/src/__tests__/analytic-sky-falsify.test.ts +94 -0
- package/src/__tests__/assets-runtime-handoff.integration.test.ts +36 -0
- package/src/__tests__/authoring-path.unit.test.ts +14 -0
- package/src/__tests__/backend-selection-rhi-capture.test-d.ts +21 -0
- package/src/__tests__/backend-selection.integration.test.ts +11 -0
- package/src/__tests__/callback-inference.test-d.ts +5 -0
- package/src/__tests__/camera-temporal.test-d.ts +8 -0
- package/src/__tests__/camera-temporal.test.ts +188 -0
- package/src/__tests__/cluster-binner.test.ts +272 -0
- package/src/__tests__/cluster-grid-default-surface.unit.test.ts +17 -0
- package/src/__tests__/construct-renderer-identity.unit.test.ts +10 -0
- package/src/__tests__/direct-extract-consumer-contract.test-d.ts +34 -0
- package/src/__tests__/direct-light-snapshot.unit.test.ts +71 -0
- package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +18 -0
- package/src/__tests__/environment-inspection.test.ts +45 -0
- package/src/__tests__/factory-contract.integration.test.ts +331 -0
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +18 -0
- package/src/__tests__/fog-ai-user.fixture.ts +350 -0
- package/src/__tests__/fog-custom-render-feature.fixture.ts +33 -0
- package/src/__tests__/fog-custom-render-feature.integration.test.ts +76 -0
- package/src/__tests__/fog-inspection.integration.test.ts +127 -0
- package/src/__tests__/fog-owner-state.integration.test.ts +112 -0
- package/src/__tests__/fog-pipeline-topology.integration.test.ts +93 -0
- package/src/__tests__/fog-public-surface.integration.test.ts +60 -0
- package/src/__tests__/fog-ray-contract.integration.test.ts +73 -0
- package/src/__tests__/fog-source-absence.integration.test.ts +51 -0
- package/src/__tests__/fog-temporal.integration.test.ts +115 -0
- package/src/__tests__/frame-chain.unit.test.ts +26 -0
- package/src/__tests__/frame-observation.contract.test.ts +103 -0
- package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +172 -0
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +347 -0
- package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +12 -0
- package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +16 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +609 -0
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +90 -0
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +192 -0
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +128 -0
- package/src/__tests__/gpu-driven-view.browser.test.ts +19 -0
- package/src/__tests__/gpu-driven-view.dawn.test.ts +17 -0
- package/src/__tests__/gpu-driven-view.unit.test.ts +455 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +59 -0
- package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +27 -0
- package/src/__tests__/gpu-scene-render-graph-gpu.ts +309 -0
- package/src/__tests__/gpu-scene-render-graph.browser.test.ts +19 -0
- package/src/__tests__/gpu-scene-render-graph.dawn.test.ts +19 -0
- package/src/__tests__/gpu-scene-schema.unit.test.ts +16 -0
- package/src/__tests__/gpu-scene.dawn.test.ts +209 -0
- package/src/__tests__/gpu-scene.unit.test.ts +161 -0
- package/src/__tests__/hdrp-pipeline.unit.test.ts +100 -0
- package/src/__tests__/ibl/ibl-fallback.unit.test.ts +23 -0
- package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +124 -0
- package/src/__tests__/injection-kind-owner.test-d.ts +14 -0
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +719 -0
- package/src/__tests__/light-buffer-layout.unit.test.ts +85 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +24 -0
- package/src/__tests__/material-cooked-projection.unit.test.ts +177 -0
- package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +69 -0
- package/src/__tests__/material-derived-payload.integration.test.ts +164 -0
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +58 -0
- package/src/__tests__/material-static-dynamic-route.unit.test.ts +113 -0
- package/src/__tests__/material-stride-surface.unit.test.ts +32 -0
- package/src/__tests__/materials.unit.test.ts +25 -0
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +107 -0
- package/src/__tests__/mesh-material-bindings.unit.test.ts +89 -0
- package/src/__tests__/mesh-stride-surface.unit.test.ts +16 -0
- package/src/__tests__/morph-culling-reentry.dawn.test.ts +166 -0
- package/src/__tests__/morph-feature-gpu-work.integration.test.ts +78 -0
- package/src/__tests__/morph-visual-evidence.integration.test.ts +66 -0
- package/src/__tests__/nineslice-handle-surface.unit.test.ts +14 -0
- package/src/__tests__/param-schema-projection-census.unit.test.ts +40 -0
- package/src/__tests__/persistent-render-scene.unit.test.ts +1311 -0
- package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +167 -0
- package/src/__tests__/pipeline-pass-trace.test.ts +92 -0
- package/src/__tests__/pipeline-stage-owner.test-d.ts +13 -0
- package/src/__tests__/plugin.test.ts +25 -0
- package/src/__tests__/post-process-error-policy-owner.unit.test.ts +208 -0
- package/src/__tests__/prepared-buffer-kind-owner.test-d.ts +29 -0
- package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +129 -0
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +140 -0
- package/src/__tests__/prepared-graphics-generation.unit.test.ts +175 -0
- package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +206 -0
- package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +29 -0
- package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +180 -0
- package/src/__tests__/prepared-graphics-resolver.unit.test.ts +287 -0
- package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +105 -0
- package/src/__tests__/prepared-graphics-store.unit.test.ts +154 -0
- package/src/__tests__/prepared-graphics-validation.unit.test.ts +176 -0
- package/src/__tests__/profiler-default-off.test.ts +22 -0
- package/src/__tests__/profiler-phase-catalog.test.ts +66 -0
- package/src/__tests__/profiler-phase-integration.test.ts +70 -0
- package/src/__tests__/profiler-phase-token.test.ts +84 -0
- package/src/__tests__/public-pipeline-id.test-d.ts +6 -0
- package/src/__tests__/public-surface.test-d.ts +32 -0
- package/src/__tests__/recover-error-policy-owner.unit.test.ts +127 -0
- package/src/__tests__/render-dispatch-membership.unit.test.ts +117 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +115 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +234 -0
- package/src/__tests__/render-error-exhaustive.test-d.ts +84 -0
- package/src/__tests__/render-feature-assembly.test-d.ts +51 -0
- package/src/__tests__/render-feature-construction.unit.test.ts +124 -0
- package/src/__tests__/render-feature-context.test-d.ts +81 -0
- package/src/__tests__/render-feature-contract.test-d.ts +58 -0
- package/src/__tests__/render-feature-diagnostics.unit.test.ts +151 -0
- package/src/__tests__/render-feature-docs.unit.test.ts +88 -0
- package/src/__tests__/render-feature-error-code-owner.test-d.ts +27 -0
- package/src/__tests__/render-feature-errors.unit.test.ts +47 -0
- package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +46 -0
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +377 -0
- package/src/__tests__/render-feature-graph.integration.test.ts +205 -0
- package/src/__tests__/render-feature-graphics-staging.unit.test.ts +200 -0
- package/src/__tests__/render-feature-order.unit.test.ts +66 -0
- package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +101 -0
- package/src/__tests__/render-feature-prepared-errors.test-d.ts +82 -0
- package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +141 -0
- package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +122 -0
- package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +59 -0
- package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +107 -0
- package/src/__tests__/render-feature-prepared-graphics.test-d.ts +96 -0
- package/src/__tests__/render-feature-prepared-graphics.unit.test.ts +121 -0
- package/src/__tests__/render-feature-public-surface.test-d.ts +75 -0
- package/src/__tests__/render-feature-retry.unit.test.ts +128 -0
- package/src/__tests__/render-feature-scheduling.unit.test.ts +122 -0
- package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +146 -0
- package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +236 -0
- package/src/__tests__/render-feature-staging.unit.test.ts +94 -0
- package/src/__tests__/render-feature-visibility-context.test-d.ts +38 -0
- package/src/__tests__/render-feature-visibility-context.unit.test.ts +38 -0
- package/src/__tests__/render-feature-zero-work.unit.test.ts +82 -0
- package/src/__tests__/render-graph-compute-raster-gpu.ts +342 -0
- package/src/__tests__/render-graph-compute-raster.browser.test.ts +16 -0
- package/src/__tests__/render-graph-compute-raster.dawn.test.ts +22 -0
- package/src/__tests__/render-graph-hzb-gpu.ts +239 -0
- package/src/__tests__/render-graph-hzb.browser.test.ts +16 -0
- package/src/__tests__/render-graph-hzb.dawn.test.ts +23 -0
- package/src/__tests__/render-graph-primitives.unit.test.ts +22 -0
- package/src/__tests__/render-graph-storage-indirect-gpu.ts +162 -0
- package/src/__tests__/render-graph-storage-indirect.browser.test.ts +21 -0
- package/src/__tests__/render-graph-storage-indirect.dawn.test.ts +28 -0
- package/src/__tests__/render-scene-projection.unit.test.ts +206 -0
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +125 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +10 -0
- package/src/__tests__/renderer-render-scene-public.test-d.ts +27 -0
- package/src/__tests__/rhi-backend-package-boundary.unit.test.ts +11 -0
- package/src/__tests__/scene-temporal-coverage.unit.test.ts +259 -0
- package/src/__tests__/scriptable-pack-consumer.test-d.ts +14 -0
- package/src/__tests__/shader-stage-surface.unit.test.ts +38 -0
- package/src/__tests__/ssao-kernel-surface.unit.test.ts +15 -0
- package/src/__tests__/sun-snapshot-consumers.test.ts +35 -0
- package/src/__tests__/surface-backend-kind-owner.test-d.ts +42 -0
- package/src/__tests__/surface-configuration.unit.test.ts +92 -0
- package/src/__tests__/taa-history-store.unit.test.ts +196 -0
- package/src/__tests__/temporal-frame-transaction.integration.test.ts +537 -0
- package/src/__tests__/temporal-inspection.unit.test.ts +138 -0
- package/src/__tests__/texture-usage-surface.unit.test.ts +61 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +389 -0
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +52 -0
- package/src/__tests__/urp-pipeline.unit.test.ts +14 -0
- package/src/__tests__/vertex-color-pipeline.unit.test.ts +124 -0
- package/src/__tests__/vertex-layout-consumer.unit.test.ts +25 -0
- package/src/__tests__/visibility-diagnostics.integration.test.ts +66 -0
- package/src/__tests__/visibility-extract.integration.test.ts +89 -0
- package/src/__tests__/visibility-extract.perf.test.ts +96 -0
- package/src/__tests__/visibility-feature-dedup.integration.test.ts +57 -0
- package/src/__tests__/visibility-hidden-report.unit.test.ts +37 -0
- package/src/__tests__/visibility-instances.integration.test.ts +50 -0
- package/src/__tests__/visibility-multi-world.integration.test.ts +54 -0
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +191 -0
- package/src/__tests__/visibility-producer-matrix.unit.test.ts +96 -0
- package/src/__tests__/visibility-public-surface.test-d.ts +26 -0
- package/src/__tests__/visibility-resolver.unit.test.ts +84 -0
- package/src/__tests__/visibility-snapshot-contract.unit.test.ts +59 -0
- package/src/__tests__/vocabulary.unit.test.ts +21 -0
- package/src/assets/__tests__/asset-decoders.unit.test.ts +92 -0
- package/src/assets/__tests__/mipmap-generator.unit.test.ts +52 -0
- package/src/assets/__tests__/render-asset-port.unit.test.ts +54 -0
- package/src/assets/__tests__/resolve-render-asset.unit.test.ts +47 -0
- package/src/assets/asset-decoders.ts +158 -0
- package/src/assets/render-asset-port.ts +44 -0
- package/src/assets/resolve-render-asset.ts +13 -0
- package/src/authoring.ts +24 -0
- package/src/cluster-binner.ts +700 -0
- package/src/components/__tests__/atmosphere-red.test.ts +51 -0
- package/src/components/__tests__/atmosphere.test.ts +79 -0
- package/src/components/__tests__/fog.test-d.ts +49 -0
- package/src/components/__tests__/fog.test.ts +60 -0
- package/src/components/__tests__/schema-parity.unit.test.ts +25 -0
- package/src/components/__tests__/visibility-schema.unit.test.ts +35 -0
- package/src/components/atmosphere.ts +64 -0
- package/src/components/camera.ts +512 -0
- package/src/components/directional-light.ts +120 -0
- package/src/components/environment.ts +206 -0
- package/src/components/glyph-text.ts +63 -0
- package/src/components/index.ts +49 -0
- package/src/components/instances.ts +207 -0
- package/src/components/layer.ts +69 -0
- package/src/components/light-helpers.ts +188 -0
- package/src/components/mesh-filter.ts +59 -0
- package/src/components/mesh-renderer.ts +61 -0
- package/src/components/point-light-shadow.ts +43 -0
- package/src/components/point-light.ts +65 -0
- package/src/components/post-process-params.ts +35 -0
- package/src/components/scene-instance.ts +193 -0
- package/src/components/sort-key.ts +75 -0
- package/src/components/spot-light.ts +124 -0
- package/src/components/sprite-animation.ts +169 -0
- package/src/components/sprite-instances.ts +179 -0
- package/src/components/sprite-playback-mode.ts +73 -0
- package/src/components/sprite-region-override.ts +106 -0
- package/src/components/tile-layer.ts +161 -0
- package/src/components/tilemap.ts +48 -0
- package/src/components/visibility.ts +53 -0
- package/src/construct-renderer.ts +4 -0
- package/src/debug-draw-glue.ts +169 -0
- package/src/deferred-lighting.ts +92 -0
- package/src/dynamic-texture-store.ts +111 -0
- package/src/engine-metrics.ts +89 -0
- package/src/environment/README.md +76 -0
- package/src/environment/__tests__/failure-injection.test.ts +50 -0
- package/src/environment/__tests__/generation-red.test.ts +64 -0
- package/src/environment/__tests__/generation.test.ts +37 -0
- package/src/environment/__tests__/graph-transaction.test.ts +85 -0
- package/src/environment/__tests__/inspection-red.test.ts +53 -0
- package/src/environment/__tests__/lifecycle-evidence.test.ts +40 -0
- package/src/environment/__tests__/pipeline-topology.test.ts +33 -0
- package/src/environment/__tests__/readiness.test.ts +42 -0
- package/src/environment/__tests__/recovery.test.ts +62 -0
- package/src/environment/__tests__/resize-dispose.test.ts +30 -0
- package/src/environment/__tests__/signature-red.test.ts +45 -0
- package/src/environment/__tests__/signature.test.ts +60 -0
- package/src/environment/descriptors.ts +7 -0
- package/src/environment/extracted-environment.ts +239 -0
- package/src/environment/generation.ts +158 -0
- package/src/environment/gpu-bundle.ts +144 -0
- package/src/environment/graph.ts +588 -0
- package/src/environment/inspection.ts +107 -0
- package/src/environment/lifecycle.ts +124 -0
- package/src/environment/readiness.ts +76 -0
- package/src/environment/signature.ts +185 -0
- package/src/errors/ecs-validation.ts +16 -0
- package/src/errors/index.ts +3 -0
- package/src/errors/recover.ts +119 -0
- package/src/errors/render.ts +1244 -0
- package/src/extract/__tests__/directional-csm-domain.unit.test.ts +391 -0
- package/src/extract/__tests__/environment-source.test.ts +105 -0
- package/src/extract/__tests__/schema-readers.unit.test.ts +16 -0
- package/src/extract/directional-csm.ts +959 -0
- package/src/extract/index.ts +10 -0
- package/src/extract/material-interface.ts +604 -0
- package/src/extract/schema-readers.ts +27 -0
- package/src/extract/visibility.ts +120 -0
- package/src/features/graph-contribution.ts +577 -0
- package/src/features/host.ts +1097 -0
- package/src/features/index.ts +100 -0
- package/src/features/morph/index.ts +24 -0
- package/src/features/morph/morph-bounds.ts +123 -0
- package/src/features/morph/morph-feature.ts +287 -0
- package/src/features/prepared-gpu-work.ts +902 -0
- package/src/features/prepared-graphics-store.ts +435 -0
- package/src/features/prepared-graphics.ts +479 -0
- package/src/features/render-graph-compute.ts +60 -0
- package/src/features/render-graph-contribution.ts +95 -0
- package/src/features/render-graph-raster.ts +308 -0
- package/src/features/render-graph-resources.ts +36 -0
- package/src/features/scene-temporal.ts +274 -0
- package/src/features/taa-resolve.ts +244 -0
- package/src/features/targets.ts +83 -0
- package/src/features/types.ts +291 -0
- package/src/frame-chain.ts +21 -0
- package/src/fullscreen-post-process-pass.ts +406 -0
- package/src/glyph-text-layout-system.ts +447 -0
- package/src/gpu-driven/batch-topology.ts +423 -0
- package/src/gpu-driven/production-raster.ts +1705 -0
- package/src/gpu-driven/view-gpu.ts +849 -0
- package/src/gpu-driven/view-reference.ts +110 -0
- package/src/gpu-resource-store.ts +1921 -0
- package/src/gpu-resource.ts +159 -0
- package/src/gpu-scene-schema.ts +224 -0
- package/src/gpu-scene.ts +855 -0
- package/src/gpu-stage.ts +9 -0
- package/src/gpu-texture-usage.ts +12 -0
- package/src/gpu-usage.ts +14 -0
- package/src/hdrp-buffers.ts +689 -0
- package/src/hdrp-cluster-membership.ts +70 -0
- package/src/hdrp-pipeline.ts +525 -0
- package/src/ibl/IblPipelineCache.ts +1246 -0
- package/src/ibl/cubemap-projection.ts +60 -0
- package/src/ibl/face-uniforms.ts +150 -0
- package/src/ibl/skylight-bind-group.ts +513 -0
- package/src/index.ts +271 -0
- package/src/instance-buffer-cache.ts +123 -0
- package/src/internal.ts +88 -0
- package/src/lifecycle.ts +123 -0
- package/src/light-buffer-layout.ts +346 -0
- package/src/materials.ts +236 -0
- package/src/mesh-material-bindings.ts +104 -0
- package/src/mesh-update-errors.ts +113 -0
- package/src/mipmap-generator.ts +244 -0
- package/src/param-schema-projection-census.ts +73 -0
- package/src/pbr-pipeline.ts +749 -0
- package/src/persistent-render-scene.ts +1752 -0
- package/src/pipeline/index.ts +40 -0
- package/src/pipeline-builder.ts +386 -0
- package/src/pipeline-errors.ts +172 -0
- package/src/pipeline-spec.ts +1768 -0
- package/src/plugin.ts +137 -0
- package/src/post-process-errors.ts +304 -0
- package/src/prepare/__tests__/schema-readers.unit.test.ts +16 -0
- package/src/prepare/index.ts +8 -0
- package/src/prepare/prepared-graphics-resolver.ts +455 -0
- package/src/prepare/schema-readers.ts +20 -0
- package/src/record/__tests__/environment-record.test.ts +35 -0
- package/src/record/__tests__/frame-targets.unit.test.ts +54 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +41 -0
- package/src/record/__tests__/material-slot-plan.unit.test.ts +76 -0
- package/src/record/__tests__/membership-timing.unit.test.ts +524 -0
- package/src/record/__tests__/render-submission.integration.test.ts +76 -0
- package/src/record/__tests__/render-submission.perf.test.ts +141 -0
- package/src/record/__tests__/shadow-submit-mode.unit.test.ts +88 -0
- package/src/record/__tests__/video-texture-view.unit.test.ts +90 -0
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +101 -0
- package/src/record/frame-lighting.ts +1183 -0
- package/src/record/frame-observation.ts +122 -0
- package/src/record/frame-snapshot.ts +515 -0
- package/src/record/frame-targets.ts +372 -0
- package/src/record/frame.ts +1874 -0
- package/src/record/helpers.ts +289 -0
- package/src/record/index.ts +15 -0
- package/src/record/main-pass-geometry.ts +1014 -0
- package/src/record/main-pass-material.ts +716 -0
- package/src/record/main-pass-skin.ts +51 -0
- package/src/record/main-pass-sprite-draws.ts +1056 -0
- package/src/record/main-pass-sprite.ts +166 -0
- package/src/record/main-pass.ts +588 -0
- package/src/record/material-payload.ts +292 -0
- package/src/record/material-slot-plan.ts +68 -0
- package/src/record/membership-timing.ts +1012 -0
- package/src/record/mesh-ssbo.ts +406 -0
- package/src/record/shadow-caster-uniform.ts +37 -0
- package/src/record/shadow-pass.ts +2387 -0
- package/src/record/shadow-submit-mode.ts +277 -0
- package/src/record/skybox-post-pass.ts +594 -0
- package/src/record/typed-frame-graph.ts +499 -0
- package/src/record/view-ubo.ts +206 -0
- package/src/render-data.ts +385 -0
- package/src/render-dispatch-membership.ts +155 -0
- package/src/render-graph-primitives.ts +1586 -0
- package/src/render-pipeline-context.ts +332 -0
- package/src/render-pipeline-target.ts +96 -0
- package/src/render-pipeline.ts +343 -0
- package/src/render-scene-projection.ts +1738 -0
- package/src/render-system-extract.ts +5203 -0
- package/src/render-system-fold.ts +531 -0
- package/src/render-system.ts +3258 -0
- package/src/renderer/asset-service.ts +32 -0
- package/src/renderer/backend-selection.ts +121 -0
- package/src/renderer/environment-classify.ts +30 -0
- package/src/renderer/environment-error.ts +19 -0
- package/src/renderer/material/assembly.ts +53 -0
- package/src/renderer/material/pipeline-projection.ts +140 -0
- package/src/renderer/renderer-factory.ts +9062 -0
- package/src/renderer.ts +940 -0
- package/src/scene-instances/post-spawn-resolve-joints.ts +168 -0
- package/src/scene-utils/collect-subtree.ts +40 -0
- package/src/shadow-atlas.ts +244 -0
- package/src/ssao-buffers.ts +175 -0
- package/src/ssao-config.ts +61 -0
- package/src/ssao-data.ts +106 -0
- package/src/surface-format.ts +37 -0
- package/src/systems/active-camera.ts +116 -0
- package/src/systems/pass-selector.ts +49 -0
- package/src/systems/skin-palette-allocator.ts +294 -0
- package/src/systems/transparent-sort-config.ts +211 -0
- package/src/taa-history-store.ts +429 -0
- package/src/temporal-coverage.ts +106 -0
- package/src/temporal-frame-transaction.ts +301 -0
- package/src/temporal-inspection.ts +194 -0
- package/src/temporal-view.ts +174 -0
- package/src/tilemap/resolve-tileset-runtime.ts +72 -0
- package/src/tilemap-chunk-extract-system.ts +1307 -0
- package/src/typed-render-graph-primitives.ts +530 -0
- package/src/typed-shadow-passes.ts +195 -0
- package/src/urp-pipeline.ts +340 -0
|
@@ -0,0 +1,749 @@
|
|
|
1
|
+
// pbr-pipeline.ts -- PBR / unlit pipeline-layout factories (M4 round-4 D-5).
|
|
2
|
+
//
|
|
3
|
+
// Anchors:
|
|
4
|
+
// - plan-strategy D-5 (round-4 REVISED): the PBR pipeline keeps a 4-slot
|
|
5
|
+
// pipeline layout `[view, material, mesh-array, instances]`. The
|
|
6
|
+
// material BGL grows from the derived user region by appending the 7
|
|
7
|
+
// Skylight resources via `mergeSkylightIntoMaterialBgl`. The
|
|
8
|
+
// unlit pipeline keeps its 7-entry material BGL (no Skylight binding
|
|
9
|
+
// 7..13 contamination) so unlit demos don't carry IBL state.
|
|
10
|
+
// - charter P4: same pipeline layout shape drives Skylight present +
|
|
11
|
+
// absent paths -- AI users do not branch on Skylight existence.
|
|
12
|
+
// - feat-20260520-skylight-ibl-cubemap M4 / t59 (round-4): the
|
|
13
|
+
// pipeline-layout construction migrates out of `createRenderer.ts`
|
|
14
|
+
// into this dedicated module so M4 round-4 tests can mock the device
|
|
15
|
+
// and inspect the captured descriptors without standing up the full
|
|
16
|
+
// createRenderer + asset registry + manifest stack.
|
|
17
|
+
//
|
|
18
|
+
// The factory functions return both the captured handles AND the
|
|
19
|
+
// `bindGroupLayouts` array passed to `device.createPipelineLayout`. Callers
|
|
20
|
+
// (the createRenderer step that wires the standard + standard-HDR
|
|
21
|
+
// `RenderPipeline` instances) consume the result by name; tests inspect
|
|
22
|
+
// `device.createBindGroupLayout.mock.calls` to verify shape (t57).
|
|
23
|
+
|
|
24
|
+
import type {
|
|
25
|
+
BindGroup,
|
|
26
|
+
BindGroupEntry,
|
|
27
|
+
BindGroupLayout,
|
|
28
|
+
Buffer,
|
|
29
|
+
PipelineLayout,
|
|
30
|
+
Result,
|
|
31
|
+
RhiError,
|
|
32
|
+
Sampler,
|
|
33
|
+
TextureView,
|
|
34
|
+
} from '@forgeax/engine-rhi';
|
|
35
|
+
import { DEFAULT_STANDARD_PBR_PARAM_SCHEMA } from '@forgeax/engine-shader';
|
|
36
|
+
import { type DerivedMaterialInterface, derive } from '@forgeax/engine-types';
|
|
37
|
+
import { GPU_SHADER_STAGE_FRAGMENT, GPU_SHADER_STAGE_VERTEX } from './gpu-stage';
|
|
38
|
+
import { buildBindGroupLayoutDescriptor, type PipelineSpec } from './pipeline-spec';
|
|
39
|
+
|
|
40
|
+
const DEFAULT_STANDARD_PBR_DERIVED_INTERFACE = derive(DEFAULT_STANDARD_PBR_PARAM_SCHEMA);
|
|
41
|
+
|
|
42
|
+
// Stub PipelineSpec used by the BGL-only call sites. The dispatcher only reads
|
|
43
|
+
// `spec.shader` when a registry is supplied for reflection; for caps-driven
|
|
44
|
+
// kinds (pbr-view / pbr-mesh-array / pbr-instances / pbr-skin-mesh-array) and
|
|
45
|
+
// for the no-registry material path the spec content is unused. A single
|
|
46
|
+
// frozen stub keeps the call sites readable and is allocation-free.
|
|
47
|
+
//
|
|
48
|
+
// D-13 round-2 dispatcher landing — see plan-decisions D-13.
|
|
49
|
+
const BGL_ONLY_SPEC_STUB: PipelineSpec = Object.freeze({
|
|
50
|
+
shader: { id: '', passKind: 'forward', variantSet: undefined },
|
|
51
|
+
attachments: { colorFormats: [], depthFormat: undefined, sampleCount: 1 },
|
|
52
|
+
geometry: { topology: 'triangle-list', vertexLayout: {} },
|
|
53
|
+
renderState: undefined,
|
|
54
|
+
}) as PipelineSpec;
|
|
55
|
+
|
|
56
|
+
// ─── Device shim ────────────────────────────────────────────────────────────
|
|
57
|
+
//
|
|
58
|
+
// We accept the narrow structural subset of RhiDevice that the factory
|
|
59
|
+
// touches. Production callers pass the real RhiDevice; tests pass a
|
|
60
|
+
// vi.fn-based capture. The unwrap pattern matches createRenderer's
|
|
61
|
+
// `runShimSyncStep` -- the factory throws on Result.ok === false so the
|
|
62
|
+
// caller does not need to handle Result at every line.
|
|
63
|
+
|
|
64
|
+
export interface PbrPipelineDevice {
|
|
65
|
+
createBindGroupLayout(desc: {
|
|
66
|
+
label: string | undefined;
|
|
67
|
+
entries: readonly GPUBindGroupLayoutEntry[];
|
|
68
|
+
}): Result<BindGroupLayout, RhiError>;
|
|
69
|
+
createPipelineLayout(desc: {
|
|
70
|
+
label?: string;
|
|
71
|
+
bindGroupLayouts: readonly BindGroupLayout[];
|
|
72
|
+
}): Result<PipelineLayout, RhiError>;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// ─── Result shape ───────────────────────────────────────────────────────────
|
|
76
|
+
|
|
77
|
+
export interface PbrPipelineLayoutBundle {
|
|
78
|
+
/** Pipeline layout passed to `createRenderPipeline({ layout })`. */
|
|
79
|
+
readonly pipelineLayout: PipelineLayout;
|
|
80
|
+
/** view BindGroupLayout (slot 0). */
|
|
81
|
+
readonly viewBgl: BindGroupLayout;
|
|
82
|
+
/**
|
|
83
|
+
* PBR material BindGroupLayout (slot 1) -- derived user-region entries plus
|
|
84
|
+
* Skylight and lightmap injection.
|
|
85
|
+
*/
|
|
86
|
+
readonly materialBgl: BindGroupLayout;
|
|
87
|
+
/** Per-entity mesh BindGroupLayout (slot 2). */
|
|
88
|
+
readonly meshArrayBgl: BindGroupLayout;
|
|
89
|
+
/** Per-instance storage BindGroupLayout (slot 3). */
|
|
90
|
+
readonly instancesBgl: BindGroupLayout;
|
|
91
|
+
/**
|
|
92
|
+
* Same 4 layouts in slot order. Useful for assertion sites that check the
|
|
93
|
+
* pipeline-layout `bindGroupLayouts` array shape (t57 (a) + (d)).
|
|
94
|
+
*/
|
|
95
|
+
readonly bindGroupLayouts: readonly [
|
|
96
|
+
BindGroupLayout,
|
|
97
|
+
BindGroupLayout,
|
|
98
|
+
BindGroupLayout,
|
|
99
|
+
BindGroupLayout,
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// ─── Base entries (round-4 SSOT) ────────────────────────────────────────────
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The built-in standard-PBR material paramSchema's texture/user-region shape,
|
|
107
|
+
* used as the fallback when the material BGL is built without a registry
|
|
108
|
+
* (the caps-driven `buildPbrPipelineLayouts` seam). Declares the 3 standard
|
|
109
|
+
* user-region textures + a numeric UBO run; `derive()` collapses the numerics
|
|
110
|
+
* into binding 0 and emits sampler/texture pairs at 1..6 — byte-equivalent to
|
|
111
|
+
* the legacy fixed base-7. The shared PBR parameter contract comes from the
|
|
112
|
+
* shader package; this module only derives the GPU layout.
|
|
113
|
+
*/
|
|
114
|
+
/**
|
|
115
|
+
* Build the PBR material BGL **user-region** from a paramSchema via the
|
|
116
|
+
* `derive()` SSOT (D-1). The user-region is binding 0 (the run-merged material
|
|
117
|
+
* UBO) followed by one sampler/texture pair per declared texture. Engine
|
|
118
|
+
* injection (IBL + lightmap) is appended AFTER this region by the caller via
|
|
119
|
+
* `appendInjection`, with start binding = `userRegion.length` — so a 4-texture
|
|
120
|
+
* custom schema (e.g. parallax + heightTexture) shifts the injection region by
|
|
121
|
+
* one sampler/texture pair automatically.
|
|
122
|
+
*
|
|
123
|
+
* The built-in `default-standard-pbr` paramSchema declares exactly 4 textures,
|
|
124
|
+
* so this derives to binding 0 UBO + 4 pairs = 9 entries. Injection is appended
|
|
125
|
+
* after that derived region.
|
|
126
|
+
*
|
|
127
|
+
* One material-UBO convention is layered on top of the pure `derive()` output:
|
|
128
|
+
* binding 0 is patched to `{ type: 'uniform', hasDynamicOffset: true }` with
|
|
129
|
+
* `VERTEX | FRAGMENT` visibility. The material UBO is bound with a per-submesh
|
|
130
|
+
* dynamic offset (`render-system-record.ts setBindGroup(1, bg, [offset])`) and
|
|
131
|
+
* the vertex stage reads material params, so this is required for GPU
|
|
132
|
+
* validation. `derive()` stays FRAGMENT-only / no-dynamic-offset for its other
|
|
133
|
+
* consumers (it is the generic SSOT, not the material-UBO authority).
|
|
134
|
+
*
|
|
135
|
+
* @param paramSchema - the material shader's paramSchema (defaults to the
|
|
136
|
+
* built-in standard-PBR shape when omitted, for the caps-driven seam).
|
|
137
|
+
*/
|
|
138
|
+
export function buildPbrMaterialUserRegionEntries(
|
|
139
|
+
derived: DerivedMaterialInterface = DEFAULT_STANDARD_PBR_DERIVED_INTERFACE,
|
|
140
|
+
): GPUBindGroupLayoutEntry[] {
|
|
141
|
+
// derive() returns the engine BindGroupLayoutEntry (exactOptionalPropertyTypes
|
|
142
|
+
// makes its optional fields `T | undefined`, structurally distinct from the
|
|
143
|
+
// DOM GPUBindGroupLayoutEntry surface). The two-step `as unknown as` is the
|
|
144
|
+
// sanctioned known-unsafe opt-in (AC-08 gate (j) allows it; single-step
|
|
145
|
+
// `as GPU...` is the forbidden shim-leak pattern).
|
|
146
|
+
const entries = derived.bglEntries.map((e) => ({ ...e })) as unknown as GPUBindGroupLayoutEntry[];
|
|
147
|
+
// Patch binding 0 (the material UBO) to the dynamic-offset, vertex-visible
|
|
148
|
+
// material-UBO contract. derive() emits binding 0 as the first numeric run's
|
|
149
|
+
// merged UBO; an empty schema has no binding-0 UBO and needs no patch.
|
|
150
|
+
const ubo = entries[0];
|
|
151
|
+
if (ubo !== undefined && ubo.binding === 0 && ubo.buffer !== undefined) {
|
|
152
|
+
entries[0] = {
|
|
153
|
+
binding: 0,
|
|
154
|
+
visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
|
|
155
|
+
buffer: { type: 'uniform', hasDynamicOffset: true },
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return entries;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// ─── appendInjection — generic engine-injection BGL appender (M3 / w15) ──────
|
|
162
|
+
//
|
|
163
|
+
// Decision anchors (plan-strategy §2):
|
|
164
|
+
// - D-6 appendInjection(bgl, kind) replaces the previous hardcoded
|
|
165
|
+
// emissive/AO start-binding literal (=14). The starting binding
|
|
166
|
+
// number is computed from `bgl.length`, byte-equivalent to
|
|
167
|
+
// `derive(schema).userRegionBindingEnd` when `bgl` is the BGL list
|
|
168
|
+
// derive returned for the user paramSchema.
|
|
169
|
+
// - R-1 the 14-slot user-region assumption breaks once D-3 merges UBO;
|
|
170
|
+
// appendInjection lets the material BGL grow / shrink without
|
|
171
|
+
// churning every injection site.
|
|
172
|
+
//
|
|
173
|
+
// Closed union of injection kinds (plan-strategy §2 D-6):
|
|
174
|
+
// - 'shadow' reserved for future material-level shadow injection
|
|
175
|
+
// (sampler_comparison + texture_depth_2d, 2 entries).
|
|
176
|
+
// The active shadow bindings live in the view BGL today
|
|
177
|
+
// (group(0) bindings 3..7); this kind is the seam for
|
|
178
|
+
// any per-material shadow override surface a future feat
|
|
179
|
+
// wires onto group(1).
|
|
180
|
+
// - 'ibl' the 7 IBL / Skylight entries (irradiance / prefilter
|
|
181
|
+
// cube + brdfLut 2d + 3 samplers + intensity uniform).
|
|
182
|
+
// Used by `buildPbrPipelineLayouts` after the user-region
|
|
183
|
+
// user paramSchema entries are emitted.
|
|
184
|
+
// - 'lightmap' the 4 emissive + occlusion entries (sampler + texture
|
|
185
|
+
// pair x 2). The historical name is "emissive/AO"; we
|
|
186
|
+
// keep that meaning under the generic 'lightmap' label
|
|
187
|
+
// (per-surface secondary-lighting injection) so future
|
|
188
|
+
// lightmap support lands without renaming the kind.
|
|
189
|
+
export type InjectionKind = keyof typeof INJECTION_KIND_LENGTHS;
|
|
190
|
+
|
|
191
|
+
const IBL_INJECTION_LENGTH = 7;
|
|
192
|
+
const LIGHTMAP_INJECTION_LENGTH = 4;
|
|
193
|
+
const SHADOW_INJECTION_LENGTH = 2;
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Append the engine-injection BGL entries for the given `kind` after the
|
|
197
|
+
* user-region BGL entries, with binding numbers starting at `bgl.length`.
|
|
198
|
+
*
|
|
199
|
+
* The function reads `bgl.length` (NOT a hardcoded constant) so any
|
|
200
|
+
* user-region size — derived from `derive(schema).userRegionBindingEnd` or
|
|
201
|
+
* computed manually — flows through to the injection start binding without
|
|
202
|
+
* a coupled edit.
|
|
203
|
+
*
|
|
204
|
+
* Returns ONLY the injected entries; the caller spreads them after `bgl`:
|
|
205
|
+
*
|
|
206
|
+
* ```ts
|
|
207
|
+
* const merged = [...userBgl, ...appendInjection(userBgl, 'ibl')];
|
|
208
|
+
* device.createBindGroupLayout({ entries: merged });
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
export function appendInjection(
|
|
212
|
+
bgl: readonly GPUBindGroupLayoutEntry[],
|
|
213
|
+
kind: InjectionKind,
|
|
214
|
+
): GPUBindGroupLayoutEntry[] {
|
|
215
|
+
const start = bgl.length;
|
|
216
|
+
switch (kind) {
|
|
217
|
+
case 'ibl':
|
|
218
|
+
return [
|
|
219
|
+
// binding start+0: irradianceMap (texture_cube)
|
|
220
|
+
{
|
|
221
|
+
binding: start,
|
|
222
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
223
|
+
texture: { sampleType: 'float', viewDimension: 'cube' },
|
|
224
|
+
},
|
|
225
|
+
// binding start+1: irradianceSampler
|
|
226
|
+
{
|
|
227
|
+
binding: start + 1,
|
|
228
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
229
|
+
sampler: { type: 'filtering' },
|
|
230
|
+
},
|
|
231
|
+
// binding start+2: prefilterMap (texture_cube)
|
|
232
|
+
{
|
|
233
|
+
binding: start + 2,
|
|
234
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
235
|
+
texture: { sampleType: 'float', viewDimension: 'cube' },
|
|
236
|
+
},
|
|
237
|
+
// binding start+3: prefilterSampler
|
|
238
|
+
{
|
|
239
|
+
binding: start + 3,
|
|
240
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
241
|
+
sampler: { type: 'filtering' },
|
|
242
|
+
},
|
|
243
|
+
// binding start+4: brdfLut (texture_2d)
|
|
244
|
+
{
|
|
245
|
+
binding: start + 4,
|
|
246
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
247
|
+
texture: { sampleType: 'float', viewDimension: '2d' },
|
|
248
|
+
},
|
|
249
|
+
// binding start+5: brdfLutSampler
|
|
250
|
+
{
|
|
251
|
+
binding: start + 5,
|
|
252
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
253
|
+
sampler: { type: 'filtering' },
|
|
254
|
+
},
|
|
255
|
+
// binding start+6: uniform { intensity: f32 }
|
|
256
|
+
{
|
|
257
|
+
binding: start + 6,
|
|
258
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
259
|
+
buffer: { type: 'uniform' },
|
|
260
|
+
},
|
|
261
|
+
];
|
|
262
|
+
case 'lightmap':
|
|
263
|
+
return [
|
|
264
|
+
// emissive sampler + texture pair
|
|
265
|
+
{
|
|
266
|
+
binding: start,
|
|
267
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
268
|
+
sampler: { type: 'filtering' },
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
binding: start + 1,
|
|
272
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
273
|
+
texture: { sampleType: 'float', viewDimension: '2d' },
|
|
274
|
+
},
|
|
275
|
+
// occlusion sampler + texture pair
|
|
276
|
+
{
|
|
277
|
+
binding: start + 2,
|
|
278
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
279
|
+
sampler: { type: 'filtering' },
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
binding: start + 3,
|
|
283
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
284
|
+
texture: { sampleType: 'float', viewDimension: '2d' },
|
|
285
|
+
},
|
|
286
|
+
];
|
|
287
|
+
case 'shadow':
|
|
288
|
+
return [
|
|
289
|
+
{
|
|
290
|
+
binding: start,
|
|
291
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
292
|
+
sampler: { type: 'comparison' },
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
binding: start + 1,
|
|
296
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
297
|
+
texture: { sampleType: 'depth', viewDimension: '2d' },
|
|
298
|
+
},
|
|
299
|
+
];
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// Closed-set length sentinels — the map is the membership owner.
|
|
304
|
+
export const INJECTION_KIND_LENGTHS = {
|
|
305
|
+
shadow: SHADOW_INJECTION_LENGTH,
|
|
306
|
+
ibl: IBL_INJECTION_LENGTH,
|
|
307
|
+
lightmap: LIGHTMAP_INJECTION_LENGTH,
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Caps shape consumed by the BGL factory functions for storage-buffer vs
|
|
312
|
+
* uniform-buffer branching. Mirrors the two fields the engine reads from
|
|
313
|
+
* `RhiCaps` (plan D-4 + D-5).
|
|
314
|
+
*/
|
|
315
|
+
export interface PbrCaps {
|
|
316
|
+
readonly storageBuffer: boolean;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* The view BGL entry list. binding 0 = view UBO (vertex + fragment);
|
|
321
|
+
* binding 1 = pointLights (storage or uniform, per caps);
|
|
322
|
+
* binding 2 = spotLights (storage or uniform, per caps);
|
|
323
|
+
* binding 3 = directional shadowMap atlas (texture_depth_2d, vertex+fragment).
|
|
324
|
+
* feat-20260613-csm-cascaded-shadow-maps: this is the CSM atlas — N
|
|
325
|
+
* cascades tiled into one 2D depth texture, sampled via per-cascade UV
|
|
326
|
+
* mapping in `lighting-directional.wgsl`. Single binding survives N=1..4
|
|
327
|
+
* (no array-layer form; cascades live in viewport offsets per the
|
|
328
|
+
* check-csm-unique-shadow-path grep gate).
|
|
329
|
+
* binding 4 = shadow comparison sampler (shared by directional + point);
|
|
330
|
+
* binding 5 = point shadow cube_array depth atlas (texture_depth_cube_array;
|
|
331
|
+
* fragment-only). feat-20260612-point-light-shadows-urp-hdrp Round-2 F-1.
|
|
332
|
+
* binding 6 = point shadow params UBO (`array<vec4<f32>, 4>`, 64 B;
|
|
333
|
+
* fragment-only). One lane per shadow-casting point light slot
|
|
334
|
+
* (shadowAtlasLayer in [0, 4)) carrying `(near, far, 1/(far-near), 0)`.
|
|
335
|
+
* binding 7 = shadowCasterCascade UBO (16 B; vertex + fragment). Per-pass
|
|
336
|
+
* cascade-index uniform consumed exclusively by `shadow_caster.wgsl` to
|
|
337
|
+
* pick `view.lightViewProj_X` for the cascade currently being rasterized
|
|
338
|
+
* (feat-20260613-csm-cascaded-shadow-maps M5 / w28). Forward PBR shaders
|
|
339
|
+
* declare the binding via `common.wgsl` but do not reference it; WebGPU
|
|
340
|
+
* still requires a populated entry on every view BG so the host writes a
|
|
341
|
+
* stable singleton buffer.
|
|
342
|
+
* binding 8 = spot shadow atlas (texture_depth_2d; fragment-only).
|
|
343
|
+
* feat-20260625-spot-light-shadow-mapping M3 / w14 (D-5). A single 2D depth
|
|
344
|
+
* texture holding up to 4 spot shadows in a 2x2 tile grid. ALWAYS-ON (no caps
|
|
345
|
+
* gate — `texture_depth_2d` is compat-safe everywhere), matching the
|
|
346
|
+
* unconditional `spotShadowMap` WGSL declaration in common.wgsl. Reuses the
|
|
347
|
+
* comparison sampler at binding 4 (no binding 9). Every view BG must populate
|
|
348
|
+
* binding 8 (real spotShadowDepth view when spot shadows run, else a 1x1
|
|
349
|
+
* fallback depth view cleared to fully-lit).
|
|
350
|
+
*
|
|
351
|
+
* Mirrors feat-20260519-light-casters M3 D-S1 layout +
|
|
352
|
+
* feat-20260520-directional-light-shadow-mapping M2 / w14 (D-1) shadow
|
|
353
|
+
* map binding +
|
|
354
|
+
* feat-20260612-point-light-shadows-urp-hdrp Round-2 F-1 BGL hookup
|
|
355
|
+
* (always-on bindings 5/6 paired with the unconditional `POINT_SHADOW_AVAILABLE`
|
|
356
|
+
* define registered in vite-plugin-shader) +
|
|
357
|
+
* feat-20260613-csm-cascaded-shadow-maps M5 / w28 (binding 7 cascade UBO).
|
|
358
|
+
* Isolated here so M4 round-4 tests can recreate the layout.
|
|
359
|
+
*
|
|
360
|
+
* feat-20260526-pbr-uniform-fallback-no-storage-buffer M3 / w9:
|
|
361
|
+
* caps.storageBuffer===false switches bindings 1+2 from
|
|
362
|
+
* 'read-only-storage' to 'uniform'.
|
|
363
|
+
*/
|
|
364
|
+
export function buildPbrViewBglEntries(caps: PbrCaps): GPUBindGroupLayoutEntry[] {
|
|
365
|
+
const lightBufType: GPUBufferBindingType = caps.storageBuffer ? 'read-only-storage' : 'uniform';
|
|
366
|
+
return [
|
|
367
|
+
{
|
|
368
|
+
binding: 0,
|
|
369
|
+
visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
|
|
370
|
+
buffer: { type: 'uniform' },
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
binding: 1,
|
|
374
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
375
|
+
buffer: { type: lightBufType },
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
binding: 2,
|
|
379
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
380
|
+
buffer: { type: lightBufType },
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
binding: 3,
|
|
384
|
+
visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
|
|
385
|
+
texture: { sampleType: 'depth', viewDimension: '2d' },
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
binding: 4,
|
|
389
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
390
|
+
sampler: { type: 'comparison' },
|
|
391
|
+
},
|
|
392
|
+
// feat-20260612-point-light-shadows-urp-hdrp Round-2 F-1: point shadow
|
|
393
|
+
// cube_array depth atlas. Bound to either the real ShadowAtlas
|
|
394
|
+
// cube_array view (when point shadows are active) or a 1x1x6 fallback
|
|
395
|
+
// cube_array view cleared to 1.0 (fully lit). Visibility is FRAGMENT
|
|
396
|
+
// only -- the directional binding 3 is VERTEX|FRAGMENT for shadow
|
|
397
|
+
// probe-debug sampling, but the cube atlas has no host-side probe path.
|
|
398
|
+
{
|
|
399
|
+
binding: 5,
|
|
400
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
401
|
+
texture: { sampleType: 'depth', viewDimension: 'cube-array' },
|
|
402
|
+
},
|
|
403
|
+
// feat-20260612-point-light-shadows-urp-hdrp Round-2 F-1: point shadow
|
|
404
|
+
// params UBO. Carries `array<vec4<f32>, 4>` = 64 B with one lane per
|
|
405
|
+
// shadow-casting point light slot (shadowAtlasLayer in [0, 4)). Each
|
|
406
|
+
// lane stores `(near, far, 1/(far-near), 0)` so the fragment-shader
|
|
407
|
+
// depth-ref reconstruction (lighting-punctual.wgsl evalPointShadowed)
|
|
408
|
+
// can avoid sampling LightSlot for the URP path. HDRP rides the same
|
|
409
|
+
// constants on `LightSlot.kind_and_pad.zw` so binding 6 is unused on
|
|
410
|
+
// HDRP shaders even though the BGL declares it (charter P4 single SSOT
|
|
411
|
+
// BGL across pipelines; the HDRP variant simply doesn't reference the
|
|
412
|
+
// binding in WGSL, which is allowed).
|
|
413
|
+
{
|
|
414
|
+
binding: 6,
|
|
415
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
416
|
+
buffer: { type: 'uniform' },
|
|
417
|
+
},
|
|
418
|
+
// feat-20260613-csm-cascaded-shadow-maps M5 / w28: shadowCasterCascade
|
|
419
|
+
// UBO (16 B). Carries the 0-based cascade index of the shadow pass
|
|
420
|
+
// currently being rasterized so `shadow_caster.wgsl` can index into
|
|
421
|
+
// `view.lightViewProj_X` per cascade. Shifted from binding 5 to
|
|
422
|
+
// binding 7 on 2026-06-13 to make room for point-shadow bindings 5/6
|
|
423
|
+
// (they predate this feat in main; CSM's slot was the optimal-yield
|
|
424
|
+
// give since point-shadow needs FRAGMENT-only and the cascade UBO
|
|
425
|
+
// needs vertex-stage too — keeping cascade higher avoids interleaving
|
|
426
|
+
// visibility flags within the contiguous shadow-binding cluster).
|
|
427
|
+
{
|
|
428
|
+
binding: 7,
|
|
429
|
+
visibility: GPU_SHADER_STAGE_VERTEX | GPU_SHADER_STAGE_FRAGMENT,
|
|
430
|
+
buffer: { type: 'uniform' },
|
|
431
|
+
},
|
|
432
|
+
// feat-20260625-spot-light-shadow-mapping M3 / w14 (D-5): spot shadow
|
|
433
|
+
// atlas. A single `texture_depth_2d` holding up to 4 spot shadows in a 2x2
|
|
434
|
+
// tile grid (urp-pipeline.ts spotShadowDepth). FRAGMENT-only — the spot
|
|
435
|
+
// shadow factor is reconstructed at fragment time via perspective-divide in
|
|
436
|
+
// `evalSpotShadowed` (lighting-punctual.wgsl).
|
|
437
|
+
//
|
|
438
|
+
// ALWAYS-ON (no caps gate, unlike the point cube_array atlas at binding 5
|
|
439
|
+
// which rides POINT_SHADOW_AVAILABLE): spot uses `texture_depth_2d` which is
|
|
440
|
+
// compat-safe in every WebGPU profile, so the binding is unconditionally
|
|
441
|
+
// declared. The matching WGSL declaration is `spotShadowMap` at @group(0)
|
|
442
|
+
// binding 8 in common.wgsl (also unconditional) — the two must stay in
|
|
443
|
+
// lock-step or WebGPU validation rejects the bind group at smoke time
|
|
444
|
+
// (memory: BGL shape mismatch is a browser-path-only bug). No binding 9
|
|
445
|
+
// sampler: spot reuses the comparison sampler at binding 4.
|
|
446
|
+
// feat-20260625-spot-light-shadow-mapping M3 / w14 (D-5): spot shadow 2D
|
|
447
|
+
// atlas, the LAST view-BG binding. The per-spot fragment-read perspective
|
|
448
|
+
// lightViewProj matrices that w24 originally declared at a standalone
|
|
449
|
+
// binding 9 uniform buffer were folded into the View UBO (binding 0,
|
|
450
|
+
// `view.spotLightViewProj`) in w25 (scope-amend webkit-fallback): the
|
|
451
|
+
// standalone binding pushed the WebGL2 fallback fragment uniform-buffer
|
|
452
|
+
// count to 12, over GLES 3.0's `max_uniform_buffers_per_shader_stage = 11`,
|
|
453
|
+
// crashing pipeline-layout creation on the compat path (this feat's target).
|
|
454
|
+
{
|
|
455
|
+
binding: 8,
|
|
456
|
+
visibility: GPU_SHADER_STAGE_FRAGMENT,
|
|
457
|
+
texture: { sampleType: 'depth', viewDimension: '2d' },
|
|
458
|
+
},
|
|
459
|
+
];
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
// ─── PBR pipeline layout factory ────────────────────────────────────────────
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Build the PBR pipeline layout under D-5 round-4: 4 slots `[view,
|
|
466
|
+
* material, mesh-array, instances]`; the material BGL is derived from the
|
|
467
|
+
* standard material schema and engine injection chain.
|
|
468
|
+
*
|
|
469
|
+
* `caps.storageBuffer===false` switches every storage-buffer BGL entry
|
|
470
|
+
* (view bindings 1+2, mesh-array, instances) to `uniform`.
|
|
471
|
+
*
|
|
472
|
+
* Throws on any `createBindGroupLayout` / `createPipelineLayout` Result
|
|
473
|
+
* failure -- the engine bootstrap path (createRenderer) wraps the call in
|
|
474
|
+
* `runShimSyncStep` to fold the throw into the structured error pipe.
|
|
475
|
+
*/
|
|
476
|
+
export function buildPbrPipelineLayouts(
|
|
477
|
+
device: PbrPipelineDevice,
|
|
478
|
+
caps: PbrCaps,
|
|
479
|
+
): PbrPipelineLayoutBundle {
|
|
480
|
+
// D-13 round-2: 4 BGLs route through buildBindGroupLayoutDescriptor.
|
|
481
|
+
// The dispatcher reads kind + caps; spec content is unused without a
|
|
482
|
+
// registry (no shader-axis reflection at this seam — the 4 BGLs are
|
|
483
|
+
// caps-driven literals + the deterministic Skylight + lightmap merge
|
|
484
|
+
// sequence that has no dependency on shader.id).
|
|
485
|
+
const viewBglRes = device.createBindGroupLayout(
|
|
486
|
+
buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, { kind: 'pbr-view', caps }),
|
|
487
|
+
);
|
|
488
|
+
if (!viewBglRes.ok) throw viewBglRes.error;
|
|
489
|
+
|
|
490
|
+
// Material BGL: derived user region + Skylight + lightmap injection.
|
|
491
|
+
// feat-20260613 fix-issue-5: drop the buildPbrMaterialEmissiveAoEntries
|
|
492
|
+
// shim. The lightmap injection start binding is computed from the post-
|
|
493
|
+
// skylight BGL length (= 14) directly inside appendInjection.
|
|
494
|
+
const materialBglRes = device.createBindGroupLayout(
|
|
495
|
+
buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, { kind: 'pbr-material-merged' }),
|
|
496
|
+
);
|
|
497
|
+
if (!materialBglRes.ok) throw materialBglRes.error;
|
|
498
|
+
|
|
499
|
+
// mesh-array BGL.
|
|
500
|
+
const meshArrayBglRes = device.createBindGroupLayout(
|
|
501
|
+
buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, { kind: 'pbr-mesh-array', caps }),
|
|
502
|
+
);
|
|
503
|
+
if (!meshArrayBglRes.ok) throw meshArrayBglRes.error;
|
|
504
|
+
|
|
505
|
+
// instances BGL.
|
|
506
|
+
const instancesBglRes = device.createBindGroupLayout(
|
|
507
|
+
buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, { kind: 'pbr-instances', caps }),
|
|
508
|
+
);
|
|
509
|
+
if (!instancesBglRes.ok) throw instancesBglRes.error;
|
|
510
|
+
|
|
511
|
+
// Pipeline layout (4 slots).
|
|
512
|
+
const layouts: readonly [BindGroupLayout, BindGroupLayout, BindGroupLayout, BindGroupLayout] = [
|
|
513
|
+
viewBglRes.value,
|
|
514
|
+
materialBglRes.value,
|
|
515
|
+
meshArrayBglRes.value,
|
|
516
|
+
instancesBglRes.value,
|
|
517
|
+
];
|
|
518
|
+
const pipelineLayoutRes = device.createPipelineLayout({
|
|
519
|
+
label: 'pbr-pl',
|
|
520
|
+
bindGroupLayouts: layouts,
|
|
521
|
+
});
|
|
522
|
+
if (!pipelineLayoutRes.ok) throw pipelineLayoutRes.error;
|
|
523
|
+
|
|
524
|
+
return {
|
|
525
|
+
pipelineLayout: pipelineLayoutRes.value,
|
|
526
|
+
viewBgl: viewBglRes.value,
|
|
527
|
+
materialBgl: materialBglRes.value,
|
|
528
|
+
meshArrayBgl: meshArrayBglRes.value,
|
|
529
|
+
instancesBgl: instancesBglRes.value,
|
|
530
|
+
bindGroupLayouts: layouts,
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
// ─── PBR skin material-shader identifier (SSOT) ────────────────────────────
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* SSOT for the skin material shader's registered identifier. The shader
|
|
538
|
+
* package registers under this string (see register-default-standard-pbr-skin.ts
|
|
539
|
+
* `RESERVED_ID`); runtime dispatch sites import this constant rather than
|
|
540
|
+
* carrying a literal so a future rename is a one-line change. AC-09 grep
|
|
541
|
+
* gate: the body of `selectPipelineLayoutForVariant` MUST NOT contain a
|
|
542
|
+
* literal `'forgeax::pbr-skin'` -- callers map this constant to
|
|
543
|
+
* `LayoutKind = 'pbr-skin'` upstream.
|
|
544
|
+
*/
|
|
545
|
+
export const SKIN_MATERIAL_SHADER_ID = 'forgeax::pbr-skin' as const;
|
|
546
|
+
|
|
547
|
+
/** Returns true for the engine-shipped standard-PBR material shader family. */
|
|
548
|
+
export function isStandardPbrMaterialShader(shaderId: string | undefined): boolean {
|
|
549
|
+
return (
|
|
550
|
+
shaderId === 'forgeax::default-standard-pbr' ||
|
|
551
|
+
shaderId === SKIN_MATERIAL_SHADER_ID ||
|
|
552
|
+
shaderId === 'forgeax::default-standard-pbr-skin'
|
|
553
|
+
);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// ─── PBR skin pipeline layout factory (bug-20260611) ───────────────────────
|
|
557
|
+
//
|
|
558
|
+
// The skin material shader (`forgeax::pbr-skin`, registered by
|
|
559
|
+
// `register-default-standard-pbr-skin.ts`) needs the same 4-slot layout shape
|
|
560
|
+
// as standard PBR EXCEPT for slot 2: its mesh-array BGL declares **3**
|
|
561
|
+
// dynamic-offset entries (binding 0 = meshes, bindings 1/2 = current/previous
|
|
562
|
+
// palettes) versus standard PBR's single binding 0. Without a dedicated pipeline layout the
|
|
563
|
+
// skin shader's `@group(2) @binding(1) palette : array<mat4x4<f32>>` reference
|
|
564
|
+
// trips a `Binding doesn't exist in [BindGroupLayoutInternal "pbr-mesh-array-bgl"]`
|
|
565
|
+
// validation error in `device.createRenderPipeline`, surfaced as
|
|
566
|
+
// `RhiError limit-exceeded` and an invalid command buffer (Playwright TDD trace
|
|
567
|
+
// captured 2026-06-11 in apps/hello/skin).
|
|
568
|
+
//
|
|
569
|
+
// The factory **reuses** view / material / instances BGL handles produced by
|
|
570
|
+
// `buildPbrPipelineLayouts` (charter P4: a single SSOT BGL for each slot the
|
|
571
|
+
// shapes actually share) and only creates a new mesh-array BGL + new pipeline
|
|
572
|
+
// layout. This keeps the per-binding-shape SSOT in one place and avoids an
|
|
573
|
+
// alternate skin-only material BGL (the skin shader's group(0) and group(1)
|
|
574
|
+
// are byte-for-byte the standard-PBR contract).
|
|
575
|
+
|
|
576
|
+
/**
|
|
577
|
+
* Build the PBR skin pipeline layout (4 slots `[view, material,
|
|
578
|
+
* mesh-array(3-entry), instances]`). View / material / instances BGLs are
|
|
579
|
+
* shared with the standard-PBR layout (passed in via `pbr` bundle); the only
|
|
580
|
+
* new BGL is the 3-entry mesh-array slot for `meshes` plus current and
|
|
581
|
+
* previous palettes.
|
|
582
|
+
*
|
|
583
|
+
* Throws on any `createBindGroupLayout` / `createPipelineLayout` Result
|
|
584
|
+
* failure -- the engine bootstrap path wraps the call in `runShimSyncStep`
|
|
585
|
+
* to fold the throw into the structured error pipe.
|
|
586
|
+
*/
|
|
587
|
+
export function buildPbrSkinLayouts(
|
|
588
|
+
device: PbrPipelineDevice,
|
|
589
|
+
caps: PbrCaps,
|
|
590
|
+
pbr: PbrPipelineLayoutBundle,
|
|
591
|
+
): PbrPipelineLayoutBundle {
|
|
592
|
+
// Mesh-array BGL: binding 0 meshes + current/previous palette bindings 1/2.
|
|
593
|
+
const skinMeshArrayBglRes = device.createBindGroupLayout(
|
|
594
|
+
buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, {
|
|
595
|
+
kind: 'pbr-skin-mesh-array',
|
|
596
|
+
caps,
|
|
597
|
+
}),
|
|
598
|
+
);
|
|
599
|
+
if (!skinMeshArrayBglRes.ok) throw skinMeshArrayBglRes.error;
|
|
600
|
+
|
|
601
|
+
const layouts: readonly [BindGroupLayout, BindGroupLayout, BindGroupLayout, BindGroupLayout] = [
|
|
602
|
+
pbr.viewBgl,
|
|
603
|
+
pbr.materialBgl,
|
|
604
|
+
skinMeshArrayBglRes.value,
|
|
605
|
+
pbr.instancesBgl,
|
|
606
|
+
];
|
|
607
|
+
const pipelineLayoutRes = device.createPipelineLayout({
|
|
608
|
+
label: 'pbr-skin-pl',
|
|
609
|
+
bindGroupLayouts: layouts,
|
|
610
|
+
});
|
|
611
|
+
if (!pipelineLayoutRes.ok) throw pipelineLayoutRes.error;
|
|
612
|
+
|
|
613
|
+
return {
|
|
614
|
+
pipelineLayout: pipelineLayoutRes.value,
|
|
615
|
+
viewBgl: pbr.viewBgl,
|
|
616
|
+
materialBgl: pbr.materialBgl,
|
|
617
|
+
meshArrayBgl: skinMeshArrayBglRes.value,
|
|
618
|
+
instancesBgl: pbr.instancesBgl,
|
|
619
|
+
bindGroupLayouts: layouts,
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
// ─── Unlit material BGL factory ─────────────────────────────────────────────
|
|
624
|
+
|
|
625
|
+
/**
|
|
626
|
+
* Build a stand-alone 7-entry unlit material BGL. Round-4 D-5 keeps unlit
|
|
627
|
+
* material BG isolated from Skylight binding 7..13 -- unlit demos do not
|
|
628
|
+
* pay for IBL state. The unlit pipeline still binds material at slot 1,
|
|
629
|
+
* just with a 7-entry layout.
|
|
630
|
+
*
|
|
631
|
+
* Note: at the moment the runtime still routes both unlit + standard
|
|
632
|
+
* through a single 14-entry pipeline layout; the unlit material BG
|
|
633
|
+
* carries fallback identity resources at binding 7..13. This factory is
|
|
634
|
+
* exported as a future-proof seam for the moment when unlit demos own
|
|
635
|
+
* their own pipeline layout (t57 (e) test pins the contract today so the
|
|
636
|
+
* eventual split has a green target).
|
|
637
|
+
*/
|
|
638
|
+
export function buildUnlitMaterialBgl(device: PbrPipelineDevice): BindGroupLayout {
|
|
639
|
+
const res = device.createBindGroupLayout(
|
|
640
|
+
buildBindGroupLayoutDescriptor(BGL_ONLY_SPEC_STUB, { kind: 'unlit-material' }),
|
|
641
|
+
);
|
|
642
|
+
if (!res.ok) throw res.error;
|
|
643
|
+
return res.value;
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
// ─── Material BG assembly helpers (unlit) ───────────────────────────────────
|
|
647
|
+
|
|
648
|
+
/**
|
|
649
|
+
* Inputs for `buildUnlitMaterialBindGroupEntries`. The fields mirror the
|
|
650
|
+
* record-stage's local variables; isolating the assembler here lets t58
|
|
651
|
+
* (e) test exercise the contract without recreating the entire record
|
|
652
|
+
* stage.
|
|
653
|
+
*/
|
|
654
|
+
export interface UnlitMaterialBindGroupEntryInputs {
|
|
655
|
+
readonly materialUniform: Buffer;
|
|
656
|
+
readonly materialOffset: number;
|
|
657
|
+
readonly materialSize: number;
|
|
658
|
+
readonly defaultSampler: Sampler;
|
|
659
|
+
readonly baseColorView: TextureView;
|
|
660
|
+
readonly defaultWhiteView: TextureView;
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
/**
|
|
664
|
+
* Build the 7 BindGroupEntry values for the unlit material BG (binding
|
|
665
|
+
* 0..6). Output flows into `device.createBindGroup({ layout:
|
|
666
|
+
* unlitMaterialBgl, entries })`.
|
|
667
|
+
*/
|
|
668
|
+
export function buildUnlitMaterialBindGroupEntries(
|
|
669
|
+
inputs: UnlitMaterialBindGroupEntryInputs,
|
|
670
|
+
): BindGroupEntry[] {
|
|
671
|
+
return [
|
|
672
|
+
{
|
|
673
|
+
binding: 0,
|
|
674
|
+
resource: {
|
|
675
|
+
kind: 'buffer' as const,
|
|
676
|
+
value: {
|
|
677
|
+
buffer: inputs.materialUniform,
|
|
678
|
+
offset: inputs.materialOffset,
|
|
679
|
+
size: inputs.materialSize,
|
|
680
|
+
},
|
|
681
|
+
},
|
|
682
|
+
},
|
|
683
|
+
{ binding: 1, resource: { kind: 'sampler' as const, value: inputs.defaultSampler } },
|
|
684
|
+
{ binding: 2, resource: { kind: 'textureView' as const, value: inputs.baseColorView } },
|
|
685
|
+
{ binding: 3, resource: { kind: 'sampler' as const, value: inputs.defaultSampler } },
|
|
686
|
+
{ binding: 4, resource: { kind: 'textureView' as const, value: inputs.defaultWhiteView } },
|
|
687
|
+
{ binding: 5, resource: { kind: 'sampler' as const, value: inputs.defaultSampler } },
|
|
688
|
+
{ binding: 6, resource: { kind: 'textureView' as const, value: inputs.defaultWhiteView } },
|
|
689
|
+
];
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
// Surface re-export so consumers can build a complete BindGroup pipeline
|
|
693
|
+
// without reaching into multiple modules.
|
|
694
|
+
export type { BindGroup };
|
|
695
|
+
|
|
696
|
+
// ─── feat-20260625 M3 / w10 — sprite-pass variantSet selector ────────────────
|
|
697
|
+
//
|
|
698
|
+
// Plan-strategy D-1 + D-4: when an entity carries `SpriteInstances` the
|
|
699
|
+
// sprite-pass record stage must pick the `PER_INSTANCE_REGION=true` sprite
|
|
700
|
+
// shader variant compiled in M2 (w7) so the WGSL `InstanceData` struct
|
|
701
|
+
// includes the per-instance `region: vec4<f32>` field and reads region from
|
|
702
|
+
// the interleaved 80B-per-instance buffer (not from the material UBO).
|
|
703
|
+
//
|
|
704
|
+
// Non-`SpriteInstances` sprite entities (e.g. the sprite-atlas demo) keep
|
|
705
|
+
// the default variant where `PER_INSTANCE_REGION` is undefined and the
|
|
706
|
+
// shader's `#else` branch reads region from material UBO — preserving
|
|
707
|
+
// existing behaviour (plan-strategy D-4 "pbr / unlit / sprite-atlas
|
|
708
|
+
// behaviour unchanged" / requirements Edge Cases).
|
|
709
|
+
//
|
|
710
|
+
// Variant set string format mirrors the existing `URP_PBR_VARIANT_SET` /
|
|
711
|
+
// HDRP variant set string idiom in `pipeline-spec.ts` (`+`-separated kv
|
|
712
|
+
// pairs); the record stage threads this string through the per-shader
|
|
713
|
+
// pipeline-cache key + lazy-build `getMaterialShaderPipeline` lookup.
|
|
714
|
+
|
|
715
|
+
/**
|
|
716
|
+
* variantSet string fired into the sprite-pass pipeline cache when the
|
|
717
|
+
* entity carries `SpriteInstances` (plan-strategy D-1 interleaved single
|
|
718
|
+
* buffer + D-4 axis on `sprite.wgsl`).
|
|
719
|
+
*
|
|
720
|
+
* bug-20260708 M2 (c): aligned with the canonical all-true variant key
|
|
721
|
+
* `''` — sprite's manifest emits `{PIR:true, SBA:true}` under the empty-
|
|
722
|
+
* string key (all variant axes true → canonical). The runtime's
|
|
723
|
+
* `getMaterialShaderPipeline` variant-substitution branch
|
|
724
|
+
* (`createRenderer.ts:1730`) resolves this via
|
|
725
|
+
* `findVariantByKey(msEntry, '')` returning the 5653B PIR=true variant.
|
|
726
|
+
* Combined with the `cacheKeyOf` sentinel `~` (bug-20260708 M2 (b)) this
|
|
727
|
+
* value produces a cache key distinct from the `variantSet=undefined`
|
|
728
|
+
* character/default path (which now resolves to the PIR=false 5575B boot-
|
|
729
|
+
* registered variant). Sprite pipeline layout routing is anchored via
|
|
730
|
+
* `LayoutKind='sprite-urp'` so `variantSet=''` here does NOT trigger the
|
|
731
|
+
* HDRP-layout branch of `selectPipelineLayoutForVariant` (research R-12
|
|
732
|
+
* flow; plan-strategy §4 R-1' guard).
|
|
733
|
+
*/
|
|
734
|
+
export const SPRITE_PASS_PER_INSTANCE_REGION_VARIANT_SET = '';
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
* Pick the sprite-pass variant set for the current sprite entry. Returns
|
|
738
|
+
* `''` (canonical all-true variant key, per bug-20260708 M2 (c)) when
|
|
739
|
+
* `hasSpriteInstances` is true (the extract stage has populated
|
|
740
|
+
* `RenderableSnapshot.spriteInstances`), otherwise `undefined` so the
|
|
741
|
+
* existing sprite path stays byte-identical for non-SpriteInstances callers
|
|
742
|
+
* (plan-strategy D-4 reverse-falsifier).
|
|
743
|
+
*
|
|
744
|
+
* @param hasSpriteInstances — true when the renderable carries a
|
|
745
|
+
* `SpriteInstancesSnapshot` (extracted by render-system-extract M3 w10).
|
|
746
|
+
*/
|
|
747
|
+
export function selectSpritePassVariantSet(hasSpriteInstances: boolean): string | undefined {
|
|
748
|
+
return hasSpriteInstances ? SPRITE_PASS_PER_INSTANCE_REGION_VARIANT_SET : undefined;
|
|
749
|
+
}
|