@forgeax/engine-render 0.1.32 → 0.1.33

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.
Files changed (250) hide show
  1. package/README.md +379 -33
  2. package/dist/assembly/analytic-fog-registration.d.ts +3 -0
  3. package/dist/assembly/analytic-fog-registration.d.ts.map +1 -0
  4. package/dist/assembly/fxaa-registration.d.ts +4 -0
  5. package/dist/assembly/fxaa-registration.d.ts.map +1 -0
  6. package/dist/assembly/lod-observation.d.ts +4 -0
  7. package/dist/assembly/lod-observation.d.ts.map +1 -0
  8. package/dist/assembly/motion-blur-registration.d.ts +3 -0
  9. package/dist/assembly/motion-blur-registration.d.ts.map +1 -0
  10. package/dist/assembly/renderer-facade.d.ts.map +1 -1
  11. package/dist/assembly/temporal-post-process-prewarm.d.ts +13 -0
  12. package/dist/assembly/temporal-post-process-prewarm.d.ts.map +1 -0
  13. package/dist/assembly/webgpu-ready-contract.d.ts +4 -3
  14. package/dist/assembly/webgpu-ready-contract.d.ts.map +1 -1
  15. package/dist/assembly/webgpu-ready.d.ts +1 -1
  16. package/dist/assembly/webgpu-ready.d.ts.map +1 -1
  17. package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
  18. package/dist/bloom-admission.d.ts +13 -0
  19. package/dist/bloom-admission.d.ts.map +1 -0
  20. package/dist/{chunk-DRR7D3KX.mjs → chunk-3RTCJTH4.mjs} +12 -9
  21. package/dist/chunk-3RTCJTH4.mjs.map +1 -0
  22. package/dist/{chunk-S665NJNF.mjs → chunk-LEAXOMYJ.mjs} +3 -3
  23. package/dist/{chunk-S665NJNF.mjs.map → chunk-LEAXOMYJ.mjs.map} +1 -1
  24. package/dist/{chunk-6TFBXLRJ.mjs → chunk-NB2S7ZRX.mjs} +155 -11
  25. package/dist/chunk-NB2S7ZRX.mjs.map +1 -0
  26. package/dist/{chunk-LULCA3OF.mjs → chunk-NNQL7CB3.mjs} +4 -4
  27. package/dist/{chunk-LULCA3OF.mjs.map → chunk-NNQL7CB3.mjs.map} +1 -1
  28. package/dist/{chunk-4NNZQCL3.mjs → chunk-OO3DRYK7.mjs} +66 -200
  29. package/dist/chunk-OO3DRYK7.mjs.map +1 -0
  30. package/dist/{chunk-GWCEMDVR.mjs → chunk-PLAXOOX5.mjs} +232 -7
  31. package/dist/chunk-PLAXOOX5.mjs.map +1 -0
  32. package/dist/{chunk-JRIPCMYC.mjs → chunk-VOZWDM3L.mjs} +283 -193
  33. package/dist/chunk-VOZWDM3L.mjs.map +1 -0
  34. package/dist/{chunk-JCIRYQ4V.mjs → chunk-ZDQWGQW7.mjs} +10 -4
  35. package/dist/chunk-ZDQWGQW7.mjs.map +1 -0
  36. package/dist/components/atmosphere.d.ts +2 -0
  37. package/dist/components/atmosphere.d.ts.map +1 -1
  38. package/dist/components/camera.d.ts +20 -4
  39. package/dist/components/camera.d.ts.map +1 -1
  40. package/dist/components/mesh-filter.d.ts +6 -5
  41. package/dist/components/mesh-filter.d.ts.map +1 -1
  42. package/dist/components/motion-blur.d.ts +1 -0
  43. package/dist/components/motion-blur.d.ts.map +1 -1
  44. package/dist/construct-renderer.mjs +2865 -526
  45. package/dist/construct-renderer.mjs.map +1 -1
  46. package/dist/device/gpu-residency.d.ts +6 -0
  47. package/dist/device/gpu-residency.d.ts.map +1 -1
  48. package/dist/environment/analytic-fog.d.ts +6 -0
  49. package/dist/environment/analytic-fog.d.ts.map +1 -0
  50. package/dist/errors/render.d.ts +6 -2
  51. package/dist/errors/render.d.ts.map +1 -1
  52. package/dist/extract/camera.d.ts.map +1 -1
  53. package/dist/extract/contracts.d.ts +7 -0
  54. package/dist/extract/contracts.d.ts.map +1 -1
  55. package/dist/extract/environment.d.ts +2 -0
  56. package/dist/extract/environment.d.ts.map +1 -1
  57. package/dist/features/error-reporting.d.ts +13 -0
  58. package/dist/features/error-reporting.d.ts.map +1 -0
  59. package/dist/features/host.d.ts +5 -0
  60. package/dist/features/host.d.ts.map +1 -1
  61. package/dist/features/motion-blur/motion-blur-feature.d.ts +20 -2
  62. package/dist/features/motion-blur/motion-blur-feature.d.ts.map +1 -1
  63. package/dist/features/motion-blur/motion-blur-params.d.ts +21 -0
  64. package/dist/features/motion-blur/motion-blur-params.d.ts.map +1 -1
  65. package/dist/features/motion-blur/motion-blur-runtime.d.ts +54 -0
  66. package/dist/features/motion-blur/motion-blur-runtime.d.ts.map +1 -0
  67. package/dist/features/plan.d.ts +7 -4
  68. package/dist/features/plan.d.ts.map +1 -1
  69. package/dist/features/prepared-gpu-work.d.ts +9 -5
  70. package/dist/features/prepared-gpu-work.d.ts.map +1 -1
  71. package/dist/features/render-graph-compute.d.ts.map +1 -1
  72. package/dist/features/render-graph-contribution.d.ts.map +1 -1
  73. package/dist/gpu-driven/material-artifacts.d.ts.map +1 -1
  74. package/dist/gpu-driven/prepared-draw.d.ts +7 -0
  75. package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
  76. package/dist/gpu-driven/production-raster.d.ts +3 -1
  77. package/dist/gpu-driven/production-raster.d.ts.map +1 -1
  78. package/dist/gpu-driven/view-gpu.d.ts +9 -0
  79. package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
  80. package/dist/gpu-scene.d.ts +6 -1
  81. package/dist/gpu-scene.d.ts.map +1 -1
  82. package/dist/index.d.ts +5 -2
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.mjs +5 -5
  85. package/dist/inspection-types.d.ts +43 -2
  86. package/dist/inspection-types.d.ts.map +1 -1
  87. package/dist/instances.d.ts +8 -1
  88. package/dist/instances.d.ts.map +1 -1
  89. package/dist/internal.mjs +6 -6
  90. package/dist/pipeline/standard-post.d.ts +28 -19
  91. package/dist/pipeline/standard-post.d.ts.map +1 -1
  92. package/dist/pipeline-spec.d.ts +2 -2
  93. package/dist/record/frame-snapshot.d.ts +3 -0
  94. package/dist/record/frame-snapshot.d.ts.map +1 -1
  95. package/dist/record/frame-targets.d.ts.map +1 -1
  96. package/dist/record/frame.d.ts +5 -2
  97. package/dist/record/frame.d.ts.map +1 -1
  98. package/dist/record/main-pass-geometry.d.ts.map +1 -1
  99. package/dist/record/mesh-ssbo.d.ts +6 -5
  100. package/dist/record/mesh-ssbo.d.ts.map +1 -1
  101. package/dist/record/render-context.d.ts +12 -28
  102. package/dist/record/render-context.d.ts.map +1 -1
  103. package/dist/record/shadow-pass.d.ts.map +1 -1
  104. package/dist/record/skybox-post-pass.d.ts +5 -3
  105. package/dist/record/skybox-post-pass.d.ts.map +1 -1
  106. package/dist/record/typed-frame-graph.d.ts +1 -1
  107. package/dist/record/typed-frame-graph.d.ts.map +1 -1
  108. package/dist/recovery/render-system-candidate.d.ts.map +1 -1
  109. package/dist/render-contract.d.ts +24 -4
  110. package/dist/render-contract.d.ts.map +1 -1
  111. package/dist/render-pipeline.d.ts +3 -1
  112. package/dist/render-pipeline.d.ts.map +1 -1
  113. package/dist/render-system-extract-tail.d.ts.map +1 -1
  114. package/dist/render-system-extract.d.ts +8 -1
  115. package/dist/render-system-extract.d.ts.map +1 -1
  116. package/dist/render-system.d.ts +7 -1
  117. package/dist/render-system.d.ts.map +1 -1
  118. package/dist/scene/render-scene.d.ts +2 -0
  119. package/dist/scene/render-scene.d.ts.map +1 -1
  120. package/dist/temporal/frame-coordinator.d.ts.map +1 -1
  121. package/dist/temporal/frame.d.ts +7 -0
  122. package/dist/temporal/frame.d.ts.map +1 -1
  123. package/dist/temporal/index.mjs +5 -5
  124. package/dist/temporal/view.d.ts +6 -1
  125. package/dist/temporal/view.d.ts.map +1 -1
  126. package/dist/typed-render-graph-primitives.d.ts +10 -7
  127. package/dist/typed-render-graph-primitives.d.ts.map +1 -1
  128. package/dist/volume/component.d.ts +0 -1
  129. package/dist/volume/component.d.ts.map +1 -1
  130. package/dist/volume/passes.d.ts.map +1 -1
  131. package/dist/volume/temporal.d.ts +3 -1
  132. package/dist/volume/temporal.d.ts.map +1 -1
  133. package/package.json +21 -21
  134. package/src/__tests__/analytic-fog-graph.unit.test.ts +199 -0
  135. package/src/__tests__/analytic-fog-optics.unit.test.ts +38 -0
  136. package/src/__tests__/bloom-exact-zero.unit.test.ts +112 -18
  137. package/src/__tests__/bloom-lifecycle.integration.test.ts +17 -4
  138. package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +20 -0
  139. package/src/__tests__/environment-fog-lanes.integration.test.ts +14 -0
  140. package/src/__tests__/environment-selection.unit.test.ts +12 -0
  141. package/src/__tests__/factory-contract.integration.test.ts +331 -68
  142. package/src/__tests__/frame-camera-selection.unit.test.ts +39 -1
  143. package/src/__tests__/frame-plan-contract.unit.test.ts +2 -0
  144. package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +2 -1
  145. package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +1 -1
  146. package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +1 -1
  147. package/src/__tests__/gpu-driven-view-gpu-evidence.ts +11 -0
  148. package/src/__tests__/gpu-resource-store-stride.unit.test.ts +12 -0
  149. package/src/__tests__/gpu-scene.unit.test.ts +91 -0
  150. package/src/__tests__/instances-store.unit.test.ts +75 -0
  151. package/src/__tests__/mesh-submission-lifetime.unit.test.ts +31 -0
  152. package/src/__tests__/motion-blur-compute.dawn.test.ts +583 -0
  153. package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +21 -0
  154. package/src/__tests__/prepared-graphics-lifecycle.unit.test.ts +86 -0
  155. package/src/__tests__/public-surface.test-d.ts +8 -0
  156. package/src/__tests__/render-error-code-owner.test-d.ts +2 -0
  157. package/src/__tests__/render-feature-error-reporting.unit.test.ts +24 -0
  158. package/src/__tests__/render-feature-stage-fault-recovery.unit.test.ts +23 -0
  159. package/src/__tests__/render-scene-temporal-retry.unit.test.ts +31 -0
  160. package/src/__tests__/renderer-frame-transaction.integration.test.ts +7 -1
  161. package/src/__tests__/shader-manifest-fixture.ts +4 -4
  162. package/src/__tests__/skinned-shadow-caster.test.ts +2 -0
  163. package/src/__tests__/standard-lighting-write.unit.test.ts +2 -1
  164. package/src/__tests__/standard-pipeline.dawn.test.ts +1 -1
  165. package/src/__tests__/standard-pipeline.integration.test.ts +18 -8
  166. package/src/__tests__/temporal-reset-matrix.unit.test.ts +10 -0
  167. package/src/__tests__/temporal-view.unit.test.ts +2 -1
  168. package/src/__tests__/typed-pipeline-topology.unit.test.ts +20 -4
  169. package/src/__tests__/volume-optics-oracle.unit.test.ts +3 -1
  170. package/src/__tests__/volumetric-fog-budget-recovery.integration.test.ts +177 -13
  171. package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +447 -61
  172. package/src/__tests__/volumetric-fog-temporal.unit.test.ts +27 -0
  173. package/src/__tests__/volumetric-fog-topology.unit.test.ts +19 -3
  174. package/src/assembly/analytic-fog-registration.ts +14 -0
  175. package/src/assembly/fxaa-registration.ts +17 -0
  176. package/src/assembly/lod-observation.ts +12 -0
  177. package/src/assembly/motion-blur-registration.ts +17 -0
  178. package/src/assembly/renderer-facade.ts +2 -0
  179. package/src/assembly/temporal-post-process-prewarm.ts +40 -0
  180. package/src/assembly/webgpu-ready-contract.ts +8 -3
  181. package/src/assembly/webgpu-ready.ts +181 -245
  182. package/src/assembly/webgpu-renderer.ts +16 -31
  183. package/src/bloom-admission.ts +21 -0
  184. package/src/components/__tests__/motion-blur.unit.test.ts +1 -0
  185. package/src/components/atmosphere.ts +4 -0
  186. package/src/components/camera.ts +66 -10
  187. package/src/components/mesh-filter.ts +11 -9
  188. package/src/components/motion-blur.ts +1 -0
  189. package/src/device/gpu-residency.ts +56 -12
  190. package/src/environment/analytic-fog.ts +44 -0
  191. package/src/environment/background.ts +2 -2
  192. package/src/errors/render.ts +14 -1
  193. package/src/extract/camera.ts +20 -7
  194. package/src/extract/contracts.ts +7 -0
  195. package/src/extract/environment.ts +4 -0
  196. package/src/features/error-reporting.ts +78 -0
  197. package/src/features/host.ts +25 -12
  198. package/src/features/motion-blur/__tests__/motion-blur-feature.unit.test.ts +111 -1
  199. package/src/features/motion-blur/__tests__/motion-blur-params.unit.test.ts +58 -3
  200. package/src/features/motion-blur/motion-blur-feature.ts +1519 -15
  201. package/src/features/motion-blur/motion-blur-params.ts +70 -2
  202. package/src/features/motion-blur/motion-blur-runtime.ts +176 -0
  203. package/src/features/plan.ts +25 -8
  204. package/src/features/prepared-gpu-work.ts +86 -35
  205. package/src/features/render-graph-compute.ts +13 -5
  206. package/src/features/render-graph-contribution.ts +2 -0
  207. package/src/gpu-driven/material-artifacts.ts +2 -7
  208. package/src/gpu-driven/prepared-draw.ts +15 -10
  209. package/src/gpu-driven/production-raster.ts +83 -7
  210. package/src/gpu-driven/view-gpu.ts +17 -0
  211. package/src/gpu-scene.ts +188 -21
  212. package/src/index.ts +32 -0
  213. package/src/inspection-types.ts +60 -2
  214. package/src/instances.ts +80 -1
  215. package/src/pipeline/standard-post.ts +307 -78
  216. package/src/pipeline-spec.ts +5 -5
  217. package/src/points-lines/__tests__/view-ubo.unit.test.ts +2 -1
  218. package/src/record/__tests__/temporal-payload.unit.test.ts +2 -1
  219. package/src/record/frame-snapshot.ts +5 -1
  220. package/src/record/frame-targets.ts +10 -6
  221. package/src/record/frame.ts +163 -22
  222. package/src/record/main-pass-geometry.ts +30 -1
  223. package/src/record/main-pass-sprite-draws.ts +6 -1
  224. package/src/record/mesh-ssbo.ts +43 -6
  225. package/src/record/render-context.ts +12 -28
  226. package/src/record/shadow-pass.ts +6 -1
  227. package/src/record/skybox-post-pass.ts +122 -196
  228. package/src/record/typed-frame-graph.ts +153 -9
  229. package/src/recovery/render-system-candidate.ts +22 -10
  230. package/src/render-contract.ts +23 -4
  231. package/src/render-pipeline.ts +6 -1
  232. package/src/render-system-extract-tail.ts +16 -0
  233. package/src/render-system-extract.ts +45 -13
  234. package/src/render-system.ts +255 -120
  235. package/src/scene/render-scene.ts +85 -4
  236. package/src/temporal/__tests__/temporal-frame-transaction.unit.test.ts +36 -0
  237. package/src/temporal/frame-coordinator.ts +8 -1
  238. package/src/temporal/frame.ts +20 -0
  239. package/src/temporal/view.ts +13 -2
  240. package/src/typed-render-graph-primitives.ts +121 -48
  241. package/src/volume/component.ts +0 -1
  242. package/src/volume/passes.ts +8 -4
  243. package/src/volume/resources.ts +1 -1
  244. package/src/volume/temporal.ts +11 -0
  245. package/dist/chunk-4NNZQCL3.mjs.map +0 -1
  246. package/dist/chunk-6TFBXLRJ.mjs.map +0 -1
  247. package/dist/chunk-DRR7D3KX.mjs.map +0 -1
  248. package/dist/chunk-GWCEMDVR.mjs.map +0 -1
  249. package/dist/chunk-JCIRYQ4V.mjs.map +0 -1
  250. package/dist/chunk-JRIPCMYC.mjs.map +0 -1
