@forgeax/engine-render 0.1.28 → 0.1.30
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 +856 -126
- package/dist/assembly/atmosphere-shader-prewarm.d.ts +6 -0
- package/dist/assembly/atmosphere-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/device-feature-admission.d.ts +4 -3
- package/dist/assembly/device-feature-admission.d.ts.map +1 -1
- package/dist/assembly/dynamic-geometry-host.d.ts +27 -0
- package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
- package/dist/assembly/dynamic-geometry-runtime.d.ts +20 -0
- package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +3 -1
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/gpu-driven-owner.d.ts +10 -0
- package/dist/assembly/gpu-driven-owner.d.ts.map +1 -0
- package/dist/assembly/host-contract.d.ts +14 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/material/assembly.d.ts +31 -1
- package/dist/assembly/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/pipeline-helpers.d.ts +24 -0
- package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -0
- package/dist/assembly/material-shader-policy.d.ts +3 -1
- package/dist/assembly/material-shader-policy.d.ts.map +1 -1
- package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
- package/dist/assembly/recovery/failure-location.d.ts +12 -0
- package/dist/assembly/recovery/failure-location.d.ts.map +1 -0
- package/dist/assembly/recovery/recovery-attempt.d.ts +1 -6
- package/dist/assembly/recovery/recovery-attempt.d.ts.map +1 -1
- package/dist/assembly/recovery/renderer-recover.d.ts +7 -4
- package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
- package/dist/assembly/renderer-facade.d.ts.map +1 -1
- package/dist/assembly/renderer-feature-inspection.d.ts +5 -0
- package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -0
- package/dist/assembly/renderer-frame-transaction.d.ts +19 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
- package/dist/assembly/renderer-helpers.d.ts +3 -0
- package/dist/assembly/renderer-helpers.d.ts.map +1 -1
- package/dist/assembly/renderer-inspection.d.ts +4 -0
- package/dist/assembly/renderer-inspection.d.ts.map +1 -1
- package/dist/assembly/shader-prewarm-policy.d.ts +7 -1
- package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -1
- package/dist/assembly/skin-palette-owner.d.ts +8 -0
- package/dist/assembly/skin-palette-owner.d.ts.map +1 -0
- package/dist/assembly/ssr-shader-prewarm.d.ts +6 -0
- package/dist/assembly/ssr-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/webgpu-device-loss.d.ts +15 -0
- package/dist/assembly/webgpu-device-loss.d.ts.map +1 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts +38 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready-mipmap.d.ts +11 -0
- package/dist/assembly/webgpu-ready-mipmap.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready.d.ts +7 -3
- package/dist/assembly/webgpu-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts +10 -0
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-contract.d.ts +62 -0
- package/dist/assembly/webgpu-renderer-contract.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-guards.d.ts +9 -0
- package/dist/assembly/webgpu-renderer-guards.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-observation.d.ts +6 -0
- package/dist/assembly/webgpu-renderer-observation.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-recovery-failure.d.ts +12 -0
- package/dist/assembly/webgpu-renderer-recovery-failure.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer.d.ts +7 -141
- package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
- package/dist/assembly/webgpu-vertex-layouts.d.ts +28 -84
- package/dist/assembly/webgpu-vertex-layouts.d.ts.map +1 -1
- package/dist/authoring.mjs +2 -2
- package/dist/capture/scene-projection.d.ts +41 -0
- package/dist/capture/scene-projection.d.ts.map +1 -0
- package/dist/{chunk-J52NMQKR.mjs → chunk-7MQ3XBSP.mjs} +1098 -844
- package/dist/chunk-7MQ3XBSP.mjs.map +1 -0
- package/dist/{chunk-GF523LHF.mjs → chunk-BLXGONR2.mjs} +30 -12
- package/dist/chunk-BLXGONR2.mjs.map +1 -0
- package/dist/{chunk-VSL23LZE.mjs → chunk-C3DDSXYK.mjs} +1188 -463
- package/dist/chunk-C3DDSXYK.mjs.map +1 -0
- package/dist/{chunk-IQMKJLNU.mjs → chunk-FUUO4UND.mjs} +443 -30
- package/dist/chunk-FUUO4UND.mjs.map +1 -0
- package/dist/{chunk-J6KACNOH.mjs → chunk-JRBDO2KB.mjs} +617 -7
- package/dist/chunk-JRBDO2KB.mjs.map +1 -0
- package/dist/{chunk-GE3SDD72.mjs → chunk-MDQJPY3T.mjs} +20 -40
- package/dist/chunk-MDQJPY3T.mjs.map +1 -0
- package/dist/{chunk-MYJ5RPJO.mjs → chunk-NO4WZCAH.mjs} +3 -3
- package/dist/chunk-NO4WZCAH.mjs.map +1 -0
- package/dist/{chunk-RBDBZ5R7.mjs → chunk-PA5DRJNI.mjs} +2 -2
- package/dist/chunk-PA5DRJNI.mjs.map +1 -0
- package/dist/{chunk-MBU4ZVE7.mjs → chunk-PSEQ6QPH.mjs} +4655 -892
- package/dist/chunk-PSEQ6QPH.mjs.map +1 -0
- package/dist/{chunk-JAASCMXA.mjs → chunk-S5UE2T5P.mjs} +289 -41
- package/dist/chunk-S5UE2T5P.mjs.map +1 -0
- package/dist/components/camera.d.ts +62 -2
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/directional-light.d.ts +2 -2
- package/dist/components/dynamic-resolution.d.ts +15 -0
- package/dist/components/dynamic-resolution.d.ts.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/instances.d.ts +6 -20
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/reflection-probe.d.ts +1 -0
- package/dist/components/reflection-probe.d.ts.map +1 -1
- package/dist/components/scene-instance.d.ts +2 -1
- package/dist/components/scene-instance.d.ts.map +1 -1
- package/dist/components/screen-space-reflection.d.ts +14 -0
- package/dist/components/screen-space-reflection.d.ts.map +1 -0
- package/dist/components/skylight.d.ts +4 -1
- package/dist/components/skylight.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +14809 -7570
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/device-scope.d.ts +2 -0
- package/dist/device/device-scope.d.ts.map +1 -1
- package/dist/device/gpu-residency.d.ts +3 -14
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/dynamic-geometry.d.ts.map +1 -1
- package/dist/environment/background.d.ts +7 -0
- package/dist/environment/background.d.ts.map +1 -0
- package/dist/environment/ibl.d.ts +11 -0
- package/dist/environment/ibl.d.ts.map +1 -0
- package/dist/environment/storage.d.ts +14 -0
- package/dist/environment/storage.d.ts.map +1 -0
- package/dist/errors/gpu-driven.d.ts +6 -3
- package/dist/errors/gpu-driven.d.ts.map +1 -1
- package/dist/errors/render.d.ts +41 -4
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/camera.d.ts.map +1 -1
- package/dist/extract/contracts.d.ts +7 -0
- package/dist/extract/contracts.d.ts.map +1 -1
- package/dist/extract/gpu-driven.d.ts +50 -3
- package/dist/extract/gpu-driven.d.ts.map +1 -1
- package/dist/features/host.d.ts +23 -1
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/noise-texture.d.ts +17 -0
- package/dist/features/noise-texture.d.ts.map +1 -0
- package/dist/features/plan.d.ts +83 -2
- package/dist/features/plan.d.ts.map +1 -1
- package/dist/features/prepared-gpu-work.d.ts +37 -4
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics-store.d.ts.map +1 -1
- package/dist/features/prepared-graphics.d.ts +5 -0
- package/dist/features/prepared-graphics.d.ts.map +1 -1
- package/dist/features/render-graph-compute.d.ts +5 -3
- package/dist/features/render-graph-compute.d.ts.map +1 -1
- package/dist/features/render-graph-contribution.d.ts +11 -3
- package/dist/features/render-graph-contribution.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +19 -3
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/types.d.ts +11 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +2 -0
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/gpu-driven/batch-topology.d.ts +34 -1
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/material-artifacts.d.ts +24 -0
- package/dist/gpu-driven/material-artifacts.d.ts.map +1 -0
- package/dist/gpu-driven/material-bindings.d.ts +7 -0
- package/dist/gpu-driven/material-bindings.d.ts.map +1 -0
- package/dist/gpu-driven/pbr-program.d.ts +10 -0
- package/dist/gpu-driven/pbr-program.d.ts.map +1 -0
- package/dist/gpu-driven/prepared-draw.d.ts +2 -0
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +169 -27
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/shadow-views.d.ts +126 -0
- package/dist/gpu-driven/shadow-views.d.ts.map +1 -0
- package/dist/gpu-driven/view-gpu.d.ts +18 -2
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-resource.d.ts +5 -2
- package/dist/gpu-resource.d.ts.map +1 -1
- package/dist/gpu-scene-schema.d.ts +2 -8
- package/dist/gpu-scene-schema.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +14 -0
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/gpu-texture-usage.d.ts +1 -0
- package/dist/gpu-texture-usage.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +9 -0
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/IblPipelineCache.d.ts +2 -0
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
- package/dist/ibl/frame-resources.d.ts +8 -0
- package/dist/ibl/frame-resources.d.ts.map +1 -0
- package/dist/ibl/skylight-bind-group.d.ts +3 -1
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +87 -75
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +10 -8
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +180 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/instances-derived-bounds.d.ts +11 -0
- package/dist/instances-derived-bounds.d.ts.map +1 -1
- package/dist/instances.d.ts +89 -44
- package/dist/instances.d.ts.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +117 -9
- package/dist/internal.mjs.map +1 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/material-row.d.ts +15 -0
- package/dist/material-row.d.ts.map +1 -0
- package/dist/materials.d.ts +15 -0
- package/dist/materials.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +23 -5
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/render-extent.d.ts +51 -0
- package/dist/pipeline/render-extent.d.ts.map +1 -0
- package/dist/pipeline/standard-build-context.d.ts +7 -0
- package/dist/pipeline/standard-build-context.d.ts.map +1 -0
- package/dist/pipeline/standard-forward-lane.d.ts +3 -2
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-output/auto-exposure/capability.d.ts +12 -0
- package/dist/pipeline/standard-output/auto-exposure/capability.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts +70 -0
- package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/graph.d.ts +75 -0
- package/dist/pipeline/standard-output/auto-exposure/graph.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts +111 -0
- package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts +16 -0
- package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/preset.d.ts +14 -0
- package/dist/pipeline/standard-output/auto-exposure/preset.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/state.d.ts +46 -0
- package/dist/pipeline/standard-output/auto-exposure/state.d.ts.map +1 -0
- package/dist/pipeline/standard-output/color-transform.d.ts +27 -0
- package/dist/pipeline/standard-output/color-transform.d.ts.map +1 -0
- package/dist/pipeline/standard-output/graph.d.ts +15 -0
- package/dist/pipeline/standard-output/graph.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-admission.d.ts +29 -0
- package/dist/pipeline/standard-output/lut-admission.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-gpu.d.ts +48 -0
- package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-state.d.ts +68 -0
- package/dist/pipeline/standard-output/lut-state.d.ts.map +1 -0
- package/dist/pipeline/standard-output/resources.d.ts +10 -0
- package/dist/pipeline/standard-output/resources.d.ts.map +1 -0
- package/dist/pipeline/standard-output/types.d.ts +39 -0
- package/dist/pipeline/standard-output/types.d.ts.map +1 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts +2 -2
- package/dist/pipeline/standard-post.d.ts.map +1 -1
- package/dist/pipeline/standard-profile.d.ts +2 -1
- package/dist/pipeline/standard-profile.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +5 -2
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec-types.d.ts +4 -0
- package/dist/pipeline-spec-types.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts +1 -9
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/points-lines/standard-owner.d.ts +1 -1
- package/dist/points-lines/standard-owner.d.ts.map +1 -1
- package/dist/post-process-errors.d.ts +9 -2
- package/dist/post-process-errors.d.ts.map +1 -1
- package/dist/prepare/extended-lighting/resources.d.ts +3 -3
- package/dist/prepare/prepared-graphics-resolver.d.ts +6 -1
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
- package/dist/record/dynamic-geometry-consumption.d.ts +15 -0
- package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +3 -3
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +109 -13
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame-targets.d.ts.map +1 -1
- package/dist/record/frame.d.ts +41 -5
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +13 -9
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +43 -3
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts +2 -10
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +14 -2
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts +15 -6
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/prepared-material-bindings.d.ts +19 -0
- package/dist/record/prepared-material-bindings.d.ts.map +1 -0
- package/dist/record/recovery-pipeline.d.ts +1 -0
- package/dist/record/recovery-pipeline.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +101 -22
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts +62 -7
- 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 +39 -8
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +1 -0
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/recovery/render-system-candidate.d.ts +10 -2
- package/dist/recovery/render-system-candidate.d.ts.map +1 -1
- package/dist/recovery/render-system-roots.d.ts +11 -0
- package/dist/recovery/render-system-roots.d.ts.map +1 -0
- package/dist/recovery/types.d.ts +76 -0
- package/dist/recovery/types.d.ts.map +1 -0
- package/dist/reflection/background.d.ts +14 -0
- package/dist/reflection/background.d.ts.map +1 -0
- package/dist/reflection/filter.d.ts.map +1 -1
- package/dist/reflection/projection.d.ts +1 -0
- package/dist/reflection/projection.d.ts.map +1 -1
- package/dist/reflection/record-owner.d.ts +4 -4
- package/dist/reflection/record-owner.d.ts.map +1 -1
- package/dist/render-contract.d.ts +211 -53
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts +1 -0
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +81 -6
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts +15 -6
- package/dist/render-system-extract-tail.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +128 -41
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system-projections.d.ts +22 -0
- package/dist/render-system-projections.d.ts.map +1 -0
- package/dist/render-system.d.ts +27 -77
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene-types.d.ts +14 -7
- package/dist/scene/render-scene-types.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +31 -11
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/scene/shadow-visibility.d.ts +5 -0
- package/dist/scene/shadow-visibility.d.ts.map +1 -0
- package/dist/ssao-config.d.ts +8 -6
- package/dist/ssao-config.d.ts.map +1 -1
- package/dist/ssr/admission.d.ts +70 -1
- package/dist/ssr/admission.d.ts.map +1 -1
- package/dist/ssr/compose.d.ts +13 -0
- package/dist/ssr/compose.d.ts.map +1 -0
- package/dist/ssr/errors.d.ts +35 -0
- package/dist/ssr/errors.d.ts.map +1 -1
- package/dist/ssr/graph.d.ts +60 -0
- package/dist/ssr/graph.d.ts.map +1 -0
- package/dist/ssr/history.d.ts +97 -0
- package/dist/ssr/history.d.ts.map +1 -0
- package/dist/ssr/hiz.d.ts +37 -0
- package/dist/ssr/hiz.d.ts.map +1 -0
- package/dist/ssr/inspection.d.ts +42 -0
- package/dist/ssr/inspection.d.ts.map +1 -0
- package/dist/ssr/resources.d.ts +58 -0
- package/dist/ssr/resources.d.ts.map +1 -0
- package/dist/ssr/temporal.d.ts +38 -0
- package/dist/ssr/temporal.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts +32 -10
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
- package/dist/systems/skin-palette-types.d.ts +15 -0
- package/dist/systems/skin-palette-types.d.ts.map +1 -1
- package/dist/systems/transparent-dispatch.d.ts +9 -0
- package/dist/systems/transparent-dispatch.d.ts.map +1 -0
- package/dist/targets/material-source.d.ts +7 -0
- package/dist/targets/material-source.d.ts.map +1 -1
- package/dist/temporal/frame-coordinator.d.ts +7 -0
- package/dist/temporal/frame-coordinator.d.ts.map +1 -1
- package/dist/temporal/gpu.d.ts +8 -0
- package/dist/temporal/gpu.d.ts.map +1 -1
- package/dist/temporal/history.d.ts.map +1 -1
- package/dist/temporal/index.mjs +6 -6
- package/dist/temporal/inspection.d.ts.map +1 -1
- package/dist/temporal/standard-scene-data.d.ts +4 -2
- package/dist/temporal/standard-scene-data.d.ts.map +1 -1
- package/dist/temporal/target-coverage-attachment.d.ts +15 -0
- package/dist/temporal/target-coverage-attachment.d.ts.map +1 -0
- package/dist/temporal/temporal-view.d.ts +6 -0
- package/dist/temporal/temporal-view.d.ts.map +1 -1
- package/dist/temporal/view.d.ts +6 -0
- package/dist/temporal/view.d.ts.map +1 -1
- package/dist/typed-render-graph-primitives.d.ts +41 -1
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/typed-shadow-passes.d.ts +3 -1
- package/dist/typed-shadow-passes.d.ts.map +1 -1
- package/dist/volume/component.d.ts +1 -0
- package/dist/volume/component.d.ts.map +1 -1
- package/dist/volume/temporal.d.ts +6 -0
- package/dist/volume/temporal.d.ts.map +1 -1
- package/package.json +21 -20
- package/src/__tests__/auto-exposure-gpu-evidence.ts +291 -0
- package/src/__tests__/auto-exposure-inspection.unit.test.ts +80 -0
- package/src/__tests__/auto-exposure-transaction.integration.test.ts +99 -0
- package/src/__tests__/auto-exposure.browser.test.ts +33 -0
- package/src/__tests__/auto-exposure.dawn.test.ts +33 -0
- package/src/__tests__/capture-scene-projection.unit.test.ts +24 -0
- package/src/__tests__/detached-inspection.integration.test.ts +5 -0
- package/src/__tests__/device-feature-admission.unit.test.ts +15 -24
- package/src/__tests__/device-loss-fanout.unit.test.ts +43 -0
- package/src/__tests__/device-scope-lifecycle.unit.test.ts +18 -0
- package/src/__tests__/device-scope-stale-matrix.unit.test.ts +18 -0
- package/src/__tests__/docs-gate-green.unit.test.ts +3 -3
- package/src/__tests__/dynamic-geometry-batch.unit.test.ts +157 -0
- package/src/__tests__/dynamic-geometry.unit.test.ts +36 -0
- package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +81 -0
- package/src/__tests__/factory-contract.integration.test.ts +231 -9
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +19 -0
- package/src/__tests__/feature-depth-input.dawn.test.ts +121 -0
- package/src/__tests__/feature-noise.unit.test.ts +38 -0
- package/src/__tests__/fixtures/taa-resolve-pinned-baseline.wgsl +301 -0
- package/src/__tests__/frame-camera-selection.unit.test.ts +131 -0
- package/src/__tests__/frame-observation.contract.test.ts +21 -0
- package/src/__tests__/frame-plan-contract.unit.test.ts +24 -0
- package/src/__tests__/frame-targets.unit.test.ts +24 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +3 -0
- package/src/__tests__/gpu-driven-baseline.characterization.test.ts +79 -0
- package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +307 -7
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +122 -142
- package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +10 -1
- package/src/__tests__/gpu-driven-lod-cache.unit.test.ts +261 -0
- package/src/__tests__/gpu-driven-mesh-world-identity.unit.test.ts +346 -0
- package/src/__tests__/gpu-driven-pbr.dawn.test.ts +1422 -0
- package/src/__tests__/gpu-driven-pbr.integration.test.ts +21 -0
- package/src/__tests__/gpu-driven-production-fixture.ts +96 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +1076 -106
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +1 -3
- package/src/__tests__/gpu-driven-shadow-views.browser.test.ts +63 -0
- package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +294 -0
- package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +97 -0
- package/src/__tests__/gpu-driven-shadow-views.unit.test.ts +168 -0
- package/src/__tests__/gpu-driven-skin-contract.test-d.ts +11 -0
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +72 -20
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +30 -9
- package/src/__tests__/gpu-driven-view.unit.test.ts +160 -52
- package/src/__tests__/gpu-pass-timing-browser-runner.ts +15 -0
- package/src/__tests__/gpu-pass-timing.browser.test.ts +20 -2
- package/src/__tests__/gpu-resource-scope.unit.test.ts +71 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +42 -0
- package/src/__tests__/gpu-scene-render-graph-gpu.ts +19 -5
- package/src/__tests__/gpu-scene.dawn.test.ts +40 -13
- package/src/__tests__/gpu-scene.unit.test.ts +613 -33
- package/src/__tests__/instances-culling.integration.test.ts +36 -10
- package/src/__tests__/instances-derived-bounds.unit.test.ts +54 -0
- package/src/__tests__/instances-store.unit.test.ts +242 -39
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +6 -0
- package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +13 -16
- package/src/__tests__/lut-lkg-transaction.integration.test.ts +122 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +5 -6
- package/src/__tests__/material-dispatch-shader-id.unit.test.ts +51 -0
- package/src/__tests__/material-lane-selection.unit.test.ts +60 -0
- package/src/__tests__/material-numeric-upload.unit.test.ts +53 -0
- package/src/__tests__/material-texture-handles.unit.test.ts +18 -0
- package/src/__tests__/material-texture-source.unit.test.ts +87 -0
- package/src/__tests__/materials-authoring-validation.unit.test.ts +41 -0
- package/src/__tests__/materials-standard-contract.unit.test.ts +57 -3
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +4 -0
- package/src/__tests__/mesh-submission-lifetime.unit.test.ts +8 -0
- package/src/__tests__/morph-neutral-admission.unit.test.ts +19 -0
- package/src/__tests__/normal-fallback.dawn.test.ts +122 -0
- package/src/__tests__/particle-material-input-layout.unit.test.ts +104 -0
- package/src/__tests__/physical-clearcoat.integration.test.ts +42 -3
- package/src/__tests__/pipeline-texture-specialization.unit.test.ts +138 -0
- package/src/__tests__/point-shadow-inspection.unit.test.ts +2 -0
- package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -5
- package/src/__tests__/prepared-gpu-driven-pbr-contract.test-d.ts +31 -0
- package/src/__tests__/prepared-gpu-driven-pbr-contract.unit.test.ts +39 -0
- package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +251 -9
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +21 -0
- package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +6 -2
- package/src/__tests__/profiler-phase-catalog.test.ts +5 -0
- package/src/__tests__/public-surface.test-d.ts +3 -0
- package/src/__tests__/recovery-candidate-prepare.contract.test.ts +30 -12
- package/src/__tests__/reflection-fallback-async-publication.unit.test.ts +171 -0
- package/src/__tests__/reflection-probe-authoring.unit.test.ts +12 -10
- package/src/__tests__/reflection-probe-box.dawn.test.ts +71 -0
- package/src/__tests__/reflection-probe-filter.unit.test.ts +9 -0
- package/src/__tests__/reflection-probe-orientation.dawn.test.ts +294 -0
- package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +5 -14
- package/src/__tests__/reflection-probe-updates.unit.test.ts +129 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +7 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +27 -1
- package/src/__tests__/render-error-exhaustive.test-d.ts +15 -0
- package/src/__tests__/render-extent.unit.test.ts +63 -0
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +285 -2
- package/src/__tests__/render-feature-plan.unit.test.ts +245 -0
- package/src/__tests__/render-feature-shadow-order.unit.test.ts +228 -0
- package/src/__tests__/render-feature-zero-work.unit.test.ts +35 -1
- package/src/__tests__/render-graph-fallback.integration.test.ts +2 -2
- package/src/__tests__/render-owner-cohesion.unit.test.ts +55 -0
- package/src/__tests__/render-scene-mixed-updates.integration.test.ts +426 -0
- package/src/__tests__/render-scene-projection.unit.test.ts +915 -23
- package/src/__tests__/render-scene-resource-updates.integration.test.ts +214 -0
- package/src/__tests__/render-scene-skin-lifecycle.integration.test.ts +173 -0
- package/src/__tests__/render-scene-temporal-retry.unit.test.ts +133 -0
- package/src/__tests__/render-target-material-source.test-d.ts +27 -3
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +233 -9
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +923 -5
- package/src/__tests__/shader-manifest-fixture.ts +45 -0
- package/src/__tests__/skin-motion-regression.unit.test.ts +0 -33
- package/src/__tests__/skin-palette-persistent.integration.test.ts +28 -0
- package/src/__tests__/skin-palette-persistent.unit.test.ts +247 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +125 -14
- package/src/__tests__/specular-environment-scale.dawn.test.ts +158 -0
- package/src/__tests__/ssao-config.unit.test.ts +7 -0
- package/src/__tests__/ssao-surface.dawn.test.ts +252 -0
- package/src/__tests__/ssr-admission-matrix.integration.test.ts +7 -1
- package/src/__tests__/ssr-confidence-compose.unit.test.ts +84 -0
- package/src/__tests__/ssr-coordinate-oracle.unit.test.ts +28 -0
- package/src/__tests__/ssr-cube-silhouette.dawn.test.ts +270 -0
- package/src/__tests__/ssr-format-probe-gating.integration.test.ts +82 -0
- package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +99 -0
- package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +116 -0
- package/src/__tests__/ssr-gpu-dispatch.ts +951 -0
- package/src/__tests__/ssr-graph-topology.unit.test.ts +104 -0
- package/src/__tests__/ssr-history-filter.dawn.test.ts +198 -0
- package/src/__tests__/ssr-hit-color.dawn.test.ts +273 -0
- package/src/__tests__/ssr-hiz-odd-reduction.dawn.test.ts +569 -0
- package/src/__tests__/ssr-hiz-rescue.dawn.test.ts +279 -0
- package/src/__tests__/ssr-hiz.browser.test.ts +150 -0
- package/src/__tests__/ssr-hiz.dawn.test.ts +150 -0
- package/src/__tests__/ssr-hiz.unit.test.ts +56 -0
- package/src/__tests__/ssr-inspection.unit.test.ts +105 -0
- package/src/__tests__/ssr-memory-budget.unit.test.ts +45 -0
- package/src/__tests__/ssr-performance-sequence-aggregation.unit.test.ts +15 -0
- package/src/__tests__/ssr-public-surface.test-d.ts +37 -0
- package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +387 -0
- package/src/__tests__/ssr-reflection-mip-reducer.dawn.test.ts +309 -0
- package/src/__tests__/ssr-reprojection-probe.ts +90 -0
- package/src/__tests__/ssr-roughness-mip.dawn.test.ts +163 -0
- package/src/__tests__/ssr-shader-prewarm.unit.test.ts +59 -0
- package/src/__tests__/ssr-spatial.integration.test.ts +141 -0
- package/src/__tests__/ssr-stable-lattice.dawn.test.ts +475 -0
- package/src/__tests__/ssr-temporal-history.unit.test.ts +202 -0
- package/src/__tests__/ssr-texel-crossing.dawn.test.ts +448 -0
- package/src/__tests__/ssr-zero-work.integration.test.ts +87 -0
- package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +84 -12
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +29 -0
- package/src/__tests__/standard-output-chain-contract.unit.test.ts +99 -0
- package/src/__tests__/standard-output-chain.integration.test.ts +73 -0
- package/src/__tests__/standard-output-gpu-evidence.ts +205 -0
- package/src/__tests__/standard-output.browser.test.ts +15 -0
- package/src/__tests__/standard-output.dawn.test.ts +15 -0
- package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +275 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +320 -3
- package/src/__tests__/standard-profile-oracle.unit.test.ts +49 -0
- package/src/__tests__/standard-surface-lighting.unit.test.ts +41 -0
- package/src/__tests__/standard-texture-specialization.dawn.test.ts +141 -0
- package/src/__tests__/surface-adjacent-regressions.integration.test.ts +6 -3
- package/src/__tests__/taa-coverage-edge.dawn.test.ts +199 -0
- package/src/__tests__/taa-history-clipping.dawn.test.ts +328 -0
- package/src/__tests__/taa-neighborhood-equivalence.dawn.test.ts +782 -0
- package/src/__tests__/taa-stability-feedback.browser.test.ts +23 -0
- package/src/__tests__/taa-stability-feedback.dawn.test.ts +68 -0
- package/src/__tests__/taa-stability-feedback.ts +342 -0
- package/src/__tests__/temporal-history-lifecycle.unit.test.ts +49 -7
- package/src/__tests__/temporal-reset-matrix.unit.test.ts +9 -0
- package/src/__tests__/temporal-transaction.integration.test.ts +28 -0
- package/src/__tests__/temporal-view.unit.test.ts +17 -0
- package/src/__tests__/texture-usage-surface.unit.test.ts +4 -2
- package/src/__tests__/transmission-prewarm.unit.test.ts +57 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +109 -4
- package/src/__tests__/typed-scene-pass-material-cache.integration.test.ts +126 -0
- package/src/__tests__/vertex-layouts-ssot.unit.test.ts +47 -0
- package/src/__tests__/visibility-extract.perf.test.ts +20 -8
- package/src/__tests__/visibility-instances.integration.test.ts +19 -7
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +20 -9
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +62 -13
- package/src/__tests__/volumetric-fog-topology.unit.test.ts +7 -7
- package/src/assembly/atmosphere-shader-prewarm.ts +39 -0
- package/src/assembly/device-feature-admission.ts +9 -4
- package/src/assembly/dynamic-geometry-host.ts +284 -163
- package/src/assembly/dynamic-geometry-runtime.ts +71 -0
- package/src/assembly/factory.ts +4 -0
- package/src/assembly/gpu-driven-owner.ts +29 -0
- package/src/assembly/host-contract.ts +19 -0
- package/src/assembly/material/assembly.ts +383 -1
- package/src/assembly/material/pipeline-helpers.ts +100 -0
- package/src/assembly/material-shader-policy.ts +110 -46
- package/src/assembly/recovery/device-loss-fanout.ts +5 -0
- package/src/assembly/recovery/failure-location.ts +62 -0
- package/src/assembly/recovery/recovery-attempt.ts +2 -29
- package/src/assembly/recovery/renderer-recover.ts +16 -17
- package/src/assembly/renderer-facade.ts +34 -1
- package/src/assembly/renderer-feature-inspection.ts +13 -0
- package/src/assembly/renderer-frame-transaction.ts +63 -0
- package/src/assembly/renderer-helpers.ts +26 -0
- package/src/assembly/renderer-inspection.ts +6 -0
- package/src/assembly/shader-prewarm-policy.ts +46 -1
- package/src/assembly/skin-palette-owner.ts +21 -0
- package/src/assembly/ssr-shader-prewarm.ts +41 -0
- package/src/assembly/webgpu-device-loss.ts +75 -0
- package/src/assembly/webgpu-pbr-ready.ts +232 -0
- package/src/assembly/webgpu-ready-mipmap.ts +26 -0
- package/src/assembly/webgpu-ready.ts +161 -131
- package/src/assembly/webgpu-renderer-bootstrap.ts +85 -0
- package/src/assembly/webgpu-renderer-contract.ts +69 -0
- package/src/assembly/webgpu-renderer-guards.ts +32 -0
- package/src/assembly/webgpu-renderer-observation.ts +43 -0
- package/src/assembly/webgpu-renderer-recovery-failure.ts +62 -0
- package/src/assembly/webgpu-renderer.ts +744 -730
- package/src/assembly/webgpu-vertex-layouts.ts +233 -87
- package/src/capture/scene-projection.ts +37 -0
- package/src/components/__tests__/camera-exposure.contract.unit.test.ts +153 -0
- package/src/components/__tests__/dynamic-resolution-schema.unit.test.ts +65 -0
- package/src/components/__tests__/light-radius.integration.test.ts +59 -0
- package/src/components/camera.ts +287 -7
- package/src/components/directional-light.ts +3 -3
- package/src/components/dynamic-resolution.ts +67 -0
- package/src/components/index.ts +2 -0
- package/src/components/instances.ts +45 -18
- package/src/components/light-helpers.ts +6 -1
- package/src/components/reflection-probe.ts +1 -0
- package/src/components/scene-instance.ts +2 -1
- package/src/components/screen-space-reflection.ts +21 -0
- package/src/components/skylight.ts +4 -1
- package/src/components/sprite-animation.ts +2 -2
- package/src/components/sprite-instances.ts +1 -1
- package/src/device/device-scope.ts +13 -7
- package/src/device/gpu-residency.ts +45 -42
- package/src/dynamic-geometry.ts +13 -8
- package/src/environment/background.ts +281 -0
- package/src/environment/ibl.ts +211 -0
- package/src/environment/storage.ts +63 -0
- package/src/errors/gpu-driven.ts +49 -8
- package/src/errors/render.ts +91 -3
- package/src/extract/camera.ts +37 -1
- package/src/extract/contracts.ts +10 -0
- package/src/extract/gpu-driven.ts +240 -10
- package/src/features/host.ts +237 -19
- package/src/features/noise-texture.ts +91 -0
- package/src/features/plan.ts +553 -24
- package/src/features/prepared-gpu-work.ts +631 -49
- package/src/features/prepared-graphics-store.ts +31 -0
- package/src/features/prepared-graphics.ts +5 -0
- package/src/features/render-graph-compute.ts +41 -8
- package/src/features/render-graph-contribution.ts +141 -3
- package/src/features/render-graph-raster.ts +143 -30
- package/src/features/types.ts +11 -0
- package/src/fullscreen-post-process-pass.ts +3 -0
- package/src/gpu-driven/batch-topology.ts +452 -108
- package/src/gpu-driven/material-artifacts.ts +179 -0
- package/src/gpu-driven/material-bindings.ts +41 -0
- package/src/gpu-driven/pbr-program.ts +31 -0
- package/src/gpu-driven/prepared-draw.ts +42 -6
- package/src/gpu-driven/production-raster.ts +2806 -716
- package/src/gpu-driven/shadow-views.ts +539 -0
- package/src/gpu-driven/view-gpu.ts +188 -41
- package/src/gpu-resource.ts +21 -2
- package/src/gpu-scene-schema.ts +61 -11
- package/src/gpu-scene.ts +197 -99
- package/src/gpu-texture-usage.ts +1 -0
- package/src/hdrp-buffers.ts +141 -36
- package/src/ibl/IblPipelineCache.ts +5 -0
- package/src/ibl/frame-resources.ts +38 -0
- package/src/ibl/skylight-bind-group.ts +32 -21
- package/src/index.ts +194 -75
- package/src/inspection-types.ts +207 -1
- package/src/instances-derived-bounds.ts +258 -34
- package/src/instances.ts +459 -150
- package/src/internal.ts +22 -0
- package/src/lifecycle.ts +2 -0
- package/src/material-row.ts +194 -0
- package/src/materials.ts +44 -8
- package/src/pbr-pipeline.ts +172 -19
- package/src/pipeline/render-extent.ts +111 -0
- package/src/pipeline/standard-build-context.ts +7 -0
- package/src/pipeline/standard-forward-lane.ts +74 -29
- package/src/pipeline/standard-output/__tests__/lut-admission.unit.test.ts +103 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/capability.unit.test.ts +40 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/gpu.contract.unit.test.ts +125 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/graph.contract.unit.test.ts +94 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/oracle.test.ts +108 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/preset.test.ts +26 -0
- package/src/pipeline/standard-output/auto-exposure/capability.ts +38 -0
- package/src/pipeline/standard-output/auto-exposure/gpu.ts +567 -0
- package/src/pipeline/standard-output/auto-exposure/graph.ts +221 -0
- package/src/pipeline/standard-output/auto-exposure/inspection.ts +231 -0
- package/src/pipeline/standard-output/auto-exposure/oracle.ts +291 -0
- package/src/pipeline/standard-output/auto-exposure/preset.ts +28 -0
- package/src/pipeline/standard-output/auto-exposure/state.ts +156 -0
- package/src/pipeline/standard-output/color-transform.ts +124 -0
- package/src/pipeline/standard-output/graph.ts +139 -0
- package/src/pipeline/standard-output/lut-admission.ts +121 -0
- package/src/pipeline/standard-output/lut-gpu.ts +399 -0
- package/src/pipeline/standard-output/lut-state.ts +176 -0
- package/src/pipeline/standard-output/resources.ts +121 -0
- package/src/pipeline/standard-output/types.ts +58 -0
- package/src/pipeline/standard-pipeline.ts +232 -70
- package/src/pipeline/standard-post.ts +190 -27
- package/src/pipeline/standard-profile.ts +2 -1
- package/src/pipeline-builder.ts +28 -9
- package/src/pipeline-spec-types.ts +4 -0
- package/src/pipeline-spec.ts +37 -29
- package/src/plugin.ts +4 -0
- package/src/points-lines/standard-owner.ts +6 -14
- package/src/post-process-errors.ts +26 -18
- package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +2 -2
- package/src/prepare/extended-lighting/resources.ts +3 -3
- package/src/prepare/prepared-graphics-resolver.ts +9 -2
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +68 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +45 -0
- package/src/record/__tests__/material-slot-plan.unit.test.ts +57 -0
- package/src/record/__tests__/mesh-ssbo.unit.test.ts +40 -1
- package/src/record/__tests__/recovery-pipeline.unit.test.ts +20 -1
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +41 -6
- package/src/record/__tests__/temporal-payload.unit.test.ts +2 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +45 -0
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +5 -0
- package/src/record/dynamic-geometry-consumption.ts +59 -0
- package/src/record/frame-lighting.ts +15 -12
- package/src/record/frame-snapshot.ts +146 -34
- package/src/record/frame-targets.ts +9 -0
- package/src/record/frame.ts +838 -170
- package/src/record/main-pass-geometry.ts +209 -103
- package/src/record/main-pass-material.ts +157 -40
- package/src/record/main-pass-sprite-draws.ts +16 -107
- package/src/record/main-pass.ts +141 -12
- package/src/record/material-uniforms.ts +1 -1
- package/src/record/mesh-ssbo.ts +59 -15
- package/src/record/prepared-material-bindings.ts +238 -0
- package/src/record/recovery-pipeline.ts +69 -90
- package/src/record/render-context.ts +123 -24
- package/src/record/shadow-pass.ts +1389 -230
- package/src/record/skybox-post-pass.ts +14 -3
- package/src/record/typed-frame-graph.ts +1064 -47
- package/src/record/view-ubo.ts +12 -1
- package/src/recovery/render-system-candidate.ts +135 -68
- package/src/recovery/render-system-roots.ts +113 -0
- package/src/recovery/types.ts +77 -0
- package/src/reflection/background.ts +151 -0
- package/src/reflection/filter.ts +3 -0
- package/src/reflection/projection.ts +16 -6
- package/src/reflection/record-owner.ts +308 -140
- package/src/render-contract.ts +237 -49
- package/src/render-graph-primitives.ts +34 -5
- package/src/render-pipeline.ts +90 -2
- package/src/render-system-extract-tail.ts +431 -162
- package/src/render-system-extract.ts +478 -119
- package/src/render-system-projections.ts +241 -0
- package/src/render-system.ts +715 -828
- package/src/scene/render-scene-types.ts +13 -4
- package/src/scene/render-scene.ts +577 -355
- package/src/scene/shadow-visibility.ts +21 -0
- package/src/ssao-config.ts +25 -8
- package/src/ssr/admission.ts +380 -14
- package/src/ssr/compose.ts +144 -0
- package/src/ssr/errors.ts +48 -0
- package/src/ssr/graph.ts +797 -0
- package/src/ssr/history.ts +436 -0
- package/src/ssr/hiz.ts +124 -0
- package/src/ssr/inspection.ts +124 -0
- package/src/ssr/resources.ts +202 -0
- package/src/ssr/temporal.ts +164 -0
- package/src/systems/skin-palette-allocator.ts +495 -148
- package/src/systems/skin-palette-types.ts +17 -0
- package/src/systems/transparent-dispatch.ts +90 -0
- package/src/targets/material-source.ts +34 -0
- package/src/temporal/coverage.ts +1 -1
- package/src/temporal/frame-coordinator.ts +23 -2
- package/src/temporal/gpu.ts +79 -12
- package/src/temporal/history.ts +3 -1
- package/src/temporal/inspection.ts +2 -1
- package/src/temporal/standard-scene-data.ts +10 -2
- package/src/temporal/target-coverage-attachment.ts +72 -0
- package/src/temporal/temporal-view.ts +11 -2
- package/src/temporal/view.ts +12 -2
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +219 -139
- package/src/typed-render-graph-primitives.ts +304 -74
- package/src/typed-shadow-passes.ts +122 -12
- package/src/volume/component.ts +1 -0
- package/src/volume/passes.ts +3 -3
- package/src/volume/temporal.ts +10 -0
- package/dist/chunk-GE3SDD72.mjs.map +0 -1
- package/dist/chunk-GF523LHF.mjs.map +0 -1
- package/dist/chunk-IQMKJLNU.mjs.map +0 -1
- package/dist/chunk-J52NMQKR.mjs.map +0 -1
- package/dist/chunk-J6KACNOH.mjs.map +0 -1
- package/dist/chunk-JAASCMXA.mjs.map +0 -1
- package/dist/chunk-MBU4ZVE7.mjs.map +0 -1
- package/dist/chunk-MYJ5RPJO.mjs.map +0 -1
- package/dist/chunk-RBDBZ5R7.mjs.map +0 -1
- package/dist/chunk-VSL23LZE.mjs.map +0 -1
- package/src/__tests__/instances-world-ownership.integration.test.ts +0 -62
- package/src/scene/__tests__/changed-block-summary.candidate.test.ts +0 -36
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { GpuDrivenPbrProgram } from '../gpu-driven/pbr-program';
|
|
2
|
+
import { transmissionBackdropAvailable } from './device-feature-admission';
|
|
1
3
|
// WebGPU generation-scoped ready-state builder.
|
|
2
4
|
// This owner performs one complete device-generation promotion; it receives
|
|
3
5
|
// policy/adapters and returns a fully prepared PipelineState.
|
|
@@ -10,7 +12,7 @@ import {
|
|
|
10
12
|
HANDLE_SPHERE,
|
|
11
13
|
HANDLE_TRIANGLE,
|
|
12
14
|
} from '@forgeax/engine-assets-runtime';
|
|
13
|
-
import { deriveVertexLayoutProjection } from '@forgeax/engine-geometry';
|
|
15
|
+
import { deriveVertexCount, deriveVertexLayoutProjection } from '@forgeax/engine-geometry';
|
|
14
16
|
import type {
|
|
15
17
|
BindGroupLayout,
|
|
16
18
|
Buffer,
|
|
@@ -26,6 +28,8 @@ import { ok, RhiError } from '@forgeax/engine-rhi';
|
|
|
26
28
|
import { findVariantByKey, type ShaderCatalog } from '@forgeax/engine-shader';
|
|
27
29
|
import type { ManifestEntry } from '@forgeax/engine-types';
|
|
28
30
|
import { handleSlot } from '@forgeax/engine-types';
|
|
31
|
+
import { prewarmAtmosphereShaders } from './atmosphere-shader-prewarm';
|
|
32
|
+
import { prewarmSsrShaders } from './ssr-shader-prewarm';
|
|
29
33
|
|
|
30
34
|
export type { MaterialShaderManifestEntry } from '@forgeax/engine-shader';
|
|
31
35
|
|
|
@@ -54,12 +58,13 @@ import {
|
|
|
54
58
|
} from '../ibl/skylight-bind-group';
|
|
55
59
|
import type { BloomInspection } from '../inspection-types';
|
|
56
60
|
import type { DeviceScope, RhiErrorListenerRegistry } from '../lifecycle';
|
|
61
|
+
import { assertStorageBufferCap } from '../light-buffer-layout';
|
|
57
62
|
import {
|
|
58
63
|
buildPbrPipelineLayouts,
|
|
59
|
-
buildPbrSkinLayouts,
|
|
60
64
|
createHdrpSkinBindGroupLayoutDescriptor,
|
|
61
65
|
type PipelineGroup2Contract,
|
|
62
66
|
resolvePipelineGroup2Contract,
|
|
67
|
+
SKIN_MATERIAL_SHADER_ID,
|
|
63
68
|
} from '../pbr-pipeline';
|
|
64
69
|
import { STANDARD_CLUSTER_MEMBERSHIP_WGSL } from '../pipeline/standard-pipeline';
|
|
65
70
|
import { inspectStandardBloomGraph } from '../pipeline/standard-post';
|
|
@@ -80,6 +85,8 @@ import type { BloomPersistentBundle } from '../record/render-context';
|
|
|
80
85
|
import { SHADOW_CASTER_BUFFER_SIZE } from '../record/shadow-pass';
|
|
81
86
|
import { POINTS_LINES_VIEW_BUFFER_SIZE } from '../record/view-ubo';
|
|
82
87
|
import {
|
|
88
|
+
type AtmosphereShaderSources,
|
|
89
|
+
type SsrShaderSources,
|
|
83
90
|
STANDARD_OUTPUT_TRANSFORM_FEATURE_ID,
|
|
84
91
|
type VolumetricFogShaderSources,
|
|
85
92
|
} from '../render-contract';
|
|
@@ -111,14 +118,15 @@ import {
|
|
|
111
118
|
selectProbePrewarmVariants,
|
|
112
119
|
selectStandardPbrTransmissionPrewarmVariants,
|
|
113
120
|
} from './shader-prewarm-policy';
|
|
121
|
+
import { buildGpuDrivenPbrReadyLayouts, buildGpuDrivenPbrReadyModules } from './webgpu-pbr-ready';
|
|
114
122
|
import {
|
|
115
123
|
BLUR_PARAMS_BYTES,
|
|
116
124
|
BRIGHT_PARAMS_BYTES,
|
|
117
125
|
COMPOSITE_PARAMS_BYTES,
|
|
118
126
|
HDR_COLOR_ATTACHMENT_FORMAT,
|
|
119
|
-
MIPMAP_PREWARM_FORMATS,
|
|
120
127
|
VIEW_UBO_BYTES,
|
|
121
128
|
} from './webgpu-ready-contract';
|
|
129
|
+
import { prewarmMipmapPipeline } from './webgpu-ready-mipmap';
|
|
122
130
|
|
|
123
131
|
/**
|
|
124
132
|
* Build the `Renderer.initialization` Promise (D-S3 three-step strict-serial chain).
|
|
@@ -160,6 +168,7 @@ export async function buildReadyWebGPU(
|
|
|
160
168
|
* frame while the shared async shader adapter is still warming up.
|
|
161
169
|
*/
|
|
162
170
|
requiredMaterialShaders: readonly string[],
|
|
171
|
+
standardPbrShaderUvSetCount: number,
|
|
163
172
|
/** Fullscreen feature modules compiled before the first synchronous frame. */
|
|
164
173
|
requiredFullscreenPostProcesses: readonly {
|
|
165
174
|
readonly identity: string;
|
|
@@ -215,12 +224,22 @@ export async function buildReadyWebGPU(
|
|
|
215
224
|
}) => void,
|
|
216
225
|
/** Install manifest-owned volume utility sources only after all four modules compile. */
|
|
217
226
|
setVolumetricFogShaderSources: (sources: VolumetricFogShaderSources) => void,
|
|
227
|
+
/** Install manifest-owned SSR utility sources only after all five modules compile. */
|
|
228
|
+
setSsrShaderSources: (sources: SsrShaderSources) => void,
|
|
229
|
+
/** Install manifest-owned atmosphere utility sources only after all modules compile. */
|
|
230
|
+
setAtmosphereShaderSources: (sources: AtmosphereShaderSources) => void,
|
|
218
231
|
): Promise<PipelineState> {
|
|
219
232
|
const extendedLightingShaderAvailable = deriveExtendedLightingCapability(rhiDevice).admitted;
|
|
220
|
-
// Shader
|
|
221
|
-
|
|
222
|
-
|
|
233
|
+
// Shader and layout construction consume the same storage capability.
|
|
234
|
+
const capValue = (rhiDevice.limits as Readonly<Record<string, number>>)
|
|
235
|
+
.maxStorageBuffersPerShaderStage;
|
|
223
236
|
const webgl2Downlevel = rhiDevice.caps.backendKind === 'wgpu-webgl2';
|
|
237
|
+
let storageBufferCapable = !webgl2Downlevel && rhiDevice.caps.storageBuffer;
|
|
238
|
+
if (typeof capValue === 'number') {
|
|
239
|
+
const capCheck = assertStorageBufferCap(capValue);
|
|
240
|
+
storageBufferCapable =
|
|
241
|
+
capCheck.ok && !webgl2Downlevel && rhiDevice.caps.storageBuffer && capCheck.value;
|
|
242
|
+
}
|
|
224
243
|
const directionalPcssAvailable =
|
|
225
244
|
rhiDevice.caps.backendKind === 'webgpu' || rhiDevice.caps.backendKind === 'wgpu-native';
|
|
226
245
|
const projectorAvailable =
|
|
@@ -292,6 +311,8 @@ export async function buildReadyWebGPU(
|
|
|
292
311
|
manifestEntries.push(entry);
|
|
293
312
|
}
|
|
294
313
|
let pbrModule: ShaderModule | null = null;
|
|
314
|
+
let pbrSkinModule: ShaderModule | null = null;
|
|
315
|
+
let gpuDrivenPbrPrograms: ReadonlyMap<string, GpuDrivenPbrProgram> = new Map();
|
|
295
316
|
let unlitModule: ShaderModule | null = null;
|
|
296
317
|
let spriteModule: ShaderModule | null = null;
|
|
297
318
|
let spriteLitModule: ShaderModule | null = null;
|
|
@@ -339,6 +360,9 @@ export async function buildReadyWebGPU(
|
|
|
339
360
|
// brdfLutBake_fs) which survive naga_oil composition unchanged.
|
|
340
361
|
// - unlit.wgsl: none of the above markers → falls into the unlit slot.
|
|
341
362
|
let pbrEntry = findEngineManifestEntry('forgeax::default-standard-pbr');
|
|
363
|
+
let pbrSkinEntry =
|
|
364
|
+
findEngineManifestEntry(SKIN_MATERIAL_SHADER_ID) ??
|
|
365
|
+
findEngineManifestEntry('forgeax::default-standard-pbr-skin');
|
|
342
366
|
let unlitEntry = findEngineManifestEntry('forgeax::default-unlit');
|
|
343
367
|
let tonemapEntry: ManifestEntry | undefined;
|
|
344
368
|
let motionBlurEntry: ManifestEntry | undefined;
|
|
@@ -356,6 +380,7 @@ export async function buildReadyWebGPU(
|
|
|
356
380
|
let iblIrradianceEntry: ManifestEntry | undefined;
|
|
357
381
|
let iblPrefilterEntry: ManifestEntry | undefined;
|
|
358
382
|
let iblBrdfLutEntry: ManifestEntry | undefined;
|
|
383
|
+
let probeBackgroundEntry: ManifestEntry | undefined;
|
|
359
384
|
let fxaaEntry: ManifestEntry | undefined;
|
|
360
385
|
let skyboxEntry: ManifestEntry | undefined;
|
|
361
386
|
let bloomBrightEntry: ManifestEntry | undefined;
|
|
@@ -411,6 +436,10 @@ export async function buildReadyWebGPU(
|
|
|
411
436
|
iblBrdfLutEntry ??= entry;
|
|
412
437
|
continue;
|
|
413
438
|
}
|
|
439
|
+
if (entry.wgsl.includes('probe_background_fs')) {
|
|
440
|
+
probeBackgroundEntry ??= entry;
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
414
443
|
if (entry.wgsl.includes('f_schlick')) {
|
|
415
444
|
pbrEntry ??= entry;
|
|
416
445
|
continue;
|
|
@@ -492,6 +521,7 @@ export async function buildReadyWebGPU(
|
|
|
492
521
|
const exact = ms.variants.find(
|
|
493
522
|
(v) =>
|
|
494
523
|
v.defines.STORAGE_BUFFER_AVAILABLE === false &&
|
|
524
|
+
v.defines.COVERAGE_ONLY !== true &&
|
|
495
525
|
(!('CLUSTER_FORWARD_AVAILABLE' in v.defines) ||
|
|
496
526
|
v.defines.CLUSTER_FORWARD_AVAILABLE === false) &&
|
|
497
527
|
(!('VERTEX_COLOR_AVAILABLE' in v.defines) ||
|
|
@@ -534,6 +564,7 @@ export async function buildReadyWebGPU(
|
|
|
534
564
|
const exact = ms.variants.find(
|
|
535
565
|
(variant) =>
|
|
536
566
|
variant.defines.STORAGE_BUFFER_AVAILABLE === storageBufferCapable &&
|
|
567
|
+
variant.defines.COVERAGE_ONLY !== true &&
|
|
537
568
|
(!('CLUSTER_FORWARD_AVAILABLE' in variant.defines) ||
|
|
538
569
|
variant.defines.CLUSTER_FORWARD_AVAILABLE === false) &&
|
|
539
570
|
(!('VERTEX_COLOR_AVAILABLE' in variant.defines) ||
|
|
@@ -562,6 +593,12 @@ export async function buildReadyWebGPU(
|
|
|
562
593
|
return wgsl !== undefined ? { ...entry, wgsl } : entry;
|
|
563
594
|
};
|
|
564
595
|
pbrEntry = patchRuntimeVariant(pbrEntry, 'forgeax::default-standard-pbr');
|
|
596
|
+
if (pbrSkinEntry !== undefined) {
|
|
597
|
+
pbrSkinEntry = patchRuntimeVariant(
|
|
598
|
+
patchRuntimeVariant(pbrSkinEntry, SKIN_MATERIAL_SHADER_ID),
|
|
599
|
+
'forgeax::default-standard-pbr-skin',
|
|
600
|
+
);
|
|
601
|
+
}
|
|
565
602
|
unlitEntry = patchRuntimeVariant(unlitEntry, 'forgeax::default-unlit');
|
|
566
603
|
if (shadowCasterEntry !== undefined) {
|
|
567
604
|
shadowCasterEntry = patchRuntimeVariant(shadowCasterEntry, 'forgeax::default-shadow-caster');
|
|
@@ -606,13 +643,7 @@ export async function buildReadyWebGPU(
|
|
|
606
643
|
}
|
|
607
644
|
}
|
|
608
645
|
}
|
|
609
|
-
//
|
|
610
|
-
// createIblPipelines runs (called downstream by the internal
|
|
611
|
-
// GpuResidencyCache equirect-to-cubemap projection during the first Skylight
|
|
612
|
-
// dispatch). When all 4 are present, register them; otherwise leave
|
|
613
|
-
// the cache untouched (charter F1: tests / non-IBL hosts that ship
|
|
614
|
-
// empty / 3-entry manifests still boot, and the IBL pipeline cache's
|
|
615
|
-
// own error surfacing covers the "missing" case downstream).
|
|
646
|
+
// Publish the generation's compiled IBL programs before resource preparation.
|
|
616
647
|
if (
|
|
617
648
|
iblEquirectEntry !== undefined &&
|
|
618
649
|
iblIrradianceEntry !== undefined &&
|
|
@@ -624,6 +655,9 @@ export async function buildReadyWebGPU(
|
|
|
624
655
|
irradiance: iblIrradianceEntry.wgsl,
|
|
625
656
|
prefilter: iblPrefilterEntry.wgsl,
|
|
626
657
|
brdfLut: iblBrdfLutEntry.wgsl,
|
|
658
|
+
...(probeBackgroundEntry === undefined
|
|
659
|
+
? {}
|
|
660
|
+
: { probeBackground: probeBackgroundEntry.wgsl }),
|
|
627
661
|
});
|
|
628
662
|
}
|
|
629
663
|
// Points/Lines are an engine-owned record path rather than a producer
|
|
@@ -675,6 +709,23 @@ export async function buildReadyWebGPU(
|
|
|
675
709
|
if (!shaderResult.ok) throw shaderResult.error;
|
|
676
710
|
seedShaderModule(label, shaderResult.value);
|
|
677
711
|
}
|
|
712
|
+
const compileUtilityShader = async (
|
|
713
|
+
label: string,
|
|
714
|
+
source: string,
|
|
715
|
+
context: string,
|
|
716
|
+
): Promise<ShaderModule> => {
|
|
717
|
+
const result = await runShimStep(
|
|
718
|
+
() =>
|
|
719
|
+
asyncCreateShaderModule
|
|
720
|
+
? asyncCreateShaderModule(rhiDevice, { code: source, label })
|
|
721
|
+
: invokeDeviceCreateShaderModule(rhiDevice, { code: source, label }),
|
|
722
|
+
'shader-compile-failed',
|
|
723
|
+
`${context} shader module '${label}' compiled`,
|
|
724
|
+
`inspect manifest WGSL for '${label}' and check device.features`,
|
|
725
|
+
);
|
|
726
|
+
if (!result.ok) throw result.error;
|
|
727
|
+
return result.value;
|
|
728
|
+
};
|
|
678
729
|
if (rhiDevice.caps.compute && rhiDevice.caps.storageTexture) {
|
|
679
730
|
const volumeSources = [
|
|
680
731
|
['inject', 'volume_inject', (source: string) => source.includes('fn volume_inject(')],
|
|
@@ -709,17 +760,12 @@ export async function buildReadyWebGPU(
|
|
|
709
760
|
}> = [];
|
|
710
761
|
for (const { stage, label, entry } of resolved) {
|
|
711
762
|
if (entry === undefined) throw new Error(`missing volumetric shader ${label}`);
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
`volumetric fog shader module '${label}' compiled`,
|
|
719
|
-
`inspect manifest WGSL for '${label}' and check device.features`,
|
|
720
|
-
);
|
|
721
|
-
if (!shaderResult.ok) throw shaderResult.error;
|
|
722
|
-
compiled.push({ stage, label, source: entry.wgsl, module: shaderResult.value });
|
|
763
|
+
compiled.push({
|
|
764
|
+
stage,
|
|
765
|
+
label,
|
|
766
|
+
source: entry.wgsl,
|
|
767
|
+
module: await compileUtilityShader(label, entry.wgsl, 'volumetric fog'),
|
|
768
|
+
});
|
|
723
769
|
}
|
|
724
770
|
for (const { label, module } of compiled) seedShaderModule(label, module);
|
|
725
771
|
setVolumetricFogShaderSources({
|
|
@@ -730,6 +776,20 @@ export async function buildReadyWebGPU(
|
|
|
730
776
|
});
|
|
731
777
|
}
|
|
732
778
|
}
|
|
779
|
+
if (rhiDevice.caps.compute && rhiDevice.caps.storageTexture) {
|
|
780
|
+
const sources = await prewarmSsrShaders(
|
|
781
|
+
manifestEntries,
|
|
782
|
+
(label, source) => compileUtilityShader(label, source, 'SSR'),
|
|
783
|
+
seedShaderModule,
|
|
784
|
+
);
|
|
785
|
+
if (sources !== undefined) setSsrShaderSources(sources);
|
|
786
|
+
}
|
|
787
|
+
const atmosphereSources = await prewarmAtmosphereShaders(
|
|
788
|
+
manifestEntries,
|
|
789
|
+
(label, source) => compileUtilityShader(label, source, 'Atmosphere'),
|
|
790
|
+
seedShaderModule,
|
|
791
|
+
);
|
|
792
|
+
if (atmosphereSources !== undefined) setAtmosphereShaderSources(atmosphereSources);
|
|
733
793
|
const pbrShaderResult = await runShimStep(
|
|
734
794
|
() =>
|
|
735
795
|
asyncCreateShaderModule
|
|
@@ -751,6 +811,27 @@ export async function buildReadyWebGPU(
|
|
|
751
811
|
const pbrManifestEntry = [...registry.materialShaderManifestEntries()].find(
|
|
752
812
|
(entry) => entry.identifier === 'forgeax::default-standard-pbr',
|
|
753
813
|
);
|
|
814
|
+
const pbrSkinManifestEntry =
|
|
815
|
+
[...registry.materialShaderManifestEntries()].find(
|
|
816
|
+
(entry) => entry.identifier === SKIN_MATERIAL_SHADER_ID,
|
|
817
|
+
) ??
|
|
818
|
+
[...registry.materialShaderManifestEntries()].find(
|
|
819
|
+
(entry) => entry.identifier === 'forgeax::default-standard-pbr-skin',
|
|
820
|
+
);
|
|
821
|
+
const gpuDrivenModules = await buildGpuDrivenPbrReadyModules({
|
|
822
|
+
device: rhiDevice,
|
|
823
|
+
storageBufferCapable,
|
|
824
|
+
asyncCreateShaderModule,
|
|
825
|
+
pbrSkinEntry,
|
|
826
|
+
pbrManifestEntry,
|
|
827
|
+
pbrSkinManifestEntry,
|
|
828
|
+
extendedLightingShaderAvailable,
|
|
829
|
+
directionalPcssAvailable,
|
|
830
|
+
projectorAvailable,
|
|
831
|
+
seedShaderModule,
|
|
832
|
+
});
|
|
833
|
+
pbrSkinModule = gpuDrivenModules.pbrSkinModule;
|
|
834
|
+
gpuDrivenPbrPrograms = gpuDrivenModules.gpuDrivenPbrPrograms;
|
|
754
835
|
const pbrVariant = pbrManifestEntry?.variants.find(
|
|
755
836
|
(variant) => variant.composedWgsl === pbrEntry.wgsl,
|
|
756
837
|
);
|
|
@@ -903,7 +984,8 @@ export async function buildReadyWebGPU(
|
|
|
903
984
|
const coloredUnlitVariant = unlitManifestEntry?.variants.find(
|
|
904
985
|
(variant) =>
|
|
905
986
|
variant.defines.VERTEX_COLOR_AVAILABLE === true &&
|
|
906
|
-
variant.defines.STORAGE_BUFFER_AVAILABLE === storageBufferCapable
|
|
987
|
+
variant.defines.STORAGE_BUFFER_AVAILABLE === storageBufferCapable &&
|
|
988
|
+
variant.defines.COVERAGE_ONLY !== true,
|
|
907
989
|
);
|
|
908
990
|
if (coloredUnlitVariant !== undefined && coloredUnlitVariant.composedWgsl !== unlitEntry.wgsl) {
|
|
909
991
|
const coloredUnlitShaderResult = await runShimStep(
|
|
@@ -930,7 +1012,8 @@ export async function buildReadyWebGPU(
|
|
|
930
1012
|
const uncoloredUnlitVariant = unlitManifestEntry?.variants.find(
|
|
931
1013
|
(variant) =>
|
|
932
1014
|
variant.defines.VERTEX_COLOR_AVAILABLE === false &&
|
|
933
|
-
variant.defines.STORAGE_BUFFER_AVAILABLE === storageBufferCapable
|
|
1015
|
+
variant.defines.STORAGE_BUFFER_AVAILABLE === storageBufferCapable &&
|
|
1016
|
+
variant.defines.COVERAGE_ONLY !== true,
|
|
934
1017
|
);
|
|
935
1018
|
if (uncoloredUnlitVariant !== undefined) {
|
|
936
1019
|
seedShaderModule(
|
|
@@ -1328,7 +1411,10 @@ export async function buildReadyWebGPU(
|
|
|
1328
1411
|
// feat-20260612-hdrp-ssao M6 / w27: SSAO shader module compilation.
|
|
1329
1412
|
// Optional manifest entry — absent on legacy manifests (zero-overhead
|
|
1330
1413
|
// opt-out, same as bloom). Identified by 'fs_ssao_calc' content marker.
|
|
1331
|
-
|
|
1414
|
+
// The GLES translator cannot read raw depth through this SSAO program.
|
|
1415
|
+
// Keep optional AO out of fallback startup; requesting it is refused by
|
|
1416
|
+
// the record owner instead of breaking every AO-disabled renderer.
|
|
1417
|
+
if (ssaoEntry !== undefined && !webgl2Downlevel) {
|
|
1332
1418
|
const entry = ssaoEntry;
|
|
1333
1419
|
const ssaoShaderResult = await runShimStep(
|
|
1334
1420
|
() =>
|
|
@@ -1377,6 +1463,9 @@ export async function buildReadyWebGPU(
|
|
|
1377
1463
|
storageBuffer: storageBufferCapable,
|
|
1378
1464
|
extendedLighting: extendedLightingShaderAvailable,
|
|
1379
1465
|
projectorAvailable,
|
|
1466
|
+
transmissionBackdrop: transmissionBackdropAvailable(
|
|
1467
|
+
rhiDevice.limits.maxSampledTexturesPerShaderStage,
|
|
1468
|
+
),
|
|
1380
1469
|
}),
|
|
1381
1470
|
),
|
|
1382
1471
|
'webgpu-runtime-error',
|
|
@@ -1402,6 +1491,7 @@ export async function buildReadyWebGPU(
|
|
|
1402
1491
|
// (URP layout) so the manifest entry's URP variant WGSL still builds a
|
|
1403
1492
|
// valid PSO instead of hard-disabling the entire HDRP-variant build path.
|
|
1404
1493
|
let hdrpPbrPipelineLayoutHandle: PipelineLayout | null = null;
|
|
1494
|
+
let hdrpMeshBindGroupLayoutHandle: BindGroupLayout | null = null;
|
|
1405
1495
|
let hdrpProbePbrPipelineLayoutHandle: PipelineLayout | null = null;
|
|
1406
1496
|
// The cluster layout is storage-buffer backed. On the WebGL2/fallback
|
|
1407
1497
|
// capability tier its uniform-buffer projection exceeds the backend's
|
|
@@ -1410,6 +1500,7 @@ export async function buildReadyWebGPU(
|
|
|
1410
1500
|
const hdrpUnifiedBglDesc = createHdrpBindGroupLayoutDescriptor();
|
|
1411
1501
|
const hdrpUnifiedBglRes = rhiDevice.createBindGroupLayout(hdrpUnifiedBglDesc);
|
|
1412
1502
|
if (hdrpUnifiedBglRes.ok) {
|
|
1503
|
+
hdrpMeshBindGroupLayoutHandle = hdrpUnifiedBglRes.value;
|
|
1413
1504
|
const hdrpPlRes = rhiDevice.createPipelineLayout({
|
|
1414
1505
|
label: 'hdrp-pbr-pl',
|
|
1415
1506
|
bindGroupLayouts: [
|
|
@@ -1487,45 +1578,16 @@ export async function buildReadyWebGPU(
|
|
|
1487
1578
|
}
|
|
1488
1579
|
}
|
|
1489
1580
|
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
// explicit failure -- no silent fallback to URP layout, mirroring memory
|
|
1499
|
-
// anchor `hdrp-active-must-not-fallback-to-urp-pipeline`).
|
|
1500
|
-
let pbrSkinPipelineLayoutHandle: PipelineLayout | null = null;
|
|
1501
|
-
let pbrSkinProbePipelineLayoutHandle: PipelineLayout | null = null;
|
|
1502
|
-
// feat-20260611 R2 / M8 / w28: capture the 2-binding skin mesh-array BGL
|
|
1503
|
-
// produced by `buildPbrSkinLayouts` so the record stage can build a BG
|
|
1504
|
-
// matching `pbr-skin-pl` (pipeline-layout BGL[2] is this 2-entry skin
|
|
1505
|
-
// BGL, NOT the 1-entry `pbr-mesh-array-bgl`). The BGL handle stays null
|
|
1506
|
-
// when the skin pipeline layout itself failed to build, keeping the skin
|
|
1507
|
-
// path explicitly disabled (charter P3 — record-stage falls back to URP
|
|
1508
|
-
// path which is correct for non-skin entries; skin entries hit the
|
|
1509
|
-
// explicit-failure branch).
|
|
1510
|
-
let pbrSkinMeshBindGroupLayoutHandle: BindGroupLayout | null = null;
|
|
1581
|
+
const {
|
|
1582
|
+
pbrSkinPipelineLayout: pbrSkinPipelineLayoutHandle,
|
|
1583
|
+
pbrSkinProbePipelineLayout: pbrSkinProbePipelineLayoutHandle,
|
|
1584
|
+
pbrSkinMeshBindGroupLayout: pbrSkinMeshBindGroupLayoutHandle,
|
|
1585
|
+
gpuDrivenInstancesBindGroupLayout: gpuDrivenInstancesBindGroupLayoutHandle,
|
|
1586
|
+
gpuDrivenPbrPipelineLayout: gpuDrivenPbrPipelineLayoutHandle,
|
|
1587
|
+
gpuDrivenPbrSkinPipelineLayout: gpuDrivenPbrSkinPipelineLayoutHandle,
|
|
1588
|
+
} = buildGpuDrivenPbrReadyLayouts(rhiDevice, storageBufferCapable, pbrLayouts.value);
|
|
1511
1589
|
let hdrpSkinPipelineLayoutHandle: PipelineLayout | null = null;
|
|
1512
1590
|
let hdrpSkinMeshBindGroupLayoutHandle: BindGroupLayout | null = null;
|
|
1513
|
-
{
|
|
1514
|
-
const skinLayoutsResult = runShimSyncStep(
|
|
1515
|
-
() =>
|
|
1516
|
-
ok(
|
|
1517
|
-
buildPbrSkinLayouts(rhiDevice, { storageBuffer: storageBufferCapable }, pbrLayouts.value),
|
|
1518
|
-
),
|
|
1519
|
-
'webgpu-runtime-error',
|
|
1520
|
-
'buildPbrSkinLayouts succeeded',
|
|
1521
|
-
'check device.limits.maxBindingsPerBindGroup (need >=14) and maxBindGroupsPerPipelineLayout',
|
|
1522
|
-
);
|
|
1523
|
-
if (skinLayoutsResult.ok) {
|
|
1524
|
-
pbrSkinPipelineLayoutHandle = skinLayoutsResult.value.pipelineLayout;
|
|
1525
|
-
pbrSkinProbePipelineLayoutHandle = skinLayoutsResult.value.probePipelineLayout;
|
|
1526
|
-
pbrSkinMeshBindGroupLayoutHandle = skinLayoutsResult.value.meshArrayBgl;
|
|
1527
|
-
}
|
|
1528
|
-
}
|
|
1529
1591
|
if (storageBufferCapable) {
|
|
1530
1592
|
const skinBglResult = rhiDevice.createBindGroupLayout(
|
|
1531
1593
|
createHdrpSkinBindGroupLayoutDescriptor(),
|
|
@@ -1733,6 +1795,13 @@ export async function buildReadyWebGPU(
|
|
|
1733
1795
|
// M-3 / w12: builtin direct-upload fallback path mirrors the gpuStore
|
|
1734
1796
|
// mesh entry shape -- raw RHI Buffer handles are wrapped in GpuBuffer so
|
|
1735
1797
|
// the dispose chain (M-5) can walk them via `.destroy()`.
|
|
1798
|
+
const layoutProjection = deriveVertexLayoutProjection(asset.attributes);
|
|
1799
|
+
const vertexCount = deriveVertexCount(asset.vertices, layoutProjection);
|
|
1800
|
+
if (vertexCount === undefined) {
|
|
1801
|
+
throw new Error(
|
|
1802
|
+
`builtin mesh ${id} has vertex bytes that do not match its layout projection`,
|
|
1803
|
+
);
|
|
1804
|
+
}
|
|
1736
1805
|
meshHandles.set(id, {
|
|
1737
1806
|
vertexBuffer: new GpuBuffer(rhiDevice, vboResult.value),
|
|
1738
1807
|
indexBuffer: ibo === null ? null : new GpuBuffer(rhiDevice, ibo),
|
|
@@ -1740,17 +1809,10 @@ export async function buildReadyWebGPU(
|
|
|
1740
1809
|
iboBytes: meshIndices === undefined ? 0 : indexBytes,
|
|
1741
1810
|
indexCount: meshIndices?.length ?? 0,
|
|
1742
1811
|
indexFormat: meshIndices instanceof Uint32Array ? 'uint32' : 'uint16',
|
|
1743
|
-
|
|
1744
|
-
// (position + normal + uv + tangent), so the fallback literal mirrors
|
|
1745
|
-
// every other mesh upload site.
|
|
1746
|
-
layout: '12F',
|
|
1747
|
-
layoutProjection: deriveVertexLayoutProjection(asset.attributes),
|
|
1812
|
+
layoutProjection,
|
|
1748
1813
|
// BUILTIN_CUBE / BUILTIN_TRIANGLE are single-UV (set 0 only).
|
|
1749
1814
|
uvSetCount: 1,
|
|
1750
|
-
vertexCount
|
|
1751
|
-
asset.vertices.length /
|
|
1752
|
-
(deriveVertexLayoutProjection(asset.attributes).arrayStride /
|
|
1753
|
-
Float32Array.BYTES_PER_ELEMENT),
|
|
1815
|
+
vertexCount,
|
|
1754
1816
|
indexed: meshIndices !== undefined,
|
|
1755
1817
|
topology: asset.submeshes[0]?.topology ?? 'triangle-list',
|
|
1756
1818
|
submeshes: asset.submeshes,
|
|
@@ -1968,22 +2030,6 @@ export async function buildReadyWebGPU(
|
|
|
1968
2030
|
);
|
|
1969
2031
|
if (!defaultSamplerResult.ok) throw defaultSamplerResult.error;
|
|
1970
2032
|
|
|
1971
|
-
const nearestSamplerResult = runShimSyncStep(
|
|
1972
|
-
() =>
|
|
1973
|
-
rhiDevice.createSampler({
|
|
1974
|
-
label: 'nearest-sampler',
|
|
1975
|
-
magFilter: 'nearest',
|
|
1976
|
-
minFilter: 'nearest',
|
|
1977
|
-
mipmapFilter: 'nearest',
|
|
1978
|
-
addressModeU: 'clamp-to-edge',
|
|
1979
|
-
addressModeV: 'clamp-to-edge',
|
|
1980
|
-
}),
|
|
1981
|
-
'webgpu-runtime-error',
|
|
1982
|
-
'createSampler (nearest) succeeded',
|
|
1983
|
-
'check device.limits.maxSamplersPerShaderStage',
|
|
1984
|
-
);
|
|
1985
|
-
if (!nearestSamplerResult.ok) throw nearestSamplerResult.error;
|
|
1986
|
-
|
|
1987
2033
|
// feat-20260520-directional-light-shadow-mapping M1c / w8 + M2 / w14:
|
|
1988
2034
|
// shadow comparison sampler — clamp-to-edge, linear filter, compare:'less'.
|
|
1989
2035
|
// Used for shadow map sampling in M2/M3 and shadow depth pass. comparison
|
|
@@ -2070,9 +2116,9 @@ export async function buildReadyWebGPU(
|
|
|
2070
2116
|
extendedLightingShaderAvailable,
|
|
2071
2117
|
);
|
|
2072
2118
|
|
|
2073
|
-
//
|
|
2074
|
-
//
|
|
2075
|
-
//
|
|
2119
|
+
// A declared normal map that is not ready needs an exactly neutral sample.
|
|
2120
|
+
// RGBA8 cannot encode 0.5: 128/255 perturbs the reflected ray even on a
|
|
2121
|
+
// perfectly flat surface. Half float stores (0.5, 0.5, 1, 1) exactly.
|
|
2076
2122
|
// Cannot share the white fallback (255,255,...) because RG=(255,255)=1.0
|
|
2077
2123
|
// gives tangent.xy=(1,1) -> 1 - 2 = -1 under the sqrt -> NaN (saturate
|
|
2078
2124
|
// clamps to 0 z=0, still wrong). White-on-missing semantics for baseColor
|
|
@@ -2086,7 +2132,7 @@ export async function buildReadyWebGPU(
|
|
|
2086
2132
|
mipLevelCount: 1,
|
|
2087
2133
|
sampleCount: 1,
|
|
2088
2134
|
dimension: '2d',
|
|
2089
|
-
format: '
|
|
2135
|
+
format: 'rgba16float',
|
|
2090
2136
|
usage: GPU_TEXTURE_USAGE_TEXTURE_BINDING | GPU_TEXTURE_USAGE_COPY_DST,
|
|
2091
2137
|
viewFormats: [],
|
|
2092
2138
|
textureBindingViewDimension: undefined,
|
|
@@ -2098,10 +2144,7 @@ export async function buildReadyWebGPU(
|
|
|
2098
2144
|
if (!fallbackNormalTextureResult.ok) throw fallbackNormalTextureResult.error;
|
|
2099
2145
|
|
|
2100
2146
|
const fallbackNormalPixel = new Uint8Array(FALLBACK_BYTES_PER_ROW);
|
|
2101
|
-
fallbackNormalPixel[
|
|
2102
|
-
fallbackNormalPixel[1] = 128;
|
|
2103
|
-
fallbackNormalPixel[2] = 255;
|
|
2104
|
-
fallbackNormalPixel[3] = 255;
|
|
2147
|
+
new Uint16Array(fallbackNormalPixel.buffer).set([0x3800, 0x3800, 0x3c00, 0x3c00]);
|
|
2105
2148
|
const fallbackNormalWriteResult = runShimSyncStep(
|
|
2106
2149
|
() =>
|
|
2107
2150
|
queue.writeTexture(
|
|
@@ -2650,9 +2693,10 @@ export async function buildReadyWebGPU(
|
|
|
2650
2693
|
// - fragment.targets[0].blend: premultiplied alpha (vs no blend)
|
|
2651
2694
|
// - depthStencil.depthWriteEnabled: false (vs true)
|
|
2652
2695
|
// - depthStencil.depthCompare: 'less-equal' (vs 'less')
|
|
2653
|
-
// The vertex stride
|
|
2654
|
-
// 12-float interleaved layout as procedural meshes),
|
|
2655
|
-
// pipeline branch is needed in the record stage
|
|
2696
|
+
// The vertex stride comes from the geometry-owned projection (HANDLE_QUAD
|
|
2697
|
+
// passes through the same 12-float interleaved layout as procedural meshes),
|
|
2698
|
+
// so no new vertex pipeline branch is needed in the record stage
|
|
2699
|
+
// (plan-strategy §3 RT4).
|
|
2656
2700
|
//
|
|
2657
2701
|
// Premultiplied alpha blend op (`{ srcFactor: 'one', dstFactor:
|
|
2658
2702
|
// 'one-minus-src-alpha', operation: 'add' }`) is the industry-default for
|
|
@@ -3833,37 +3877,14 @@ export async function buildReadyWebGPU(
|
|
|
3833
3877
|
}
|
|
3834
3878
|
}
|
|
3835
3879
|
|
|
3836
|
-
|
|
3837
|
-
// the mipmap pipeline cache for the smoke texture formats while still on the
|
|
3838
|
-
// async `renderer.initialization` path. This builds the one-time mipmap shader module +
|
|
3839
|
-
// per-format pipeline into the deviceCache so the record-stage texture
|
|
3840
|
-
// ensureResident (sync) reproduces the pre-extraction async uploadTexture
|
|
3841
|
-
// byte-for-byte without an async stall in the synchronous draw frame. A build
|
|
3842
|
-
// failure here is surfaced through ready's reject channel (structured RhiError).
|
|
3843
|
-
//
|
|
3844
|
-
// Gated on `manifestEntries.length > 0` (the same Camera-only / clear-pass
|
|
3845
|
-
// skip as the Step-2 pipeline compile, bug-20260519 D-3): a zero-manifest
|
|
3846
|
-
// world renders no material geometry, so no texture is ever made resident and
|
|
3847
|
-
// the mipmap shader-module build (a `createShaderModule` call) must not fire
|
|
3848
|
-
// -- preserving the zero-manifest "0 createShaderModule" invariant
|
|
3849
|
-
// (renderer-ready.test.ts AC-02).
|
|
3850
|
-
if (manifestEntries.length > 0) {
|
|
3851
|
-
const prewarmRes = await gpuStore.prewarmMipmapPipeline(rhiDevice, MIPMAP_PREWARM_FORMATS);
|
|
3852
|
-
if (!prewarmRes.ok) throw prewarmRes.error;
|
|
3853
|
-
}
|
|
3880
|
+
await prewarmMipmapPipeline(rhiDevice, gpuStore, manifestEntries.length > 0);
|
|
3854
3881
|
|
|
3855
3882
|
const pipelineState: PipelineState = {
|
|
3856
3883
|
device: rhiDevice,
|
|
3857
|
-
//
|
|
3858
|
-
//
|
|
3859
|
-
//
|
|
3860
|
-
//
|
|
3861
|
-
// does not exist per D-2). All three share the identical 4-BindGroupLayout
|
|
3862
|
-
// chain so material BG entries built once compose for each of the three
|
|
3863
|
-
// pipelines (charter P5 consistent abstraction). The legacy `pipeline`
|
|
3864
|
-
// alias field has been retired; consumers select per
|
|
3865
|
-
// (mat.materialShaderId, mesh.layout) tuple via the record-stage three-way
|
|
3866
|
-
// setPipeline branch (w22.11).
|
|
3884
|
+
// The ready state keeps one canonical mesh vertex projection from the
|
|
3885
|
+
// geometry owner. Material selection and feature layout identity are
|
|
3886
|
+
// derived from that projection; no legacy stride discriminator participates
|
|
3887
|
+
// in pipeline or record routing.
|
|
3867
3888
|
// bug-20260519: BUILTIN cube migrated to 12F so the legacy
|
|
3868
3889
|
// `unlitBuiltinPipeline` (+ its zero-stride `unlitBuiltinDummyAttrBuffer`)
|
|
3869
3890
|
// is gone; consumers pick per `mat.materialShaderId` only via the record-stage
|
|
@@ -3876,6 +3897,9 @@ export async function buildReadyWebGPU(
|
|
|
3876
3897
|
// (see definition near SPEC_CONST boot-time pre-warm block above)
|
|
3877
3898
|
unlitPipeline: getCachedPipelineOrNull('forgeax::default-unlit', false, 1),
|
|
3878
3899
|
standardPipeline: getCachedPipelineOrNull('forgeax::default-standard-pbr', false, 1),
|
|
3900
|
+
standardPbrShaderModule: pbrModule,
|
|
3901
|
+
pbrSkinShaderModule: pbrSkinModule,
|
|
3902
|
+
standardPbrShaderUvSetCount,
|
|
3879
3903
|
unlitPipelineMsaa: getCachedPipelineOrNull('forgeax::default-unlit', false, 4),
|
|
3880
3904
|
// feat-20260625-refactor-sprite-as-transparent-mesh M3 / w14 (D-7):
|
|
3881
3905
|
// four sprite-dedicated boot-time pre-warms are gone. Sprite PSO now
|
|
@@ -3893,9 +3917,17 @@ export async function buildReadyWebGPU(
|
|
|
3893
3917
|
// standard pipeline fields above).
|
|
3894
3918
|
pbrPipelineLayout:
|
|
3895
3919
|
unlitModule !== null && pbrModule !== null ? pipelineLayoutResult.value : null,
|
|
3920
|
+
gpuDrivenInstancesBindGroupLayout:
|
|
3921
|
+
unlitModule !== null && pbrModule !== null ? gpuDrivenInstancesBindGroupLayoutHandle : null,
|
|
3922
|
+
gpuDrivenPbrPipelineLayout:
|
|
3923
|
+
unlitModule !== null && pbrModule !== null ? gpuDrivenPbrPipelineLayoutHandle : null,
|
|
3924
|
+
gpuDrivenPbrPrograms,
|
|
3925
|
+
gpuDrivenPbrSkinPipelineLayout:
|
|
3926
|
+
unlitModule !== null && pbrModule !== null ? gpuDrivenPbrSkinPipelineLayoutHandle : null,
|
|
3896
3927
|
// HDRP variant uses the unified group(2) layout built above.
|
|
3897
3928
|
hdrpPbrPipelineLayout:
|
|
3898
3929
|
unlitModule !== null && pbrModule !== null ? hdrpPbrPipelineLayoutHandle : null,
|
|
3930
|
+
hdrpMeshBindGroupLayout: hdrpMeshBindGroupLayoutHandle,
|
|
3899
3931
|
hdrpProbePbrPipelineLayout:
|
|
3900
3932
|
unlitModule !== null && pbrModule !== null ? hdrpProbePbrPipelineLayoutHandle : null,
|
|
3901
3933
|
hdrpClusterMembershipPipeline,
|
|
@@ -3937,11 +3969,9 @@ export async function buildReadyWebGPU(
|
|
|
3937
3969
|
probeInstancesBindGroupLayout: probeInstancesBglResult.value,
|
|
3938
3970
|
identityInstanceBuffer: identityInstanceResult.value,
|
|
3939
3971
|
defaultSampler: defaultSamplerResult.value,
|
|
3940
|
-
nearestSampler: nearestSamplerResult.value,
|
|
3941
3972
|
fallbackTextureView: fallbackTextureViewResult.value,
|
|
3942
3973
|
defaultWhiteTextureView: fallbackTextureViewResult.value,
|
|
3943
|
-
//
|
|
3944
|
-
// decodes to tangent (0,0,1) under pbr.wgsl's RG-only normal decoder.
|
|
3974
|
+
// Exactly neutral half-float RG=(0.5,0.5) decodes to tangent (0,0,1).
|
|
3945
3975
|
// Distinct from defaultWhiteTextureView because RG=(255,255)=1.0 gives
|
|
3946
3976
|
// sqrt(1 - 1 - 1) = NaN, breaking the no-normal-map case.
|
|
3947
3977
|
defaultNormalTextureView: fallbackNormalTextureViewResult.value,
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { RhiCanvasContext, RhiDevice } from '@forgeax/engine-rhi';
|
|
2
|
+
import {
|
|
3
|
+
HealthListenerRegistry,
|
|
4
|
+
LostListenerRegistry,
|
|
5
|
+
RhiErrorListenerRegistry,
|
|
6
|
+
} from '../lifecycle';
|
|
7
|
+
import type { RendererOptions } from '../render-contract';
|
|
8
|
+
import type { RhiBackendPack } from './backend-contract';
|
|
9
|
+
import type { BundlerOptions } from './bundler-contract';
|
|
10
|
+
import { deviceOptionsForAdapter } from './device-feature-admission';
|
|
11
|
+
import type { RendererAssemblyImplementation } from './host-contract';
|
|
12
|
+
import { attachDeviceLostFanout } from './recovery/device-loss-fanout';
|
|
13
|
+
import type { WebGPUOutcome, WebGPURendererInternals } from './webgpu-renderer-contract';
|
|
14
|
+
|
|
15
|
+
export type { WebGPUOutcome, WebGPURendererInternals } from './webgpu-renderer-contract';
|
|
16
|
+
|
|
17
|
+
export type WebGPURendererFactory = (
|
|
18
|
+
internals: WebGPURendererInternals,
|
|
19
|
+
) => Promise<RendererAssemblyImplementation>;
|
|
20
|
+
|
|
21
|
+
/** Acquire the selected backend and build one renderer generation. */
|
|
22
|
+
export async function tryCreateWebGPURenderer(
|
|
23
|
+
canvas: HTMLCanvasElement | OffscreenCanvas,
|
|
24
|
+
options: RendererOptions | undefined,
|
|
25
|
+
pack: RhiBackendPack,
|
|
26
|
+
bundler: BundlerOptions | undefined,
|
|
27
|
+
createRenderer: WebGPURendererFactory,
|
|
28
|
+
): Promise<WebGPUOutcome> {
|
|
29
|
+
const importTransport = bundler?.importTransport;
|
|
30
|
+
const adapterResult = await pack.rhi.requestAdapter(undefined, canvas);
|
|
31
|
+
if (!adapterResult.ok) return { kind: 'rhi-err', error: adapterResult.error };
|
|
32
|
+
const adapter = adapterResult.value;
|
|
33
|
+
const deviceOpts = deviceOptionsForAdapter(adapter, options);
|
|
34
|
+
const result = await adapter.requestDevice(deviceOpts);
|
|
35
|
+
if (!result.ok) return { kind: 'rhi-err', error: result.error };
|
|
36
|
+
const device: RhiDevice = result.value;
|
|
37
|
+
const ctxResult = pack.rhi.acquireCanvasContext(canvas);
|
|
38
|
+
if (!ctxResult.ok) return { kind: 'rhi-err', error: ctxResult.error };
|
|
39
|
+
const context: RhiCanvasContext = ctxResult.value;
|
|
40
|
+
|
|
41
|
+
const lostRegistry = new LostListenerRegistry();
|
|
42
|
+
const errorRegistry = new RhiErrorListenerRegistry();
|
|
43
|
+
const healthRegistry = new HealthListenerRegistry();
|
|
44
|
+
const lossObserver: { current?: (detail: string) => void } = {};
|
|
45
|
+
const generationState: { current: number; onStaleLoss?: () => void } = { current: 0 };
|
|
46
|
+
attachDeviceLostFanout(device, pack, {
|
|
47
|
+
lostRegistry,
|
|
48
|
+
errorRegistry,
|
|
49
|
+
healthRegistry,
|
|
50
|
+
generation: 0,
|
|
51
|
+
currentGeneration: () => generationState.current,
|
|
52
|
+
onStaleLoss: () => generationState.onStaleLoss?.(),
|
|
53
|
+
onDeviceLost: (detail) => lossObserver.current?.(detail),
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
if (pack._internal_getRawDevice && pack.translateErrorEventToRhiError) {
|
|
57
|
+
const backendDevice = pack._internal_getRawDevice(device);
|
|
58
|
+
if (backendDevice && typeof backendDevice === 'object') {
|
|
59
|
+
const target = backendDevice as {
|
|
60
|
+
onuncapturederror?: ((event: unknown) => void) | null;
|
|
61
|
+
};
|
|
62
|
+
target.onuncapturederror = (event: unknown): void => {
|
|
63
|
+
const translated = pack.translateErrorEventToRhiError?.(event);
|
|
64
|
+
if (translated && !translated.ok) errorRegistry.fire(translated.error);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
kind: 'ok',
|
|
70
|
+
renderer: await createRenderer({
|
|
71
|
+
canvas,
|
|
72
|
+
device,
|
|
73
|
+
context,
|
|
74
|
+
options,
|
|
75
|
+
bundler,
|
|
76
|
+
lostRegistry,
|
|
77
|
+
errorRegistry,
|
|
78
|
+
healthRegistry,
|
|
79
|
+
pack,
|
|
80
|
+
importTransport,
|
|
81
|
+
lossObserver,
|
|
82
|
+
generationState,
|
|
83
|
+
}),
|
|
84
|
+
};
|
|
85
|
+
}
|