@forgeax/engine-render 0.1.32 → 0.1.34
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 +1374 -142
- package/dist/assembly/analytic-fog-registration.d.ts +3 -0
- package/dist/assembly/analytic-fog-registration.d.ts.map +1 -0
- package/dist/assembly/backend-contract.d.ts +2 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -1
- package/dist/assembly/barrel-distortion-inspection.d.ts +3 -0
- package/dist/assembly/barrel-distortion-inspection.d.ts.map +1 -0
- package/dist/assembly/canvas-draw-guard.d.ts +3 -0
- package/dist/assembly/canvas-draw-guard.d.ts.map +1 -0
- package/dist/assembly/cloud-shadow-entry.d.ts +4 -0
- package/dist/assembly/cloud-shadow-entry.d.ts.map +1 -0
- package/dist/assembly/dynamic-geometry-host.d.ts +4 -1
- package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
- package/dist/assembly/dynamic-geometry-runtime.d.ts +1 -1
- package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -1
- package/dist/assembly/factory.d.ts +1 -1
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/fxaa-registration.d.ts +4 -0
- package/dist/assembly/fxaa-registration.d.ts.map +1 -0
- package/dist/assembly/host-contract.d.ts +3 -3
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/lod-observation.d.ts +4 -0
- package/dist/assembly/lod-observation.d.ts.map +1 -0
- package/dist/assembly/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/pipeline-helpers.d.ts +5 -0
- package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -1
- package/dist/assembly/material-shader-policy.d.ts +16 -2
- package/dist/assembly/material-shader-policy.d.ts.map +1 -1
- package/dist/assembly/material-shader-prewarm.d.ts.map +1 -1
- package/dist/assembly/motion-blur-registration.d.ts +3 -0
- package/dist/assembly/motion-blur-registration.d.ts.map +1 -0
- package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
- package/dist/assembly/recovery/renderer-recover.d.ts +2 -0
- package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
- package/dist/assembly/render-feature-post-processes.d.ts +6 -0
- package/dist/assembly/render-feature-post-processes.d.ts.map +1 -0
- package/dist/assembly/renderer-facade.d.ts.map +1 -1
- package/dist/assembly/renderer-feature-inspection.d.ts +1 -1
- package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -1
- package/dist/assembly/renderer-frame-transaction.d.ts +12 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
- package/dist/assembly/renderer-inspection.d.ts +11 -0
- package/dist/assembly/renderer-inspection.d.ts.map +1 -1
- package/dist/assembly/temporal-post-process-prewarm.d.ts +13 -0
- package/dist/assembly/temporal-post-process-prewarm.d.ts.map +1 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts +1 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-ready-contract.d.ts +4 -3
- package/dist/assembly/webgpu-ready-contract.d.ts.map +1 -1
- package/dist/assembly/webgpu-ready-per-pass.d.ts +39 -0
- package/dist/assembly/webgpu-ready-per-pass.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready.d.ts +2 -2
- package/dist/assembly/webgpu-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer-observation-owner.d.ts +35 -0
- package/dist/assembly/webgpu-renderer-observation-owner.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer.d.ts +1 -1
- package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
- package/dist/authoring.mjs +1 -1
- package/dist/barrel-distortion.d.ts +47 -0
- package/dist/barrel-distortion.d.ts.map +1 -0
- package/dist/bloom-admission.d.ts +13 -0
- package/dist/bloom-admission.d.ts.map +1 -0
- package/dist/{chunk-PA5DRJNI.mjs → chunk-ELJFJ2BU.mjs} +2 -2
- package/dist/chunk-ELJFJ2BU.mjs.map +1 -0
- package/dist/{chunk-JCIRYQ4V.mjs → chunk-HEB564WF.mjs} +10 -4
- package/dist/chunk-HEB564WF.mjs.map +1 -0
- package/dist/{chunk-JRIPCMYC.mjs → chunk-MKDIT2EM.mjs} +1584 -375
- package/dist/chunk-MKDIT2EM.mjs.map +1 -0
- package/dist/{chunk-S665NJNF.mjs → chunk-OCDLEI6I.mjs} +3 -3
- package/dist/{chunk-S665NJNF.mjs.map → chunk-OCDLEI6I.mjs.map} +1 -1
- package/dist/chunk-ODZWR6JQ.mjs +4927 -0
- package/dist/chunk-ODZWR6JQ.mjs.map +1 -0
- package/dist/{chunk-DRR7D3KX.mjs → chunk-SHFUFJ5N.mjs} +192 -18
- package/dist/chunk-SHFUFJ5N.mjs.map +1 -0
- package/dist/{chunk-4NNZQCL3.mjs → chunk-UI5SFODX.mjs} +223 -277
- package/dist/chunk-UI5SFODX.mjs.map +1 -0
- package/dist/{chunk-GWCEMDVR.mjs → chunk-UINHLCZA.mjs} +787 -80
- package/dist/chunk-UINHLCZA.mjs.map +1 -0
- package/dist/{chunk-6TFBXLRJ.mjs → chunk-WEX45HKH.mjs} +222 -337
- package/dist/chunk-WEX45HKH.mjs.map +1 -0
- package/dist/cloud/density.d.ts +55 -0
- package/dist/cloud/density.d.ts.map +1 -0
- package/dist/cloud/extract.d.ts +25 -0
- package/dist/cloud/extract.d.ts.map +1 -0
- package/dist/cloud/feature.d.ts +57 -0
- package/dist/cloud/feature.d.ts.map +1 -0
- package/dist/cloud/frame-context.d.ts +8 -0
- package/dist/cloud/frame-context.d.ts.map +1 -0
- package/dist/cloud/inspection.d.ts +59 -0
- package/dist/cloud/inspection.d.ts.map +1 -0
- package/dist/cloud/optics.d.ts +56 -0
- package/dist/cloud/optics.d.ts.map +1 -0
- package/dist/cloud/parameters.d.ts +73 -0
- package/dist/cloud/parameters.d.ts.map +1 -0
- package/dist/cloud/resources.d.ts +60 -0
- package/dist/cloud/resources.d.ts.map +1 -0
- package/dist/cloud/shadow.d.ts +42 -0
- package/dist/cloud/shadow.d.ts.map +1 -0
- package/dist/cloud/temporal.d.ts +74 -0
- package/dist/cloud/temporal.d.ts.map +1 -0
- package/dist/components/atmosphere.d.ts +2 -0
- package/dist/components/atmosphere.d.ts.map +1 -1
- package/dist/components/barrel-distortion.d.ts +13 -0
- package/dist/components/barrel-distortion.d.ts.map +1 -0
- package/dist/components/camera.d.ts +20 -4
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/cloud-layer.d.ts +29 -0
- package/dist/components/cloud-layer.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 +20 -6
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/components/mesh-filter.d.ts +6 -5
- package/dist/components/mesh-filter.d.ts.map +1 -1
- package/dist/components/motion-blur.d.ts +1 -0
- package/dist/components/motion-blur.d.ts.map +1 -1
- package/dist/construct-renderer.d.ts +1 -1
- package/dist/construct-renderer.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +9751 -3528
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/gpu-residency.d.ts +6 -0
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/dynamic-geometry.d.ts +5 -1
- package/dist/dynamic-geometry.d.ts.map +1 -1
- package/dist/environment/analytic-fog.d.ts +6 -0
- package/dist/environment/analytic-fog.d.ts.map +1 -0
- package/dist/errors/cloud.d.ts +59 -0
- package/dist/errors/cloud.d.ts.map +1 -0
- package/dist/errors/render.d.ts +23 -5
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/examples/single-layer-medium-surface.d.ts +47 -0
- package/dist/examples/single-layer-medium-surface.d.ts.map +1 -0
- package/dist/extract/camera.d.ts.map +1 -1
- package/dist/extract/contracts.d.ts +12 -1
- package/dist/extract/contracts.d.ts.map +1 -1
- package/dist/extract/environment.d.ts +2 -0
- package/dist/extract/environment.d.ts.map +1 -1
- package/dist/features/barrel-distortion.d.ts +29 -0
- package/dist/features/barrel-distortion.d.ts.map +1 -0
- package/dist/features/error-reporting.d.ts +17 -0
- package/dist/features/error-reporting.d.ts.map +1 -0
- package/dist/features/host.d.ts +15 -0
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/motion-blur/motion-blur-feature.d.ts +20 -2
- package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -1
- package/dist/features/motion-blur/motion-blur-params.d.ts +21 -0
- package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -1
- package/dist/features/motion-blur/motion-blur-runtime.d.ts +54 -0
- package/dist/features/motion-blur/motion-blur-runtime.d.ts.map +1 -0
- package/dist/features/plan.d.ts +15 -4
- package/dist/features/plan.d.ts.map +1 -1
- package/dist/features/prepared-gpu-work.d.ts +9 -5
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/render-graph-compute.d.ts.map +1 -1
- package/dist/features/render-graph-contribution.d.ts +5 -0
- package/dist/features/render-graph-contribution.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +1 -0
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/targets.d.ts +2 -0
- package/dist/features/targets.d.ts.map +1 -1
- package/dist/features/types.d.ts +44 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +15 -7
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/gpu-dirty-ranges.d.ts +11 -0
- package/dist/gpu-dirty-ranges.d.ts.map +1 -0
- package/dist/gpu-driven/batch-topology.d.ts +17 -0
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/material-artifacts.d.ts +6 -0
- package/dist/gpu-driven/material-artifacts.d.ts.map +1 -1
- package/dist/gpu-driven/prepared-draw.d.ts +7 -0
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster-material.d.ts +178 -0
- package/dist/gpu-driven/production-raster-material.d.ts.map +1 -0
- package/dist/gpu-driven/production-raster.d.ts +50 -4
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/resource-allocation.d.ts +31 -0
- package/dist/gpu-driven/resource-allocation.d.ts.map +1 -0
- package/dist/gpu-driven/shadow-ownership.d.ts +14 -0
- package/dist/gpu-driven/shadow-ownership.d.ts.map +1 -0
- package/dist/gpu-driven/view-gpu.d.ts +35 -2
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +11 -1
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +2 -2
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/skylight-bind-group.d.ts +10 -1
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +31 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +258 -8
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +178 -3
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/instance-buffer-cache.d.ts +4 -4
- package/dist/instance-buffer-cache.d.ts.map +1 -1
- package/dist/instances.d.ts +49 -94
- package/dist/instances.d.ts.map +1 -1
- package/dist/internal.mjs +7 -7
- package/dist/pbr-pipeline.d.ts +19 -1
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/single-layer-medium-passes.d.ts +73 -0
- package/dist/pipeline/single-layer-medium-passes.d.ts.map +1 -0
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-output/graph.d.ts.map +1 -1
- package/dist/pipeline/standard-output/types.d.ts +4 -2
- package/dist/pipeline/standard-output/types.d.ts.map +1 -1
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts +28 -19
- package/dist/pipeline/standard-post.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +1 -1
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts +2 -2
- package/dist/plugin.d.ts.map +1 -1
- package/dist/prepare/prepared-graphics-resolver.d.ts +2 -0
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
- package/dist/record/barrel-distortion-frame.d.ts +15 -0
- package/dist/record/barrel-distortion-frame.d.ts.map +1 -0
- package/dist/record/dynamic-geometry-consumption.d.ts +10 -2
- package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -1
- package/dist/record/fold-buckets.d.ts +95 -0
- package/dist/record/fold-buckets.d.ts.map +1 -0
- package/dist/record/fold-instance-buffer.d.ts +6 -0
- package/dist/record/fold-instance-buffer.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +1 -0
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +40 -3
- 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 +14 -62
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/gpu-draw-receipts.d.ts +11 -0
- package/dist/record/gpu-draw-receipts.d.ts.map +1 -0
- package/dist/record/gpu-timing.d.ts +8 -0
- package/dist/record/gpu-timing.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +21 -5
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +7 -1
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +13 -2
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts +6 -5
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/motion-blur-receipt.d.ts +11 -0
- package/dist/record/motion-blur-receipt.d.ts.map +1 -0
- package/dist/record/probe-blend-buffer.d.ts +16 -0
- package/dist/record/probe-blend-buffer.d.ts.map +1 -0
- package/dist/record/recovery-pipeline.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +34 -31
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts +2 -0
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts +6 -4
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +22 -2
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +11 -3
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/record/volume-params.d.ts +9 -0
- package/dist/record/volume-params.d.ts.map +1 -0
- package/dist/recovery/render-system-candidate.d.ts +10 -0
- package/dist/recovery/render-system-candidate.d.ts.map +1 -1
- package/dist/reflection/record-owner.d.ts.map +1 -1
- package/dist/render-contract.d.ts +66 -8
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +106 -3
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts +3 -2
- package/dist/render-system-extract-tail.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +24 -10
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system-presentation.d.ts +23 -0
- package/dist/render-system-presentation.d.ts.map +1 -0
- package/dist/render-system-producer-roots.d.ts +10 -0
- package/dist/render-system-producer-roots.d.ts.map +1 -0
- package/dist/render-system-residency.d.ts +12 -0
- package/dist/render-system-residency.d.ts.map +1 -0
- package/dist/render-system.d.ts +26 -15
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/probe-blend.d.ts +27 -0
- package/dist/scene/probe-blend.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +14 -5
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/ssao-buffers.d.ts +9 -0
- package/dist/ssao-buffers.d.ts.map +1 -1
- package/dist/surface/dynamic-input.d.ts +133 -0
- package/dist/surface/dynamic-input.d.ts.map +1 -0
- package/dist/surface/gpu-driven.d.ts +41 -0
- package/dist/surface/gpu-driven.d.ts.map +1 -0
- package/dist/surface/submission-observation.d.ts +136 -0
- package/dist/surface/submission-observation.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
- package/dist/temporal/frame-coordinator.d.ts.map +1 -1
- package/dist/temporal/frame.d.ts +7 -0
- package/dist/temporal/frame.d.ts.map +1 -1
- package/dist/temporal/gpu.d.ts +13 -1
- package/dist/temporal/gpu.d.ts.map +1 -1
- package/dist/temporal/index.mjs +5 -5
- package/dist/temporal/inspection.d.ts.map +1 -1
- package/dist/temporal/standard-scene-data.d.ts.map +1 -1
- package/dist/temporal/target-coverage-attachment.d.ts.map +1 -1
- package/dist/temporal/view.d.ts +6 -1
- package/dist/temporal/view.d.ts.map +1 -1
- package/dist/transmission/single-layer-medium.d.ts +89 -0
- package/dist/transmission/single-layer-medium.d.ts.map +1 -0
- package/dist/typed-render-graph-primitives.d.ts +24 -9
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/volume/component.d.ts +9 -5
- package/dist/volume/component.d.ts.map +1 -1
- package/dist/volume/extract.d.ts +1 -1
- package/dist/volume/extract.d.ts.map +1 -1
- package/dist/volume/inspection.d.ts +2 -0
- package/dist/volume/inspection.d.ts.map +1 -1
- package/dist/volume/passes.d.ts +4 -1
- package/dist/volume/passes.d.ts.map +1 -1
- package/dist/volume/resources.d.ts.map +1 -1
- package/dist/volume/temporal.d.ts +3 -1
- package/dist/volume/temporal.d.ts.map +1 -1
- package/package.json +22 -21
- package/src/__tests__/analytic-fog-graph.unit.test.ts +199 -0
- package/src/__tests__/analytic-fog-optics.unit.test.ts +38 -0
- package/src/__tests__/atmosphere-daylight.dawn.test.ts +72 -0
- package/src/__tests__/barrel-distortion-lkg.integration.test.ts +353 -0
- package/src/__tests__/barrel-distortion.dawn.test.ts +41 -0
- package/src/__tests__/barrel-distortion.unit.test.ts +364 -0
- package/src/__tests__/bloom-exact-zero.unit.test.ts +112 -18
- package/src/__tests__/bloom-lifecycle.integration.test.ts +17 -4
- package/src/__tests__/construct-renderer-identity.unit.test.ts +49 -0
- package/src/__tests__/detached-recovery-graph.unit.test.ts +277 -0
- package/src/__tests__/device-loss-fanout.unit.test.ts +36 -1
- package/src/__tests__/docs-gate-green.unit.test.ts +112 -1
- package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +20 -0
- package/src/__tests__/environment-fog-lanes.integration.test.ts +14 -0
- package/src/__tests__/environment-selection.unit.test.ts +12 -0
- package/src/__tests__/factory-contract.integration.test.ts +626 -113
- package/src/__tests__/feature-depth-input.dawn.test.ts +129 -2
- package/src/__tests__/frame-camera-selection.unit.test.ts +39 -1
- package/src/__tests__/frame-plan-contract.unit.test.ts +2 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +14 -3
- package/src/__tests__/gpu-dirty-ranges.unit.test.ts +22 -0
- package/src/__tests__/gpu-driven-baseline.characterization.test.ts +16 -3
- package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +12 -0
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +2 -1
- package/src/__tests__/gpu-driven-material-artifacts.unit.test.ts +143 -0
- package/src/__tests__/gpu-driven-pbr.dawn.test.ts +2 -2
- package/src/__tests__/gpu-driven-production.integration.test.ts +482 -3
- package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +7 -6
- package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +1 -1
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +103 -4
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +18 -2
- package/src/__tests__/gpu-driven-view.browser.test.ts +5 -8
- package/src/__tests__/gpu-driven-view.dawn.test.ts +6 -2
- package/src/__tests__/gpu-driven-view.unit.test.ts +1 -1
- package/src/__tests__/gpu-pass-timing-lifecycle.integration.test.ts +1 -0
- package/src/__tests__/gpu-pass-timing.browser.test.ts +6 -4
- package/src/__tests__/gpu-pass-timing.rhi-null.unit.test.ts +1 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +12 -0
- package/src/__tests__/gpu-scene.unit.test.ts +210 -9
- package/src/__tests__/instance-allocation-failure.unit.test.ts +57 -0
- package/src/__tests__/instances-culling.integration.test.ts +10 -36
- package/src/__tests__/instances-store.unit.test.ts +105 -238
- package/src/__tests__/instances-world-ownership.integration.test.ts +62 -0
- package/src/__tests__/main-pass-material-medium-selection.unit.test.ts +146 -0
- package/src/__tests__/material-shader-prewarm.unit.test.ts +59 -0
- package/src/__tests__/material-snapshot-mutation.integration.test.ts +39 -1
- package/src/__tests__/mesh-submission-lifetime.unit.test.ts +31 -0
- package/src/__tests__/morph-culling-reentry.dawn.test.ts +5 -5
- package/src/__tests__/morph-visual-evidence.integration.test.ts +8 -7
- package/src/__tests__/motion-blur-compute.dawn.test.ts +589 -0
- package/src/__tests__/motion-blur.pixel.integration.test.ts +2 -2
- package/src/__tests__/nineslice-handle-surface.unit.test.ts +4 -4
- package/src/__tests__/pbr-view-layout.unit.test.ts +9 -0
- package/src/__tests__/physical-clearcoat.integration.test.ts +58 -0
- package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +21 -0
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +66 -2
- package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +86 -0
- package/src/__tests__/probe-bindings.unit.test.ts +582 -1
- package/src/__tests__/probe-scene-dirty.integration.test.ts +28 -1
- package/src/__tests__/public-surface.test-d.ts +8 -0
- package/src/__tests__/receipt-observation-retirement.unit.test.ts +65 -0
- package/src/__tests__/recovery-candidate-prepare.contract.test.ts +69 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +9 -0
- package/src/__tests__/render-feature-diagnostics.unit.test.ts +15 -2
- package/src/__tests__/render-feature-error-reporting.unit.test.ts +44 -0
- package/src/__tests__/render-feature-prepared-diagnostics.unit.test.ts +10 -1
- package/src/__tests__/render-feature-retry.unit.test.ts +12 -1
- package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +23 -0
- package/src/__tests__/render-scene-mixed-updates.integration.test.ts +145 -19
- package/src/__tests__/render-scene-projection.unit.test.ts +36 -11
- package/src/__tests__/render-scene-temporal-retry.unit.test.ts +37 -6
- package/src/__tests__/render-target-probe-soak.perf.test.ts +2 -2
- package/src/__tests__/render-temporal-environment-consumer.browser.test.ts +3 -3
- package/src/__tests__/render-temporal-environment-consumer.dawn.test.ts +5 -2
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +41 -7
- package/src/__tests__/renderer-frame-generation-fence.integration.test.ts +16 -0
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +33 -11
- package/src/__tests__/resource-allocation.unit.test.ts +123 -0
- package/src/__tests__/shader-manifest-fixture.ts +4 -4
- package/src/__tests__/single-layer-medium-passes.unit.test.ts +275 -0
- package/src/__tests__/skin-motion-regression.unit.test.ts +70 -1
- package/src/__tests__/skin-palette-recycling.dawn.test.ts +97 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +17 -0
- package/src/__tests__/ssr-carrier-public-contract.unit.test.ts +21 -0
- package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +4 -4
- package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +2 -2
- package/src/__tests__/ssr-gpu-dispatch.ts +1 -1
- package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +6 -2
- package/src/__tests__/standard-lighting-write.unit.test.ts +2 -1
- package/src/__tests__/standard-output-chain-contract.unit.test.ts +28 -0
- package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +46 -1
- package/src/__tests__/standard-pipeline.dawn.test.ts +1 -1
- package/src/__tests__/standard-pipeline.integration.test.ts +200 -9
- package/src/__tests__/surface-dynamic-buffer-lifecycle.unit.test.ts +506 -0
- package/src/__tests__/surface-submission-observation.unit.test.ts +812 -0
- package/src/__tests__/temporal-history-lifecycle.unit.test.ts +32 -0
- package/src/__tests__/temporal-performance.integration.test.ts +3 -3
- package/src/__tests__/temporal-reset-matrix.unit.test.ts +10 -0
- package/src/__tests__/temporal-view.unit.test.ts +2 -1
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +20 -4
- package/src/__tests__/visibility-instances.integration.test.ts +7 -19
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +9 -20
- package/src/__tests__/volume-optics-oracle.unit.test.ts +7 -3
- package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +189 -15
- package/src/__tests__/volumetric-fog-errors.unit.test.ts +4 -3
- package/src/__tests__/volumetric-fog-multiple.unit.test.ts +55 -0
- package/src/__tests__/volumetric-fog-spot-frame-optics.integration.test.ts +1 -1
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +558 -68
- package/src/__tests__/volumetric-fog-temporal.unit.test.ts +27 -0
- package/src/__tests__/volumetric-fog-topology.unit.test.ts +23 -5
- package/src/assembly/analytic-fog-registration.ts +14 -0
- package/src/assembly/backend-contract.ts +30 -0
- package/src/assembly/barrel-distortion-inspection.ts +22 -0
- package/src/assembly/canvas-draw-guard.ts +11 -0
- package/src/assembly/cloud-shadow-entry.ts +22 -0
- package/src/assembly/dynamic-geometry-host.ts +65 -37
- package/src/assembly/dynamic-geometry-runtime.ts +7 -1
- package/src/assembly/factory.ts +2 -30
- package/src/assembly/fxaa-registration.ts +17 -0
- package/src/assembly/host-contract.ts +3 -3
- package/src/assembly/lod-observation.ts +12 -0
- package/src/assembly/material/assembly.ts +25 -13
- package/src/assembly/material/pipeline-helpers.ts +53 -12
- package/src/assembly/material-shader-policy.ts +55 -0
- package/src/assembly/material-shader-prewarm.ts +21 -10
- package/src/assembly/motion-blur-registration.ts +17 -0
- package/src/assembly/recovery/device-loss-fanout.ts +13 -0
- package/src/assembly/recovery/renderer-recover.ts +41 -18
- package/src/assembly/render-feature-post-processes.ts +54 -0
- package/src/assembly/renderer-facade.ts +6 -1
- package/src/assembly/renderer-feature-inspection.ts +8 -2
- package/src/assembly/renderer-frame-transaction.ts +23 -0
- package/src/assembly/renderer-inspection.ts +28 -0
- package/src/assembly/skin-palette-owner.ts +1 -1
- package/src/assembly/temporal-post-process-prewarm.ts +40 -0
- package/src/assembly/webgpu-pbr-ready.ts +9 -1
- package/src/assembly/webgpu-ready-contract.ts +8 -3
- package/src/assembly/webgpu-ready-per-pass.ts +104 -0
- package/src/assembly/webgpu-ready.ts +296 -306
- package/src/assembly/webgpu-renderer-bootstrap.ts +0 -12
- package/src/assembly/webgpu-renderer-observation-owner.ts +222 -0
- package/src/assembly/webgpu-renderer.ts +228 -281
- package/src/assembly/webgpu-vertex-layouts.ts +1 -1
- package/src/barrel-distortion.ts +247 -0
- package/src/bloom-admission.ts +21 -0
- package/src/cloud/__tests__/cloud-density-parity.dawn.test.ts +173 -0
- package/src/cloud/__tests__/cloud-layer-framebuffer-y.dawn.test.ts +265 -0
- package/src/cloud/__tests__/cloud-layer.browser.test.ts +432 -0
- package/src/cloud/__tests__/cloud-layer.unit.test.ts +634 -0
- package/src/cloud/density.ts +600 -0
- package/src/cloud/extract.ts +110 -0
- package/src/cloud/feature.ts +1810 -0
- package/src/cloud/frame-context.ts +42 -0
- package/src/cloud/inspection.ts +130 -0
- package/src/cloud/optics.ts +285 -0
- package/src/cloud/parameters.ts +255 -0
- package/src/cloud/resources.ts +122 -0
- package/src/cloud/shadow.ts +167 -0
- package/src/cloud/temporal.ts +226 -0
- package/src/components/__tests__/motion-blur.unit.test.ts +1 -0
- package/src/components/atmosphere.ts +4 -0
- package/src/components/barrel-distortion.ts +46 -0
- package/src/components/camera.ts +66 -10
- package/src/components/cloud-layer.ts +47 -0
- package/src/components/index.ts +2 -0
- package/src/components/instances.ts +18 -45
- package/src/components/mesh-filter.ts +11 -9
- package/src/components/motion-blur.ts +1 -0
- package/src/components/sprite-instances.ts +1 -1
- package/src/construct-renderer.ts +1 -1
- package/src/device/gpu-residency.ts +56 -12
- package/src/dynamic-geometry.ts +12 -1
- package/src/environment/analytic-fog.ts +44 -0
- package/src/environment/background.ts +2 -2
- package/src/errors/cloud.ts +103 -0
- package/src/errors/render.ts +58 -8
- package/src/examples/single-layer-medium-surface.ts +59 -0
- package/src/extract/camera.ts +35 -8
- package/src/extract/contracts.ts +12 -0
- package/src/extract/environment.ts +4 -0
- package/src/features/barrel-distortion.ts +172 -0
- package/src/features/error-reporting.ts +98 -0
- package/src/features/host.ts +138 -24
- package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +111 -1
- package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +58 -3
- package/src/features/motion-blur/motion-blur-feature.ts +1519 -15
- package/src/features/motion-blur/motion-blur-params.ts +70 -2
- package/src/features/motion-blur/motion-blur-runtime.ts +176 -0
- package/src/features/plan.ts +33 -8
- package/src/features/prepared-gpu-work.ts +86 -35
- package/src/features/render-graph-compute.ts +13 -5
- package/src/features/render-graph-contribution.ts +11 -0
- package/src/features/render-graph-raster.ts +45 -3
- package/src/features/targets.ts +66 -0
- package/src/features/types.ts +47 -0
- package/src/fullscreen-post-process-pass.ts +41 -9
- package/src/gpu-dirty-ranges.ts +48 -0
- package/src/gpu-driven/batch-topology.ts +53 -0
- package/src/gpu-driven/material-artifacts.ts +35 -32
- package/src/gpu-driven/prepared-draw.ts +27 -14
- package/src/gpu-driven/production-raster-material.ts +1894 -0
- package/src/gpu-driven/production-raster.ts +904 -787
- package/src/gpu-driven/resource-allocation.ts +142 -0
- package/src/gpu-driven/shadow-ownership.ts +71 -0
- package/src/gpu-driven/view-gpu.ts +181 -10
- package/src/gpu-scene.ts +259 -101
- package/src/hdrp-buffers.ts +4 -3
- package/src/ibl/skylight-bind-group.ts +49 -7
- package/src/index.ts +228 -9
- package/src/inspection-types.ts +222 -2
- package/src/instance-buffer-cache.ts +4 -4
- package/src/instances.ts +151 -492
- package/src/pbr-pipeline.ts +219 -13
- package/src/pipeline/single-layer-medium-passes.ts +267 -0
- package/src/pipeline/standard-forward-lane.ts +313 -57
- package/src/pipeline/standard-output/graph.ts +8 -2
- package/src/pipeline/standard-output/types.ts +12 -1
- package/src/pipeline/standard-pipeline.ts +291 -18
- package/src/pipeline/standard-post.ts +397 -102
- package/src/pipeline-builder.ts +1 -1
- package/src/pipeline-spec.ts +5 -5
- package/src/plugin.ts +4 -0
- package/src/points-lines/__tests__/points-lines.bench.ts +17 -8
- package/src/points-lines/__tests__/view-ubo.unit.test.ts +2 -1
- package/src/prepare/prepared-graphics-resolver.ts +2 -0
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +30 -0
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +1 -1
- package/src/record/__tests__/temporal-payload.unit.test.ts +3 -2
- package/src/record/__tests__/transparent-group2-selection.unit.test.ts +11 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +1 -0
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +4 -3
- package/src/record/barrel-distortion-frame.ts +110 -0
- package/src/record/dynamic-geometry-consumption.ts +39 -9
- package/src/record/fold-buckets.ts +852 -0
- package/src/record/fold-instance-buffer.ts +51 -0
- package/src/record/frame-lighting.ts +36 -2
- package/src/record/frame-snapshot.ts +44 -4
- package/src/record/frame-targets.ts +10 -6
- package/src/record/frame.ts +373 -1099
- package/src/record/gpu-draw-receipts.ts +38 -0
- package/src/record/gpu-timing.ts +48 -5
- package/src/record/main-pass-geometry.ts +281 -83
- package/src/record/main-pass-material.ts +66 -4
- package/src/record/main-pass-sprite-draws.ts +13 -66
- package/src/record/main-pass.ts +156 -20
- package/src/record/mesh-ssbo.ts +43 -6
- package/src/record/motion-blur-receipt.ts +91 -0
- package/src/record/probe-blend-buffer.ts +180 -0
- package/src/record/recovery-pipeline.ts +35 -3
- package/src/record/render-context.ts +51 -31
- package/src/record/shadow-pass.ts +36 -2
- package/src/record/skybox-post-pass.ts +150 -200
- package/src/record/typed-frame-graph.ts +824 -44
- package/src/record/view-ubo.ts +26 -3
- package/src/record/volume-params.ts +225 -0
- package/src/recovery/render-system-candidate.ts +257 -52
- package/src/reflection/record-owner.ts +7 -3
- package/src/render-contract.ts +71 -8
- package/src/render-graph-primitives.ts +7 -1
- package/src/render-pipeline.ts +136 -1
- package/src/render-system-extract-tail.ts +72 -60
- package/src/render-system-extract.ts +117 -87
- package/src/render-system-presentation.ts +56 -0
- package/src/render-system-producer-roots.ts +96 -0
- package/src/render-system-residency.ts +159 -0
- package/src/render-system.ts +601 -482
- package/src/scene/probe-blend.ts +96 -4
- package/src/scene/render-scene.ts +431 -281
- package/src/ssao-buffers.ts +95 -2
- package/src/surface/__tests__/dynamic-input.unit.test.ts +374 -0
- package/src/surface/__tests__/gpu-driven.unit.test.ts +87 -0
- package/src/surface/dynamic-input.ts +658 -0
- package/src/surface/gpu-driven.ts +147 -0
- package/src/surface/submission-observation.ts +517 -0
- package/src/systems/skin-palette-allocator.ts +4 -1
- package/src/temporal/__tests__/temporal-frame-transaction.unit.test.ts +36 -0
- package/src/temporal/frame-coordinator.ts +8 -1
- package/src/temporal/frame.ts +20 -0
- package/src/temporal/gpu.ts +101 -17
- package/src/temporal/inspection.ts +7 -1
- package/src/temporal/standard-scene-data.ts +5 -0
- package/src/temporal/target-coverage-attachment.ts +4 -0
- package/src/temporal/view.ts +13 -2
- package/src/transmission/__tests__/single-layer-medium.unit.test.ts +149 -0
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +12 -11
- package/src/transmission/single-layer-medium.ts +322 -0
- package/src/typed-render-graph-primitives.ts +191 -50
- package/src/volume/component.ts +10 -10
- package/src/volume/extract.ts +11 -5
- package/src/volume/inspection.ts +3 -0
- package/src/volume/passes.ts +95 -8
- package/src/volume/resources.ts +2 -1
- package/src/volume/temporal.ts +11 -0
- package/dist/chunk-4NNZQCL3.mjs.map +0 -1
- package/dist/chunk-6TFBXLRJ.mjs.map +0 -1
- package/dist/chunk-DRR7D3KX.mjs.map +0 -1
- package/dist/chunk-GWCEMDVR.mjs.map +0 -1
- package/dist/chunk-JCIRYQ4V.mjs.map +0 -1
- package/dist/chunk-JRIPCMYC.mjs.map +0 -1
- package/dist/chunk-LULCA3OF.mjs +0 -1713
- package/dist/chunk-LULCA3OF.mjs.map +0 -1
- package/dist/chunk-PA5DRJNI.mjs.map +0 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { ResolveContext } from '@forgeax/engine-render-graph';
|
|
2
2
|
import { RhiError, type RhiRenderPassEncoder, type TextureView } from '@forgeax/engine-rhi';
|
|
3
3
|
import { toShared } from '@forgeax/engine-types';
|
|
4
|
+
import { BLOOM_UNIFORM_PARAMS_STRIDE_BYTES } from '../assembly/webgpu-ready-contract';
|
|
5
|
+
import { standardBloomAdmitted } from '../bloom-admission';
|
|
4
6
|
import { buildBeginRenderPassDescriptor } from '../pipeline-spec';
|
|
5
7
|
import { FXAA_POST_PROCESS_ID } from '../render-contract';
|
|
6
8
|
import { resolveOutputDither } from '../render-pipeline';
|
|
@@ -177,7 +179,7 @@ export function encodeSkyboxPass(
|
|
|
177
179
|
// The graph must declare execute callbacks for addPass; these empty stubs
|
|
178
180
|
// keep compile() satisfied until w15 fills in the actual record logic.
|
|
179
181
|
//
|
|
180
|
-
// Gate:
|
|
182
|
+
// Gate: Bloom off, zero intensity, or !tonemapActive => early-return.
|
|
181
183
|
// The closures receive RenderPipelineContext and route to w15 record functions.
|
|
182
184
|
|
|
183
185
|
const EMPTY_BLOOM_RECEIPTS: BloomFrameReceipts = {
|
|
@@ -217,168 +219,94 @@ function throwBloomRecordFailure(expected: string): never {
|
|
|
217
219
|
});
|
|
218
220
|
}
|
|
219
221
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
resolve?: ResolveContext,
|
|
223
|
-
graphPass?: RhiRenderPassEncoder,
|
|
224
|
-
): void {
|
|
225
|
-
const { runtime, encoder, camera, tonemapActive, frameState, bindGroupCounts } = _c;
|
|
226
|
-
const pp = _c.bloomResources;
|
|
227
|
-
|
|
228
|
-
// Double gate: bloom=off => zero-overhead; tonemap=none => no HDR domain
|
|
229
|
-
if (camera.bloom !== 'on' || !tonemapActive) return;
|
|
230
|
-
if (pp === null || pp === undefined) {
|
|
231
|
-
throwBloomRecordFailure('Bloom persistent resources are ready before bright-pass encoding');
|
|
232
|
-
}
|
|
233
|
-
if (
|
|
234
|
-
pp.bloomBrightPipeline === null ||
|
|
235
|
-
pp.bloomBrightBindGroupLayout === null ||
|
|
236
|
-
pp.bloomSampler === null ||
|
|
237
|
-
pp.bloomBrightParamsBuffer === null
|
|
238
|
-
) {
|
|
239
|
-
throwBloomRecordFailure('Bloom bright pass has pipeline, layout, sampler, and params buffer');
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// M1 / w7: bloom intermediate textures owned by render-graph. Resolve
|
|
243
|
-
// the GPU TextureView via the resolve context passed by graph.execute().
|
|
244
|
-
const bloomBrightView = resolve?.resolve('bloomBright') as TextureView | undefined;
|
|
245
|
-
const hdrColorView = resolve?.resolve('hdrColor') as TextureView | undefined;
|
|
246
|
-
if (!bloomBrightView || !hdrColorView) {
|
|
247
|
-
throwBloomRecordFailure('Bloom bright pass resolves its source and target views');
|
|
248
|
-
}
|
|
249
|
-
const bglBright = pp.bloomBrightBindGroupLayout;
|
|
250
|
-
const bloomSampler = pp.bloomSampler;
|
|
251
|
-
const paramsBuffer = pp.bloomBrightParamsBuffer;
|
|
252
|
-
|
|
253
|
-
// 2. Write threshold UBO (16 B std140: threshold f32 + 12 B pad).
|
|
254
|
-
const brightParams = new Float32Array(4);
|
|
255
|
-
brightParams[0] = camera.bloomThreshold;
|
|
256
|
-
brightParams[1] = 0;
|
|
257
|
-
brightParams[2] = 0;
|
|
258
|
-
brightParams[3] = 0;
|
|
259
|
-
const paramsWrite = runtime.device.queue.writeBuffer(paramsBuffer, 0, brightParams);
|
|
260
|
-
if (!paramsWrite.ok) throw paramsWrite.error;
|
|
261
|
-
stageBloomUpload(_c);
|
|
262
|
-
|
|
263
|
-
// 3. Identity-cached BindGroup (1 tex + 1 sampler + 1 UBO). Keyed on the
|
|
264
|
-
// graph-resolved hdrColor TextureView: resize retires hdrColor and the new
|
|
265
|
-
// view yields a WeakMap miss -> rebuild referencing the live texture.
|
|
266
|
-
const bindGroup = getOrCreateFromChain(
|
|
267
|
-
frameState.postProcessBgCache,
|
|
268
|
-
[hdrColorView],
|
|
269
|
-
'bloom-bright',
|
|
270
|
-
() => {
|
|
271
|
-
const bgRes = runtime.device.createBindGroup({
|
|
272
|
-
label: 'bloom-bright-bg',
|
|
273
|
-
layout: bglBright,
|
|
274
|
-
entries: [
|
|
275
|
-
{ binding: 0, resource: { kind: 'textureView', value: hdrColorView } },
|
|
276
|
-
{ binding: 1, resource: { kind: 'sampler', value: bloomSampler } },
|
|
277
|
-
{ binding: 2, resource: { kind: 'buffer', value: { buffer: paramsBuffer } } },
|
|
278
|
-
],
|
|
279
|
-
});
|
|
280
|
-
if (!bgRes.ok) throw bgRes.error;
|
|
281
|
-
return bgRes.value;
|
|
282
|
-
},
|
|
283
|
-
bindGroupCounts,
|
|
284
|
-
);
|
|
285
|
-
|
|
286
|
-
// 4. Render pass into the 1/2-res intermediate.
|
|
287
|
-
const pass: RhiRenderPassEncoder =
|
|
288
|
-
graphPass ??
|
|
289
|
-
encoder.beginRenderPass(
|
|
290
|
-
buildBeginRenderPassDescriptor(
|
|
291
|
-
{ colorFormats: ['rgba16float'], depthFormat: undefined, sampleCount: 1 },
|
|
292
|
-
{ colorViews: [bloomBrightView] },
|
|
293
|
-
'bloom-bright',
|
|
294
|
-
) as never,
|
|
295
|
-
);
|
|
296
|
-
pass.setPipeline(pp.bloomBrightPipeline);
|
|
297
|
-
pass.setBindGroup(0, bindGroup);
|
|
298
|
-
stageBloomBindGroup(_c);
|
|
299
|
-
pass.draw(3, 1, 0, 0);
|
|
300
|
-
stageBloomEncode(_c);
|
|
301
|
-
if (graphPass === undefined) pass.end();
|
|
222
|
+
function bloomRecordActive(c: _InternalRenderPipelineContext): boolean {
|
|
223
|
+
return standardBloomAdmitted(c.camera) && c.tonemapActive;
|
|
302
224
|
}
|
|
303
225
|
|
|
304
|
-
export function
|
|
226
|
+
export function recordBloomDownsamplePass(
|
|
305
227
|
_c: _InternalRenderPipelineContext,
|
|
306
228
|
resolve?: ResolveContext,
|
|
307
229
|
graphPass?: RhiRenderPassEncoder,
|
|
230
|
+
level = 0,
|
|
231
|
+
destinationSize?: { readonly width: number; readonly height: number },
|
|
308
232
|
): void {
|
|
309
|
-
const { runtime, encoder, camera,
|
|
233
|
+
const { runtime, encoder, camera, frameState, bindGroupCounts } = _c;
|
|
310
234
|
const pp = _c.bloomResources;
|
|
311
|
-
|
|
312
|
-
if (camera.bloom !== 'on' || !tonemapActive) return;
|
|
313
|
-
if (pp === null || pp === undefined) {
|
|
314
|
-
throwBloomRecordFailure('Bloom persistent resources are ready before blur-H encoding');
|
|
315
|
-
}
|
|
235
|
+
if (!bloomRecordActive(_c)) return;
|
|
316
236
|
if (
|
|
317
|
-
pp
|
|
318
|
-
pp
|
|
237
|
+
pp === undefined ||
|
|
238
|
+
pp === null ||
|
|
239
|
+
pp.bloomDownsamplePipeline === null ||
|
|
240
|
+
pp.bloomDownsampleBindGroupLayout === null ||
|
|
319
241
|
pp.bloomSampler === null ||
|
|
320
|
-
pp.
|
|
242
|
+
pp.bloomDownsampleParamsBuffer === null
|
|
321
243
|
) {
|
|
322
|
-
throwBloomRecordFailure('Bloom
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
// M1 / w7: bloom intermediate textures owned by render-graph. Resolve
|
|
326
|
-
// via the resolve context passed by graph.execute().
|
|
327
|
-
const bloomBlurHView = resolve?.resolve('bloomBlurH') as TextureView | undefined;
|
|
328
|
-
const bloomBrightView = resolve?.resolve('bloomBright') as TextureView | undefined;
|
|
329
|
-
if (!bloomBlurHView || !bloomBrightView) {
|
|
330
|
-
throwBloomRecordFailure('Bloom blur-H pass resolves its source and target views');
|
|
244
|
+
throwBloomRecordFailure('Bloom downsample resources are ready before encoding');
|
|
331
245
|
}
|
|
332
|
-
const
|
|
246
|
+
const downsamplePipeline = pp.bloomDownsamplePipeline;
|
|
247
|
+
const downsampleLayout = pp.bloomDownsampleBindGroupLayout;
|
|
333
248
|
const bloomSampler = pp.bloomSampler;
|
|
334
|
-
const
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
249
|
+
const downsampleParamsBuffer = pp.bloomDownsampleParamsBuffer;
|
|
250
|
+
const sourceName = level === 0 ? 'hdrColor' : `bloomDownsample${level - 1}`;
|
|
251
|
+
const targetName = `bloomDownsample${level}`;
|
|
252
|
+
const sourceView = resolve?.resolve(sourceName) as TextureView | undefined;
|
|
253
|
+
const targetView = resolve?.resolve(targetName) as TextureView | undefined;
|
|
254
|
+
if (sourceView === undefined || targetView === undefined) {
|
|
255
|
+
throwBloomRecordFailure(`Bloom downsample level ${level} resolves source and target views`);
|
|
256
|
+
}
|
|
257
|
+
const size = destinationSize ?? {
|
|
258
|
+
width: Math.max(1, Math.ceil(_c.targetW / 2)),
|
|
259
|
+
height: Math.max(1, Math.ceil(_c.targetH / 2)),
|
|
260
|
+
};
|
|
261
|
+
const params = new Float32Array([
|
|
262
|
+
camera.bloomThreshold,
|
|
263
|
+
camera.bloomSoftKnee,
|
|
264
|
+
size.width,
|
|
265
|
+
size.height,
|
|
266
|
+
level,
|
|
267
|
+
0,
|
|
268
|
+
0,
|
|
269
|
+
0,
|
|
270
|
+
]);
|
|
271
|
+
const offset = level * BLOOM_UNIFORM_PARAMS_STRIDE_BYTES;
|
|
272
|
+
const upload = runtime.device.queue.writeBuffer(pp.bloomDownsampleParamsBuffer, offset, params);
|
|
273
|
+
if (!upload.ok) throw upload.error;
|
|
347
274
|
stageBloomUpload(_c);
|
|
348
|
-
|
|
349
|
-
// 3. Identity-cached BindGroup (reads bloomBright from graph). Keyed on the
|
|
350
|
-
// graph-resolved bloomBright view so resize rebuilds against the new texture.
|
|
351
275
|
const bindGroup = getOrCreateFromChain(
|
|
352
276
|
frameState.postProcessBgCache,
|
|
353
|
-
[
|
|
354
|
-
|
|
277
|
+
[sourceView, downsampleParamsBuffer],
|
|
278
|
+
`bloom-downsample-${level}`,
|
|
355
279
|
() => {
|
|
356
|
-
const
|
|
357
|
-
label:
|
|
358
|
-
layout:
|
|
280
|
+
const created = runtime.device.createBindGroup({
|
|
281
|
+
label: `bloom-downsample-${level}-bg`,
|
|
282
|
+
layout: downsampleLayout,
|
|
359
283
|
entries: [
|
|
360
|
-
{ binding: 0, resource: { kind: 'textureView', value:
|
|
284
|
+
{ binding: 0, resource: { kind: 'textureView', value: sourceView } },
|
|
361
285
|
{ binding: 1, resource: { kind: 'sampler', value: bloomSampler } },
|
|
362
|
-
{
|
|
286
|
+
{
|
|
287
|
+
binding: 2,
|
|
288
|
+
resource: {
|
|
289
|
+
kind: 'buffer',
|
|
290
|
+
value: { buffer: downsampleParamsBuffer, offset, size: 32 },
|
|
291
|
+
},
|
|
292
|
+
},
|
|
363
293
|
],
|
|
364
294
|
});
|
|
365
|
-
if (!
|
|
366
|
-
return
|
|
295
|
+
if (!created.ok) throw created.error;
|
|
296
|
+
return created.value;
|
|
367
297
|
},
|
|
368
298
|
bindGroupCounts,
|
|
369
299
|
);
|
|
370
|
-
|
|
371
|
-
// 4. Render pass into bloomBlurH intermediate (graph-owned).
|
|
372
|
-
const pass: RhiRenderPassEncoder =
|
|
300
|
+
const pass =
|
|
373
301
|
graphPass ??
|
|
374
302
|
encoder.beginRenderPass(
|
|
375
303
|
buildBeginRenderPassDescriptor(
|
|
376
304
|
{ colorFormats: ['rgba16float'], depthFormat: undefined, sampleCount: 1 },
|
|
377
|
-
{ colorViews: [
|
|
378
|
-
'bloom-
|
|
305
|
+
{ colorViews: [targetView] },
|
|
306
|
+
'bloom-downsample',
|
|
379
307
|
) as never,
|
|
380
308
|
);
|
|
381
|
-
pass.setPipeline(
|
|
309
|
+
pass.setPipeline(downsamplePipeline);
|
|
382
310
|
pass.setBindGroup(0, bindGroup);
|
|
383
311
|
stageBloomBindGroup(_c);
|
|
384
312
|
pass.draw(3, 1, 0, 0);
|
|
@@ -386,84 +314,80 @@ export function recordBloomBlurHPass(
|
|
|
386
314
|
if (graphPass === undefined) pass.end();
|
|
387
315
|
}
|
|
388
316
|
|
|
389
|
-
export function
|
|
317
|
+
export function recordBloomUpsamplePass(
|
|
390
318
|
_c: _InternalRenderPipelineContext,
|
|
391
319
|
resolve?: ResolveContext,
|
|
392
320
|
graphPass?: RhiRenderPassEncoder,
|
|
321
|
+
level = 0,
|
|
393
322
|
): void {
|
|
394
|
-
const { runtime, encoder,
|
|
323
|
+
const { runtime, encoder, frameState, bindGroupCounts } = _c;
|
|
395
324
|
const pp = _c.bloomResources;
|
|
396
|
-
|
|
397
|
-
if (camera.bloom !== 'on' || !tonemapActive) return;
|
|
398
|
-
if (pp === null || pp === undefined) {
|
|
399
|
-
throwBloomRecordFailure('Bloom persistent resources are ready before blur-V encoding');
|
|
400
|
-
}
|
|
325
|
+
if (!bloomRecordActive(_c)) return;
|
|
401
326
|
if (
|
|
402
|
-
pp
|
|
403
|
-
pp
|
|
327
|
+
pp === undefined ||
|
|
328
|
+
pp === null ||
|
|
329
|
+
pp.bloomUpsamplePipeline === null ||
|
|
330
|
+
pp.bloomUpsampleBindGroupLayout === null ||
|
|
404
331
|
pp.bloomSampler === null ||
|
|
405
|
-
pp.
|
|
332
|
+
pp.bloomUpsampleParamsBuffer === null
|
|
406
333
|
) {
|
|
407
|
-
throwBloomRecordFailure('Bloom
|
|
334
|
+
throwBloomRecordFailure('Bloom upsample resources are ready before encoding');
|
|
408
335
|
}
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
// via the resolve context passed by graph.execute().
|
|
412
|
-
const bloomBlurVView = resolve?.resolve('bloomBlurV') as TextureView | undefined;
|
|
413
|
-
const bloomBlurHView = resolve?.resolve('bloomBlurH') as TextureView | undefined;
|
|
414
|
-
if (!bloomBlurVView || !bloomBlurHView) {
|
|
415
|
-
throwBloomRecordFailure('Bloom blur-V pass resolves its source and target views');
|
|
416
|
-
}
|
|
417
|
-
const bglBlur = pp.bloomBlurBindGroupLayout;
|
|
336
|
+
const upsamplePipeline = pp.bloomUpsamplePipeline;
|
|
337
|
+
const upsampleLayout = pp.bloomUpsampleBindGroupLayout;
|
|
418
338
|
const bloomSampler = pp.bloomSampler;
|
|
419
|
-
const
|
|
420
|
-
|
|
421
|
-
//
|
|
422
|
-
//
|
|
423
|
-
//
|
|
424
|
-
|
|
425
|
-
const
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
339
|
+
const upsampleParamsBuffer = pp.bloomUpsampleParamsBuffer;
|
|
340
|
+
const currentView = resolve?.resolve(`bloomDownsample${level}`) as TextureView | undefined;
|
|
341
|
+
// The top upsample edge reconstructs from the next downsample level. Every
|
|
342
|
+
// finer edge then consumes the already reconstructed coarser upsample. A
|
|
343
|
+
// resolver miss is the single source of truth for the one-level pyramid
|
|
344
|
+
// boundary; no alternate level-count or legacy H/V path is needed.
|
|
345
|
+
const nextUpsampleView = resolve?.resolve(`bloomUpsample${level + 1}`) as TextureView | undefined;
|
|
346
|
+
const coarseView =
|
|
347
|
+
nextUpsampleView ??
|
|
348
|
+
(resolve?.resolve(`bloomDownsample${level + 1}`) as TextureView | undefined);
|
|
349
|
+
const targetView = resolve?.resolve(`bloomUpsample${level}`) as TextureView | undefined;
|
|
350
|
+
if (currentView === undefined || coarseView === undefined || targetView === undefined) {
|
|
351
|
+
throwBloomRecordFailure(`Bloom upsample level ${level} resolves adjacent pyramid views`);
|
|
352
|
+
}
|
|
353
|
+
const params = new Float32Array([_c.camera.bloomScatter, 0, 0, 0]);
|
|
354
|
+
const offset = level * BLOOM_UNIFORM_PARAMS_STRIDE_BYTES;
|
|
355
|
+
const upload = runtime.device.queue.writeBuffer(pp.bloomUpsampleParamsBuffer, offset, params);
|
|
356
|
+
if (!upload.ok) throw upload.error;
|
|
432
357
|
stageBloomUpload(_c);
|
|
433
|
-
|
|
434
|
-
// 3. Identity-cached BindGroup (reads bloomBlurH from graph). Keyed on the
|
|
435
|
-
// graph-resolved bloomBlurH view so resize rebuilds against the new texture.
|
|
436
358
|
const bindGroup = getOrCreateFromChain(
|
|
437
359
|
frameState.postProcessBgCache,
|
|
438
|
-
[
|
|
439
|
-
|
|
360
|
+
[currentView, coarseView, upsampleParamsBuffer],
|
|
361
|
+
`bloom-upsample-${level}`,
|
|
440
362
|
() => {
|
|
441
|
-
const
|
|
442
|
-
label:
|
|
443
|
-
layout:
|
|
363
|
+
const created = runtime.device.createBindGroup({
|
|
364
|
+
label: `bloom-upsample-${level}-bg`,
|
|
365
|
+
layout: upsampleLayout,
|
|
444
366
|
entries: [
|
|
445
|
-
{ binding: 0, resource: { kind: 'textureView', value:
|
|
446
|
-
{ binding: 1, resource: { kind: '
|
|
447
|
-
{ binding: 2, resource: { kind: '
|
|
367
|
+
{ binding: 0, resource: { kind: 'textureView', value: currentView } },
|
|
368
|
+
{ binding: 1, resource: { kind: 'textureView', value: coarseView } },
|
|
369
|
+
{ binding: 2, resource: { kind: 'sampler', value: bloomSampler } },
|
|
370
|
+
{
|
|
371
|
+
binding: 3,
|
|
372
|
+
resource: { kind: 'buffer', value: { buffer: upsampleParamsBuffer, offset, size: 16 } },
|
|
373
|
+
},
|
|
448
374
|
],
|
|
449
375
|
});
|
|
450
|
-
if (!
|
|
451
|
-
return
|
|
376
|
+
if (!created.ok) throw created.error;
|
|
377
|
+
return created.value;
|
|
452
378
|
},
|
|
453
379
|
bindGroupCounts,
|
|
454
380
|
);
|
|
455
|
-
|
|
456
|
-
// 4. Render pass into bloomBlurV intermediate (graph-owned).
|
|
457
|
-
const pass: RhiRenderPassEncoder =
|
|
381
|
+
const pass =
|
|
458
382
|
graphPass ??
|
|
459
383
|
encoder.beginRenderPass(
|
|
460
384
|
buildBeginRenderPassDescriptor(
|
|
461
385
|
{ colorFormats: ['rgba16float'], depthFormat: undefined, sampleCount: 1 },
|
|
462
|
-
{ colorViews: [
|
|
463
|
-
'bloom-
|
|
386
|
+
{ colorViews: [targetView] },
|
|
387
|
+
'bloom-upsample',
|
|
464
388
|
) as never,
|
|
465
389
|
);
|
|
466
|
-
pass.setPipeline(
|
|
390
|
+
pass.setPipeline(upsamplePipeline);
|
|
467
391
|
pass.setBindGroup(0, bindGroup);
|
|
468
392
|
stageBloomBindGroup(_c);
|
|
469
393
|
pass.draw(3, 1, 0, 0);
|
|
@@ -476,10 +400,10 @@ export function recordBloomCompositePass(
|
|
|
476
400
|
resolve?: ResolveContext,
|
|
477
401
|
graphPass?: RhiRenderPassEncoder,
|
|
478
402
|
): void {
|
|
479
|
-
const { runtime, encoder, camera,
|
|
403
|
+
const { runtime, encoder, camera, frameState, bindGroupCounts } = _c;
|
|
480
404
|
const pp = _c.bloomResources;
|
|
481
405
|
|
|
482
|
-
if (
|
|
406
|
+
if (!bloomRecordActive(_c)) return;
|
|
483
407
|
if (pp === null || pp === undefined) {
|
|
484
408
|
throwBloomRecordFailure('Bloom persistent resources are ready before composite encoding');
|
|
485
409
|
}
|
|
@@ -494,14 +418,16 @@ export function recordBloomCompositePass(
|
|
|
494
418
|
);
|
|
495
419
|
}
|
|
496
420
|
|
|
497
|
-
//
|
|
421
|
+
// hdrColor + reconstructed Bloom textures are owned by render-graph.
|
|
498
422
|
// bug-20260625: composite READS hdrColor (scene, binding 0) and WRITES the
|
|
499
423
|
// separate hdrComposited target -- never the same texture in one pass.
|
|
500
424
|
const hdrColorView = resolve?.resolve('hdrColor') as TextureView | undefined;
|
|
501
|
-
const
|
|
425
|
+
const bloomView = resolve?.resolve('bloomUpsample0') as TextureView | undefined;
|
|
426
|
+
const finestBloomView =
|
|
427
|
+
bloomView ?? (resolve?.resolve('bloomDownsample0') as TextureView | undefined);
|
|
502
428
|
const hdrCompositedView = resolve?.resolve('hdrComposited') as TextureView | undefined;
|
|
503
|
-
if (!hdrColorView || !
|
|
504
|
-
throwBloomRecordFailure('Bloom composite pass resolves
|
|
429
|
+
if (!hdrColorView || !finestBloomView || !hdrCompositedView) {
|
|
430
|
+
throwBloomRecordFailure('Bloom composite pass resolves scene, finest Bloom, and target views');
|
|
505
431
|
}
|
|
506
432
|
const bglComposite = pp.bloomCompositeBindGroupLayout;
|
|
507
433
|
const bloomSampler = pp.bloomSampler;
|
|
@@ -517,12 +443,12 @@ export function recordBloomCompositePass(
|
|
|
517
443
|
if (!paramsWrite.ok) throw paramsWrite.error;
|
|
518
444
|
stageBloomUpload(_c);
|
|
519
445
|
|
|
520
|
-
// 2. Identity-cached BindGroup (2 tex: hdrColor +
|
|
446
|
+
// 2. Identity-cached BindGroup (2 tex: hdrColor + finest Bloom, 1 sampler,
|
|
521
447
|
// 1 UBO). Keys on both sampled views: resize retires both hdrColor and
|
|
522
|
-
//
|
|
448
|
+
// finest Bloom view, so a two-node chain rebuilds when either identity changes.
|
|
523
449
|
const bindGroup = getOrCreateFromChain(
|
|
524
450
|
frameState.postProcessBgCache,
|
|
525
|
-
[hdrColorView,
|
|
451
|
+
[hdrColorView, finestBloomView],
|
|
526
452
|
'bloom-composite',
|
|
527
453
|
() => {
|
|
528
454
|
const bgRes = runtime.device.createBindGroup({
|
|
@@ -530,7 +456,7 @@ export function recordBloomCompositePass(
|
|
|
530
456
|
layout: bglComposite,
|
|
531
457
|
entries: [
|
|
532
458
|
{ binding: 0, resource: { kind: 'textureView', value: hdrColorView } },
|
|
533
|
-
{ binding: 1, resource: { kind: 'textureView', value:
|
|
459
|
+
{ binding: 1, resource: { kind: 'textureView', value: finestBloomView } },
|
|
534
460
|
{ binding: 2, resource: { kind: 'sampler', value: bloomSampler } },
|
|
535
461
|
{
|
|
536
462
|
binding: 3,
|
|
@@ -572,6 +498,7 @@ export function recordFxaaPass(
|
|
|
572
498
|
resolve: ResolveContext,
|
|
573
499
|
graphPass?: RhiRenderPassEncoder,
|
|
574
500
|
paramsOverride?: Uint8Array,
|
|
501
|
+
graphOutputFormat?: GPUTextureFormat,
|
|
575
502
|
): void {
|
|
576
503
|
const { runtime, pipelineState, encoder, camera, currentTexture } = c;
|
|
577
504
|
// FXAA samples the graph-owned LDR target and writes the current surface.
|
|
@@ -644,9 +571,17 @@ export function recordFxaaPass(
|
|
|
644
571
|
c.bindGroupCounts,
|
|
645
572
|
);
|
|
646
573
|
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
574
|
+
// Typed graph passes own their attachment format. In particular, the
|
|
575
|
+
// barrel/LUT split keeps FXAA in the graph-owned rgba16float domain before
|
|
576
|
+
// the final output encoding; falling back to the swapchain format here
|
|
577
|
+
// builds a BGRA pipeline against an RGBA16F attachment and invalidates the
|
|
578
|
+
// command buffer on WebGPU.
|
|
579
|
+
const fxaaColorFormat =
|
|
580
|
+
graphPass !== undefined && graphOutputFormat !== undefined
|
|
581
|
+
? graphOutputFormat
|
|
582
|
+
: runtime.device.caps.storageBuffer
|
|
583
|
+
? pipelineState.format
|
|
584
|
+
: pipelineState.colorAttachmentFormat;
|
|
650
585
|
let fxaaPass = graphPass;
|
|
651
586
|
if (fxaaPass === undefined) {
|
|
652
587
|
const fxaaOutputView = runtime.device.createTextureView(currentTexture, {
|
|
@@ -668,7 +603,22 @@ export function recordFxaaPass(
|
|
|
668
603
|
) as never,
|
|
669
604
|
);
|
|
670
605
|
}
|
|
671
|
-
|
|
606
|
+
let fxaaPipeline = pipelineState.perPassResources.fxaaPipeline;
|
|
607
|
+
if (graphPass !== undefined && graphOutputFormat !== undefined) {
|
|
608
|
+
const entry = runtime.lookupPostProcess?.(FXAA_POST_PROCESS_ID);
|
|
609
|
+
const rebuilt =
|
|
610
|
+
entry === undefined || runtime.getPostProcessPipeline === undefined
|
|
611
|
+
? null
|
|
612
|
+
: runtime.getPostProcessPipeline(
|
|
613
|
+
FXAA_POST_PROCESS_ID,
|
|
614
|
+
fxaaBglLayout,
|
|
615
|
+
[graphOutputFormat],
|
|
616
|
+
entry,
|
|
617
|
+
);
|
|
618
|
+
if (rebuilt !== null) fxaaPipeline = rebuilt;
|
|
619
|
+
}
|
|
620
|
+
if (fxaaPipeline === null) return;
|
|
621
|
+
fxaaPass.setPipeline(fxaaPipeline);
|
|
672
622
|
fxaaPass.setBindGroup(0, fxaaBg);
|
|
673
623
|
fxaaPass.draw(3, 1, 0, 0);
|
|
674
624
|
if (graphPass === undefined) fxaaPass.end();
|