@@ -1,9 +1,10 @@
1
1
  import { TRANSPARENT_SORT_MODE_LAYER_Z, TRANSPARENT_SORT_MODE_LAYER_Y } from './chunk-RXZ3RGOU.mjs';
2
- import { DEFAULT_CLUSTER_GRID, DEFAULT_STANDARD_PROFILE, createIblKernelCache, MAX_LIGHTS, CLUSTER_GRID_STRIDE_U32, LIGHT_INDEX_LIST_CAPACITY, createStandardClusterLayout } from './chunk-S665NJNF.mjs';
2
+ import { DEFAULT_CLUSTER_GRID, DEFAULT_STANDARD_PROFILE, createIblKernelCache, MAX_LIGHTS, CLUSTER_GRID_STRIDE_U32, LIGHT_INDEX_LIST_CAPACITY, createStandardClusterLayout } from './chunk-LEAXOMYJ.mjs';
3
3
  import { SPRITE_PREMULTIPLIED_ALPHA_BLEND } from './chunk-BLXGONR2.mjs';
4
- import { GPU_SHADER_STAGE_COMPUTE, GPU_BUFFER_USAGE_STORAGE, GPU_BUFFER_USAGE_COPY_DST, GPU_BUFFER_USAGE_UNIFORM, createHdrpBindGroupLayoutDescriptor, COOKIE_MATRIX_BYTES, IES_SLICE_WIDTH, IES_SLICE_HEIGHT, COOKIE_SLICE_SIZE, GPU_SHADER_STAGE_VERTEX, GPU_SHADER_STAGE_FRAGMENT, GPU_BUFFER_USAGE_INDEX, GPU_BUFFER_USAGE_VERTEX, isStandardPbrMaterialShader, GPU_BUFFER_USAGE_MAP_READ, pbrSkinMeshDynamicOffsets, instanceCollectionCacheKey, worldEntityKey, gpuDrivenShadowDrawKey, SHADOW_CASTER_SHADER_ID, shadowCasterVariantSet, buildPbrMaterialUserRegionEntries, buildBindGroupLayoutDescriptor, GPU_BUFFER_USAGE_COPY_SRC, GPU_BUFFER_USAGE_INDIRECT, EXTENDED_LIGHTING_REQUIRED_SAMPLED_TEXTURES, gpuDrivenSourceDrawItemIndex, matchPass, createPbrSkinMeshBindGroupEntries, physicalTextureFields, isCanonicalStandardPbrMaterialShader, getOpaqueResourceIdentity, resolveRenderTargetMaterialSource, SPRITE_PASS_PER_INSTANCE_REGION_VARIANT_SET, isStandardPbrSkinMaterialShader, SKIN_MATERIAL_SHADER_ID, PROBE_BLEND_RECORD_BYTE_SIZE, gpuDrivenDrawKey, probeBlendRecordOffset, PROBE_BLEND_RECORD_STRIDE, materialBindGroupLayoutIdentity } from './chunk-DRR7D3KX.mjs';
5
- import { GPU_TEXTURE_USAGE_RENDER_ATTACHMENT, GPU_TEXTURE_USAGE_COPY_SRC, VertexColorVariantConflictError, EquirectProjectionFailedError, SHADOW_ATLAS_DEFAULT_LAYERS, SHADOW_ATLAS_DEFAULT_FACE_SIZE, ShadowAtlas, PointShadowAtlasUninitializedError, PointShadowAtlasBoundsViolationError, StandardClusterTransportUnavailableError, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING, GPU_TEXTURE_USAGE_COPY_DST, GPU_TEXTURE_USAGE_TEXTURE_BINDING, createVisibilityBudget, instanceUploadRangesForResident, STANDARD_OUTPUT_TRANSFORM_FEATURE_ID, StandardLightBudgetExceededError, RendererOperationError, VideoUploadUnsupportedError, StandardClusterIndexOverflowError, FXAA_POST_PROCESS_ID } from './chunk-6TFBXLRJ.mjs';
4
+ import { GPU_SHADER_STAGE_COMPUTE, GPU_BUFFER_USAGE_STORAGE, GPU_BUFFER_USAGE_COPY_DST, GPU_BUFFER_USAGE_UNIFORM, createHdrpBindGroupLayoutDescriptor, COOKIE_MATRIX_BYTES, IES_SLICE_WIDTH, IES_SLICE_HEIGHT, COOKIE_SLICE_SIZE, GPU_SHADER_STAGE_VERTEX, GPU_SHADER_STAGE_FRAGMENT, GPU_BUFFER_USAGE_INDEX, GPU_BUFFER_USAGE_VERTEX, isStandardPbrMaterialShader, GPU_BUFFER_USAGE_MAP_READ, pbrSkinMeshDynamicOffsets, instanceCollectionCacheKey, worldEntityKey, gpuDrivenShadowDrawKey, SHADOW_CASTER_SHADER_ID, shadowCasterVariantSet, buildPbrMaterialUserRegionEntries, buildBindGroupLayoutDescriptor, GPU_BUFFER_USAGE_COPY_SRC, GPU_BUFFER_USAGE_INDIRECT, EXTENDED_LIGHTING_REQUIRED_SAMPLED_TEXTURES, gpuDrivenSourceDrawItemIndex, matchPass, createPbrSkinMeshBindGroupEntries, physicalTextureFields, isCanonicalStandardPbrMaterialShader, getOpaqueResourceIdentity, resolveRenderTargetMaterialSource, SPRITE_PASS_PER_INSTANCE_REGION_VARIANT_SET, isStandardPbrSkinMaterialShader, SKIN_MATERIAL_SHADER_ID, PROBE_BLEND_RECORD_BYTE_SIZE, gpuDrivenDrawKey, probeBlendRecordOffset, PROBE_BLEND_RECORD_STRIDE, materialBindGroupLayoutIdentity } from './chunk-3RTCJTH4.mjs';
5
+ import { GPU_TEXTURE_USAGE_RENDER_ATTACHMENT, GPU_TEXTURE_USAGE_COPY_SRC, VertexColorVariantConflictError, EquirectProjectionFailedError, SHADOW_ATLAS_DEFAULT_LAYERS, SHADOW_ATLAS_DEFAULT_FACE_SIZE, ShadowAtlas, PointShadowAtlasUninitializedError, PointShadowAtlasBoundsViolationError, StandardClusterTransportUnavailableError, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT_AND_TEXTURE_BINDING, GPU_TEXTURE_USAGE_COPY_DST, GPU_TEXTURE_USAGE_TEXTURE_BINDING, createVisibilityBudget, instanceUploadRangesForResident, STANDARD_OUTPUT_TRANSFORM_FEATURE_ID, StandardLightBudgetExceededError, RendererOperationError, VideoUploadUnsupportedError, StandardClusterIndexOverflowError, FXAA_POST_PROCESS_ID } from './chunk-NB2S7ZRX.mjs';
6
6
  import { derive, ok, err as err$1, toShared, ASSET_ERROR_HINTS, deriveTextureLayout, handleSlot, resolveMaterialTextureCoordinates, KNOWN_PASS_KINDS } from '@forgeax/engine-types';
