@forgeax/engine-render 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -641
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts +2 -0
- package/dist/__tests__/device-scope-lifecycle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts +2 -0
- package/dist/__tests__/device-scope-stale-matrix.unit.test.d.ts.map +1 -0
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/fullscreen-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/gpu-driven-indirect-raster-evidence.d.ts.map +1 -1
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts +6 -0
- package/dist/__tests__/gpu-driven-view-gpu-evidence.d.ts.map +1 -1
- package/dist/{gpu-driven/view-reference.d.ts → __tests__/gpu-driven-view-reference.d.ts} +4 -4
- package/dist/__tests__/gpu-driven-view-reference.d.ts.map +1 -0
- package/dist/__tests__/gpu-scene-render-graph-gpu.d.ts.map +1 -1
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts +2 -0
- package/dist/__tests__/ibl/face-uniforms.unit.test.d.ts.map +1 -0
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/morph-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/render-feature-plan.test-d.d.ts +2 -0
- package/dist/__tests__/render-feature-plan.test-d.d.ts.map +1 -0
- package/dist/__tests__/render-feature-plan.unit.test.d.ts +2 -0
- package/dist/__tests__/render-feature-plan.unit.test.d.ts.map +1 -0
- package/dist/__tests__/ssao-config.unit.test.d.ts +2 -0
- package/dist/__tests__/ssao-config.unit.test.d.ts.map +1 -0
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts +2 -0
- package/dist/__tests__/standard-clustered-pipeline.unit.test.d.ts.map +1 -0
- package/dist/__tests__/standard-descriptors.test-d.d.ts +2 -0
- package/dist/__tests__/standard-descriptors.test-d.d.ts.map +1 -0
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts +2 -0
- package/dist/__tests__/standard-pipeline.dawn.test.d.ts.map +1 -0
- package/dist/__tests__/standard-pipeline.integration.test.d.ts +2 -0
- package/dist/__tests__/standard-pipeline.integration.test.d.ts.map +1 -0
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts +2 -0
- package/dist/__tests__/standard-profile-oracle.unit.test.d.ts.map +1 -0
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts +2 -0
- package/dist/__tests__/visibility-resource-short-circuit.unit.test.d.ts.map +1 -0
- package/dist/{renderer/backend-selection.d.ts → assembly/backend-contract.d.ts} +15 -4
- package/dist/assembly/backend-contract.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +207 -0
- package/dist/assembly/factory.d.ts.map +1 -0
- package/dist/assembly/host-contract.d.ts +84 -0
- package/dist/assembly/host-contract.d.ts.map +1 -0
- package/dist/{renderer → assembly}/material/assembly.d.ts +0 -1
- package/dist/{renderer → assembly}/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/pipeline-projection.d.ts +30 -0
- package/dist/assembly/material/pipeline-projection.d.ts.map +1 -0
- package/dist/authoring.d.ts +10 -11
- package/dist/authoring.d.ts.map +1 -1
- package/dist/authoring.mjs +25 -3
- package/dist/authoring.mjs.map +1 -1
- package/dist/chunk-CQXZC5XI.mjs +182 -0
- package/dist/chunk-CQXZC5XI.mjs.map +1 -0
- package/dist/chunk-QC4VW3XJ.mjs +79 -0
- package/dist/chunk-QC4VW3XJ.mjs.map +1 -0
- package/dist/chunk-SCRSAK5B.mjs +480 -0
- package/dist/chunk-SCRSAK5B.mjs.map +1 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts +2 -0
- package/dist/components/__tests__/schema-contract.unit.test.d.ts.map +1 -0
- package/dist/components/glyph-text.d.ts +1 -1
- package/dist/components/glyph-text.d.ts.map +1 -1
- package/dist/components/index.d.ts +2 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/instances.d.ts +1 -1
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts +1 -1
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/mesh-filter.d.ts +7 -7
- package/dist/components/mesh-filter.d.ts.map +1 -1
- package/dist/components/scene-instance.d.ts +11 -11
- package/dist/components/skybox-background.d.ts +56 -0
- package/dist/components/skybox-background.d.ts.map +1 -0
- package/dist/components/skylight.d.ts +55 -0
- package/dist/components/skylight.d.ts.map +1 -0
- package/dist/components/sprite-animation.d.ts +2 -3
- package/dist/components/sprite-animation.d.ts.map +1 -1
- package/dist/components/sprite-instances.d.ts +1 -1
- package/dist/components/sprite-playback-mode.d.ts +6 -1
- package/dist/components/sprite-playback-mode.d.ts.map +1 -1
- package/dist/components/sprite-region-override.d.ts +2 -3
- package/dist/components/sprite-region-override.d.ts.map +1 -1
- package/dist/components/tile-layer.d.ts +5 -0
- package/dist/components/tile-layer.d.ts.map +1 -1
- package/dist/construct-renderer.d.ts +18 -1
- package/dist/construct-renderer.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +27008 -4
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/debug-draw-glue.d.ts +2 -53
- package/dist/debug-draw-glue.d.ts.map +1 -1
- package/dist/device/device-scope.d.ts +83 -0
- package/dist/device/device-scope.d.ts.map +1 -0
- package/dist/{gpu-resource-store.d.ts → device/gpu-residency.d.ts} +91 -48
- package/dist/device/gpu-residency.d.ts.map +1 -0
- package/dist/device/resource-types.d.ts +8 -0
- package/dist/device/resource-types.d.ts.map +1 -0
- package/dist/engine-metrics.d.ts +2 -2
- package/dist/engine-metrics.d.ts.map +1 -1
- package/dist/errors/recover.d.ts +28 -1
- package/dist/errors/recover.d.ts.map +1 -1
- package/dist/errors/render.d.ts +249 -258
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/features/fullscreen.d.ts +19 -0
- package/dist/features/fullscreen.d.ts.map +1 -0
- package/dist/features/host.d.ts +32 -26
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/morph/morph-feature.d.ts +39 -5
- package/dist/features/morph/morph-feature.d.ts.map +1 -1
- package/dist/features/plan.d.ts +182 -0
- package/dist/features/plan.d.ts.map +1 -0
- package/dist/features/prepared-gpu-work.d.ts +21 -17
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics-store.d.ts +2 -1
- package/dist/features/prepared-graphics-store.d.ts.map +1 -1
- package/dist/features/prepared-graphics.d.ts +11 -21
- package/dist/features/prepared-graphics.d.ts.map +1 -1
- package/dist/features/render-graph-compute.d.ts +2 -2
- package/dist/features/render-graph-compute.d.ts.map +1 -1
- package/dist/features/render-graph-contribution.d.ts +4 -7
- package/dist/features/render-graph-contribution.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +2 -2
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/render-graph-resources.d.ts +6 -6
- package/dist/features/render-graph-resources.d.ts.map +1 -1
- package/dist/features/targets.d.ts +5 -5
- package/dist/features/targets.d.ts.map +1 -1
- package/dist/features/types.d.ts +11 -190
- package/dist/features/types.d.ts.map +1 -1
- package/dist/features/vocabulary.d.ts +14 -0
- package/dist/features/vocabulary.d.ts.map +1 -0
- package/dist/fullscreen-post-process-pass.d.ts +4 -25
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/glyph-text-layout-system.d.ts +3 -2
- package/dist/glyph-text-layout-system.d.ts.map +1 -1
- package/dist/gpu-driven/batch-topology.d.ts +6 -75
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +13 -112
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/view-gpu.d.ts +10 -66
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-resource.d.ts +3 -3
- package/dist/gpu-scene-schema.d.ts +1 -94
- package/dist/gpu-scene-schema.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +7 -33
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +3 -53
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/IblPipelineCache.d.ts +74 -180
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
- package/dist/ibl/skylight-bind-group.d.ts +1 -1
- package/dist/index.d.ts +13 -43
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +165 -3
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +69 -0
- package/dist/inspection-types.d.ts.map +1 -0
- package/dist/instance-buffer-cache.d.ts +1 -4
- package/dist/instance-buffer-cache.d.ts.map +1 -1
- package/dist/internal.d.ts +1 -73
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +1 -43
- package/dist/internal.mjs.map +1 -1
- package/dist/lifecycle.d.ts +36 -2
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/materials.d.ts +0 -3
- package/dist/materials.d.ts.map +1 -1
- package/dist/mesh-material-bindings.d.ts +0 -1
- package/dist/mesh-material-bindings.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +75 -29
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-forward-lane.d.ts +5 -0
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -0
- package/dist/pipeline/standard-pipeline.d.ts +31 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -0
- package/dist/pipeline/standard-profile.d.ts +40 -0
- package/dist/pipeline/standard-profile.d.ts.map +1 -0
- package/dist/pipeline-builder.d.ts +3 -3
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec-types.d.ts +24 -0
- package/dist/pipeline-spec-types.d.ts.map +1 -0
- package/dist/pipeline-spec.d.ts +16 -155
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts +1 -14
- package/dist/plugin.d.ts.map +1 -1
- package/dist/post-process-errors.d.ts +18 -18
- package/dist/post-process-errors.d.ts.map +1 -1
- package/dist/prepare/prepared-graphics-resolver.d.ts +2 -5
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts +2 -0
- package/dist/record/__tests__/typed-frame-graph-plan.unit.test.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +7 -73
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +44 -44
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame-targets.d.ts +5 -38
- package/dist/record/frame-targets.d.ts.map +1 -1
- package/dist/record/frame.d.ts +64 -52
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/helpers.d.ts +3 -2
- package/dist/record/helpers.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +5 -4
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +90 -59
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts +28 -3
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +1 -1
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts +276 -3
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +235 -0
- package/dist/record/render-context.d.ts.map +1 -0
- package/dist/record/shadow-pass.d.ts +15 -88
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts +1 -1
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +29 -7
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +3 -3
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/render-contract.d.ts +416 -0
- package/dist/render-contract.d.ts.map +1 -0
- package/dist/render-data.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts +14 -362
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +25 -64
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +107 -338
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +21 -713
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene-types.d.ts +58 -0
- package/dist/scene/render-scene-types.d.ts.map +1 -0
- package/dist/scene/render-scene.d.ts +105 -0
- package/dist/scene/render-scene.d.ts.map +1 -0
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts +2 -5
- package/dist/scene-instances/post-spawn-resolve-joints.d.ts.map +1 -1
- package/dist/ssao-buffers.d.ts +22 -3
- package/dist/ssao-buffers.d.ts.map +1 -1
- package/dist/systems/skin-palette-allocator.d.ts +2 -4
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
- package/dist/systems/skin-palette-types.d.ts +14 -0
- package/dist/systems/skin-palette-types.d.ts.map +1 -0
- package/dist/systems/transparent-sort-config.d.ts +23 -2
- package/dist/systems/transparent-sort-config.d.ts.map +1 -1
- package/dist/tilemap-chunk-extract-system.d.ts +4 -3
- package/dist/tilemap-chunk-extract-system.d.ts.map +1 -1
- package/dist/typed-render-graph-primitives.d.ts +2 -4
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/typed-shadow-passes.d.ts +3 -3
- package/dist/typed-shadow-passes.d.ts.map +1 -1
- package/package.json +23 -23
- package/src/__tests__/backend-selection-rhi-capture.test-d.ts +1 -1
- package/src/__tests__/callback-inference.test-d.ts +6 -3
- package/src/__tests__/cluster-grid-default-surface.unit.test.ts +7 -4
- package/src/__tests__/construct-renderer-identity.unit.test.ts +15 -2
- package/src/__tests__/device-scope-lifecycle.unit.test.ts +151 -0
- package/src/__tests__/device-scope-stale-matrix.unit.test.ts +42 -0
- package/src/__tests__/direct-extract-consumer-contract.test-d.ts +8 -19
- package/src/__tests__/direct-light-snapshot.unit.test.ts +3 -13
- package/src/__tests__/factory-contract.integration.test.ts +158 -209
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +1 -4
- package/src/__tests__/frame-observation.contract.test.ts +17 -8
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +32 -0
- package/src/__tests__/glyph-text-layout-recovery.unit.test.ts +6 -11
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +9 -16
- package/src/__tests__/gpu-driven-production.integration.test.ts +32 -205
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +4 -7
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +87 -8
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +170 -8
- package/src/{gpu-driven/view-reference.ts → __tests__/gpu-driven-view-reference.ts} +4 -3
- package/src/__tests__/gpu-driven-view.browser.test.ts +12 -1
- package/src/__tests__/gpu-driven-view.dawn.test.ts +12 -1
- package/src/__tests__/gpu-driven-view.unit.test.ts +11 -267
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +3 -3
- package/src/__tests__/gpu-scene-render-graph-gpu.ts +2 -3
- package/src/__tests__/gpu-scene.dawn.test.ts +2 -6
- package/src/__tests__/gpu-scene.unit.test.ts +10 -24
- package/src/__tests__/ibl/face-uniforms.unit.test.ts +46 -0
- package/src/__tests__/infinite-grid-no-vertex-probe.unit.test.ts +34 -66
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +14 -5
- package/src/__tests__/light-buffer-layout.unit.test.ts +4 -49
- package/src/__tests__/material-cooked-projection.unit.test.ts +2 -51
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +10 -15
- package/src/__tests__/material-static-dynamic-route.unit.test.ts +4 -23
- package/src/__tests__/material-stride-surface.unit.test.ts +2 -2
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +7 -8
- package/src/__tests__/morph-culling-reentry.dawn.test.ts +29 -38
- package/src/__tests__/morph-feature-gpu-work.integration.test.ts +45 -43
- package/src/__tests__/morph-feature-plan.unit.test.ts +53 -0
- package/src/__tests__/morph-visual-evidence.integration.test.ts +47 -33
- package/src/__tests__/nineslice-handle-surface.unit.test.ts +11 -6
- package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -13
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +6 -81
- package/src/__tests__/prepared-graphics-generation.unit.test.ts +3 -17
- package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +6 -74
- package/src/__tests__/prepared-graphics-resolver.unit.test.ts +1 -3
- package/src/__tests__/prepared-graphics-snapshot.unit.test.ts +2 -2
- package/src/__tests__/profiler-default-off.test.ts +1 -1
- package/src/__tests__/profiler-phase-catalog.test.ts +2 -2
- package/src/__tests__/profiler-phase-integration.test.ts +5 -13
- package/src/__tests__/profiler-phase-token.test.ts +3 -8
- package/src/__tests__/public-surface.test-d.ts +65 -3
- package/src/__tests__/recover-error-policy-owner.unit.test.ts +1 -21
- package/src/__tests__/render-error-code-owner.test-d.ts +18 -23
- package/src/__tests__/render-error-detail-ssot.test-d.ts +0 -95
- package/src/__tests__/render-error-exhaustive.test-d.ts +8 -1
- package/src/__tests__/render-feature-assembly.test-d.ts +8 -16
- package/src/__tests__/render-feature-context.test-d.ts +16 -40
- package/src/__tests__/render-feature-contract.test-d.ts +9 -18
- package/src/__tests__/render-feature-diagnostics.unit.test.ts +6 -8
- package/src/__tests__/render-feature-docs.unit.test.ts +8 -7
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +14 -75
- package/src/__tests__/render-feature-plan.test-d.ts +161 -0
- package/src/__tests__/render-feature-plan.unit.test.ts +170 -0
- package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +8 -19
- package/src/__tests__/render-feature-prepared-errors.test-d.ts +3 -6
- package/src/__tests__/render-feature-prepared-graphics-docs.unit.test.ts +10 -71
- package/src/__tests__/render-feature-prepared-graphics-isolation.unit.test.ts +11 -61
- package/src/__tests__/render-feature-prepared-graphics-negative.test-d.ts +20 -43
- package/src/__tests__/render-feature-prepared-graphics.test-d.ts +56 -78
- package/src/__tests__/render-feature-public-surface.test-d.ts +6 -24
- package/src/__tests__/render-feature-retry.unit.test.ts +7 -48
- package/src/__tests__/render-feature-scheduling.unit.test.ts +15 -27
- package/src/__tests__/render-feature-stage-failed-policy-owner.unit.test.ts +0 -9
- package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +19 -109
- package/src/__tests__/render-feature-visibility-context.test-d.ts +1 -6
- package/src/__tests__/render-feature-visibility-context.unit.test.ts +1 -2
- package/src/__tests__/render-feature-zero-work.unit.test.ts +14 -20
- package/src/__tests__/render-scene-projection.unit.test.ts +73 -111
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +44 -95
- package/src/__tests__/renderer-lifecycle.integration.test.ts +49 -1
- package/src/__tests__/shader-stage-surface.unit.test.ts +14 -9
- package/src/__tests__/ssao-config.unit.test.ts +36 -0
- package/src/__tests__/ssao-kernel-surface.unit.test.ts +4 -5
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +28 -0
- package/src/__tests__/standard-descriptors.test-d.ts +22 -0
- package/src/__tests__/standard-pipeline.dawn.test.ts +61 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +124 -0
- package/src/__tests__/standard-profile-oracle.unit.test.ts +62 -0
- package/src/__tests__/surface-configuration.unit.test.ts +1 -2
- package/src/__tests__/texture-usage-surface.unit.test.ts +3 -6
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +40 -206
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +1 -11
- package/src/__tests__/urp-pipeline.unit.test.ts +2 -2
- package/src/__tests__/vertex-color-pipeline.unit.test.ts +10 -2
- package/src/__tests__/vertex-layout-consumer.unit.test.ts +1 -1
- package/src/__tests__/visibility-diagnostics.integration.test.ts +7 -11
- package/src/__tests__/visibility-extract.integration.test.ts +20 -11
- package/src/__tests__/visibility-extract.perf.test.ts +66 -32
- package/src/__tests__/visibility-feature-dedup.integration.test.ts +2 -4
- package/src/__tests__/visibility-hidden-report.unit.test.ts +1 -2
- package/src/__tests__/visibility-instances.integration.test.ts +7 -11
- package/src/__tests__/visibility-multi-world.integration.test.ts +38 -6
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +18 -41
- package/src/__tests__/visibility-public-surface.test-d.ts +10 -9
- package/src/__tests__/visibility-resolver.unit.test.ts +2 -1
- package/src/__tests__/visibility-resource-short-circuit.unit.test.ts +80 -0
- package/src/__tests__/visibility-snapshot-contract.unit.test.ts +2 -1
- package/src/__tests__/vocabulary.unit.test.ts +1 -1
- package/src/assembly/backend-contract.ts +57 -0
- package/src/{renderer/renderer-factory.ts → assembly/factory.ts} +1663 -2690
- package/src/assembly/host-contract.ts +101 -0
- package/src/{renderer → assembly}/material/assembly.ts +0 -2
- package/src/assembly/material/pipeline-projection.ts +63 -0
- package/src/authoring.ts +14 -22
- package/src/components/__tests__/schema-contract.unit.test.ts +10 -0
- package/src/components/glyph-text.ts +3 -2
- package/src/components/index.ts +7 -9
- package/src/components/instances.ts +4 -5
- package/src/components/light-helpers.ts +1 -1
- package/src/components/mesh-filter.ts +11 -10
- package/src/components/post-process-params.ts +3 -3
- package/src/components/scene-instance.ts +12 -12
- package/src/components/skybox-background.ts +103 -0
- package/src/components/{environment.ts → skylight.ts} +2 -110
- package/src/components/sprite-animation.ts +3 -4
- package/src/components/sprite-instances.ts +2 -2
- package/src/components/sprite-playback-mode.ts +7 -1
- package/src/components/sprite-region-override.ts +2 -3
- package/src/components/tile-layer.ts +8 -2
- package/src/construct-renderer.ts +67 -4
- package/src/debug-draw-glue.ts +8 -129
- package/src/device/device-scope.ts +306 -0
- package/src/{gpu-resource-store.ts → device/gpu-residency.ts} +540 -639
- package/src/device/resource-types.ts +20 -0
- package/src/engine-metrics.ts +12 -19
- package/src/errors/recover.ts +45 -3
- package/src/errors/render.ts +357 -460
- package/src/features/fullscreen.ts +46 -0
- package/src/features/host.ts +575 -309
- package/src/features/morph/morph-feature.ts +195 -105
- package/src/features/plan.ts +447 -0
- package/src/features/prepared-gpu-work.ts +72 -15
- package/src/features/prepared-graphics-store.ts +20 -6
- package/src/features/prepared-graphics.ts +12 -71
- package/src/features/render-graph-compute.ts +14 -5
- package/src/features/render-graph-contribution.ts +43 -63
- package/src/features/render-graph-raster.ts +11 -6
- package/src/features/render-graph-resources.ts +25 -23
- package/src/features/targets.ts +8 -21
- package/src/features/types.ts +39 -227
- package/src/features/vocabulary.ts +24 -0
- package/src/fullscreen-post-process-pass.ts +14 -57
- package/src/glyph-text-layout-system.ts +70 -96
- package/src/gpu-driven/batch-topology.ts +24 -202
- package/src/gpu-driven/production-raster.ts +93 -1108
- package/src/gpu-driven/view-gpu.ts +46 -192
- package/src/gpu-resource.ts +4 -4
- package/src/gpu-scene-schema.ts +11 -99
- package/src/gpu-scene.ts +231 -364
- package/src/hdrp-buffers.ts +12 -221
- package/src/ibl/IblPipelineCache.ts +471 -711
- package/src/ibl/skylight-bind-group.ts +4 -4
- package/src/index.ts +58 -217
- package/src/inspection-types.ts +76 -0
- package/src/instance-buffer-cache.ts +1 -29
- package/src/internal.ts +6 -85
- package/src/lifecycle.ts +64 -19
- package/src/materials.ts +7 -29
- package/src/mesh-material-bindings.ts +0 -1
- package/src/pbr-pipeline.ts +434 -53
- package/src/{urp-pipeline.ts → pipeline/standard-forward-lane.ts} +38 -149
- package/src/{hdrp-pipeline.ts → pipeline/standard-pipeline.ts} +221 -191
- package/src/pipeline/standard-profile.ts +65 -0
- package/src/pipeline-builder.ts +60 -64
- package/src/pipeline-spec-types.ts +28 -0
- package/src/pipeline-spec.ts +72 -609
- package/src/plugin.ts +3 -75
- package/src/post-process-errors.ts +31 -33
- package/src/prepare/prepared-graphics-resolver.ts +5 -4
- package/src/record/__tests__/material-slot-plan.unit.test.ts +1 -33
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +41 -0
- package/src/record/__tests__/video-texture-view.unit.test.ts +1 -1
- package/src/record/frame-lighting.ts +74 -195
- package/src/record/frame-snapshot.ts +45 -60
- package/src/record/frame-targets.ts +8 -243
- package/src/record/frame.ts +509 -796
- package/src/record/helpers.ts +6 -11
- package/src/record/main-pass-geometry.ts +106 -147
- package/src/record/main-pass-material.ts +517 -190
- package/src/record/main-pass-sprite-draws.ts +198 -117
- package/src/record/main-pass.ts +162 -143
- package/src/record/mesh-ssbo.ts +517 -38
- package/src/record/render-context.ts +364 -0
- package/src/record/shadow-pass.ts +138 -1838
- package/src/record/skybox-post-pass.ts +12 -14
- package/src/record/typed-frame-graph.ts +215 -254
- package/src/record/view-ubo.ts +6 -37
- package/src/render-contract.ts +571 -0
- package/src/render-data.ts +3 -3
- package/src/render-graph-primitives.ts +76 -851
- package/src/render-pipeline.ts +104 -188
- package/src/render-system-extract.ts +1048 -1729
- package/src/render-system.ts +330 -1957
- package/src/scene/render-scene-types.ts +64 -0
- package/src/scene/render-scene.ts +1032 -0
- package/src/scene-instances/post-spawn-resolve-joints.ts +4 -7
- package/src/ssao-buffers.ts +167 -8
- package/src/systems/skin-palette-allocator.ts +21 -64
- package/src/systems/skin-palette-types.ts +14 -0
- package/src/systems/transparent-sort-config.ts +25 -3
- package/src/tilemap-chunk-extract-system.ts +53 -70
- package/src/typed-render-graph-primitives.ts +35 -24
- package/src/typed-shadow-passes.ts +26 -56
- package/dist/__tests__/analytic-sky-contract.test.d.ts +0 -2
- package/dist/__tests__/analytic-sky-contract.test.d.ts.map +0 -1
- package/dist/__tests__/analytic-sky-falsify.test.d.ts +0 -2
- package/dist/__tests__/analytic-sky-falsify.test.d.ts.map +0 -1
- package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts +0 -2
- package/dist/__tests__/assets-runtime-handoff.integration.test.d.ts.map +0 -1
- package/dist/__tests__/backend-selection.integration.test.d.ts +0 -2
- package/dist/__tests__/backend-selection.integration.test.d.ts.map +0 -1
- package/dist/__tests__/camera-temporal.test-d.d.ts +0 -2
- package/dist/__tests__/camera-temporal.test-d.d.ts.map +0 -1
- package/dist/__tests__/camera-temporal.test.d.ts +0 -2
- package/dist/__tests__/camera-temporal.test.d.ts.map +0 -1
- package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts +0 -2
- package/dist/__tests__/directional-shadow-probe-atlas-layout.unit.test.d.ts.map +0 -1
- package/dist/__tests__/environment-inspection.test.d.ts +0 -2
- package/dist/__tests__/environment-inspection.test.d.ts.map +0 -1
- package/dist/__tests__/fog-ai-user.fixture.d.ts +0 -2
- package/dist/__tests__/fog-ai-user.fixture.d.ts.map +0 -1
- package/dist/__tests__/fog-custom-render-feature.fixture.d.ts +0 -16
- package/dist/__tests__/fog-custom-render-feature.fixture.d.ts.map +0 -1
- package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-custom-render-feature.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-inspection.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-inspection.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-owner-state.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-owner-state.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-pipeline-topology.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-public-surface.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-public-surface.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-ray-contract.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-ray-contract.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-source-absence.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-source-absence.integration.test.d.ts.map +0 -1
- package/dist/__tests__/fog-temporal.integration.test.d.ts +0 -2
- package/dist/__tests__/fog-temporal.integration.test.d.ts.map +0 -1
- package/dist/__tests__/frame-chain.unit.test.d.ts +0 -2
- package/dist/__tests__/frame-chain.unit.test.d.ts.map +0 -1
- package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts +0 -2
- package/dist/__tests__/gpu-scene-field-type-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/hdrp-pipeline.unit.test.d.ts +0 -2
- package/dist/__tests__/hdrp-pipeline.unit.test.d.ts.map +0 -1
- package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts +0 -2
- package/dist/__tests__/ibl/ibl-fallback.unit.test.d.ts.map +0 -1
- package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts +0 -2
- package/dist/__tests__/material-derived-error-stop-draw.integration.test.d.ts.map +0 -1
- package/dist/__tests__/material-derived-payload.integration.test.d.ts +0 -2
- package/dist/__tests__/material-derived-payload.integration.test.d.ts.map +0 -1
- package/dist/__tests__/materials.unit.test.d.ts +0 -2
- package/dist/__tests__/materials.unit.test.d.ts.map +0 -1
- package/dist/__tests__/param-schema-projection-census.unit.test.d.ts +0 -2
- package/dist/__tests__/param-schema-projection-census.unit.test.d.ts.map +0 -1
- package/dist/__tests__/persistent-render-scene.unit.test.d.ts +0 -2
- package/dist/__tests__/persistent-render-scene.unit.test.d.ts.map +0 -1
- package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts +0 -2
- package/dist/__tests__/pipeline-error-policy-owner.unit.test.d.ts.map +0 -1
- package/dist/__tests__/pipeline-pass-trace.test.d.ts +0 -2
- package/dist/__tests__/pipeline-pass-trace.test.d.ts.map +0 -1
- package/dist/__tests__/pipeline-stage-owner.test-d.d.ts +0 -2
- package/dist/__tests__/pipeline-stage-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/plugin.test.d.ts +0 -2
- package/dist/__tests__/plugin.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-backend-matrix.unit.test.d.ts.map +0 -1
- package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts +0 -2
- package/dist/__tests__/prepared-graphics-resolver-recording.unit.test.d.ts.map +0 -1
- package/dist/__tests__/public-pipeline-id.test-d.d.ts +0 -2
- package/dist/__tests__/public-pipeline-id.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-dispatch-membership.unit.test.d.ts +0 -2
- package/dist/__tests__/render-dispatch-membership.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-construction.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-construction.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-error-code-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts +0 -2
- package/dist/__tests__/render-feature-gpu-buffer-usage-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/render-feature-graph.integration.test.d.ts +0 -2
- package/dist/__tests__/render-feature-graph.integration.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-graphics-staging.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-order.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-order.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-prepared-graphics-recording.unit.test.d.ts.map +0 -1
- package/dist/__tests__/render-feature-staging.unit.test.d.ts +0 -2
- package/dist/__tests__/render-feature-staging.unit.test.d.ts.map +0 -1
- package/dist/__tests__/renderer-render-scene-public.test-d.d.ts +0 -2
- package/dist/__tests__/renderer-render-scene-public.test-d.d.ts.map +0 -1
- package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts +0 -2
- package/dist/__tests__/scene-temporal-coverage.unit.test.d.ts.map +0 -1
- package/dist/__tests__/sun-snapshot-consumers.test.d.ts +0 -2
- package/dist/__tests__/sun-snapshot-consumers.test.d.ts.map +0 -1
- package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts +0 -2
- package/dist/__tests__/surface-backend-kind-owner.test-d.d.ts.map +0 -1
- package/dist/__tests__/taa-history-store.unit.test.d.ts +0 -2
- package/dist/__tests__/taa-history-store.unit.test.d.ts.map +0 -1
- package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts +0 -2
- package/dist/__tests__/temporal-frame-transaction.integration.test.d.ts.map +0 -1
- package/dist/__tests__/temporal-inspection.unit.test.d.ts +0 -2
- package/dist/__tests__/temporal-inspection.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/asset-decoders.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/asset-decoders.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/mipmap-generator.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/render-asset-port.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/render-asset-port.unit.test.d.ts.map +0 -1
- package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts +0 -2
- package/dist/assets/__tests__/resolve-render-asset.unit.test.d.ts.map +0 -1
- package/dist/chunk-DJIMFYX6.mjs +0 -1439
- package/dist/chunk-DJIMFYX6.mjs.map +0 -1
- package/dist/chunk-F2SIOCRM.mjs +0 -7423
- package/dist/chunk-F2SIOCRM.mjs.map +0 -1
- package/dist/chunk-JMSB7AR4.mjs +0 -3
- package/dist/chunk-JMSB7AR4.mjs.map +0 -1
- package/dist/chunk-KHI6K4C6.mjs +0 -659
- package/dist/chunk-KHI6K4C6.mjs.map +0 -1
- package/dist/chunk-PORZOL2V.mjs +0 -569
- package/dist/chunk-PORZOL2V.mjs.map +0 -1
- package/dist/chunk-UOJGMDGP.mjs +0 -29913
- package/dist/chunk-UOJGMDGP.mjs.map +0 -1
- package/dist/components/__tests__/atmosphere-red.test.d.ts +0 -2
- package/dist/components/__tests__/atmosphere-red.test.d.ts.map +0 -1
- package/dist/components/__tests__/atmosphere.test.d.ts +0 -2
- package/dist/components/__tests__/atmosphere.test.d.ts.map +0 -1
- package/dist/components/__tests__/fog.test-d.d.ts +0 -2
- package/dist/components/__tests__/fog.test-d.d.ts.map +0 -1
- package/dist/components/__tests__/fog.test.d.ts +0 -2
- package/dist/components/__tests__/fog.test.d.ts.map +0 -1
- package/dist/components/atmosphere.d.ts +0 -18
- package/dist/components/atmosphere.d.ts.map +0 -1
- package/dist/components/environment.d.ts +0 -115
- package/dist/components/environment.d.ts.map +0 -1
- package/dist/deferred-lighting.d.ts +0 -13
- package/dist/deferred-lighting.d.ts.map +0 -1
- package/dist/dynamic-texture-store.d.ts +0 -42
- package/dist/dynamic-texture-store.d.ts.map +0 -1
- package/dist/environment/__tests__/failure-injection.test.d.ts +0 -2
- package/dist/environment/__tests__/failure-injection.test.d.ts.map +0 -1
- package/dist/environment/__tests__/generation-red.test.d.ts +0 -2
- package/dist/environment/__tests__/generation-red.test.d.ts.map +0 -1
- package/dist/environment/__tests__/generation.test.d.ts +0 -2
- package/dist/environment/__tests__/generation.test.d.ts.map +0 -1
- package/dist/environment/__tests__/graph-transaction.test.d.ts +0 -2
- package/dist/environment/__tests__/graph-transaction.test.d.ts.map +0 -1
- package/dist/environment/__tests__/inspection-red.test.d.ts +0 -2
- package/dist/environment/__tests__/inspection-red.test.d.ts.map +0 -1
- package/dist/environment/__tests__/lifecycle-evidence.test.d.ts +0 -2
- package/dist/environment/__tests__/lifecycle-evidence.test.d.ts.map +0 -1
- package/dist/environment/__tests__/pipeline-topology.test.d.ts +0 -2
- package/dist/environment/__tests__/pipeline-topology.test.d.ts.map +0 -1
- package/dist/environment/__tests__/readiness.test.d.ts +0 -2
- package/dist/environment/__tests__/readiness.test.d.ts.map +0 -1
- package/dist/environment/__tests__/recovery.test.d.ts +0 -2
- package/dist/environment/__tests__/recovery.test.d.ts.map +0 -1
- package/dist/environment/__tests__/resize-dispose.test.d.ts +0 -2
- package/dist/environment/__tests__/resize-dispose.test.d.ts.map +0 -1
- package/dist/environment/__tests__/signature-red.test.d.ts +0 -2
- package/dist/environment/__tests__/signature-red.test.d.ts.map +0 -1
- package/dist/environment/__tests__/signature.test.d.ts +0 -2
- package/dist/environment/__tests__/signature.test.d.ts.map +0 -1
- package/dist/environment/descriptors.d.ts +0 -2
- package/dist/environment/descriptors.d.ts.map +0 -1
- package/dist/environment/extracted-environment.d.ts +0 -53
- package/dist/environment/extracted-environment.d.ts.map +0 -1
- package/dist/environment/generation.d.ts +0 -62
- package/dist/environment/generation.d.ts.map +0 -1
- package/dist/environment/gpu-bundle.d.ts +0 -23
- package/dist/environment/gpu-bundle.d.ts.map +0 -1
- package/dist/environment/graph.d.ts +0 -108
- package/dist/environment/graph.d.ts.map +0 -1
- package/dist/environment/inspection.d.ts +0 -48
- package/dist/environment/inspection.d.ts.map +0 -1
- package/dist/environment/lifecycle.d.ts +0 -22
- package/dist/environment/lifecycle.d.ts.map +0 -1
- package/dist/environment/readiness.d.ts +0 -29
- package/dist/environment/readiness.d.ts.map +0 -1
- package/dist/environment/signature.d.ts +0 -70
- package/dist/environment/signature.d.ts.map +0 -1
- package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts +0 -2
- package/dist/extract/__tests__/directional-csm-domain.unit.test.d.ts.map +0 -1
- package/dist/extract/__tests__/environment-source.test.d.ts +0 -2
- package/dist/extract/__tests__/environment-source.test.d.ts.map +0 -1
- package/dist/extract/__tests__/schema-readers.unit.test.d.ts +0 -2
- package/dist/extract/__tests__/schema-readers.unit.test.d.ts.map +0 -1
- package/dist/extract/directional-csm.d.ts +0 -129
- package/dist/extract/directional-csm.d.ts.map +0 -1
- package/dist/extract/index.d.ts +0 -5
- package/dist/extract/index.d.ts.map +0 -1
- package/dist/extract/material-interface.d.ts +0 -56
- package/dist/extract/material-interface.d.ts.map +0 -1
- package/dist/extract/schema-readers.d.ts +0 -20
- package/dist/extract/schema-readers.d.ts.map +0 -1
- package/dist/features/graph-contribution.d.ts +0 -64
- package/dist/features/graph-contribution.d.ts.map +0 -1
- package/dist/features/index.d.ts +0 -21
- package/dist/features/index.d.ts.map +0 -1
- package/dist/features/morph/index.d.ts +0 -3
- package/dist/features/morph/index.d.ts.map +0 -1
- package/dist/features/morph/morph-bounds.d.ts +0 -42
- package/dist/features/morph/morph-bounds.d.ts.map +0 -1
- package/dist/features/scene-temporal.d.ts +0 -45
- package/dist/features/scene-temporal.d.ts.map +0 -1
- package/dist/features/taa-resolve.d.ts +0 -21
- package/dist/features/taa-resolve.d.ts.map +0 -1
- package/dist/frame-chain.d.ts +0 -14
- package/dist/frame-chain.d.ts.map +0 -1
- package/dist/gpu-driven/view-reference.d.ts.map +0 -1
- package/dist/gpu-resource-store.d.ts.map +0 -1
- package/dist/hdrp-cluster-membership.d.ts +0 -2
- package/dist/hdrp-cluster-membership.d.ts.map +0 -1
- package/dist/hdrp-pipeline.d.ts +0 -36
- package/dist/hdrp-pipeline.d.ts.map +0 -1
- package/dist/ibl/cubemap-projection.d.ts +0 -23
- package/dist/ibl/cubemap-projection.d.ts.map +0 -1
- package/dist/ibl/face-uniforms.d.ts +0 -65
- package/dist/ibl/face-uniforms.d.ts.map +0 -1
- package/dist/mesh-update-errors.d.ts +0 -71
- package/dist/mesh-update-errors.d.ts.map +0 -1
- package/dist/mipmap-generator.d.ts +0 -39
- package/dist/mipmap-generator.d.ts.map +0 -1
- package/dist/param-schema-projection-census.d.ts +0 -18
- package/dist/param-schema-projection-census.d.ts.map +0 -1
- package/dist/persistent-render-scene.d.ts +0 -158
- package/dist/persistent-render-scene.d.ts.map +0 -1
- package/dist/pipeline/index.d.ts +0 -11
- package/dist/pipeline/index.d.ts.map +0 -1
- package/dist/pipeline-errors.d.ts +0 -110
- package/dist/pipeline-errors.d.ts.map +0 -1
- package/dist/prepare/__tests__/schema-readers.unit.test.d.ts +0 -2
- package/dist/prepare/__tests__/schema-readers.unit.test.d.ts.map +0 -1
- package/dist/prepare/index.d.ts +0 -4
- package/dist/prepare/index.d.ts.map +0 -1
- package/dist/prepare/schema-readers.d.ts +0 -11
- package/dist/prepare/schema-readers.d.ts.map +0 -1
- package/dist/record/__tests__/environment-record.test.d.ts +0 -2
- package/dist/record/__tests__/environment-record.test.d.ts.map +0 -1
- package/dist/record/__tests__/frame-targets.unit.test.d.ts +0 -2
- package/dist/record/__tests__/frame-targets.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/membership-timing.unit.test.d.ts +0 -2
- package/dist/record/__tests__/membership-timing.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/render-submission.integration.test.d.ts +0 -2
- package/dist/record/__tests__/render-submission.integration.test.d.ts.map +0 -1
- package/dist/record/__tests__/render-submission.perf.test.d.ts +0 -2
- package/dist/record/__tests__/render-submission.perf.test.d.ts.map +0 -1
- package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts +0 -2
- package/dist/record/__tests__/shadow-submit-mode.unit.test.d.ts.map +0 -1
- package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts +0 -2
- package/dist/record/__tests__/view-ubo-layout.unit.test.d.ts.map +0 -1
- package/dist/record/frame-observation.d.ts +0 -38
- package/dist/record/frame-observation.d.ts.map +0 -1
- package/dist/record/index.d.ts +0 -15
- package/dist/record/index.d.ts.map +0 -1
- package/dist/record/main-pass-skin.d.ts +0 -46
- package/dist/record/main-pass-skin.d.ts.map +0 -1
- package/dist/record/main-pass-sprite.d.ts +0 -69
- package/dist/record/main-pass-sprite.d.ts.map +0 -1
- package/dist/record/material-payload.d.ts +0 -43
- package/dist/record/material-payload.d.ts.map +0 -1
- package/dist/record/material-slot-plan.d.ts +0 -26
- package/dist/record/material-slot-plan.d.ts.map +0 -1
- package/dist/record/membership-timing.d.ts +0 -232
- package/dist/record/membership-timing.d.ts.map +0 -1
- package/dist/record/shadow-caster-uniform.d.ts +0 -8
- package/dist/record/shadow-caster-uniform.d.ts.map +0 -1
- package/dist/record/shadow-submit-mode.d.ts +0 -66
- package/dist/record/shadow-submit-mode.d.ts.map +0 -1
- package/dist/render-dispatch-membership.d.ts +0 -47
- package/dist/render-dispatch-membership.d.ts.map +0 -1
- package/dist/render-pipeline-context.d.ts +0 -289
- package/dist/render-pipeline-context.d.ts.map +0 -1
- package/dist/render-pipeline-target.d.ts +0 -16
- package/dist/render-pipeline-target.d.ts.map +0 -1
- package/dist/render-scene-projection.d.ts +0 -174
- package/dist/render-scene-projection.d.ts.map +0 -1
- package/dist/render-system-fold.d.ts +0 -266
- package/dist/render-system-fold.d.ts.map +0 -1
- package/dist/renderer/asset-service.d.ts +0 -10
- package/dist/renderer/asset-service.d.ts.map +0 -1
- package/dist/renderer/backend-selection.d.ts.map +0 -1
- package/dist/renderer/environment-classify.d.ts +0 -6
- package/dist/renderer/environment-classify.d.ts.map +0 -1
- package/dist/renderer/environment-error.d.ts +0 -13
- package/dist/renderer/environment-error.d.ts.map +0 -1
- package/dist/renderer/material/pipeline-projection.d.ts +0 -91
- package/dist/renderer/material/pipeline-projection.d.ts.map +0 -1
- package/dist/renderer/renderer-factory.d.ts +0 -289
- package/dist/renderer/renderer-factory.d.ts.map +0 -1
- package/dist/renderer.d.ts +0 -771
- package/dist/renderer.d.ts.map +0 -1
- package/dist/scene-utils/collect-subtree.d.ts +0 -11
- package/dist/scene-utils/collect-subtree.d.ts.map +0 -1
- package/dist/ssao-data.d.ts +0 -34
- package/dist/ssao-data.d.ts.map +0 -1
- package/dist/surface-format.d.ts +0 -10
- package/dist/surface-format.d.ts.map +0 -1
- package/dist/taa-history-store.d.ts +0 -88
- package/dist/taa-history-store.d.ts.map +0 -1
- package/dist/temporal-coverage.d.ts +0 -35
- package/dist/temporal-coverage.d.ts.map +0 -1
- package/dist/temporal-frame-transaction.d.ts +0 -92
- package/dist/temporal-frame-transaction.d.ts.map +0 -1
- package/dist/temporal-inspection.d.ts +0 -57
- package/dist/temporal-inspection.d.ts.map +0 -1
- package/dist/temporal-view.d.ts +0 -43
- package/dist/temporal-view.d.ts.map +0 -1
- package/dist/tilemap/resolve-tileset-runtime.d.ts +0 -23
- package/dist/tilemap/resolve-tileset-runtime.d.ts.map +0 -1
- package/dist/urp-pipeline.d.ts +0 -4
- package/dist/urp-pipeline.d.ts.map +0 -1
- package/src/__tests__/analytic-sky-contract.test.ts +0 -27
- package/src/__tests__/analytic-sky-falsify-carriers.mjs +0 -43
- package/src/__tests__/analytic-sky-falsify.test.ts +0 -94
- package/src/__tests__/assets-runtime-handoff.integration.test.ts +0 -36
- package/src/__tests__/backend-selection.integration.test.ts +0 -11
- package/src/__tests__/camera-temporal.test-d.ts +0 -8
- package/src/__tests__/camera-temporal.test.ts +0 -188
- package/src/__tests__/directional-shadow-probe-atlas-layout.unit.test.ts +0 -18
- package/src/__tests__/environment-inspection.test.ts +0 -45
- package/src/__tests__/fog-ai-user.fixture.ts +0 -350
- package/src/__tests__/fog-custom-render-feature.fixture.ts +0 -33
- package/src/__tests__/fog-custom-render-feature.integration.test.ts +0 -76
- package/src/__tests__/fog-inspection.integration.test.ts +0 -127
- package/src/__tests__/fog-owner-state.integration.test.ts +0 -112
- package/src/__tests__/fog-pipeline-topology.integration.test.ts +0 -93
- package/src/__tests__/fog-public-surface.integration.test.ts +0 -60
- package/src/__tests__/fog-ray-contract.integration.test.ts +0 -73
- package/src/__tests__/fog-source-absence.integration.test.ts +0 -51
- package/src/__tests__/fog-temporal.integration.test.ts +0 -115
- package/src/__tests__/frame-chain.unit.test.ts +0 -26
- package/src/__tests__/gpu-scene-field-type-owner.test-d.ts +0 -27
- package/src/__tests__/hdrp-pipeline.unit.test.ts +0 -100
- package/src/__tests__/ibl/ibl-fallback.unit.test.ts +0 -23
- package/src/__tests__/material-derived-error-stop-draw.integration.test.ts +0 -69
- package/src/__tests__/material-derived-payload.integration.test.ts +0 -164
- package/src/__tests__/materials.unit.test.ts +0 -25
- package/src/__tests__/param-schema-projection-census.unit.test.ts +0 -40
- package/src/__tests__/persistent-render-scene.unit.test.ts +0 -1311
- package/src/__tests__/pipeline-error-policy-owner.unit.test.ts +0 -167
- package/src/__tests__/pipeline-pass-trace.test.ts +0 -92
- package/src/__tests__/pipeline-stage-owner.test-d.ts +0 -13
- package/src/__tests__/plugin.test.ts +0 -25
- package/src/__tests__/prepared-graphics-backend-matrix.unit.test.ts +0 -129
- package/src/__tests__/prepared-graphics-resolver-recording.unit.test.ts +0 -180
- package/src/__tests__/public-pipeline-id.test-d.ts +0 -6
- package/src/__tests__/render-dispatch-membership.unit.test.ts +0 -117
- package/src/__tests__/render-feature-construction.unit.test.ts +0 -124
- package/src/__tests__/render-feature-error-code-owner.test-d.ts +0 -27
- package/src/__tests__/render-feature-gpu-buffer-usage-owner.test-d.ts +0 -46
- package/src/__tests__/render-feature-graph.integration.test.ts +0 -205
- package/src/__tests__/render-feature-graphics-staging.unit.test.ts +0 -200
- package/src/__tests__/render-feature-order.unit.test.ts +0 -66
- package/src/__tests__/render-feature-prepared-graphics-recording.unit.test.ts +0 -107
- package/src/__tests__/render-feature-staging.unit.test.ts +0 -94
- package/src/__tests__/renderer-render-scene-public.test-d.ts +0 -27
- package/src/__tests__/scene-temporal-coverage.unit.test.ts +0 -259
- package/src/__tests__/sun-snapshot-consumers.test.ts +0 -35
- package/src/__tests__/surface-backend-kind-owner.test-d.ts +0 -42
- package/src/__tests__/taa-history-store.unit.test.ts +0 -196
- package/src/__tests__/temporal-frame-transaction.integration.test.ts +0 -537
- package/src/__tests__/temporal-inspection.unit.test.ts +0 -138
- package/src/assets/__tests__/asset-decoders.unit.test.ts +0 -92
- package/src/assets/__tests__/mipmap-generator.unit.test.ts +0 -52
- package/src/assets/__tests__/render-asset-port.unit.test.ts +0 -54
- package/src/assets/__tests__/resolve-render-asset.unit.test.ts +0 -47
- package/src/components/__tests__/atmosphere-red.test.ts +0 -51
- package/src/components/__tests__/atmosphere.test.ts +0 -79
- package/src/components/__tests__/fog.test-d.ts +0 -49
- package/src/components/__tests__/fog.test.ts +0 -60
- package/src/components/atmosphere.ts +0 -64
- package/src/deferred-lighting.ts +0 -92
- package/src/dynamic-texture-store.ts +0 -111
- package/src/environment/README.md +0 -76
- package/src/environment/__tests__/failure-injection.test.ts +0 -50
- package/src/environment/__tests__/generation-red.test.ts +0 -64
- package/src/environment/__tests__/generation.test.ts +0 -37
- package/src/environment/__tests__/graph-transaction.test.ts +0 -85
- package/src/environment/__tests__/inspection-red.test.ts +0 -53
- package/src/environment/__tests__/lifecycle-evidence.test.ts +0 -40
- package/src/environment/__tests__/pipeline-topology.test.ts +0 -33
- package/src/environment/__tests__/readiness.test.ts +0 -42
- package/src/environment/__tests__/recovery.test.ts +0 -62
- package/src/environment/__tests__/resize-dispose.test.ts +0 -30
- package/src/environment/__tests__/signature-red.test.ts +0 -45
- package/src/environment/__tests__/signature.test.ts +0 -60
- package/src/environment/descriptors.ts +0 -7
- package/src/environment/extracted-environment.ts +0 -239
- package/src/environment/generation.ts +0 -158
- package/src/environment/gpu-bundle.ts +0 -144
- package/src/environment/graph.ts +0 -588
- package/src/environment/inspection.ts +0 -107
- package/src/environment/lifecycle.ts +0 -124
- package/src/environment/readiness.ts +0 -76
- package/src/environment/signature.ts +0 -185
- package/src/extract/__tests__/directional-csm-domain.unit.test.ts +0 -391
- package/src/extract/__tests__/environment-source.test.ts +0 -105
- package/src/extract/__tests__/schema-readers.unit.test.ts +0 -16
- package/src/extract/directional-csm.ts +0 -959
- package/src/extract/index.ts +0 -10
- package/src/extract/material-interface.ts +0 -604
- package/src/extract/schema-readers.ts +0 -27
- package/src/features/graph-contribution.ts +0 -577
- package/src/features/index.ts +0 -100
- package/src/features/morph/index.ts +0 -24
- package/src/features/morph/morph-bounds.ts +0 -123
- package/src/features/scene-temporal.ts +0 -274
- package/src/features/taa-resolve.ts +0 -244
- package/src/frame-chain.ts +0 -21
- package/src/hdrp-cluster-membership.ts +0 -70
- package/src/ibl/cubemap-projection.ts +0 -60
- package/src/ibl/face-uniforms.ts +0 -150
- package/src/mesh-update-errors.ts +0 -113
- package/src/mipmap-generator.ts +0 -244
- package/src/param-schema-projection-census.ts +0 -73
- package/src/persistent-render-scene.ts +0 -1752
- package/src/pipeline/index.ts +0 -40
- package/src/pipeline-errors.ts +0 -172
- package/src/prepare/__tests__/schema-readers.unit.test.ts +0 -16
- package/src/prepare/index.ts +0 -8
- package/src/prepare/schema-readers.ts +0 -20
- package/src/record/__tests__/environment-record.test.ts +0 -35
- package/src/record/__tests__/frame-targets.unit.test.ts +0 -54
- package/src/record/__tests__/membership-timing.unit.test.ts +0 -524
- package/src/record/__tests__/render-submission.integration.test.ts +0 -76
- package/src/record/__tests__/render-submission.perf.test.ts +0 -141
- package/src/record/__tests__/shadow-submit-mode.unit.test.ts +0 -88
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +0 -101
- package/src/record/frame-observation.ts +0 -122
- package/src/record/index.ts +0 -15
- package/src/record/main-pass-skin.ts +0 -51
- package/src/record/main-pass-sprite.ts +0 -166
- package/src/record/material-payload.ts +0 -292
- package/src/record/material-slot-plan.ts +0 -68
- package/src/record/membership-timing.ts +0 -1012
- package/src/record/shadow-caster-uniform.ts +0 -37
- package/src/record/shadow-submit-mode.ts +0 -277
- package/src/render-dispatch-membership.ts +0 -155
- package/src/render-pipeline-context.ts +0 -332
- package/src/render-pipeline-target.ts +0 -96
- package/src/render-scene-projection.ts +0 -1738
- package/src/render-system-fold.ts +0 -531
- package/src/renderer/asset-service.ts +0 -32
- package/src/renderer/backend-selection.ts +0 -121
- package/src/renderer/environment-classify.ts +0 -30
- package/src/renderer/environment-error.ts +0 -19
- package/src/renderer/material/pipeline-projection.ts +0 -140
- package/src/renderer.ts +0 -940
- package/src/scene-utils/collect-subtree.ts +0 -40
- package/src/ssao-data.ts +0 -106
- package/src/surface-format.ts +0 -37
- package/src/taa-history-store.ts +0 -429
- package/src/temporal-coverage.ts +0 -106
- package/src/temporal-frame-transaction.ts +0 -301
- package/src/temporal-inspection.ts +0 -194
- package/src/temporal-view.ts +0 -174
- package/src/tilemap/resolve-tileset-runtime.ts +0 -72
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
2
|
-
import { describe, expect, it } from 'vitest';
|
|
3
|
-
import { commandBufferPlanForFrame, createShadowSubmitModeState } from '../shadow-submit-mode';
|
|
4
|
-
|
|
5
|
-
type WorkloadPass = {
|
|
6
|
-
readonly name: string;
|
|
7
|
-
readonly draws: readonly string[];
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
type SubmissionProbe = {
|
|
11
|
-
readonly events: string[];
|
|
12
|
-
readonly rawSubmitCount: number;
|
|
13
|
-
readonly rendererSubmitCount: number;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
const publicWorkloadDescriptor: readonly WorkloadPass[] = [
|
|
17
|
-
{ name: 'shadow', draws: ['shadow-caster'] },
|
|
18
|
-
{ name: 'main', draws: ['forward-geometry', 'post-process'] },
|
|
19
|
-
];
|
|
20
|
-
|
|
21
|
-
function makeProbe(duplicateRhiSubmit: boolean): SubmissionProbe {
|
|
22
|
-
const events: string[] = [];
|
|
23
|
-
let rawSubmitCount = 0;
|
|
24
|
-
let rendererSubmitCount = 0;
|
|
25
|
-
|
|
26
|
-
const rawQueue = {
|
|
27
|
-
submit: () => {
|
|
28
|
-
rawSubmitCount += 1;
|
|
29
|
-
events.push('rhi-wrapper:raw-submit');
|
|
30
|
-
return { ok: true as const, value: undefined };
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
const queue = {
|
|
34
|
-
submit: (buffers: readonly unknown[]) => {
|
|
35
|
-
rendererSubmitCount += 1;
|
|
36
|
-
events.push(`renderer-submit:${buffers.length}`);
|
|
37
|
-
const first = rawQueue.submit();
|
|
38
|
-
if (duplicateRhiSubmit) rawQueue.submit();
|
|
39
|
-
return first;
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
for (const pass of publicWorkloadDescriptor) {
|
|
43
|
-
for (const draw of pass.draws) events.push(`draw:${pass.name}:${draw}`);
|
|
44
|
-
}
|
|
45
|
-
events.push('renderer-finish');
|
|
46
|
-
const plan = commandBufferPlanForFrame(createShadowSubmitModeState(), [], {
|
|
47
|
-
label: 'render-system-frame',
|
|
48
|
-
} as never);
|
|
49
|
-
expect(plan.ok).toBe(true);
|
|
50
|
-
if (plan.ok) {
|
|
51
|
-
for (const submission of plan.value.rawSubmissions) {
|
|
52
|
-
queue.submit(submission.commandBuffers);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return { events, rawSubmitCount, rendererSubmitCount };
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function assertBoundedSubmission(probe: SubmissionProbe): void {
|
|
59
|
-
const drawEvents = probe.events.filter((event) => event.startsWith('draw:'));
|
|
60
|
-
const finishIndex = probe.events.indexOf('renderer-finish');
|
|
61
|
-
const submitIndex = probe.events.findIndex((event) => event.startsWith('renderer-submit:'));
|
|
62
|
-
|
|
63
|
-
expect(drawEvents).toEqual(
|
|
64
|
-
publicWorkloadDescriptor.flatMap((pass) =>
|
|
65
|
-
pass.draws.map((draw) => `draw:${pass.name}:${draw}`),
|
|
66
|
-
),
|
|
67
|
-
);
|
|
68
|
-
expect(finishIndex).toBeGreaterThan(
|
|
69
|
-
probe.events.indexOf(drawEvents[drawEvents.length - 1] ?? ''),
|
|
70
|
-
);
|
|
71
|
-
expect(submitIndex).toBeGreaterThan(finishIndex);
|
|
72
|
-
expect(probe.rendererSubmitCount).toBe(1);
|
|
73
|
-
expect(probe.rawSubmitCount).toBe(1);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function findSubmitLines(source: string, pattern: RegExp): number[] {
|
|
77
|
-
return source.split('\n').flatMap((line, index) => (pattern.test(line) ? [index + 1] : []));
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
describe('render submission owner admission', () => {
|
|
81
|
-
it('preserves draw order and finish-before-submit at the renderer seam', () => {
|
|
82
|
-
const probe = makeProbe(false);
|
|
83
|
-
assertBoundedSubmission(probe);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('fails the bounded assertion for the matched duplicated-RHI negative control', () => {
|
|
87
|
-
const pathological = makeProbe(true);
|
|
88
|
-
expect(() => assertBoundedSubmission(pathological)).toThrow();
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('records the renderer-versus-RHI admission result before implementation', () => {
|
|
92
|
-
const frameTargets = readFileSync(new URL('../frame-targets.ts', import.meta.url), 'utf8');
|
|
93
|
-
const shadowPass = readFileSync(new URL('../shadow-pass.ts', import.meta.url), 'utf8');
|
|
94
|
-
const rhiWgpuQueue = readFileSync(
|
|
95
|
-
new URL('../../../../rhi-wgpu/src/queue.ts', import.meta.url),
|
|
96
|
-
'utf8',
|
|
97
|
-
);
|
|
98
|
-
const rhiWebgpuDevice = readFileSync(
|
|
99
|
-
new URL('../../../../rhi-webgpu/src/device.ts', import.meta.url),
|
|
100
|
-
'utf8',
|
|
101
|
-
);
|
|
102
|
-
const rendererSubmissionSites = [
|
|
103
|
-
{
|
|
104
|
-
file: 'packages/render/src/record/frame-targets.ts',
|
|
105
|
-
lines: findSubmitLines(frameTargets, /internals\.device\.queue\.submit\s*\(/),
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
file: 'packages/render/src/record/shadow-pass.ts',
|
|
109
|
-
lines: findSubmitLines(shadowPass, /runtime\.device\.queue\.submit\s*\(/),
|
|
110
|
-
},
|
|
111
|
-
];
|
|
112
|
-
const rhiWrapperSites = [
|
|
113
|
-
{
|
|
114
|
-
file: 'packages/rhi-wgpu/src/queue.ts',
|
|
115
|
-
lines: findSubmitLines(rhiWgpuQueue, /raw\.submit\.call\s*\(/),
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
file: 'packages/rhi-webgpu/src/device.ts',
|
|
119
|
-
lines: findSubmitLines(rhiWebgpuDevice, /rawQueue\.submit\s*\(/),
|
|
120
|
-
},
|
|
121
|
-
];
|
|
122
|
-
const admission = {
|
|
123
|
-
status: 'inconclusive',
|
|
124
|
-
rendererSubmissionSites,
|
|
125
|
-
rhiWrapperSites,
|
|
126
|
-
matchedNegativeControl: {
|
|
127
|
-
variant: 'duplicated-rhi-wrapper-submit',
|
|
128
|
-
reproducesBoundedFailure: true,
|
|
129
|
-
},
|
|
130
|
-
reason:
|
|
131
|
-
'Renderer record code owns multiple submission boundaries, including the documented shadow depth barrier; the matched RHI control only fails when it is deliberately made to duplicate raw submit. The focused node test cannot attribute the public GPU-process pacing symptom to one renderer submission without backend evidence.',
|
|
132
|
-
} as const;
|
|
133
|
-
|
|
134
|
-
// biome-ignore lint/suspicious/noConsole: admission evidence is the task output
|
|
135
|
-
console.info(`[m6-owner-admission] ${JSON.stringify(admission)}`);
|
|
136
|
-
expect(admission.status).toBe('inconclusive');
|
|
137
|
-
expect(rendererSubmissionSites.some((site) => site.lines.length > 0)).toBe(true);
|
|
138
|
-
expect(rhiWrapperSites.every((site) => site.lines.length > 0)).toBe(true);
|
|
139
|
-
expect(admission.matchedNegativeControl.reproducesBoundedFailure).toBe(true);
|
|
140
|
-
});
|
|
141
|
-
});
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { expect, test } from 'vitest';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
SHADOW_SUBMIT_MODES,
|
|
5
|
-
type ShadowSubmitModeRequest,
|
|
6
|
-
validateShadowSubmitModeRequest,
|
|
7
|
-
} from '../shadow-submit-mode';
|
|
8
|
-
|
|
9
|
-
const identity = {
|
|
10
|
-
carrierId: 'studio-carrier-1',
|
|
11
|
-
pageIdentity: 'page-1',
|
|
12
|
-
browserRealmId: 'realm-1',
|
|
13
|
-
runtimeId: 'runtime-1',
|
|
14
|
-
canvasIdentity: 'canvas-1',
|
|
15
|
-
rendererGeneration: 'renderer-generation-1',
|
|
16
|
-
} as const;
|
|
17
|
-
|
|
18
|
-
function request(overrides: Partial<ShadowSubmitModeRequest> = {}): ShadowSubmitModeRequest {
|
|
19
|
-
return {
|
|
20
|
-
schema: 'renderer-owner-admission/v1',
|
|
21
|
-
shadowSubmitMode: 'independent',
|
|
22
|
-
identity,
|
|
23
|
-
...overrides,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
test('renderer mode exposes exactly the independent and coalesced values', () => {
|
|
28
|
-
expect(SHADOW_SUBMIT_MODES).toEqual(['independent', 'coalesced-with-frame']);
|
|
29
|
-
expect(validateShadowSubmitModeRequest(request()).ok).toBe(true);
|
|
30
|
-
expect(
|
|
31
|
-
validateShadowSubmitModeRequest(request({ shadowSubmitMode: 'coalesced-with-frame' })).ok,
|
|
32
|
-
).toBe(true);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
test('renderer mode rejects an unknown mode and preserves a structured recovery error', () => {
|
|
36
|
-
const result = validateShadowSubmitModeRequest(
|
|
37
|
-
request({ shadowSubmitMode: 'all-at-once' as never }),
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
expect(result).toMatchObject({
|
|
41
|
-
ok: false,
|
|
42
|
-
error: {
|
|
43
|
-
code: 'renderer-owner-admission-invalid-mode',
|
|
44
|
-
category: 'precondition',
|
|
45
|
-
expected: { shadowSubmitMode: SHADOW_SUBMIT_MODES },
|
|
46
|
-
recoveryActions: ['renderer.ownerAdmission.rediscover'],
|
|
47
|
-
safeRerun: true,
|
|
48
|
-
},
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
test('renderer mode requires every selected carrier and renderer identity field', () => {
|
|
53
|
-
for (const field of Object.keys(identity) as Array<keyof typeof identity>) {
|
|
54
|
-
const incompleteIdentity = { ...identity };
|
|
55
|
-
delete incompleteIdentity[field];
|
|
56
|
-
const result = validateShadowSubmitModeRequest(
|
|
57
|
-
request({ identity: incompleteIdentity as never }),
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
expect(result).toMatchObject({
|
|
61
|
-
ok: false,
|
|
62
|
-
error: {
|
|
63
|
-
code: 'renderer-owner-admission-identity-mismatch',
|
|
64
|
-
category: 'precondition',
|
|
65
|
-
expected: { identityFields: Object.keys(identity) },
|
|
66
|
-
recoveryActions: ['renderer.ownerAdmission.rediscover'],
|
|
67
|
-
safeRerun: true,
|
|
68
|
-
},
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
test('renderer mode rejects a generation drift before a frame-boundary apply', () => {
|
|
74
|
-
const result = validateShadowSubmitModeRequest(
|
|
75
|
-
request({
|
|
76
|
-
identity: { ...identity, rendererGeneration: '' },
|
|
77
|
-
}),
|
|
78
|
-
);
|
|
79
|
-
|
|
80
|
-
expect(result).toMatchObject({
|
|
81
|
-
ok: false,
|
|
82
|
-
error: {
|
|
83
|
-
code: 'renderer-owner-admission-identity-mismatch',
|
|
84
|
-
observed: { rendererGeneration: '' },
|
|
85
|
-
recoveryActions: ['renderer.ownerAdmission.rediscover'],
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
});
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { vec3 } from '@forgeax/engine-math';
|
|
2
|
-
import type { Buffer, RhiQueue } from '@forgeax/engine-rhi';
|
|
3
|
-
import { ok } from '@forgeax/engine-rhi';
|
|
4
|
-
import { describe, expect, it } from 'vitest';
|
|
5
|
-
import type {
|
|
6
|
-
CameraSnapshot,
|
|
7
|
-
DirectionalLightSnapshot,
|
|
8
|
-
ExtractedLights,
|
|
9
|
-
FogSnapshot,
|
|
10
|
-
} from '../../render-system-extract';
|
|
11
|
-
import { VIEW_UNIFORM_BYTES, VIEW_UNIFORM_SLOT_STRIDE, writeViewUbo } from '../view-ubo';
|
|
12
|
-
|
|
13
|
-
function camera(): CameraSnapshot {
|
|
14
|
-
return {
|
|
15
|
-
worldId: 0,
|
|
16
|
-
entityKey: 0,
|
|
17
|
-
position: vec3.create(0, 1, 3),
|
|
18
|
-
world: new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 3, 1]),
|
|
19
|
-
fov: Math.PI / 4,
|
|
20
|
-
aspect: 1,
|
|
21
|
-
near: 0.1,
|
|
22
|
-
far: 100,
|
|
23
|
-
projection: 'perspective',
|
|
24
|
-
orthoLeft: -1,
|
|
25
|
-
orthoRight: 1,
|
|
26
|
-
orthoBottom: -1,
|
|
27
|
-
orthoTop: 1,
|
|
28
|
-
tonemap: 'none',
|
|
29
|
-
exposure: 1,
|
|
30
|
-
whitePoint: 4,
|
|
31
|
-
antialias: 'none',
|
|
32
|
-
historyVersion: 0,
|
|
33
|
-
bloom: 'off',
|
|
34
|
-
bloomThreshold: 1,
|
|
35
|
-
bloomIntensity: 1,
|
|
36
|
-
bloomBlurRadius: 4,
|
|
37
|
-
clearColor: [0, 0, 0, 1],
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const light: DirectionalLightSnapshot = {
|
|
42
|
-
kind: 'directional',
|
|
43
|
-
direction: vec3.create(0, -1, 0),
|
|
44
|
-
color: vec3.create(1, 1, 1),
|
|
45
|
-
intensity: 1,
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
const lights = {
|
|
49
|
-
directional: light,
|
|
50
|
-
directionalCount: 1,
|
|
51
|
-
point: [],
|
|
52
|
-
spot: [],
|
|
53
|
-
lightViewProj: undefined,
|
|
54
|
-
splitPlanes: undefined,
|
|
55
|
-
cascadeCount: undefined,
|
|
56
|
-
cascadeBlend: undefined,
|
|
57
|
-
depthBias: undefined,
|
|
58
|
-
normalBias: undefined,
|
|
59
|
-
pcfKernelSize: undefined,
|
|
60
|
-
pointShadow: [],
|
|
61
|
-
} as unknown as ExtractedLights;
|
|
62
|
-
|
|
63
|
-
function capture(fog: FogSnapshot): Float32Array {
|
|
64
|
-
let payload: Float32Array | undefined;
|
|
65
|
-
const queue = {
|
|
66
|
-
writeBuffer: (_buffer: Buffer, _offset: number, data: ArrayBufferView | ArrayBuffer) => {
|
|
67
|
-
payload = new Float32Array((data as ArrayBufferView).buffer);
|
|
68
|
-
return ok(undefined);
|
|
69
|
-
},
|
|
70
|
-
} as unknown as RhiQueue;
|
|
71
|
-
writeViewUbo(queue, {} as Buffer, camera(), light, lights, [], undefined, fog);
|
|
72
|
-
if (payload === undefined) throw new Error('writeViewUbo did not write');
|
|
73
|
-
return payload;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
describe('View UBO Fog payload ABI', () => {
|
|
77
|
-
it('derives a 16-byte aligned payload inside the existing View slot', () => {
|
|
78
|
-
expect(VIEW_UNIFORM_BYTES).toBeGreaterThan(928);
|
|
79
|
-
expect(VIEW_UNIFORM_BYTES % 16).toBe(0);
|
|
80
|
-
expect(VIEW_UNIFORM_BYTES).toBeLessThanOrEqual(VIEW_UNIFORM_SLOT_STRIDE);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('packs color, density, heightFalloff, and maxOpacity after existing View facts', () => {
|
|
84
|
-
const payload = capture({
|
|
85
|
-
color: [0.2, 1.5, 3.0],
|
|
86
|
-
density: 0.035,
|
|
87
|
-
heightFalloff: 0.28,
|
|
88
|
-
maxOpacity: 0.92,
|
|
89
|
-
revision: 7,
|
|
90
|
-
});
|
|
91
|
-
expect(payload.length).toBe(VIEW_UNIFORM_BYTES / 4);
|
|
92
|
-
expect(payload[232]).toBeCloseTo(0.2, 6);
|
|
93
|
-
expect(payload[233]).toBeCloseTo(1.5, 6);
|
|
94
|
-
expect(payload[234]).toBeCloseTo(3.0, 6);
|
|
95
|
-
expect(payload[235]).toBeCloseTo(0.035, 6);
|
|
96
|
-
expect(payload[236]).toBeCloseTo(0.28, 6);
|
|
97
|
-
expect(payload[237]).toBeCloseTo(0.92, 6);
|
|
98
|
-
expect(payload[238]).toBe(0);
|
|
99
|
-
expect(payload[239]).toBe(0);
|
|
100
|
-
});
|
|
101
|
-
});
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type CurrentFrameObservationLease,
|
|
3
|
-
createCurrentFrameObservationLease,
|
|
4
|
-
type ResolvedColorTargetDescriptor,
|
|
5
|
-
} from '@forgeax/engine-render-graph';
|
|
6
|
-
import type { Texture } from '@forgeax/engine-rhi';
|
|
7
|
-
import { err, ok, type Result } from '@forgeax/engine-rhi';
|
|
8
|
-
import {
|
|
9
|
-
ObservationUnavailableError,
|
|
10
|
-
type ObservationUnavailableReason,
|
|
11
|
-
} from '../errors/render.js';
|
|
12
|
-
|
|
13
|
-
export interface FrameObservationSource {
|
|
14
|
-
readonly texture: Texture;
|
|
15
|
-
readonly descriptor: ResolvedColorTargetDescriptor;
|
|
16
|
-
readonly frameId: number;
|
|
17
|
-
readonly pipelineId: 'forgeax::urp' | 'forgeax::hdrp';
|
|
18
|
-
readonly backendId: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export type FrameObservationReadback = (
|
|
22
|
-
lease: CurrentFrameObservationLease,
|
|
23
|
-
) => Promise<Result<Uint8Array, Error>>;
|
|
24
|
-
|
|
25
|
-
export interface FrameObservationOptions {
|
|
26
|
-
readonly semantic: 'linear-hdr';
|
|
27
|
-
readonly readback: FrameObservationReadback;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export interface FrameObservationMetadata {
|
|
31
|
-
readonly format: string;
|
|
32
|
-
readonly size: { readonly width: number; readonly height: number };
|
|
33
|
-
readonly usage: number;
|
|
34
|
-
readonly sample: number;
|
|
35
|
-
readonly frameId: number;
|
|
36
|
-
readonly lifetime: { readonly frameId: number; readonly state: 'active' | 'retired' };
|
|
37
|
-
readonly pipelineId: 'forgeax::urp' | 'forgeax::hdrp';
|
|
38
|
-
readonly backendId: string;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface FrameObservation {
|
|
42
|
-
readonly bytes: Uint8Array;
|
|
43
|
-
readonly metadata: FrameObservationMetadata;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function unavailable(
|
|
47
|
-
reason: ObservationUnavailableReason,
|
|
48
|
-
hint: string,
|
|
49
|
-
): Result<never, ObservationUnavailableError> {
|
|
50
|
-
return err(new ObservationUnavailableError(reason, hint));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function mapLeaseFailure(code: string, hint: string): Result<never, ObservationUnavailableError> {
|
|
54
|
-
let reason: ObservationUnavailableReason = 'resource';
|
|
55
|
-
if (code === 'observation-stale') reason = 'stale';
|
|
56
|
-
else if (code === 'observation-invalid-format') reason = 'format';
|
|
57
|
-
else if (code === 'observation-missing-copy-src') reason = 'copy-src';
|
|
58
|
-
return unavailable(reason, hint);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export async function observeCurrentFrame(
|
|
62
|
-
options: FrameObservationOptions,
|
|
63
|
-
source: FrameObservationSource | undefined,
|
|
64
|
-
currentFrameId: number,
|
|
65
|
-
): Promise<Result<FrameObservation, ObservationUnavailableError>> {
|
|
66
|
-
if (options.semantic !== 'linear-hdr') {
|
|
67
|
-
return unavailable('identity', 'request the producer-owned linear-hdr semantic');
|
|
68
|
-
}
|
|
69
|
-
if (source === undefined) {
|
|
70
|
-
return unavailable(
|
|
71
|
-
'no-frame',
|
|
72
|
-
'draw a frame through a supported URP or HDRP producer before requesting observation',
|
|
73
|
-
);
|
|
74
|
-
}
|
|
75
|
-
if (
|
|
76
|
-
(source.pipelineId !== 'forgeax::urp' && source.pipelineId !== 'forgeax::hdrp') ||
|
|
77
|
-
source.backendId.length === 0
|
|
78
|
-
) {
|
|
79
|
-
return unavailable(
|
|
80
|
-
'identity',
|
|
81
|
-
'observe a producer with explicit pipeline and backend identity',
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const leaseResult = createCurrentFrameObservationLease(
|
|
86
|
-
{ ...source.descriptor, texture: source.texture, frameId: source.frameId },
|
|
87
|
-
currentFrameId,
|
|
88
|
-
);
|
|
89
|
-
if (!leaseResult.ok) {
|
|
90
|
-
return mapLeaseFailure(leaseResult.error.code, leaseResult.error.hint);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
let bytesResult: Result<Uint8Array, Error>;
|
|
94
|
-
try {
|
|
95
|
-
bytesResult = await options.readback(leaseResult.value);
|
|
96
|
-
} catch (cause) {
|
|
97
|
-
const message = cause instanceof Error ? cause.message : String(cause);
|
|
98
|
-
return unavailable('readback-failed', `retry the current-frame readback after: ${message}`);
|
|
99
|
-
}
|
|
100
|
-
if (!bytesResult.ok) {
|
|
101
|
-
return unavailable('readback-failed', bytesResult.error.message);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const activeResult = leaseResult.value.beginReadback();
|
|
105
|
-
if (!activeResult.ok) {
|
|
106
|
-
return mapLeaseFailure(activeResult.error.code, activeResult.error.hint);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
return ok({
|
|
110
|
-
bytes: bytesResult.value,
|
|
111
|
-
metadata: {
|
|
112
|
-
format: leaseResult.value.descriptor.format,
|
|
113
|
-
size: leaseResult.value.descriptor.size,
|
|
114
|
-
usage: leaseResult.value.descriptor.usage,
|
|
115
|
-
sample: source.descriptor.sample,
|
|
116
|
-
frameId: source.frameId,
|
|
117
|
-
lifetime: leaseResult.value.lifetime,
|
|
118
|
-
pipelineId: source.pipelineId,
|
|
119
|
-
backendId: source.backendId,
|
|
120
|
-
},
|
|
121
|
-
});
|
|
122
|
-
}
|
package/src/record/index.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// @forgeax/engine-runtime - RenderSystem record cluster barrel (feat-20260704 M3/w17).
|
|
2
|
-
export * from './frame';
|
|
3
|
-
export * from './frame-observation';
|
|
4
|
-
export * from './frame-snapshot';
|
|
5
|
-
export * from './frame-targets';
|
|
6
|
-
export * from './helpers';
|
|
7
|
-
export * from './main-pass';
|
|
8
|
-
export * from './main-pass-material';
|
|
9
|
-
export * from './main-pass-skin';
|
|
10
|
-
export * from './main-pass-sprite';
|
|
11
|
-
export * from './material-payload';
|
|
12
|
-
export * from './mesh-ssbo';
|
|
13
|
-
export * from './shadow-pass';
|
|
14
|
-
export * from './skybox-post-pass';
|
|
15
|
-
export * from './view-ubo';
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { MESH_PER_ENTITY_STRIDE } from './mesh-ssbo';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* feat-20260612-skin-palette-per-frame-upload M3 / m3-2: pure helper that
|
|
5
|
-
* builds the `setBindGroup(2, ...)` dynamic-offset tuple at the skin /
|
|
6
|
-
* non-skin draw site.
|
|
7
|
-
*
|
|
8
|
-
* - Skin entries (`skinByteOffset !== undefined`) bind a 3-entry mesh-array
|
|
9
|
-
* BGL (binding 0 mesh-array UBO, bindings 1/2 current/previous palette UBOs;
|
|
10
|
-
* all `hasDynamicOffset: true`), so the tuple carries three offsets: the
|
|
11
|
-
* mesh slot follows the per-entity 256-byte stride and both palette slots
|
|
12
|
-
* carry the per-entity cursor M2 m2-6 wrote into
|
|
13
|
-
* `entry.source.skin.byteOffset`.
|
|
14
|
-
* - Non-skin entries bind the URP / HDRP 1-entry mesh-array BGL, so the
|
|
15
|
-
* tuple carries only the mesh slot offset (length 1). Adding palette
|
|
16
|
-
* offset there would trip WebGPU validation against the 1-binding BGL.
|
|
17
|
-
*
|
|
18
|
-
* Extracted from the inline `group2DynamicOffsets = [i * MESH_PER_ENTITY_STRIDE,
|
|
19
|
-
* 0]` site (PR #353 stub) so the contract `group2DynamicOffsets[1] ===
|
|
20
|
-
* byteOffset` is testable from a focused unit fixture without driving
|
|
21
|
-
* recordFrame end-to-end.
|
|
22
|
-
*
|
|
23
|
-
* @internal -- exported for unit test access (m3-1)
|
|
24
|
-
*/
|
|
25
|
-
export function _computeSkinGroup2DynOffsets(
|
|
26
|
-
meshSlotIdx: number,
|
|
27
|
-
skinByteOffset: number | undefined,
|
|
28
|
-
): readonly number[] {
|
|
29
|
-
const meshOffset = meshSlotIdx * MESH_PER_ENTITY_STRIDE;
|
|
30
|
-
if (skinByteOffset === undefined) return [meshOffset];
|
|
31
|
-
return [meshOffset, skinByteOffset, skinByteOffset];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* feat-20260612-skin-palette-per-frame-upload M3 / m3-2: read-side accessor
|
|
36
|
-
* for the per-frame skin BG cache miss / hit counters published by the
|
|
37
|
-
* record stage. Mirrors the existing `bindGroupCounts.createBindGroup`
|
|
38
|
-
* surface but scoped to the skin-mesh BG cache so the m3-1 acceptanceCheck
|
|
39
|
-
* (miss=1 + hit=N-1 across N skinned entities sharing one allocator buffer
|
|
40
|
-
* + mesh SSBO) can be observed without traversing the full record-stage
|
|
41
|
-
* dispatch log. The PipelineState carries the mutable counter object
|
|
42
|
-
* (`_skinBgCacheStats: { miss, hit }`); the record-stage cache miss / hit
|
|
43
|
-
* branches bump it; this accessor returns the live reference.
|
|
44
|
-
*
|
|
45
|
-
* @internal -- exported for unit test access (m3-1)
|
|
46
|
-
*/
|
|
47
|
-
export function _skinBgCacheStats(pipelineState: {
|
|
48
|
-
readonly _skinBgCacheStats: { miss: number; hit: number };
|
|
49
|
-
}): { miss: number; hit: number } {
|
|
50
|
-
return pipelineState._skinBgCacheStats;
|
|
51
|
-
}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import type { MaterialSnapshot, SpriteInstancesSnapshot } from '../render-system-extract';
|
|
2
|
-
|
|
3
|
-
// ─── feat-20260625 M3 / w11 — sprite-pass 80B interleaved upload helpers ─────
|
|
4
|
-
//
|
|
5
|
-
// Plan-strategy D-1 (interleaved single buffer 80B/instance) + D-9 (cacheKey
|
|
6
|
-
// = entity packed u32). The sprite-pass record stage consumes
|
|
7
|
-
// `SpriteInstancesSnapshot` (from render-system-extract) and produces a single
|
|
8
|
-
// GPU buffer interleaving mat4 transforms with vec4 regions per instance;
|
|
9
|
-
// the BGL stays untouched (D-1 single binding slot @group(3) @binding(0)).
|
|
10
|
-
//
|
|
11
|
-
// Layout (per instance, byte offset 0..80):
|
|
12
|
-
// [0..64) mat4 column-major (16 f32)
|
|
13
|
-
// [64..80) region vec4 [uMin, vMin, uW, vH] (4 f32)
|
|
14
|
-
// second instance starts at byte 80.
|
|
15
|
-
//
|
|
16
|
-
// The cache fingerprint is the triple `(cacheKey, archVersion, byteLength)`;
|
|
17
|
-
// `spriteInstancesCacheHit` is the boolean side of the fingerprint check the
|
|
18
|
-
// record stage runs once per sprite-pass entity. Pure functions — the GPU
|
|
19
|
-
// device + buffer wrapper layer stays out of this module so the unit test
|
|
20
|
-
// (w9) exercises both helpers without standing up a device mock.
|
|
21
|
-
|
|
22
|
-
/** Re-export of the extract-stage snapshot so test sites can build it. */
|
|
23
|
-
export type { SpriteInstancesSnapshot };
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Interleave SpriteInstances transforms (stride 16) and regions (stride 4)
|
|
27
|
-
* into a single Float32Array with stride 20 (= 80 bytes per instance,
|
|
28
|
-
* plan-strategy D-1). Callers feed the output buffer to
|
|
29
|
-
* `device.queue.writeBuffer` against the per-entity GPU buffer slot.
|
|
30
|
-
*
|
|
31
|
-
* Pre-conditions guaranteed by render-system-extract M3 / w10:
|
|
32
|
-
* - `transforms.length` is a multiple of 16
|
|
33
|
-
* - `regions.length` is a multiple of 4
|
|
34
|
-
* - `transforms.length / 16 === regions.length / 4`
|
|
35
|
-
*
|
|
36
|
-
* Violations fire `sprite-instances-count-mismatch` at the extract entry and
|
|
37
|
-
* never reach this helper. The helper itself does NOT re-validate the
|
|
38
|
-
* pre-conditions — single-validator invariant (charter P4 explicit failure
|
|
39
|
-
* routed once at the extract boundary; downstream consumers trust the
|
|
40
|
-
* snapshot shape).
|
|
41
|
-
*
|
|
42
|
-
* @param transforms — packed mat4 (column-major) Float32Array (stride 16).
|
|
43
|
-
* @param regions — packed vec4 [uMin, vMin, uW, vH] Float32Array (stride 4).
|
|
44
|
-
* @returns interleaved Float32Array with length `(transforms.length + regions.length)`.
|
|
45
|
-
*/
|
|
46
|
-
export function interleaveSpriteInstanceBuffer(
|
|
47
|
-
transforms: Float32Array,
|
|
48
|
-
regions: Float32Array,
|
|
49
|
-
previousTransforms: Float32Array | undefined = undefined,
|
|
50
|
-
includePrevious = true,
|
|
51
|
-
): Float32Array {
|
|
52
|
-
const count = transforms.length / 16;
|
|
53
|
-
const stride = includePrevious ? 36 : 20;
|
|
54
|
-
const out = new Float32Array(count * stride);
|
|
55
|
-
for (let i = 0; i < count; i++) {
|
|
56
|
-
const dstBase = i * stride;
|
|
57
|
-
const tSrcBase = i * 16;
|
|
58
|
-
const rSrcBase = i * 4;
|
|
59
|
-
// mat4 (16 floats) — explicit loop avoids subarray copy overhead.
|
|
60
|
-
for (let k = 0; k < 16; k++) out[dstBase + k] = transforms[tSrcBase + k] ?? 0;
|
|
61
|
-
if (includePrevious) {
|
|
62
|
-
for (let k = 0; k < 16; k++) {
|
|
63
|
-
out[dstBase + 16 + k] = previousTransforms?.[tSrcBase + k] ?? transforms[tSrcBase + k] ?? 0;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
// region (4 floats).
|
|
67
|
-
const regionOffset = includePrevious ? 32 : 16;
|
|
68
|
-
for (let k = 0; k < 4; k++) out[dstBase + regionOffset + k] = regions[rSrcBase + k] ?? 0;
|
|
69
|
-
}
|
|
70
|
-
return out;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Boolean side of the per-entity sprite-pass GPU buffer cache fingerprint
|
|
75
|
-
* check. Returns true iff the existing entry is byte-for-byte safe to reuse:
|
|
76
|
-
*
|
|
77
|
-
* - `entry` exists (the entity has been recorded at least once);
|
|
78
|
-
* - `entry.uploadedArchVersion === snapshot.archVersion` (archetype
|
|
79
|
-
* storage has not been re-allocated since last upload);
|
|
80
|
-
* - `entry.uploadedByteLength === requestedBytes` (byte count matches the
|
|
81
|
-
* interleaved layout this frame would write).
|
|
82
|
-
*
|
|
83
|
-
* The record stage gates the `createBuffer + queue.writeBuffer` round on the
|
|
84
|
-
* negation of this predicate; a hit short-circuits to a `writeBuffer`-only
|
|
85
|
-
* refresh against the existing GPU buffer.
|
|
86
|
-
*
|
|
87
|
-
* @param entry — cached `InstanceBufferCacheEntry` for this `cacheKey`, or
|
|
88
|
-
* `undefined` if the entity has never been recorded.
|
|
89
|
-
* @param snapshot — current frame's snapshot (carries `cacheKey + archVersion`).
|
|
90
|
-
* @param requestedBytes — `transforms.byteLength + regions.byteLength` =
|
|
91
|
-
* 80 * `instanceCount` for SpriteInstances (D-1 interleaved layout).
|
|
92
|
-
*/
|
|
93
|
-
export function spriteInstancesCacheHit(
|
|
94
|
-
entry: import('../instance-buffer-cache').InstanceBufferCacheEntry | undefined,
|
|
95
|
-
snapshot: SpriteInstancesSnapshot,
|
|
96
|
-
requestedBytes: number,
|
|
97
|
-
): boolean {
|
|
98
|
-
if (entry === undefined) return false;
|
|
99
|
-
if (entry.uploadedArchVersion !== snapshot.archVersion) return false;
|
|
100
|
-
if (entry.uploadedByteLength !== requestedBytes) return false;
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// === feat-20260625 M2 / w7 transparent-aware helpers ============================
|
|
105
|
-
//
|
|
106
|
-
// Three small pure helpers replace the inline sprite-specific switches inside
|
|
107
|
-
// recordFrame so the transparent / sprite / pipeline-miss paths become unit-
|
|
108
|
-
// testable without a GPU device (charter P2 structure-over-prose).
|
|
109
|
-
//
|
|
110
|
-
// Plan anchors:
|
|
111
|
-
// - requirements AC-05 / AC-14
|
|
112
|
-
// - plan-strategy section 2 D-3 (MaterialSnapshot.transparent drives split
|
|
113
|
-
// + blend; charter P3 explicit failure on cache miss)
|
|
114
|
-
// - plan-strategy section 5.6 gate R-H (helpers only read MaterialSnapshot
|
|
115
|
-
// paramSnapshot / transparent fields; they MUST NOT touch
|
|
116
|
-
// the MaterialAsset registry directly or cast over firstMaterial)
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Decides whether the LDR (tonemapActive=false) main pass needs the
|
|
120
|
-
* sprite-style split into two serial sub-passes (geometry sRGB + transparent
|
|
121
|
-
* unorm). Triggered by any validated dispatch entry carrying
|
|
122
|
-
* `material.transparent === true` — derived by the extract stage from
|
|
123
|
-
* `passes[0].renderState.blend !== undefined` (post-feat-20260626-collapse
|
|
124
|
-
* SSOT, plan-strategy D-3; MaterialPass no longer carries a
|
|
125
|
-
* dedicated `transparent` field).
|
|
126
|
-
*
|
|
127
|
-
* feat-20260625-refactor-sprite-as-transparent-mesh M3 / w13: the M2 union
|
|
128
|
-
* with `shadingModel === 'sprite'` is gone — sprite materials now declare
|
|
129
|
-
* `transparent: true` on their pass descriptor (or extract folds it onto
|
|
130
|
-
* `MaterialSnapshot.transparent`), so the legacy arm is redundant.
|
|
131
|
-
*
|
|
132
|
-
* @internal
|
|
133
|
-
*/
|
|
134
|
-
export function computeSplitLdrSprite(
|
|
135
|
-
validatedOrdered: readonly (
|
|
136
|
-
| {
|
|
137
|
-
readonly source: {
|
|
138
|
-
readonly material: MaterialSnapshot;
|
|
139
|
-
readonly materials?: readonly MaterialSnapshot[];
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
| undefined
|
|
143
|
-
)[],
|
|
144
|
-
tonemapActive: boolean,
|
|
145
|
-
): boolean {
|
|
146
|
-
if (tonemapActive) return false;
|
|
147
|
-
for (let i = 0; i < validatedOrdered.length; i++) {
|
|
148
|
-
const v = validatedOrdered[i];
|
|
149
|
-
if (v === undefined) continue;
|
|
150
|
-
// feat-city-glb Bug 5 (per-submesh transparency): trip the split when ANY
|
|
151
|
-
// submesh material is transparent, not just the entity-level material[0].
|
|
152
|
-
// A multi-material mesh (e.g. opaque road + BLEND crosswalk decal submesh)
|
|
153
|
-
// has an opaque material[0] but a transparent submesh that must route to
|
|
154
|
-
// the blend sub-pass. Fall back to `material` when `materials` is absent
|
|
155
|
-
// (single-material entities / test fixtures) — identical to the old check.
|
|
156
|
-
const mats = v.source.materials;
|
|
157
|
-
if (mats !== undefined) {
|
|
158
|
-
for (let j = 0; j < mats.length; j++) {
|
|
159
|
-
if (mats[j]?.transparent === true) return true;
|
|
160
|
-
}
|
|
161
|
-
} else if (v.source.material.transparent === true) {
|
|
162
|
-
return true;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return false;
|
|
166
|
-
}
|