@forgeax/engine-render 0.1.27 → 0.1.29
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 +842 -124
- package/dist/assembly/atmosphere-shader-prewarm.d.ts +6 -0
- package/dist/assembly/atmosphere-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/dynamic-geometry-host.d.ts +52 -0
- package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -0
- 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 +19 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/material/assembly.d.ts +7 -0
- package/dist/assembly/material/assembly.d.ts.map +1 -1
- 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/failure-location.d.ts +12 -0
- package/dist/assembly/recovery/failure-location.d.ts.map +1 -0
- package/dist/assembly/recovery/renderer-recover.d.ts +6 -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 +6 -0
- 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 +3 -3
- package/dist/{chunk-ADHHVYLW.mjs → chunk-33XZFTQU.mjs} +245 -39
- package/dist/chunk-33XZFTQU.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-KM2NOX2I.mjs → chunk-BQVQOQJH.mjs} +958 -254
- package/dist/chunk-BQVQOQJH.mjs.map +1 -0
- package/dist/{chunk-HKXTW355.mjs → chunk-BTWH7BP4.mjs} +386 -17
- package/dist/chunk-BTWH7BP4.mjs.map +1 -0
- package/dist/{chunk-TMIASV2N.mjs → chunk-FUODTTIA.mjs} +3934 -676
- package/dist/chunk-FUODTTIA.mjs.map +1 -0
- package/dist/{chunk-FJ6P52EE.mjs → chunk-ILQ5MEZF.mjs} +3 -17
- package/dist/chunk-ILQ5MEZF.mjs.map +1 -0
- package/dist/{chunk-E34VL5VI.mjs → chunk-JQTSEI3Z.mjs} +3 -3
- package/dist/{chunk-E34VL5VI.mjs.map → chunk-JQTSEI3Z.mjs.map} +1 -1
- package/dist/{chunk-GE3SDD72.mjs → chunk-NICXSHAT.mjs} +16 -38
- package/dist/chunk-NICXSHAT.mjs.map +1 -0
- package/dist/{chunk-ZZ4YQ474.mjs → chunk-NRNXBLIJ.mjs} +577 -7
- package/dist/chunk-NRNXBLIJ.mjs.map +1 -0
- package/dist/{chunk-JDWARUOI.mjs → chunk-PA5DRJNI.mjs} +17 -3
- package/dist/chunk-PA5DRJNI.mjs.map +1 -0
- package/dist/{chunk-XDP6XE5V.mjs → chunk-S4DNKQYQ.mjs} +1118 -446
- package/dist/chunk-S4DNKQYQ.mjs.map +1 -0
- package/dist/components/camera.d.ts +62 -2
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -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/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/construct-renderer.mjs +13805 -7186
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/gpu-residency.d.ts +11 -17
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/device/mesh-residency-lifetime.d.ts +21 -0
- package/dist/device/mesh-residency-lifetime.d.ts.map +1 -0
- package/dist/dynamic-geometry.d.ts +125 -0
- package/dist/dynamic-geometry.d.ts.map +1 -0
- package/dist/environment/background.d.ts +6 -0
- package/dist/environment/background.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 +7 -4
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/camera.d.ts.map +1 -1
- package/dist/extract/gpu-driven.d.ts +33 -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/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.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +144 -23
- 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-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 +6 -0
- package/dist/hdrp-buffers.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.map +1 -1
- package/dist/index.d.ts +21 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +8 -7
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +164 -0
- 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 +118 -10
- 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 +5 -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 +21 -5
- package/dist/pbr-pipeline.d.ts.map +1 -1
- 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-builder.d.ts +2 -1
- 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/points-lines/standard-owner.d.ts +1 -1
- package/dist/points-lines/standard-owner.d.ts.map +1 -1
- 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 +106 -5
- 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 +39 -4
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +7 -8
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +38 -1
- 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 +12 -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 +2 -9
- package/dist/record/recovery-pipeline.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +76 -26
- 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 +35 -7
- 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/record-owner.d.ts +0 -2
- package/dist/reflection/record-owner.d.ts.map +1 -1
- package/dist/render-contract.d.ts +185 -30
- 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 +64 -5
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts +7 -5
- package/dist/render-system-extract-tail.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +101 -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 +34 -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 +29 -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/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 +2 -1
- package/dist/temporal/standard-scene-data.d.ts.map +1 -1
- package/dist/temporal/temporal-view.d.ts +2 -0
- package/dist/temporal/temporal-view.d.ts.map +1 -1
- package/dist/typed-render-graph-primitives.d.ts +35 -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/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__/detached-inspection.integration.test.ts +5 -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-host.unit.test.ts +1123 -0
- package/src/__tests__/dynamic-geometry.unit.test.ts +233 -0
- package/src/__tests__/factory-contract.integration.test.ts +73 -22
- 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-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 +287 -6
- 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 +264 -0
- package/src/__tests__/gpu-driven-mesh-world-identity.unit.test.ts +349 -0
- package/src/__tests__/gpu-driven-pbr.dawn.test.ts +1417 -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 +1075 -93
- 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 +159 -52
- package/src/__tests__/gpu-pass-timing.browser.test.ts +6 -1
- 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 +559 -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 +52 -2
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +4 -0
- package/src/__tests__/mesh-submission-lifetime.unit.test.ts +53 -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 +37 -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__/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 +35 -4
- 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 +104 -0
- package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +2 -1
- package/src/__tests__/render-error-code-owner.test-d.ts +4 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +22 -0
- package/src/__tests__/render-error-exhaustive.test-d.ts +15 -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 +914 -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 +61 -1
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +923 -5
- package/src/__tests__/shader-manifest-fixture.ts +39 -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 +118 -14
- package/src/__tests__/specular-environment-scale.dawn.test.ts +156 -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-format-probe-gating.integration.test.ts +82 -0
- package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +91 -0
- package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +112 -0
- package/src/__tests__/ssr-gpu-dispatch.ts +946 -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 +44 -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 +38 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +320 -3
- package/src/__tests__/standard-profile-oracle.unit.test.ts +22 -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 +193 -0
- package/src/__tests__/taa-history-clipping.dawn.test.ts +328 -0
- package/src/__tests__/taa-neighborhood-equivalence.dawn.test.ts +778 -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 +341 -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__/texture-usage-surface.unit.test.ts +4 -2
- 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/assembly/atmosphere-shader-prewarm.ts +38 -0
- package/src/assembly/dynamic-geometry-host.ts +887 -0
- 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 +36 -0
- package/src/assembly/material/assembly.ts +38 -0
- package/src/assembly/material-shader-policy.ts +71 -28
- package/src/assembly/recovery/failure-location.ts +62 -0
- package/src/assembly/recovery/renderer-recover.ts +19 -17
- package/src/assembly/renderer-facade.ts +29 -0
- 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 +32 -0
- 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 +142 -121
- 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 +675 -614
- package/src/assembly/webgpu-vertex-layouts.ts +233 -87
- package/src/components/__tests__/camera-exposure.contract.unit.test.ts +153 -0
- package/src/components/camera.ts +287 -7
- package/src/components/index.ts +1 -0
- package/src/components/instances.ts +45 -18
- package/src/components/scene-instance.ts +2 -1
- package/src/components/screen-space-reflection.ts +21 -0
- package/src/components/sprite-animation.ts +3 -3
- package/src/components/sprite-instances.ts +1 -1
- package/src/device/gpu-residency.ts +96 -93
- package/src/device/mesh-residency-lifetime.ts +73 -0
- package/src/dynamic-geometry.ts +736 -0
- package/src/environment/background.ts +263 -0
- package/src/errors/gpu-driven.ts +39 -5
- package/src/errors/render.ts +27 -3
- package/src/extract/camera.ts +26 -1
- package/src/extract/gpu-driven.ts +185 -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 +424 -102
- package/src/gpu-driven/pbr-program.ts +31 -0
- package/src/gpu-driven/prepared-draw.ts +29 -4
- package/src/gpu-driven/production-raster.ts +2267 -694
- package/src/gpu-driven/shadow-views.ts +539 -0
- package/src/gpu-driven/view-gpu.ts +188 -41
- package/src/gpu-scene-schema.ts +52 -11
- package/src/gpu-scene.ts +186 -99
- package/src/gpu-texture-usage.ts +1 -0
- package/src/hdrp-buffers.ts +72 -36
- package/src/ibl/frame-resources.ts +38 -0
- package/src/ibl/skylight-bind-group.ts +5 -4
- package/src/index.ts +125 -1
- package/src/inspection-types.ts +191 -0
- 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 +145 -0
- package/src/materials.ts +44 -8
- package/src/pbr-pipeline.ts +159 -17
- package/src/pipeline/standard-forward-lane.ts +52 -24
- 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 +192 -59
- package/src/pipeline/standard-post.ts +186 -27
- package/src/pipeline-builder.ts +16 -6
- package/src/pipeline-spec-types.ts +4 -0
- package/src/pipeline-spec.ts +37 -29
- package/src/points-lines/standard-owner.ts +6 -14
- package/src/prepare/prepared-graphics-resolver.ts +9 -2
- package/src/record/__tests__/material-slot-plan.unit.test.ts +48 -0
- package/src/record/__tests__/mesh-ssbo.unit.test.ts +40 -1
- package/src/record/__tests__/recovery-pipeline.unit.test.ts +2 -29
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +36 -5
- 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 +12 -11
- package/src/record/frame-snapshot.ts +133 -23
- package/src/record/frame-targets.ts +9 -0
- package/src/record/frame.ts +727 -133
- package/src/record/main-pass-geometry.ts +162 -98
- package/src/record/main-pass-material.ts +115 -26
- package/src/record/main-pass-sprite-draws.ts +18 -107
- package/src/record/main-pass.ts +78 -8
- package/src/record/material-uniforms.ts +1 -1
- package/src/record/mesh-ssbo.ts +59 -15
- package/src/record/prepared-material-bindings.ts +234 -0
- package/src/record/recovery-pipeline.ts +59 -136
- package/src/record/render-context.ts +92 -22
- package/src/record/shadow-pass.ts +1231 -209
- package/src/record/skybox-post-pass.ts +14 -3
- package/src/record/typed-frame-graph.ts +1006 -53
- package/src/record/view-ubo.ts +11 -0
- package/src/recovery/render-system-candidate.ts +90 -66
- package/src/recovery/render-system-roots.ts +113 -0
- package/src/recovery/types.ts +77 -0
- package/src/reflection/record-owner.ts +26 -54
- package/src/render-contract.ts +219 -25
- package/src/render-graph-primitives.ts +6 -2
- package/src/render-pipeline.ts +70 -1
- package/src/render-system-extract-tail.ts +409 -160
- package/src/render-system-extract.ts +376 -102
- package/src/render-system-projections.ts +241 -0
- package/src/render-system.ts +692 -791
- package/src/scene/render-scene-types.ts +13 -4
- package/src/scene/render-scene.ts +569 -355
- package/src/scene/shadow-visibility.ts +21 -0
- 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 +777 -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 +74 -12
- package/src/temporal/history.ts +3 -1
- package/src/temporal/inspection.ts +2 -1
- package/src/temporal/standard-scene-data.ts +3 -1
- package/src/temporal/temporal-view.ts +3 -0
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +204 -139
- package/src/typed-render-graph-primitives.ts +266 -74
- package/src/typed-shadow-passes.ts +122 -12
- package/src/volume/temporal.ts +10 -0
- package/dist/chunk-ADHHVYLW.mjs.map +0 -1
- package/dist/chunk-FJ6P52EE.mjs.map +0 -1
- package/dist/chunk-GE3SDD72.mjs.map +0 -1
- package/dist/chunk-GF523LHF.mjs.map +0 -1
- package/dist/chunk-HKXTW355.mjs.map +0 -1
- package/dist/chunk-JDWARUOI.mjs.map +0 -1
- package/dist/chunk-KM2NOX2I.mjs.map +0 -1
- package/dist/chunk-TMIASV2N.mjs.map +0 -1
- package/dist/chunk-XDP6XE5V.mjs.map +0 -1
- package/dist/chunk-ZZ4YQ474.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
|
@@ -6,13 +6,20 @@ import type {
|
|
|
6
6
|
RenderGraphError,
|
|
7
7
|
ResolveContext,
|
|
8
8
|
} from '@forgeax/engine-render-graph';
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
type Buffer,
|
|
11
|
+
RhiError,
|
|
12
|
+
type Texture,
|
|
13
|
+
type TextureFormat,
|
|
14
|
+
type TextureView,
|
|
15
|
+
} from '@forgeax/engine-rhi';
|
|
10
16
|
import { ok, type PassKind, type PassSelector, type Result } from '@forgeax/engine-types';
|
|
11
17
|
import {
|
|
12
18
|
GPU_TEXTURE_USAGE_COPY_SRC,
|
|
13
19
|
GPU_TEXTURE_USAGE_RENDER_ATTACHMENT,
|
|
14
20
|
GPU_TEXTURE_USAGE_TEXTURE_BINDING,
|
|
15
21
|
} from './gpu-texture-usage';
|
|
22
|
+
import { GPU_BUFFER_USAGE_COPY_DST, GPU_BUFFER_USAGE_MAP_READ } from './gpu-usage';
|
|
16
23
|
import { buildPerFrameBindGroups } from './record/frame-lighting';
|
|
17
24
|
import { encodeMainPass } from './record/main-pass';
|
|
18
25
|
import type {
|
|
@@ -88,6 +95,136 @@ function resolvedDepthView(
|
|
|
88
95
|
return view.value;
|
|
89
96
|
}
|
|
90
97
|
|
|
98
|
+
export type TypedFrameObservationDomain = 'linear-hdr' | 'linear-ldr' | 'final-srgb';
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* One graph-owned copy destination for a receipt-bound color-domain capture.
|
|
102
|
+
* The buffer is created by the same encoder transaction as the source copy;
|
|
103
|
+
* callers map it only after the matching receipt fence resolves.
|
|
104
|
+
*/
|
|
105
|
+
export interface TypedFrameObservationCapture {
|
|
106
|
+
readonly domain: TypedFrameObservationDomain;
|
|
107
|
+
/** Native source format is required so consumers can decode BGRA surfaces truthfully. */
|
|
108
|
+
readonly format: TextureFormat;
|
|
109
|
+
readonly device: import('@forgeax/engine-rhi').RhiDevice;
|
|
110
|
+
readonly texture: Texture;
|
|
111
|
+
readonly buffer: Buffer;
|
|
112
|
+
readonly frameNumber: number;
|
|
113
|
+
readonly deviceGeneration: number;
|
|
114
|
+
readonly graphGeneration: number;
|
|
115
|
+
readonly backendId: string;
|
|
116
|
+
readonly width: number;
|
|
117
|
+
readonly height: number;
|
|
118
|
+
readonly bytesPerRow: number;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function observationBytesPerPixel(format: TextureFormat): number {
|
|
122
|
+
return format === 'rgba16float' ? 8 : 4;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function observationBytesPerRow(width: number, format: TextureFormat): number {
|
|
126
|
+
const unaligned = width * observationBytesPerPixel(format);
|
|
127
|
+
return Math.ceil(unaligned / 256) * 256;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function addObservationCapturePass(
|
|
131
|
+
graph: RenderGraphBuilder<RenderPipelineFrame>,
|
|
132
|
+
target: RenderPipelineTarget,
|
|
133
|
+
domain: TypedFrameObservationDomain,
|
|
134
|
+
): Result<void, RenderGraphError> {
|
|
135
|
+
return graph.addCopyPass(`${domain}-observation`, {
|
|
136
|
+
accesses: [{ resource: target.view, usage: 'copy-src' }],
|
|
137
|
+
encode: ({ encoder, frame, resources }) => {
|
|
138
|
+
const texture = resources.texture(target.texture);
|
|
139
|
+
if (!texture.ok) throw texture.error;
|
|
140
|
+
const internal = frame as _InternalRenderPipelineContext;
|
|
141
|
+
// The RenderSystem frame counter is the identity used by
|
|
142
|
+
// observeCurrentFrame after this submission. The public receipt counter
|
|
143
|
+
// is intentionally separate and is only used by receipt-bound copies;
|
|
144
|
+
// using observationFrameId here makes a current source look stale by one
|
|
145
|
+
// frame to the legacy same-frame observer.
|
|
146
|
+
if (domain === 'linear-hdr') {
|
|
147
|
+
internal.frameState.currentFrameObservationSource = {
|
|
148
|
+
texture: texture.value,
|
|
149
|
+
descriptor: {
|
|
150
|
+
texture: texture.value,
|
|
151
|
+
format: target.format,
|
|
152
|
+
size: { width: frame.targetW, height: frame.targetH },
|
|
153
|
+
usage:
|
|
154
|
+
GPU_TEXTURE_USAGE_COPY_SRC |
|
|
155
|
+
GPU_TEXTURE_USAGE_RENDER_ATTACHMENT |
|
|
156
|
+
GPU_TEXTURE_USAGE_TEXTURE_BINDING,
|
|
157
|
+
sample: target.sampleCount,
|
|
158
|
+
},
|
|
159
|
+
frameId: internal.frameState.frameNumber,
|
|
160
|
+
pipelineId: 'forgeax::standard',
|
|
161
|
+
backendId: frame.runtime.device.caps.backendKind,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
const owner = frame.runtime.observationCaptureOwner;
|
|
165
|
+
if (owner === undefined) {
|
|
166
|
+
// Standalone graph-contract tests do not assemble a renderer owner.
|
|
167
|
+
// Preserve the legacy HDR source projection without allocating an
|
|
168
|
+
// unowned readback buffer; production frames always inject the owner.
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
// Observation is an explicit host demand, not a property of every
|
|
172
|
+
// submitted frame. The graph keeps its copy pass declaration so the
|
|
173
|
+
// committed topology remains inspectable, but ordinary production
|
|
174
|
+
// frames must not allocate a MAP_READ buffer or enqueue a copy.
|
|
175
|
+
// The source projection is different: the Renderer owns the current
|
|
176
|
+
// linear-HDR texture for every submitted frame, even when no host asked
|
|
177
|
+
// for a MAP_READ copy. Consumers such as the auto-exposure meter use
|
|
178
|
+
// this same-frame source; publishing it only on an explicit capture
|
|
179
|
+
// would make ordinary frames appear to have no observation source.
|
|
180
|
+
if (!frame.runtime.observationCaptureDomains?.includes(domain)) return;
|
|
181
|
+
const width = frame.targetW;
|
|
182
|
+
const height = frame.targetH;
|
|
183
|
+
const bytesPerRow = observationBytesPerRow(width, target.format);
|
|
184
|
+
const created = frame.runtime.device.createBuffer({
|
|
185
|
+
label: `${domain}-observation-readback`,
|
|
186
|
+
size: bytesPerRow * height,
|
|
187
|
+
usage: GPU_BUFFER_USAGE_COPY_DST | GPU_BUFFER_USAGE_MAP_READ,
|
|
188
|
+
mappedAtCreation: false,
|
|
189
|
+
});
|
|
190
|
+
if (!created.ok) throw created.error;
|
|
191
|
+
try {
|
|
192
|
+
encoder.copyTextureToBuffer(
|
|
193
|
+
{ texture: texture.value, mipLevel: 0, origin: { x: 0, y: 0, z: 0 } },
|
|
194
|
+
{ buffer: created.value, bytesPerRow, rowsPerImage: height },
|
|
195
|
+
{ width, height, depthOrArrayLayers: 1 },
|
|
196
|
+
);
|
|
197
|
+
// Publish the graph fence through the renderer runtime before any
|
|
198
|
+
// capture is registered. The assembly consumes this renderer-issued
|
|
199
|
+
// value for the receipt; it never derives the expected fence from the
|
|
200
|
+
// first capture in an otherwise untrusted capture set.
|
|
201
|
+
frame.runtime.observationGraphGeneration = internal.frameState.graphGeneration;
|
|
202
|
+
owner.register({
|
|
203
|
+
domain,
|
|
204
|
+
format: target.format,
|
|
205
|
+
device: frame.runtime.device,
|
|
206
|
+
texture: texture.value,
|
|
207
|
+
buffer: created.value,
|
|
208
|
+
// The assembly reserves this public receipt identity before encoding.
|
|
209
|
+
// The frame-state counter is an internal record counter and is not an
|
|
210
|
+
// identity source when non-receipt frames are recorded.
|
|
211
|
+
frameNumber: frame.runtime.observationFrameId ?? internal.frameState.frameNumber,
|
|
212
|
+
deviceGeneration: frame.runtime.deviceGeneration ?? 0,
|
|
213
|
+
graphGeneration: internal.frameState.graphGeneration,
|
|
214
|
+
backendId: frame.runtime.device.caps.backendKind,
|
|
215
|
+
width,
|
|
216
|
+
height,
|
|
217
|
+
bytesPerRow,
|
|
218
|
+
});
|
|
219
|
+
} catch (cause) {
|
|
220
|
+
const destroyed = frame.runtime.device.destroyBuffer(created.value);
|
|
221
|
+
if (!destroyed.ok) throw destroyed.error;
|
|
222
|
+
throw cause;
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
|
|
91
228
|
function legacyResolver(
|
|
92
229
|
resources: GraphResourceResolver,
|
|
93
230
|
targets: Readonly<Record<string, RenderPipelineTarget>>,
|
|
@@ -131,9 +268,13 @@ export interface TypedScenePassOptions {
|
|
|
131
268
|
readonly passKind?: PassKind | undefined;
|
|
132
269
|
readonly colorTargets?: readonly RenderPipelineTarget[] | undefined;
|
|
133
270
|
readonly clearColor?: readonly [number, number, number, number] | undefined;
|
|
134
|
-
readonly colorLoadOp?: GPULoadOp | undefined;
|
|
271
|
+
readonly colorLoadOp?: GPULoadOp | readonly GPULoadOp[] | undefined;
|
|
135
272
|
readonly depthLoadOp?: GPULoadOp | undefined;
|
|
136
273
|
readonly recordMode?: 'opaque' | 'transmission' | 'transparent' | undefined;
|
|
274
|
+
/** Exclude material/pass pairs consumed by an earlier graph lane. */
|
|
275
|
+
readonly excludeSelector?: PassSelector | undefined;
|
|
276
|
+
/** Require material membership in another lane without selecting its entries. */
|
|
277
|
+
readonly includeSelector?: PassSelector | undefined;
|
|
137
278
|
readonly transmissionBackdrop?: GraphTextureView | undefined;
|
|
138
279
|
readonly extraAccesses?: readonly GraphAccess[] | undefined;
|
|
139
280
|
readonly gpuDriven?: RenderPipelineGpuDrivenProjection | undefined;
|
|
@@ -171,7 +312,10 @@ export function addTypedScenePass(
|
|
|
171
312
|
...(index === 0 && options.resolve !== undefined
|
|
172
313
|
? { resolveTarget: options.resolve.view }
|
|
173
314
|
: {}),
|
|
174
|
-
loadOp:
|
|
315
|
+
loadOp:
|
|
316
|
+
(typeof options.colorLoadOp === 'string'
|
|
317
|
+
? options.colorLoadOp
|
|
318
|
+
: options.colorLoadOp?.[index]) ?? 'clear',
|
|
175
319
|
storeOp: 'store',
|
|
176
320
|
clearValue: {
|
|
177
321
|
r: options.clearColor?.[0] ?? 0,
|
|
@@ -228,47 +372,66 @@ export function addTypedScenePass(
|
|
|
228
372
|
true,
|
|
229
373
|
internal.standardLighting,
|
|
230
374
|
);
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
375
|
+
// GPU-driven indirect draws are encoded by `recordMainPass` after it
|
|
376
|
+
// has populated the frame-global material bind-group receipt. Encoding
|
|
377
|
+
// here would race that producer and either observe an empty receipt or
|
|
378
|
+
// issue the same indirect draw twice. Keep this wrapper responsible for
|
|
379
|
+
// resolving graph-owned attachments; the main-pass owner orders the
|
|
380
|
+
// material producer before the GPU consumer.
|
|
234
381
|
// The context carries the frame's primary occlusion projection for
|
|
235
382
|
// pipeline construction, but only the pass that owns that projection
|
|
236
383
|
// may begin its query. Forwarding it to deferred/temporal scene passes
|
|
237
384
|
// leaves their descriptors without an occlusionQuerySet and makes Dawn
|
|
238
385
|
// reject beginOcclusionQuery in those passes.
|
|
239
386
|
const activeOcclusion = options.occlusion;
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
},
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
387
|
+
const passContext: _InternalRenderPipelineContext = {
|
|
388
|
+
...internal,
|
|
389
|
+
...(activeOcclusion === undefined ? {} : { occlusion: activeOcclusion }),
|
|
390
|
+
geometryColorView: colorViews[0] ?? null,
|
|
391
|
+
geometryDepthView: depthView,
|
|
392
|
+
geometryColorResolveView: resolveView,
|
|
393
|
+
transparentColorFormat: colorTargets[0]?.format as GPUTextureFormat,
|
|
394
|
+
...((options.passKind === 'deferred'
|
|
395
|
+
? colorTargets[3]?.format
|
|
396
|
+
: colorTargets[1]?.format) === 'rgba16float'
|
|
397
|
+
? { reflectionFallbackColorFormat: 'rgba16float' as const }
|
|
398
|
+
: {}),
|
|
399
|
+
msaaActive: colorTargets[0]?.sampleCount === 4,
|
|
400
|
+
viewBindGroup: groups.viewBindGroup,
|
|
401
|
+
meshBindGroup: groups.meshBindGroup,
|
|
402
|
+
hdrpClusterBindGroup: groups.hdrpClusterBindGroup,
|
|
403
|
+
hdrpClusterMembershipBindGroup: groups.hdrpClusterMembershipBindGroup,
|
|
404
|
+
...(ssao === undefined ? {} : { hdrpSsaoBlurredView: ssao }),
|
|
405
|
+
};
|
|
406
|
+
encodeMainPass(passContext, pass, options.selector, {
|
|
407
|
+
colorViews,
|
|
408
|
+
colorFormats: colorTargets.map((target) => target.format as GPUTextureFormat),
|
|
409
|
+
depthView,
|
|
410
|
+
passKind: options.passKind ?? 'forward',
|
|
411
|
+
...(options.clearColor === undefined ? {} : { clearColor: options.clearColor }),
|
|
412
|
+
...(options.recordMode === undefined ? {} : { recordMode: options.recordMode }),
|
|
413
|
+
...(options.excludeSelector === undefined
|
|
414
|
+
? {}
|
|
415
|
+
: { excludeSelector: options.excludeSelector }),
|
|
416
|
+
...(options.includeSelector === undefined
|
|
417
|
+
? {}
|
|
418
|
+
: { includeSelector: options.includeSelector }),
|
|
419
|
+
...(options.transmissionBackdrop === undefined
|
|
420
|
+
? {}
|
|
421
|
+
: { transmissionBackdropView: transmissionBackdrop }),
|
|
422
|
+
...(options.gpuDriven === undefined
|
|
423
|
+
? {}
|
|
424
|
+
: { gpuDriven: { projection: options.gpuDriven, resources } }),
|
|
425
|
+
});
|
|
426
|
+
// encodeMainPass receives a pass-local context so attachment and
|
|
427
|
+
// bind-group overrides stay isolated. Its material UBO payload cache is
|
|
428
|
+
// frame-owned, however: return it to the original context so the next
|
|
429
|
+
// Standard scene pass can reuse the same validated slot projection.
|
|
430
|
+
// This remains frame-local and keeps the existing writeBuffer, texture
|
|
431
|
+
// readiness, UV-scale, and missing-texture diagnostic behavior intact.
|
|
432
|
+
if (passContext.materialUboPayloadCache !== undefined) {
|
|
433
|
+
internal.materialUboPayloadCache = passContext.materialUboPayloadCache;
|
|
434
|
+
}
|
|
272
435
|
if (activeOcclusion !== undefined) {
|
|
273
436
|
const proxyResult = activeOcclusion.encodeProxyBounds(pass);
|
|
274
437
|
if (!proxyResult.ok) throw proxyResult.error;
|
|
@@ -282,30 +445,8 @@ export function addTypedFrameObservationPass(
|
|
|
282
445
|
target: RenderPipelineTarget,
|
|
283
446
|
pipelineId: 'forgeax::standard',
|
|
284
447
|
): Result<void, RenderGraphError> {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
encode: ({ frame, resources }) => {
|
|
288
|
-
const internal = frame as _InternalRenderPipelineContext;
|
|
289
|
-
const texture = resources.texture(target.texture);
|
|
290
|
-
if (!texture.ok) throw texture.error;
|
|
291
|
-
internal.frameState.currentFrameObservationSource = {
|
|
292
|
-
texture: texture.value,
|
|
293
|
-
descriptor: {
|
|
294
|
-
texture: texture.value,
|
|
295
|
-
format: target.format,
|
|
296
|
-
size: { width: frame.targetW, height: frame.targetH },
|
|
297
|
-
usage:
|
|
298
|
-
GPU_TEXTURE_USAGE_COPY_SRC |
|
|
299
|
-
GPU_TEXTURE_USAGE_RENDER_ATTACHMENT |
|
|
300
|
-
GPU_TEXTURE_USAGE_TEXTURE_BINDING,
|
|
301
|
-
sample: target.sampleCount,
|
|
302
|
-
},
|
|
303
|
-
frameId: internal.frameState.frameNumber,
|
|
304
|
-
pipelineId,
|
|
305
|
-
backendId: frame.runtime.device.caps.backendKind,
|
|
306
|
-
};
|
|
307
|
-
},
|
|
308
|
-
});
|
|
448
|
+
void pipelineId;
|
|
449
|
+
return addObservationCapturePass(graph, target, 'linear-hdr');
|
|
309
450
|
}
|
|
310
451
|
|
|
311
452
|
/** Publish the same-frame fallback MRT as a detached, copy-readable source. */
|
|
@@ -508,6 +649,8 @@ export function addTypedSsaoPasses(
|
|
|
508
649
|
export interface TypedFullscreenPassOptions {
|
|
509
650
|
readonly name: string;
|
|
510
651
|
readonly shader: string;
|
|
652
|
+
/** Optional fragment entry point override for composed fullscreen shaders. */
|
|
653
|
+
readonly fragmentEntryPoint?: string | undefined;
|
|
511
654
|
readonly input: RenderPipelineTarget;
|
|
512
655
|
readonly output: RenderPipelineTarget;
|
|
513
656
|
readonly outputOnly?: boolean | undefined;
|
|
@@ -525,12 +668,16 @@ export interface TypedFullscreenPassOptions {
|
|
|
525
668
|
|
|
526
669
|
export interface TypedTemporalResolveTargets {
|
|
527
670
|
readonly scene: RenderPipelineTarget;
|
|
671
|
+
/** Optional producer-owned R-channel reactivity in current screen space. */
|
|
672
|
+
readonly secondaryReactivity?: GraphTextureView;
|
|
528
673
|
readonly currentTemporal: RenderPipelineTarget;
|
|
529
674
|
readonly depth: RenderPipelineTarget;
|
|
530
675
|
readonly historyColor: RenderPipelineTarget;
|
|
531
676
|
readonly historyTemporal: RenderPipelineTarget;
|
|
677
|
+
readonly historyStability: RenderPipelineTarget;
|
|
532
678
|
readonly writeColor: RenderPipelineTarget;
|
|
533
679
|
readonly writeTemporal: RenderPipelineTarget;
|
|
680
|
+
readonly writeStability: RenderPipelineTarget;
|
|
534
681
|
}
|
|
535
682
|
|
|
536
683
|
export function addTypedTemporalResolvePass(
|
|
@@ -543,8 +690,13 @@ export function addTypedTemporalResolvePass(
|
|
|
543
690
|
{ resource: targets.currentTemporal.view, usage: 'sampled-read' },
|
|
544
691
|
{ resource: targets.historyColor.view, usage: 'sampled-read' },
|
|
545
692
|
{ resource: targets.historyTemporal.view, usage: 'sampled-read' },
|
|
693
|
+
{ resource: targets.historyStability.view, usage: 'sampled-read' },
|
|
694
|
+
...(targets.secondaryReactivity === undefined
|
|
695
|
+
? []
|
|
696
|
+
: [{ resource: targets.secondaryReactivity, usage: 'sampled-read' as const }]),
|
|
546
697
|
{ resource: targets.writeColor.view, usage: 'color-attachment' },
|
|
547
698
|
{ resource: targets.writeTemporal.view, usage: 'color-attachment' },
|
|
699
|
+
{ resource: targets.writeStability.view, usage: 'color-attachment' },
|
|
548
700
|
],
|
|
549
701
|
colorAttachments: [
|
|
550
702
|
{
|
|
@@ -559,6 +711,12 @@ export function addTypedTemporalResolvePass(
|
|
|
559
711
|
storeOp: 'store',
|
|
560
712
|
clearValue: { r: 0, g: 0, b: 0, a: 0 },
|
|
561
713
|
},
|
|
714
|
+
{
|
|
715
|
+
view: targets.writeStability.view,
|
|
716
|
+
loadOp: 'clear',
|
|
717
|
+
storeOp: 'store',
|
|
718
|
+
clearValue: { r: 0, g: 0, b: 0, a: 0 },
|
|
719
|
+
},
|
|
562
720
|
],
|
|
563
721
|
encode: ({ pass, frame, resources }) => {
|
|
564
722
|
const internal = frame as _InternalRenderPipelineContext;
|
|
@@ -574,11 +732,12 @@ export function addTypedTemporalResolvePass(
|
|
|
574
732
|
const currentTemporal = resolvedView(resources, targets.currentTemporal.view);
|
|
575
733
|
const historyColor = resolvedView(resources, targets.historyColor.view);
|
|
576
734
|
const historyTemporal = resolvedView(resources, targets.historyTemporal.view);
|
|
735
|
+
const historyStability = resolvedView(resources, targets.historyStability.view);
|
|
577
736
|
const params = getTemporalParamsBuffer(state);
|
|
578
|
-
if (params === undefined || built.sampler === null) {
|
|
737
|
+
if (params === undefined || built.sampler === null || built.temporalSampler === null) {
|
|
579
738
|
throwTemporalEncodeFailure('TAA resolve has an admitted params buffer and sampler');
|
|
580
739
|
}
|
|
581
|
-
const payload = new ArrayBuffer(
|
|
740
|
+
const payload = new ArrayBuffer(32);
|
|
582
741
|
new Float32Array(payload).set([
|
|
583
742
|
frame.camera.temporal?.currentJitterUv?.[0] ?? 0,
|
|
584
743
|
frame.camera.temporal?.currentJitterUv?.[1] ?? 0,
|
|
@@ -586,6 +745,7 @@ export function addTypedTemporalResolvePass(
|
|
|
586
745
|
const words = new Uint32Array(payload);
|
|
587
746
|
words[2] = state.valid && (frame.camera.temporal?.historyValid ?? true) ? 1 : 0;
|
|
588
747
|
words[3] = frame.camera.temporal?.temporalFrameIndex ?? 0;
|
|
748
|
+
words[4] = Number(targets.secondaryReactivity !== undefined);
|
|
589
749
|
const written = frame.runtime.device.queue.writeBuffer(params, 0, new Uint8Array(payload));
|
|
590
750
|
if (!written.ok)
|
|
591
751
|
throwTemporalEncodeFailure('TAA resolve params upload succeeds', written.error);
|
|
@@ -598,20 +758,31 @@ export function addTypedTemporalResolvePass(
|
|
|
598
758
|
{ binding: 2, resource: { kind: 'textureView', value: historyColor } },
|
|
599
759
|
{ binding: 3, resource: { kind: 'sampler', value: built.sampler } },
|
|
600
760
|
{ binding: 4, resource: { kind: 'textureView', value: historyTemporal } },
|
|
601
|
-
{ binding: 5, resource: { kind: 'sampler', value: built.
|
|
761
|
+
{ binding: 5, resource: { kind: 'sampler', value: built.temporalSampler } },
|
|
602
762
|
{ binding: 6, resource: { kind: 'textureView', value: currentTemporal } },
|
|
603
|
-
{ binding: 7, resource: { kind: 'sampler', value: built.
|
|
763
|
+
{ binding: 7, resource: { kind: 'sampler', value: built.temporalSampler } },
|
|
604
764
|
{ binding: 8, resource: { kind: 'buffer', value: { buffer: params } } },
|
|
765
|
+
{ binding: 9, resource: { kind: 'textureView', value: historyStability } },
|
|
766
|
+
{
|
|
767
|
+
binding: 10,
|
|
768
|
+
resource: {
|
|
769
|
+
kind: 'textureView',
|
|
770
|
+
value:
|
|
771
|
+
targets.secondaryReactivity === undefined
|
|
772
|
+
? currentTemporal
|
|
773
|
+
: resolvedView(resources, targets.secondaryReactivity),
|
|
774
|
+
},
|
|
775
|
+
},
|
|
605
776
|
] as never,
|
|
606
777
|
});
|
|
607
778
|
if (!bindGroup.ok) {
|
|
608
779
|
throwTemporalEncodeFailure('TAA resolve bind group creation succeeds', bindGroup.error);
|
|
609
780
|
}
|
|
610
|
-
const pipeline = frame.runtime.getPostProcessPipeline?.(
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
targets.
|
|
614
|
-
);
|
|
781
|
+
const pipeline = frame.runtime.getPostProcessPipeline?.('forgeax.taa-resolve', built.layout, [
|
|
782
|
+
targets.writeColor.format,
|
|
783
|
+
targets.writeTemporal.format,
|
|
784
|
+
targets.writeStability.format,
|
|
785
|
+
] as GPUTextureFormat[]);
|
|
615
786
|
if (pipeline === null || pipeline === undefined) {
|
|
616
787
|
throwTemporalEncodeFailure('TAA resolve pipeline is ready before frame encoding');
|
|
617
788
|
}
|
|
@@ -680,6 +851,9 @@ export function addTypedFullscreenPass(
|
|
|
680
851
|
: {
|
|
681
852
|
paramsOverride: options.paramsTransform(frame.postProcessParams.get(options.shader)),
|
|
682
853
|
}),
|
|
854
|
+
...(options.fragmentEntryPoint === undefined
|
|
855
|
+
? {}
|
|
856
|
+
: { fragmentEntryPoint: options.fragmentEntryPoint }),
|
|
683
857
|
});
|
|
684
858
|
},
|
|
685
859
|
});
|
|
@@ -746,11 +920,20 @@ export function addTypedOutputTransformPass(
|
|
|
746
920
|
graph: RenderGraphBuilder<RenderPipelineFrame>,
|
|
747
921
|
input: RenderPipelineTarget,
|
|
748
922
|
output: RenderPipelineTarget,
|
|
749
|
-
options: {
|
|
923
|
+
options: {
|
|
924
|
+
readonly outputOnly?: boolean;
|
|
925
|
+
readonly dither?: boolean;
|
|
926
|
+
readonly name?: string | undefined;
|
|
927
|
+
readonly fragmentEntryPoint?: string | undefined;
|
|
928
|
+
} = {},
|
|
750
929
|
): Result<void, RenderGraphError> {
|
|
751
930
|
const outputOnly = options.outputOnly ?? false;
|
|
752
|
-
|
|
753
|
-
|
|
931
|
+
if (options.fragmentEntryPoint === 'fs_encode_only') {
|
|
932
|
+
const ldrCapture = addObservationCapturePass(graph, input, 'linear-ldr');
|
|
933
|
+
if (!ldrCapture.ok) return ldrCapture;
|
|
934
|
+
}
|
|
935
|
+
const transformed = addTypedFullscreenPass(graph, {
|
|
936
|
+
name: options.name ?? (outputOnly ? 'present' : 'output-transform'),
|
|
754
937
|
shader: STANDARD_OUTPUT_TRANSFORM_FEATURE_ID,
|
|
755
938
|
input,
|
|
756
939
|
output,
|
|
@@ -770,5 +953,14 @@ export function addTypedOutputTransformPass(
|
|
|
770
953
|
},
|
|
771
954
|
}
|
|
772
955
|
: {}),
|
|
956
|
+
...(options.fragmentEntryPoint === undefined
|
|
957
|
+
? {}
|
|
958
|
+
: { fragmentEntryPoint: options.fragmentEntryPoint }),
|
|
773
959
|
});
|
|
960
|
+
if (!transformed.ok) return transformed;
|
|
961
|
+
if (options.fragmentEntryPoint === 'fs_encode_only') {
|
|
962
|
+
const finalCapture = addObservationCapturePass(graph, output, 'final-srgb');
|
|
963
|
+
if (!finalCapture.ok) return finalCapture;
|
|
964
|
+
}
|
|
965
|
+
return ok(undefined);
|
|
774
966
|
}
|