7
+ import { RenderGraphError } from '@forgeax/engine-render-graph';
7
8
  import { ok as ok$1, err, RhiError } from '@forgeax/engine-rhi';
8
9
  import { mat3, vec3, mat4 } from '@forgeax/engine-math';
9
10
  import { deriveVertexLayoutProjection, DEFAULT_VERTEX_ATTRIBUTE_MAP, deriveVertexBufferLayout, deriveVertexBufferLayoutFromProjection } from '@forgeax/engine-geometry';
@@ -11,7 +12,6 @@ import { resolveAssetHandle } from '@forgeax/engine-assets-runtime';
11
12
  import { probeVideoHighPerfUpload, VIDEO_ELEMENT_PROVIDER_KEY } from '@forgeax/engine-graphics-extras';
12
13
  import { DEFAULT_STANDARD_PBR_PARAM_SCHEMA, STANDARD_PIPELINE_PARAM_SCHEMA, GPU_DRIVEN_MATERIAL_ROW_BYTES, findVariantByKey, DEFAULT_MSDF_TEXT_PARAM_SCHEMA, DEFAULT_SPRITE_PARAM_SCHEMA, DEFAULT_UNLIT_PARAM_SCHEMA, STANDARD_PHYSICAL_TEXTURE_FIELDS, STANDARD_TEXTURE_MASK_OVERRIDE } from '@forgeax/engine-shader';
13
14
  import { isCompressedFormat, bytesPerRow, blockParamsForFormat } from '@forgeax/engine-codec';
14
- import { RenderGraphError } from '@forgeax/engine-render-graph';
15
15
 
16
16
  // src/pipeline/render-extent.ts
17
17
  function renderExtentSize(extent, domain) {
@@ -449,7 +449,7 @@ var passKindPolicyTable = {
449
449
  },
450
450
  defaultDepthOps: void 0
451
451
  },
452
- "bloom-bright": {
452
+ "bloom-downsample": {
453
453
  shape: "color-only",
454
454
  defaultColorOps: {
455
455
  loadOp: "clear",
@@ -458,7 +458,7 @@ var passKindPolicyTable = {
458
458
  },
459
459
  defaultDepthOps: void 0
460
460
  },
461
- "bloom-blur": {
461
+ "bloom-upsample": {
462
462
  shape: "color-only",
463
463
  defaultColorOps: {
464
464
  loadOp: "clear",
@@ -780,7 +780,7 @@ function buildSpecConstTable(ldrViewFormat) {
780
780
  // has sampleCount=4. Both use empty vertexLayout (fullscreen triangle, no
781
781
  // attributes) and cullMode='none' (forward cull for fullscreen-quad passthrough).
782
782
  //
783
- // Shadow-probe / fxaa / bloom 4-stage / SSAO 2-stage are lazy-build — not in
783
+ // Shadow-probe / fxaa / Bloom 10-pass / SSAO 2-stage are lazy-build — not in
784
784
  // SPEC_CONST_TABLE (R-D4 decision: only entries that are always-present on
785
785
  // every boot).
786
786
  // tonemap LDR S1 (writes to runtime-resolved swap-chain LDR view format)
@@ -853,16 +853,34 @@ var MESH_UBO_FULL_ARRAY_BYTES = 112 * 128;
853
853
  var INSTANCE_UBO_FULL_ARRAY_BYTES = 80 * 128;
854
854
  var MAX_UNIFORM_INSTANCES = 128;
855
855
  var INSTANCE_STORAGE_STRIDE_FLOATS = 32;
856
- function packInstanceStorageBuffer(transforms) {
856
+ function hasStableGenerationColumn(generations, count) {
857
+ if (generations === void 0 || generations.length !== count) return false;
858
+ const seen = /* @__PURE__ */ new Set();
859
+ for (const generation of generations) {
860
+ if (generation === 0 || seen.has(generation)) return false;
861
+ seen.add(generation);
862
+ }
863
+ return true;
864
+ }
865
+ function packInstanceStorageBuffer(transforms, previousTransforms = transforms, generations, previousGenerations) {
857
866
  const count = Math.floor(transforms.length / 16);
858
867
  const out = new Float32Array(count * INSTANCE_STORAGE_STRIDE_FLOATS);
868
+ const previousCount = Math.floor(previousTransforms.length / 16);
869
+ const generationInput = generations !== void 0 || previousGenerations !== void 0;
870
+ const identityProof = hasStableGenerationColumn(generations, count) && hasStableGenerationColumn(previousGenerations, previousCount);
871
+ const previousIndexByGeneration = identityProof ? new Map(
872
+ Array.from(previousGenerations ?? [], (generation, index) => [generation, index])
873
+ ) : void 0;
859
874
  for (let i = 0; i < count; i++) {
860
875
  const sourceBase = i * 16;
861
876
  const targetBase = i * INSTANCE_STORAGE_STRIDE_FLOATS;
877
+ const previousIndex = identityProof ? previousIndexByGeneration?.get(generations?.[i] ?? 0) : !generationInput && previousCount === count ? i : void 0;
878
+ const sameIdentity = previousIndex !== void 0 && previousIndex < previousCount;
879
+ const previousBase = (previousIndex ?? i) * 16;
862
880
  for (let k = 0; k < 16; k++) {
863
881
  const value = transforms[sourceBase + k] ?? 0;
864
882
  out[targetBase + k] = value;
865
- out[targetBase + 16 + k] = value;
883
+ out[targetBase + 16 + k] = sameIdentity ? previousTransforms[previousBase + k] ?? value : value;
866
884
  }
867
885
  }
868
886
  return out;
@@ -1008,6 +1026,7 @@ function uploadMeshSsboBatch(queue, meshStorageBuffer, validatedOrdered, foldDis
1008
1026
  _meshSsboScratchFloats[slot + 38] = 1;
1009
1027
  _meshSsboScratchFloats[slot + 43] = 1;
1010
1028
  _meshSsboScratchFloats[slot + 44] = 1;
1029
+ _meshSsboScratchFloats[slot + 45] = 1;
1011
1030
  } else {
1012
1031
  const worldFromLocal = entry.source.transform.world;
1013
1032
  for (let k = 0; k < 16; k++) _meshSsboScratchFloats[slot + k] = worldFromLocal[k] ?? 0;
@@ -1034,6 +1053,7 @@ function uploadMeshSsboBatch(queue, meshStorageBuffer, validatedOrdered, foldDis
1034
1053
  }
1035
1054
  }
1036
1055
  _meshSsboScratchFloats[slot + 44] = entry.source.temporal?.reactive === true || reactiveMaterial ? 1 : 0;
1056
+ _meshSsboScratchFloats[slot + 45] = entry.source.temporal?.motionValid === false ? 0 : 1;
1037
1057
  }
1038
1058
  }
1039
1059
  if (neededBytes > 0) {
@@ -6354,7 +6374,7 @@ function recordGeometryDraws(c, pass, matchedMaterials, materialSlotIndices, sam
6354
6374
  }
6355
6375
  }
6356
6376
  }
6357
- function uploadInstanceRanges(c, inst, buffer, ranges, storageBacked, sourceOffsetInstances = 0) {
6377
+ function uploadInstanceRanges(c, inst, buffer, ranges, storageBacked, sourceOffsetInstances = 0, previousInst = void 0) {
6358
6378
  const strideBytes = (storageBacked ? INSTANCE_STORAGE_STRIDE_FLOATS : 16) * Float32Array.BYTES_PER_ELEMENT;
6359
6379
  const uploadedRanges = [];
6360
6380
  let uploadedBytes = 0;
@@ -6366,7 +6386,20 @@ function uploadInstanceRanges(c, inst, buffer, ranges, storageBacked, sourceOffs
6366
6386
  (sourceOffsetInstances + start) * 16,
6367
6387
  (sourceOffsetInstances + end) * 16
6368
6388
  );
6369
- const payload = storageBacked ? packInstanceStorageBuffer(source) : source;
6389
+ const hasIdentityProof = inst.generations !== void 0 && previousInst?.generations !== void 0;
6390
+ const previousSource = hasIdentityProof ? previousInst?.transforms : previousInst?.transforms.subarray(
6391
+ (sourceOffsetInstances + start) * 16,
6392
+ (sourceOffsetInstances + end) * 16
6393
+ );
6394
+ const currentGenerations = inst.generations?.subarray(
6395
+ sourceOffsetInstances + start,
6396
+ sourceOffsetInstances + end
6397
+ );
6398
+ const previousGenerations = hasIdentityProof ? previousInst?.generations : previousInst?.generations?.subarray(
6399
+ sourceOffsetInstances + start,
6400
+ sourceOffsetInstances + end
6401
+ );
6402
+ const payload = storageBacked ? packInstanceStorageBuffer(source, previousSource, currentGenerations, previousGenerations) : source;
6370
6403
  const written = c.runtime.device.queue.writeBuffer(buffer, start * strideBytes, payload);
6371
6404
  if (!written.ok) {
6372
6405
  c.runtime.errorRegistry.fire(written.error);
@@ -6504,7 +6537,8 @@ function resolveStorageInstanceChunks(c, entry, inst, cap, probeBuffer, probeOff
6504
6537
  active.buffer.handle,
6505
6538
  rangesToUpload,
6506
6539
  true,
6507
- start
6540
+ start,
6541
+ entry.source.temporal?.previousInstances
6508
6542
  );
6509
6543
  for (const range of upload.ranges) {
6510
6544
  uploadedRanges.push({ start: range.start + start, end: range.end + start });
@@ -6661,7 +6695,8 @@ function resolveGeometryInstanceBuffer(c, entry, identityInstanceDraws, useProbe
6661
6695
  active.buffer.handle,
6662
6696
  rangesToUpload,
6663
6697
  false,
6664
- start
6698
+ start,
6699
+ entry.source.temporal?.previousInstances
6665
6700
  );
6666
6701
  for (const range of upload.ranges) {
6667
6702
  uploadedRanges.push({ start: range.start + start, end: range.end + start });
@@ -6781,7 +6816,9 @@ function resolveGeometryInstanceBuffer(c, entry, identityInstanceDraws, useProbe
6781
6816
  inst,
6782
6817
  active.buffer.handle,
6783
6818
  ranges,
6784
- !uniformFallback
6819
+ !uniformFallback,
6820
+ 0,
6821
+ entry.source.temporal?.previousInstances
6785
6822
  );
6786
6823
  uploadRanges = upload.ranges;
6787
6824
  uploadedBytes = upload.bytes;
@@ -7257,7 +7294,12 @@ function recordSpriteEntityDraws(c, spritePass, matchedIndices, resolveMaterialB
7257
7294
  spriteBufUsage = GPU_BUFFER_USAGE_UNIFORM | GPU_BUFFER_USAGE_COPY_DST;
7258
7295
  }
7259
7296
  {
7260
- const instancePayload = uniformFallback ? spriteInst.transforms : packInstanceStorageBuffer(spriteInst.transforms);
7297
+ const instancePayload = uniformFallback ? spriteInst.transforms : packInstanceStorageBuffer(
7298
+ spriteInst.transforms,
7299
+ spriteEntry.source.temporal?.previousInstances?.transforms,
7300
+ spriteInst.generations,
7301
+ spriteEntry.source.temporal?.previousInstances?.generations
7302
+ );
7261
7303
  const requestedBytes = instancePayload.byteLength;
7262
7304
  const cap = runtime.device.limits.maxStorageBufferBindingSize;
7263
7305
  if (typeof cap === "number" && requestedBytes > cap) {
@@ -8733,9 +8775,14 @@ var GpuDrivenView = class _GpuDrivenView {
8733
8775
  resourceGeneration = 0;
8734
8776
  /** The last readback copy that was actually encoded and is not consumed. */
8735
8777
  telemetryPending;
8778
+ /** Receipt identity for the copy pass encoded by the current frame. */
8779
+ telemetrySubmit;
8736
8780
  /** Coalesce observers while the readback buffer is map-pending. */
8737
8781
  lodSelectionReadback;
8738
8782
  lodSelection;
8783
+ setTelemetrySubmit(identity) {
8784
+ this.telemetrySubmit = identity;
8785
+ }
8739
8786
  static create(input) {
8740
8787
  const { device, shaderModuleFactory } = input;
8741
8788
  const labelPrefix = input.labelPrefix ?? "gpu-driven-view";
@@ -9073,7 +9120,8 @@ var GpuDrivenView = class _GpuDrivenView {
9073
9120
  })
9074
9121
  ),
9075
9122
  geometryWork,
9076
- rootGeometryWork
9123
+ rootGeometryWork,
9124
+ ...copy.submit === void 0 ? {} : { submit: copy.submit }
9077
9125
  });
9078
9126
  this.telemetryPending = void 0;
9079
9127
  return this.lodSelection;
@@ -9252,7 +9300,8 @@ var GpuDrivenView = class _GpuDrivenView {
9252
9300
  this.telemetryPending = {
9253
9301
  buffers,
9254
9302
  plan: submittedPlan,
9255
- resourceGeneration: graphResourceGeneration
9303
+ resourceGeneration: graphResourceGeneration,
9304
+ ...this.telemetrySubmit === void 0 ? {} : { submit: this.telemetrySubmit }
9256
9305
  };
9257
9306
  }
9258
9307
  }
@@ -9284,6 +9333,7 @@ var GpuDrivenView = class _GpuDrivenView {
9284
9333
  this.sceneMaterial = void 0;
9285
9334
  this.sceneCapacity = 0;
9286
9335
  this.telemetryPending = void 0;
9336
+ this.telemetrySubmit = void 0;
9287
9337
  this.lodSelectionReadback = void 0;
9288
9338
  this.lodSelection = void 0;
9289
9339
  this.destroyAfterSubmittedWork(buffers);
@@ -10853,7 +10903,12 @@ function recordShadowCasterDraws(c, shadowPass, shadowPipeline2, shadowMeshBindG
10853
10903
  }
10854
10904
  } else {
10855
10905
  const bufUsage = uniformFallback ? GPU_BUFFER_USAGE_UNIFORM | GPU_BUFFER_USAGE_COPY_DST : GPU_BUFFER_USAGE_STORAGE | GPU_BUFFER_USAGE_COPY_DST;
10856
- const instancePayload = uniformFallback ? shadowInst.transforms : packInstanceStorageBuffer(shadowInst.transforms);
10906
+ const instancePayload = uniformFallback ? shadowInst.transforms : packInstanceStorageBuffer(
10907
+ shadowInst.transforms,
10908
+ entry.source.temporal?.previousInstances?.transforms,
10909
+ shadowInst.generations,
10910
+ entry.source.temporal?.previousInstances?.generations
10911
+ );
10857
10912
  const requestedBytes = instancePayload.byteLength;
10858
10913
  const cap = runtime.device.limits.maxStorageBufferBindingSize;
10859
10914
  if (!uniformFallback && typeof cap === "number" && cap > 0 && requestedBytes > cap) {
@@ -11660,6 +11715,27 @@ function recordMainPass(c, selector, options, graphPass) {
11660
11715
  function encodeMainPass(c, pass, selector, options) {
11661
11716
  return recordMainPass(c, selector, options, pass);
11662
11717
  }
11718
+
11719
+ // src/assembly/webgpu-ready-contract.ts
11720
+ var VIEW_UBO_BYTES = VIEW_UNIFORM_BUFFER_SIZE;
11721
+ var MIPMAP_PREWARM_FORMATS = [
11722
+ "rgba8unorm-srgb",
11723
+ "rgba8unorm",
11724
+ "rgba16float"
11725
+ ];
11726
+ var BLOOM_UNIFORM_PARAMS_STRIDE_BYTES = 256;
11727
+ var BLOOM_DOWNSAMPLE_PARAMS_BYTES = 5 * BLOOM_UNIFORM_PARAMS_STRIDE_BYTES;
11728
+ var BLOOM_UPSAMPLE_PARAMS_BYTES = 4 * BLOOM_UNIFORM_PARAMS_STRIDE_BYTES;
11729
+ var BLOOM_COMPOSITE_PARAMS_BYTES = 16;
11730
+ var HDR_COLOR_ATTACHMENT_FORMAT = "rgba16float";
11731
+ var DEPTH_TEXTURE_FORMAT = "depth24plus-stencil8";
11732
+
11733
+ // src/bloom-admission.ts
11734
+ function standardBloomAdmitted(camera) {
11735
+ return camera !== void 0 && camera.bloom === "on" && camera.bloomIntensity > 0 && camera.tonemap !== "none";
11736
+ }
11737
+
11738
+ // src/record/skybox-post-pass.ts
11663
11739
  function recordSkyboxPass(c, graphPass) {
11664
11740
  if (!c.skyboxActive) return;
11665
11741
  const skyboxSnapshot = c.skybox;
@@ -11767,179 +11843,138 @@ function throwBloomRecordFailure(expected) {
11767
11843
  hint: "repair the Bloom candidate resources before retrying the frame"
11768
11844
  });
11769
11845
  }
11770
- function recordBloomBrightPass(_c, resolve, graphPass) {
11771
- const { runtime, encoder, camera, tonemapActive, frameState, bindGroupCounts } = _c;
11772
- const pp = _c.bloomResources;
11773
- if (camera.bloom !== "on" || !tonemapActive) return;
11774
- if (pp === null || pp === void 0) {
11775
- throwBloomRecordFailure("Bloom persistent resources are ready before bright-pass encoding");
11776
- }
11777
- if (pp.bloomBrightPipeline === null || pp.bloomBrightBindGroupLayout === null || pp.bloomSampler === null || pp.bloomBrightParamsBuffer === null) {
11778
- throwBloomRecordFailure("Bloom bright pass has pipeline, layout, sampler, and params buffer");
11779
- }
11780
- const bloomBrightView = resolve?.resolve("bloomBright");
11781
- const hdrColorView = resolve?.resolve("hdrColor");
11782
- if (!bloomBrightView || !hdrColorView) {
11783
- throwBloomRecordFailure("Bloom bright pass resolves its source and target views");
11784
- }
11785
- const bglBright = pp.bloomBrightBindGroupLayout;
11786
- const bloomSampler = pp.bloomSampler;
11787
- const paramsBuffer = pp.bloomBrightParamsBuffer;
11788
- const brightParams = new Float32Array(4);
11789
- brightParams[0] = camera.bloomThreshold;
11790
- brightParams[1] = 0;
11791
- brightParams[2] = 0;
11792
- brightParams[3] = 0;
11793
- const paramsWrite = runtime.device.queue.writeBuffer(paramsBuffer, 0, brightParams);
11794
- if (!paramsWrite.ok) throw paramsWrite.error;
11795
- stageBloomUpload(_c);
11796
- const bindGroup = getOrCreateFromChain(
11797
- frameState.postProcessBgCache,
11798
- [hdrColorView],
11799
- "bloom-bright",
11800
- () => {
11801
- const bgRes = runtime.device.createBindGroup({
11802
- label: "bloom-bright-bg",
11803
- layout: bglBright,
11804
- entries: [
11805
- { binding: 0, resource: { kind: "textureView", value: hdrColorView } },
11806
- { binding: 1, resource: { kind: "sampler", value: bloomSampler } },
11807
- { binding: 2, resource: { kind: "buffer", value: { buffer: paramsBuffer } } }
11808
- ]
11809
- });
11810
- if (!bgRes.ok) throw bgRes.error;
11811
- return bgRes.value;
11812
- },
11813
- bindGroupCounts
11814
- );
11815
- const pass = graphPass ?? encoder.beginRenderPass(
11816
- buildBeginRenderPassDescriptor(
11817
- { depthFormat: void 0},
11818
- { colorViews: [bloomBrightView] },
11819
- "bloom-bright"
11820
- )
11821
- );
11822
- pass.setPipeline(pp.bloomBrightPipeline);
11823
- pass.setBindGroup(0, bindGroup);
11824
- stageBloomBindGroup(_c);
11825
- pass.draw(3, 1, 0, 0);
11826
- stageBloomEncode(_c);
11827
- if (graphPass === void 0) pass.end();
11846
+ function bloomRecordActive(c) {
11847
+ return standardBloomAdmitted(c.camera) && c.tonemapActive;
11828
11848
  }
11829
- function recordBloomBlurHPass(_c, resolve, graphPass) {
11830
- const { runtime, encoder, camera, targetW, tonemapActive, frameState, bindGroupCounts } = _c;
11849
+ function recordBloomDownsamplePass(_c, resolve, graphPass, level = 0, destinationSize) {
11850
+ const { runtime, encoder, camera, frameState, bindGroupCounts } = _c;
11831
11851
  const pp = _c.bloomResources;
11832
- if (camera.bloom !== "on" || !tonemapActive) return;
11833
- if (pp === null || pp === void 0) {
11834
- throwBloomRecordFailure("Bloom persistent resources are ready before blur-H encoding");
11835
- }
11836
- if (pp.bloomBlurHPipeline === null || pp.bloomBlurBindGroupLayout === null || pp.bloomSampler === null || pp.bloomBlurHParamsBuffer === null) {
11837
- throwBloomRecordFailure("Bloom blur-H pass has pipeline, layout, sampler, and params buffer");
11852
+ if (!bloomRecordActive(_c)) return;
11853
+ if (pp === void 0 || pp === null || pp.bloomDownsamplePipeline === null || pp.bloomDownsampleBindGroupLayout === null || pp.bloomSampler === null || pp.bloomDownsampleParamsBuffer === null) {
11854
+ throwBloomRecordFailure("Bloom downsample resources are ready before encoding");
11838
11855
  }
11839
- const bloomBlurHView = resolve?.resolve("bloomBlurH");
11840
- const bloomBrightView = resolve?.resolve("bloomBright");
11841
- if (!bloomBlurHView || !bloomBrightView) {
11842
- throwBloomRecordFailure("Bloom blur-H pass resolves its source and target views");
11843
- }
11844
- const bglBlur = pp.bloomBlurBindGroupLayout;
11856
+ const downsamplePipeline = pp.bloomDownsamplePipeline;
11857
+ const downsampleLayout = pp.bloomDownsampleBindGroupLayout;
11845
11858
  const bloomSampler = pp.bloomSampler;
11846
- const paramsBuffer = pp.bloomBlurHParamsBuffer;
11847
- const bw = Math.floor(targetW / 2);
11848
- const blurParams = new Float32Array(4);
11849
- blurParams[0] = bw > 0 ? 1 / bw : 1;
11850
- blurParams[1] = 0;
11851
- blurParams[2] = camera.bloomBlurRadius;
11852
- blurParams[3] = 0;
11853
- const paramsWrite = runtime.device.queue.writeBuffer(paramsBuffer, 0, blurParams);
11854
- if (!paramsWrite.ok) throw paramsWrite.error;
11859
+ const downsampleParamsBuffer = pp.bloomDownsampleParamsBuffer;
11860
+ const sourceName = level === 0 ? "hdrColor" : `bloomDownsample${level - 1}`;
11861
+ const targetName = `bloomDownsample${level}`;
11862
+ const sourceView = resolve?.resolve(sourceName);
11863
+ const targetView = resolve?.resolve(targetName);
11864
+ if (sourceView === void 0 || targetView === void 0) {
11865
+ throwBloomRecordFailure(`Bloom downsample level ${level} resolves source and target views`);
11866
+ }
11867
+ const size = destinationSize ?? {
11868
+ width: Math.max(1, Math.ceil(_c.targetW / 2)),
11869
+ height: Math.max(1, Math.ceil(_c.targetH / 2))
11870
+ };
11871
+ const params = new Float32Array([
11872
+ camera.bloomThreshold,
11873
+ camera.bloomSoftKnee,
11874
+ size.width,
11875
+ size.height,
11876
+ level,
11877
+ 0,
11878
+ 0,
11879
+ 0
11880
+ ]);
11881
+ const offset = level * BLOOM_UNIFORM_PARAMS_STRIDE_BYTES;
11882
+ const upload = runtime.device.queue.writeBuffer(pp.bloomDownsampleParamsBuffer, offset, params);
11883
+ if (!upload.ok) throw upload.error;
11855
11884
  stageBloomUpload(_c);
11856
11885
  const bindGroup = getOrCreateFromChain(
11857
11886
  frameState.postProcessBgCache,
11858
- [bloomBrightView],
11859
- "bloom-blur-h",
11887
+ [sourceView, downsampleParamsBuffer],
11888
+ `bloom-downsample-${level}`,
11860
11889
  () => {
11861
- const bgRes = runtime.device.createBindGroup({
11862
- label: "bloom-blur-h-bg",
11863
- layout: bglBlur,
11890
+ const created = runtime.device.createBindGroup({
11891
+ label: `bloom-downsample-${level}-bg`,
11892
+ layout: downsampleLayout,
11864
11893
  entries: [
11865
- { binding: 0, resource: { kind: "textureView", value: bloomBrightView } },
11894
+ { binding: 0, resource: { kind: "textureView", value: sourceView } },
11866
11895
  { binding: 1, resource: { kind: "sampler", value: bloomSampler } },
11867
- { binding: 2, resource: { kind: "buffer", value: { buffer: paramsBuffer } } }
11896
+ {
11897
+ binding: 2,
11898
+ resource: {
11899
+ kind: "buffer",
11900
+ value: { buffer: downsampleParamsBuffer, offset, size: 32 }
11901
+ }
11902
+ }
11868
11903
  ]
11869
11904
  });
11870
- if (!bgRes.ok) throw bgRes.error;
11871
- return bgRes.value;
11905
+ if (!created.ok) throw created.error;
11906
+ return created.value;
11872
11907
  },
11873
11908
  bindGroupCounts
11874
11909
  );
11875
11910
  const pass = graphPass ?? encoder.beginRenderPass(
11876
11911
  buildBeginRenderPassDescriptor(
11877
11912
  { depthFormat: void 0},
11878
- { colorViews: [bloomBlurHView] },
11879
- "bloom-blur"
11913
+ { colorViews: [targetView] },
11914
+ "bloom-downsample"
11880
11915
  )
11881
11916
  );
11882
- pass.setPipeline(pp.bloomBlurHPipeline);
11917
+ pass.setPipeline(downsamplePipeline);
11883
11918
  pass.setBindGroup(0, bindGroup);
11884
11919
  stageBloomBindGroup(_c);
11885
11920
  pass.draw(3, 1, 0, 0);
11886
11921
  stageBloomEncode(_c);
11887
11922
  if (graphPass === void 0) pass.end();
11888
11923
  }
11889
- function recordBloomBlurVPass(_c, resolve, graphPass) {
11890
- const { runtime, encoder, camera, targetH, tonemapActive, frameState, bindGroupCounts } = _c;
11924
+ function recordBloomUpsamplePass(_c, resolve, graphPass, level = 0) {
11925
+ const { runtime, encoder, frameState, bindGroupCounts } = _c;
11891
11926
  const pp = _c.bloomResources;
11892
- if (camera.bloom !== "on" || !tonemapActive) return;
11893
- if (pp === null || pp === void 0) {
11894
- throwBloomRecordFailure("Bloom persistent resources are ready before blur-V encoding");
11895
- }
11896
- if (pp.bloomBlurVPipeline === null || pp.bloomBlurBindGroupLayout === null || pp.bloomSampler === null || pp.bloomBlurVParamsBuffer === null) {
11897
- throwBloomRecordFailure("Bloom blur-V pass has pipeline, layout, sampler, and params buffer");
11927
+ if (!bloomRecordActive(_c)) return;
11928
+ if (pp === void 0 || pp === null || pp.bloomUpsamplePipeline === null || pp.bloomUpsampleBindGroupLayout === null || pp.bloomSampler === null || pp.bloomUpsampleParamsBuffer === null) {
11929
+ throwBloomRecordFailure("Bloom upsample resources are ready before encoding");
11898
11930
  }
11899
- const bloomBlurVView = resolve?.resolve("bloomBlurV");
11900
- const bloomBlurHView = resolve?.resolve("bloomBlurH");
11901
- if (!bloomBlurVView || !bloomBlurHView) {
11902
- throwBloomRecordFailure("Bloom blur-V pass resolves its source and target views");
11903
- }
11904
- const bglBlur = pp.bloomBlurBindGroupLayout;
11931
+ const upsamplePipeline = pp.bloomUpsamplePipeline;
11932
+ const upsampleLayout = pp.bloomUpsampleBindGroupLayout;
11905
11933
  const bloomSampler = pp.bloomSampler;
11906
- const paramsBuffer = pp.bloomBlurVParamsBuffer;
11907
- const bh = Math.floor(targetH / 2);
11908
- const blurParams = new Float32Array(4);
11909
- blurParams[0] = 0;
11910
- blurParams[1] = bh > 0 ? 1 / bh : 1;
11911
- blurParams[2] = camera.bloomBlurRadius;
11912
- blurParams[3] = 0;
11913
- const paramsWrite = runtime.device.queue.writeBuffer(paramsBuffer, 0, blurParams);
11914
- if (!paramsWrite.ok) throw paramsWrite.error;
11934
+ const upsampleParamsBuffer = pp.bloomUpsampleParamsBuffer;
11935
+ const currentView = resolve?.resolve(`bloomDownsample${level}`);
11936
+ const nextUpsampleView = resolve?.resolve(`bloomUpsample${level + 1}`);
11937
+ const coarseView = nextUpsampleView ?? resolve?.resolve(`bloomDownsample${level + 1}`);
11938
+ const targetView = resolve?.resolve(`bloomUpsample${level}`);
11939
+ if (currentView === void 0 || coarseView === void 0 || targetView === void 0) {
11940
+ throwBloomRecordFailure(`Bloom upsample level ${level} resolves adjacent pyramid views`);
11941
+ }
11942
+ const params = new Float32Array([_c.camera.bloomScatter, 0, 0, 0]);
11943
+ const offset = level * BLOOM_UNIFORM_PARAMS_STRIDE_BYTES;
11944
+ const upload = runtime.device.queue.writeBuffer(pp.bloomUpsampleParamsBuffer, offset, params);
11945
+ if (!upload.ok) throw upload.error;
11915
11946
  stageBloomUpload(_c);
11916
11947
  const bindGroup = getOrCreateFromChain(
11917
11948
  frameState.postProcessBgCache,
11918
- [bloomBlurHView],
11919
- "bloom-blur-v",
11949
+ [currentView, coarseView, upsampleParamsBuffer],
11950
+ `bloom-upsample-${level}`,
11920
11951
  () => {
11921
- const bgRes = runtime.device.createBindGroup({
11922
- label: "bloom-blur-v-bg",
11923
- layout: bglBlur,
11952
+ const created = runtime.device.createBindGroup({
11953
+ label: `bloom-upsample-${level}-bg`,
11954
+ layout: upsampleLayout,
11924
11955
  entries: [
11925
- { binding: 0, resource: { kind: "textureView", value: bloomBlurHView } },
11926
- { binding: 1, resource: { kind: "sampler", value: bloomSampler } },
11927
- { binding: 2, resource: { kind: "buffer", value: { buffer: paramsBuffer } } }
11956
+ { binding: 0, resource: { kind: "textureView", value: currentView } },
11957
+ { binding: 1, resource: { kind: "textureView", value: coarseView } },
11958
+ { binding: 2, resource: { kind: "sampler", value: bloomSampler } },
11959
+ {
11960
+ binding: 3,
11961
+ resource: { kind: "buffer", value: { buffer: upsampleParamsBuffer, offset, size: 16 } }
11962
+ }
11928
11963
  ]
11929
11964
  });
11930
- if (!bgRes.ok) throw bgRes.error;
11931
- return bgRes.value;
11965
+ if (!created.ok) throw created.error;
11966
+ return created.value;
11932
11967
  },
11933
11968
  bindGroupCounts
11934
11969
  );
11935
11970
  const pass = graphPass ?? encoder.beginRenderPass(
11936
11971
  buildBeginRenderPassDescriptor(
11937
11972
  { depthFormat: void 0},
11938
- { colorViews: [bloomBlurVView] },
11939
- "bloom-blur"
11973
+ { colorViews: [targetView] },
11974
+ "bloom-upsample"
11940
11975
  )
11941
11976
  );
11942
- pass.setPipeline(pp.bloomBlurVPipeline);
11977
+ pass.setPipeline(upsamplePipeline);
11943
11978
  pass.setBindGroup(0, bindGroup);
11944
11979
  stageBloomBindGroup(_c);
11945
11980
  pass.draw(3, 1, 0, 0);
@@ -11947,9 +11982,9 @@ function recordBloomBlurVPass(_c, resolve, graphPass) {
11947
11982
  if (graphPass === void 0) pass.end();
11948
11983
  }
11949
11984
  function recordBloomCompositePass(_c, resolve, graphPass) {
11950
- const { runtime, encoder, camera, tonemapActive, frameState, bindGroupCounts } = _c;
11985
+ const { runtime, encoder, camera, frameState, bindGroupCounts } = _c;
11951
11986
  const pp = _c.bloomResources;
11952
- if (camera.bloom !== "on" || !tonemapActive) return;
11987
+ if (!bloomRecordActive(_c)) return;
11953
11988
  if (pp === null || pp === void 0) {
11954
11989
  throwBloomRecordFailure("Bloom persistent resources are ready before composite encoding");
11955
11990
  }
@@ -11959,10 +11994,11 @@ function recordBloomCompositePass(_c, resolve, graphPass) {
11959
11994
  );
11960
11995
  }
11961
11996
  const hdrColorView = resolve?.resolve("hdrColor");
11962
- const bloomBlurVView = resolve?.resolve("bloomBlurV");
11997
+ const bloomView = resolve?.resolve("bloomUpsample0");
11998
+ const finestBloomView = bloomView ?? resolve?.resolve("bloomDownsample0");
11963
11999
  const hdrCompositedView = resolve?.resolve("hdrComposited");
11964
- if (!hdrColorView || !bloomBlurVView || !hdrCompositedView) {
11965
- throwBloomRecordFailure("Bloom composite pass resolves its source and target views");
12000
+ if (!hdrColorView || !finestBloomView || !hdrCompositedView) {
12001
+ throwBloomRecordFailure("Bloom composite pass resolves scene, finest Bloom, and target views");
11966
12002
  }
11967
12003
  const bglComposite = pp.bloomCompositeBindGroupLayout;
11968
12004
  const bloomSampler = pp.bloomSampler;
@@ -11977,7 +12013,7 @@ function recordBloomCompositePass(_c, resolve, graphPass) {
11977
12013
  stageBloomUpload(_c);
11978
12014
  const bindGroup = getOrCreateFromChain(
11979
12015
  frameState.postProcessBgCache,
11980
- [hdrColorView, bloomBlurVView],
12016
+ [hdrColorView, finestBloomView],
11981
12017
  "bloom-composite",
11982
12018
  () => {
11983
12019
  const bgRes = runtime.device.createBindGroup({
@@ -11985,7 +12021,7 @@ function recordBloomCompositePass(_c, resolve, graphPass) {
11985
12021
  layout: bglComposite,
11986
12022
  entries: [
11987
12023
  { binding: 0, resource: { kind: "textureView", value: hdrColorView } },
11988
- { binding: 1, resource: { kind: "textureView", value: bloomBlurVView } },
12024
+ { binding: 1, resource: { kind: "textureView", value: finestBloomView } },
11989
12025
  { binding: 2, resource: { kind: "sampler", value: bloomSampler } },
11990
12026
  {
11991
12027
  binding: 3,
@@ -13232,46 +13268,32 @@ function addReflectionFallbackObservationPass(graph, target) {
13232
13268
  });
13233
13269
  }
13234
13270
  var TYPED_BLOOM_PASS_NAMES = {
13235
- bright: "bloom-bright",
13236
- blurH: "bloom-blur-h",
13237
- blurV: "bloom-blur-v",
13271
+ downsample: "bloom-downsample",
13272
+ upsample: "bloom-upsample",
13238
13273
  composite: "bloom-composite"
13239
13274
  };
13275
+ function typedBloomLevelPassName(kind, level) {
13276
+ return `${TYPED_BLOOM_PASS_NAMES[kind]}-${level}`;
13277
+ }
13240
13278
  function addTypedBloomPasses(graph, targets) {
13241
13279
  const named = {
13242
13280
  hdrColor: targets.scene,
13243
- hdrComposited: targets.composited,
13244
- bloomBright: targets.bright,
13245
- bloomBlurH: targets.blurH,
13246
- bloomBlurV: targets.blurV
13281
+ hdrComposited: targets.composited
13247
13282
  };
13248
- const descriptors = [
13249
- {
13250
- name: TYPED_BLOOM_PASS_NAMES.bright,
13251
- reads: [targets.scene],
13252
- write: targets.bright,
13253
- encode: recordBloomBrightPass
13254
- },
13255
- {
13256
- name: TYPED_BLOOM_PASS_NAMES.blurH,
13257
- reads: [targets.bright],
13258
- write: targets.blurH,
13259
- encode: recordBloomBlurHPass
13260
- },
13261
- {
13262
- name: TYPED_BLOOM_PASS_NAMES.blurV,
13263
- reads: [targets.blurH],
13264
- write: targets.blurV,
13265
- encode: recordBloomBlurVPass
13266
- },
13267
- {
13268
- name: TYPED_BLOOM_PASS_NAMES.composite,
13269
- reads: [targets.scene, targets.blurV],
13270
- write: targets.composited,
13271
- encode: recordBloomCompositePass
13272
- }
13273
- ];
13274
- for (const descriptor of descriptors) {
13283
+ targets.downsample.forEach((target, level) => {
13284
+ named[`bloomDownsample${level}`] = target;
13285
+ });
13286
+ targets.upsample.forEach((target, level) => {
13287
+ named[`bloomUpsample${level}`] = target;
13288
+ });
13289
+ const add = (name, reads, write, encode, level) => {
13290
+ const descriptor = {
13291
+ name,
13292
+ reads,
13293
+ write,
13294
+ encode,
13295
+ level
13296
+ };
13275
13297
  const added = graph.addRasterPass(descriptor.name, {
13276
13298
  accesses: [
13277
13299
  ...descriptor.reads.map((target) => ({
@@ -13291,12 +13313,80 @@ function addTypedBloomPasses(graph, targets) {
13291
13313
  encode: ({ pass, frame, resources }) => descriptor.encode(
13292
13314
  frame,
13293
13315
  legacyResolver(resources, named),
13294
- pass
13316
+ pass,
13317
+ descriptor.level,
13318
+ descriptor.level === void 0 ? void 0 : targets.levelDimensions[descriptor.level]
13295
13319
  )
13296
13320
  });
13321
+ return added.ok ? ok(void 0) : added;
13322
+ };
13323
+ for (const [level, write] of targets.downsample.entries()) {
13324
+ const source = level === 0 ? targets.scene : targets.downsample[level - 1];
13325
+ if (source === void 0) {
13326
+ return err$1(
13327
+ new RenderGraphError({
13328
+ code: "resource-resolution-failed",
13329
+ expected: "Bloom downsample levels form one adjacent pyramid",
13330
+ hint: "rebuild the Standard Bloom target declaration from one level list",
13331
+ detail: { resourceLabel: `bloom-level-${level}` }
13332
+ })
13333
+ );
13334
+ }
13335
+ const added = add(
13336
+ typedBloomLevelPassName("downsample", level),
13337
+ [source],
13338
+ write,
13339
+ (frame, resolve, pass, passLevel) => recordBloomDownsamplePass(
13340
+ frame,
13341
+ resolve,
13342
+ pass,
13343
+ passLevel ?? level,
13344
+ targets.levelDimensions[passLevel ?? level]
13345
+ ),
13346
+ level
13347
+ );
13297
13348
  if (!added.ok) return added;
13298
13349
  }
13299
- return ok(void 0);
13350
+ for (let level = targets.upsample.length - 1; level >= 0; level -= 1) {
13351
+ const current = targets.downsample[level];
13352
+ const coarse = level === targets.downsample.length - 2 ? targets.downsample[level + 1] : targets.upsample[level + 1];
13353
+ const write = targets.upsample[level];
13354
+ if (current === void 0 || coarse === void 0 || write === void 0) {
13355
+ return err$1(
13356
+ new RenderGraphError({
13357
+ code: "resource-resolution-failed",
13358
+ expected: "Bloom downsample and upsample levels form one adjacent pyramid",
13359
+ hint: "rebuild the Standard Bloom target declaration from one level list",
13360
+ detail: { resourceLabel: `bloom-level-${level}` }
13361
+ })
13362
+ );
13363
+ }
13364
+ const added = add(
13365
+ typedBloomLevelPassName("upsample", level),
13366
+ [current, coarse],
13367
+ write,
13368
+ (frame, resolve, pass, passLevel) => recordBloomUpsamplePass(frame, resolve, pass, passLevel ?? level),
13369
+ level
13370
+ );
13371
+ if (!added.ok) return added;
13372
+ }
13373
+ const finest = targets.upsample[0] ?? targets.downsample[0];
13374
+ if (finest === void 0) {
13375
+ return err$1(
13376
+ new RenderGraphError({
13377
+ code: "resource-resolution-failed",
13378
+ expected: "Bloom has at least one downsample level",
13379
+ hint: "derive Bloom levels from a positive output extent",
13380
+ detail: { resourceLabel: "bloom-downsample-0" }
13381
+ })
13382
+ );
13383
+ }
13384
+ return add(
13385
+ TYPED_BLOOM_PASS_NAMES.composite,
13386
+ [targets.scene, finest],
13387
+ targets.composited,
13388
+ (frame, resolve, pass) => recordBloomCompositePass(frame, resolve, pass)
13389
+ );
13300
13390
  }
13301
13391
  function addTypedSsaoPasses(graph, targets) {
13302
13392
  const calc = graph.addRasterPass("ssao-calc", {
@@ -13707,6 +13797,6 @@ function addTaaResolvePass(graph, current, currentTemporal, previousColor, previ
13707
13797
  });
13708
13798
  }
13709
13799
 
13710
- export { BYTES_PER_DIRECT_LIGHT_SLOT, BatchTopology, CAPTURE_VIEW_PROJS, CUBEMAP_FACE_VERTICES, CUBE_CAPTURE_VIEW_SLOT_BASE, DEFERRED_COLOR_FORMATS, DEPTH_MIN_PARAMS_BYTE_SIZE, FALLBACK_BYTES_PER_ROW, GPU_DRIVEN_VIEW_WGSL, GPU_SCENE_LAYOUTS, GpuBuffer, GpuDrivenView, GpuTexture, MATERIAL_PER_ENTITY_STRIDE, MESH_SSBO_BYTES, OcclusionConfidenceScheduler, POINTS_LINES_MATERIAL_SHADER_ID, POINTS_LINES_VIEW_BUFFER_SIZE, PREFILTER_MIP_LEVELS, PREFILTER_SIZE, PipelineSpecError, PostProcessError, REFLECTION_PROBE_VIEW_SLOT_BASE, SHADOW_CASTER_BUFFER_SIZE, STANDARD_PBR_REQUIRED_SAMPLED_TEXTURES, STANDARD_PBR_UBO_SIZE, ShadowViewStatePool, TEMPORAL_HISTORY_FORMATS, TYPED_BLOOM_PASS_NAMES, VIEW_UNIFORM_BUFFER_SIZE, VIEW_UNIFORM_BYTES, VIEW_UNIFORM_SLOT_STRIDE, abortTemporalGpuSubmit, addReflectionFallbackObservationPass, addStandardSceneDataPass, addTaaResolvePass, addTypedBloomPasses, addTypedCompositePostEffects, addTypedFrameObservationPass, addTypedFullscreenPass, addTypedOutputTransformPass, addTypedScenePass, addTypedSkyboxPass, addTypedSsaoPasses, addTypedTemporalResolvePass, aggregateTemporalDemand, applyMaterialTextureUvScales, applyParamSchemaDefaultsToUbo, applyParamSnapshotToUbo, assembleMaterialWithSkylightEntries, assertStorageBufferCap, buildFoldDispatchPlan, buildFullscreenPostProcessPass, buildLinearLdrMaterialSpecTable, buildPerFrameBindGroups, buildSpecConstTable, cacheKeyOf, cleanPerEntityCache, colorFormatsForPassKind, commitTemporalGpuSubmit, computeProjectionMatrix, computeSplitLdrSprite, computeViewMatrix, configureSurface, createClusterBinScratch, createFullscreenBindGroup, createHdrpClusterMembershipBindGroupLayoutDescriptor, createIblPipelines, createPointsLinesLaneAdapter, createPointsLinesLaneContract, createRenderPipelineTarget, createSkylightFallback, createStandardSceneDataTarget, createStandardSurfaceLightingBindGroup, decideVisibility, defaultViewForUserRegionField, deriveRenderDataCubemap, deriveRenderDataMesh, deriveRenderDataTexture, deriveRenderExtent, describeTemporalDemand, detectNineSliceScaleTooSmall, deviceOptionsForAdapter, driveLazyEquirectProjection, encodeDirectionalShadowPass, encodeMainPass, encodePointShadowPass, encodeSpotShadowPass, ensureMeshSsboCapacity, entryHasDepthRead, evaluateFoldBucketUniformCap, foldDispatchBuckets, geometryRenderStateForPass, geometryRenderStateForTopology, getIblProbeBackgroundSource, getOrBuildPipeline, getOrCreateFromChain, getOrCreateHdrpBuffers, getOrCreateIblCache, getTemporalBindGroupResources, getTemporalGpuState, getTemporalParamsBuffer, gpuSceneFieldOffset, hasPendingTemporalGpuSubmit, importRenderPipelineSurface, incrementFoldedDrawsMetric, isTemporalFullscreenBinding, packInstanceStorageBuffer, passKindPolicyTable, postProcessShaderEntrySignature, postProcessShaderModuleLabel, postProcessShaderPipelineLabel, prepareFrameLighting, prepareMaterialSkylight, prewarmMaterialShaderVariants, projectedHeightForCandidate, renderExtentSize, resetHdrpBuffers, residentTextureView, resolveMaterialSkylight, resolveOutputDither, resolveReflectionProbeBinding, resolveSkyboxActive, resolveSsaoParameters, resolveSurfaceFormatPair, resolveSurfaceProfile, retireTemporalGpuState, retireTemporalGpuStateAfterFence, runIblPrecompute, selectGpuDrivenSceneIndexVariant, selectGpuLodLane, selectHdrpPbrPrewarmVariants, selectLazyEquirectHandle, selectLod, selectProbePrewarmVariants, selectSkinPrewarmVariants, selectStandardPbrTransmissionPrewarmVariants, selectSwapChainFormat, setIblComposedShaders, shadowViewIdentityKey, shadowViewRasterAccesses, shouldIssueRetest, standardStorageVariantSet, standardTemporalLaneAdmission, standardTemporalPostOrder, standardTopologyVariantSet, temporalReadIndex, temporalWriteIndex, transmissionBackdropAvailable, uploadMeshSsboBatch, variantSetFromDefines, variantSetFromVertexLayoutProjection, warnMultiSkybox, warnMultiSkylight, warnZeroLightStandard, writeHdrpClusterAndSsaoBuffers, writePbrMaterialUboPayload, writePointsLinesViewUbo, writeShadowCasterUniforms, writeShadowParamsBuffer, writeSpotModifierTextures, writeViewUbo };
13711
- //# sourceMappingURL=chunk-JRIPCMYC.mjs.map
13712
- //# sourceMappingURL=chunk-JRIPCMYC.mjs.map
13800
+ export { BLOOM_COMPOSITE_PARAMS_BYTES, BLOOM_DOWNSAMPLE_PARAMS_BYTES, BLOOM_UPSAMPLE_PARAMS_BYTES, BYTES_PER_DIRECT_LIGHT_SLOT, BatchTopology, CAPTURE_VIEW_PROJS, CUBEMAP_FACE_VERTICES, CUBE_CAPTURE_VIEW_SLOT_BASE, DEFERRED_COLOR_FORMATS, DEPTH_MIN_PARAMS_BYTE_SIZE, DEPTH_TEXTURE_FORMAT, FALLBACK_BYTES_PER_ROW, GPU_DRIVEN_VIEW_WGSL, GPU_SCENE_LAYOUTS, GpuBuffer, GpuDrivenView, GpuTexture, HDR_COLOR_ATTACHMENT_FORMAT, MATERIAL_PER_ENTITY_STRIDE, MESH_SSBO_BYTES, MIPMAP_PREWARM_FORMATS, OcclusionConfidenceScheduler, POINTS_LINES_MATERIAL_SHADER_ID, POINTS_LINES_VIEW_BUFFER_SIZE, PREFILTER_MIP_LEVELS, PREFILTER_SIZE, PipelineSpecError, PostProcessError, REFLECTION_PROBE_VIEW_SLOT_BASE, SHADOW_CASTER_BUFFER_SIZE, STANDARD_PBR_REQUIRED_SAMPLED_TEXTURES, STANDARD_PBR_UBO_SIZE, ShadowViewStatePool, TEMPORAL_HISTORY_FORMATS, TYPED_BLOOM_PASS_NAMES, VIEW_UBO_BYTES, VIEW_UNIFORM_BYTES, VIEW_UNIFORM_SLOT_STRIDE, abortTemporalGpuSubmit, addReflectionFallbackObservationPass, addStandardSceneDataPass, addTaaResolvePass, addTypedBloomPasses, addTypedCompositePostEffects, addTypedFrameObservationPass, addTypedFullscreenPass, addTypedOutputTransformPass, addTypedScenePass, addTypedSkyboxPass, addTypedSsaoPasses, addTypedTemporalResolvePass, aggregateTemporalDemand, applyMaterialTextureUvScales, applyParamSchemaDefaultsToUbo, applyParamSnapshotToUbo, assembleMaterialWithSkylightEntries, assertStorageBufferCap, buildFoldDispatchPlan, buildFullscreenPostProcessPass, buildLinearLdrMaterialSpecTable, buildPerFrameBindGroups, buildSpecConstTable, cacheKeyOf, cleanPerEntityCache, colorFormatsForPassKind, commitTemporalGpuSubmit, computeProjectionMatrix, computeSplitLdrSprite, computeViewMatrix, configureSurface, createClusterBinScratch, createFullscreenBindGroup, createHdrpClusterMembershipBindGroupLayoutDescriptor, createIblPipelines, createPointsLinesLaneAdapter, createPointsLinesLaneContract, createRenderPipelineTarget, createSkylightFallback, createStandardSceneDataTarget, createStandardSurfaceLightingBindGroup, decideVisibility, defaultViewForUserRegionField, deriveRenderDataCubemap, deriveRenderDataMesh, deriveRenderDataTexture, deriveRenderExtent, describeTemporalDemand, detectNineSliceScaleTooSmall, deviceOptionsForAdapter, driveLazyEquirectProjection, encodeDirectionalShadowPass, encodeMainPass, encodePointShadowPass, encodeSpotShadowPass, ensureMeshSsboCapacity, entryHasDepthRead, evaluateFoldBucketUniformCap, foldDispatchBuckets, geometryRenderStateForPass, geometryRenderStateForTopology, getIblProbeBackgroundSource, getOrBuildPipeline, getOrCreateFromChain, getOrCreateHdrpBuffers, getOrCreateIblCache, getTemporalBindGroupResources, getTemporalGpuState, getTemporalParamsBuffer, gpuSceneFieldOffset, hasPendingTemporalGpuSubmit, importRenderPipelineSurface, incrementFoldedDrawsMetric, isTemporalFullscreenBinding, packInstanceStorageBuffer, passKindPolicyTable, postProcessShaderEntrySignature, postProcessShaderModuleLabel, postProcessShaderPipelineLabel, prepareFrameLighting, prepareMaterialSkylight, prewarmMaterialShaderVariants, projectedHeightForCandidate, renderExtentSize, resetHdrpBuffers, residentTextureView, resolveMaterialSkylight, resolveOutputDither, resolveReflectionProbeBinding, resolveSkyboxActive, resolveSsaoParameters, resolveSurfaceFormatPair, resolveSurfaceProfile, retireTemporalGpuState, retireTemporalGpuStateAfterFence, runIblPrecompute, selectGpuDrivenSceneIndexVariant, selectGpuLodLane, selectHdrpPbrPrewarmVariants, selectLazyEquirectHandle, selectLod, selectProbePrewarmVariants, selectSkinPrewarmVariants, selectStandardPbrTransmissionPrewarmVariants, selectSwapChainFormat, setIblComposedShaders, shadowViewIdentityKey, shadowViewRasterAccesses, shouldIssueRetest, standardBloomAdmitted, standardStorageVariantSet, standardTemporalLaneAdmission, standardTemporalPostOrder, standardTopologyVariantSet, temporalReadIndex, temporalWriteIndex, transmissionBackdropAvailable, uploadMeshSsboBatch, variantSetFromDefines, variantSetFromVertexLayoutProjection, warnMultiSkybox, warnMultiSkylight, warnZeroLightStandard, writeHdrpClusterAndSsaoBuffers, writePbrMaterialUboPayload, writePointsLinesViewUbo, writeShadowCasterUniforms, writeShadowParamsBuffer, writeSpotModifierTextures, writeViewUbo };
13801
+ //# sourceMappingURL=chunk-VOZWDM3L.mjs.map
13802
+ //# sourceMappingURL=chunk-VOZWDM3L.mjs.map