@zephyr3d/scene 0.9.27 → 0.10.0

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 (502) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +54 -0
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +279 -55
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +171 -1
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +104 -178
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +25436 -15990
  109. package/dist/index.js +65 -11
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { RGHandle } from './types.js';
2
2
  import { getDevice } from '../../app/api.js';
3
+ import { warnUnsupported } from '../../utility/unsupported.js';
3
4
 
4
5
  const DEFAULT_PROFILING_OPTIONS = {
5
6
  enabled: false,
@@ -17,6 +18,12 @@ const DEFAULT_PROFILING_OPTIONS = {
17
18
  static _latestPendingProfileFrame = null;
18
19
  static _latestResolvedProfileSerial = 0;
19
20
  static _nextProfileSerial = 0;
21
+ /** External scopes recorded outside execution, waiting for the next graph to adopt them */ static _externalRoots = [];
22
+ static _externalScopes = [];
23
+ static _externalFrameId = -1;
24
+ /** Open external scopes, innermost last */ static _externalStack = [];
25
+ /** The profiled frame being executed and its innermost open scope */ static _executingFrame = null;
26
+ static _executingScope = null;
20
27
  _allocator;
21
28
  _backbufferWidth;
22
29
  _backbufferHeight;
@@ -41,6 +48,116 @@ const DEFAULT_PROFILING_OPTIONS = {
41
48
  }
42
49
  /** Set profiling defaults for new executors. */ static setDefaultProfilingOptions(options) {
43
50
  RenderGraphExecutor._defaultProfilingOptions = options;
51
+ RenderGraphExecutor._dropExternalScopes();
52
+ }
53
+ /**
54
+ * Times GPU work `fn` records outside a graph pass (scene updates, simulations).
55
+ * Outside execution it is reported before the next graph's passes; inside, it
56
+ * nests under the current pass. Only active while profiling; otherwise calls `fn`.
57
+ */ static profileScope(name, fn) {
58
+ const scope = RenderGraphExecutor._beginExternalScope(name);
59
+ if (!scope) {
60
+ return fn();
61
+ }
62
+ try {
63
+ return fn();
64
+ } finally{
65
+ RenderGraphExecutor._endExternalScope(scope);
66
+ }
67
+ }
68
+ static _beginExternalScope(name) {
69
+ const executing = RenderGraphExecutor._executingFrame;
70
+ const defaults = RenderGraphExecutor._defaultProfilingOptions;
71
+ let device;
72
+ let includePendingUploads;
73
+ if (executing) {
74
+ device = executing.device;
75
+ includePendingUploads = executing.includePendingUploads;
76
+ } else {
77
+ const enabled = typeof defaults === 'object' ? defaults.enabled ?? true : defaults;
78
+ if (!enabled) {
79
+ return null;
80
+ }
81
+ const options = typeof defaults === 'object' ? defaults : null;
82
+ try {
83
+ device = options?.device ?? getDevice();
84
+ } catch {
85
+ device = null;
86
+ }
87
+ includePendingUploads = options?.includePendingUploads ?? DEFAULT_PROFILING_OPTIONS.includePendingUploads;
88
+ }
89
+ if (!device?.getDeviceCaps().miscCaps.supportTimestampQuery) {
90
+ return null;
91
+ }
92
+ const stack = RenderGraphExecutor._externalStack;
93
+ if (!executing && stack.length === 0) {
94
+ // Scopes no graph adopted within their frame would land in an unrelated later one
95
+ const frameId = device.frameInfo.frameCounter;
96
+ if (frameId !== RenderGraphExecutor._externalFrameId) {
97
+ RenderGraphExecutor._externalRoots.length = 0;
98
+ RenderGraphExecutor._externalScopes.length = 0;
99
+ RenderGraphExecutor._externalFrameId = frameId;
100
+ }
101
+ }
102
+ const queryId = device.beginTimestampQuery(name, {
103
+ includePendingUploads,
104
+ allowCrossFrame: false
105
+ });
106
+ if (queryId <= 0) {
107
+ return null;
108
+ }
109
+ const result = {
110
+ name,
111
+ type: 'external',
112
+ queryId,
113
+ durationMs: 0,
114
+ status: 'pending',
115
+ children: []
116
+ };
117
+ const scope = {
118
+ result,
119
+ queryId,
120
+ ended: false,
121
+ device
122
+ };
123
+ const parent = stack[stack.length - 1] ?? RenderGraphExecutor._executingScope;
124
+ if (parent) {
125
+ parent.result.children.push(result);
126
+ } else {
127
+ RenderGraphExecutor._externalRoots.push(result);
128
+ }
129
+ if (executing) {
130
+ executing.scopes.push(scope);
131
+ } else {
132
+ RenderGraphExecutor._externalScopes.push(scope);
133
+ }
134
+ stack.push(scope);
135
+ return scope;
136
+ }
137
+ static _endExternalScope(scope) {
138
+ const stack = RenderGraphExecutor._externalStack;
139
+ const index = stack.lastIndexOf(scope);
140
+ if (index >= 0) {
141
+ stack.length = index;
142
+ }
143
+ if (!scope.ended) {
144
+ scope.ended = true;
145
+ scope.device.endTimestampQuery(scope.queryId);
146
+ }
147
+ }
148
+ /** Moves the external scopes recorded so far into `frame`, or discards them */ static _adoptExternalScopes(frame) {
149
+ const roots = RenderGraphExecutor._externalRoots;
150
+ const scopes = RenderGraphExecutor._externalScopes;
151
+ if (frame && frame.supported && roots.length > 0) {
152
+ frame.root.result.children.push(...roots);
153
+ frame.scopes.push(...scopes);
154
+ }
155
+ roots.length = 0;
156
+ scopes.length = 0;
157
+ }
158
+ static _dropExternalScopes() {
159
+ RenderGraphExecutor._externalRoots.length = 0;
160
+ RenderGraphExecutor._externalScopes.length = 0;
44
161
  }
45
162
  /** Return the latest resolved result from any executor. */ static getLatestProfileResult() {
46
163
  return RenderGraphExecutor._latestProfileResult;
@@ -73,6 +190,9 @@ const DEFAULT_PROFILING_OPTIONS = {
73
190
  this._cleanupCallbacks.length = 0;
74
191
  this._resolveImportedTextureAliases(compiled);
75
192
  const profileFrame = this._beginProfileFrame();
193
+ RenderGraphExecutor._adoptExternalScopes(profileFrame);
194
+ const outerExecutingFrame = RenderGraphExecutor._executingFrame;
195
+ const outerExecutingScope = RenderGraphExecutor._executingScope;
76
196
  const affinityEntries = new Map();
77
197
  const allocateAt = new Map();
78
198
  const releaseAt = new Map();
@@ -120,6 +240,10 @@ const DEFAULT_PROFILING_OPTIONS = {
120
240
  }
121
241
  let completed = false;
122
242
  let executionError = null;
243
+ if (profileFrame) {
244
+ RenderGraphExecutor._executingFrame = profileFrame;
245
+ RenderGraphExecutor._executingScope = profileFrame.root;
246
+ }
123
247
  try {
124
248
  for(let i = 0; i < compiled.orderedPasses.length; i++){
125
249
  const pass = compiled.orderedPasses[i];
@@ -153,12 +277,18 @@ const DEFAULT_PROFILING_OPTIONS = {
153
277
  // Preserve pass errors ahead of release errors.
154
278
  let passError = null;
155
279
  const passProfile = this._beginPassProfileScope(profileFrame, pass);
280
+ if (profileFrame) {
281
+ RenderGraphExecutor._executingScope = passProfile ?? profileFrame.root;
282
+ }
156
283
  try {
157
284
  if (pass.subpasses.length > 0) {
158
285
  const accessScope = this._createAccessScope(pass);
159
286
  const ctx = this._createContext(accessScope);
160
287
  for (const subpass of pass.subpasses){
161
288
  const subpassProfile = this._beginSubpassProfileScope(profileFrame, passProfile, pass, subpass.name);
289
+ if (profileFrame) {
290
+ RenderGraphExecutor._executingScope = subpassProfile ?? passProfile ?? profileFrame.root;
291
+ }
162
292
  try {
163
293
  subpass.executeFn(ctx, pass.data);
164
294
  } catch (e) {
@@ -217,6 +347,8 @@ const DEFAULT_PROFILING_OPTIONS = {
217
347
  } catch (e) {
218
348
  executionError = e;
219
349
  } finally{
350
+ RenderGraphExecutor._executingFrame = outerExecutingFrame;
351
+ RenderGraphExecutor._executingScope = outerExecutingScope;
220
352
  this._finishProfileFrame(profileFrame);
221
353
  let cleanupError = null;
222
354
  try {
@@ -290,6 +422,9 @@ const DEFAULT_PROFILING_OPTIONS = {
290
422
  }
291
423
  const device = this._getProfilingDevice();
292
424
  const supported = !!device?.getDeviceCaps().miscCaps.supportTimestampQuery;
425
+ if (!supported) {
426
+ warnUnsupported('Render graph GPU profiling', 'timestamp queries (WebGPU)', "every scope reports status 'unsupported'");
427
+ }
293
428
  const rootResult = {
294
429
  name: this._profilingOptions.label,
295
430
  type: 'graph',
@@ -314,6 +449,7 @@ const DEFAULT_PROFILING_OPTIONS = {
314
449
  serial: ++RenderGraphExecutor._nextProfileSerial,
315
450
  device,
316
451
  supported,
452
+ includePendingUploads: this._profilingOptions.includePendingUploads,
317
453
  result,
318
454
  root,
319
455
  scopes: [],
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sources":["../../../src/render/rendergraph/executor.ts"],"sourcesContent":["import type {\r\n CompiledRenderGraph,\r\n RenderGraphExecutorOptions,\r\n RGProfileResult,\r\n RGProfileScopeResult,\r\n RGProfileScopeType,\r\n RGProfilingOptions,\r\n RGTextureAllocator,\r\n RGTextureDesc,\r\n RGFramebufferDesc,\r\n RGResolvedSize,\r\n RGExecuteContext,\r\n RGExecuteFn,\r\n RGPass,\r\n RGTextureHandle,\r\n RGTextureAttachment,\r\n RGFramebufferHandle,\r\n RenderGraphExecutionBindings\r\n} from './types';\r\nimport { RGHandle } from './types';\r\nimport type { RGTextureAffinityCache, RGTextureAffinityEntry } from './texture_affinity_cache';\r\nimport type {\r\n AbstractDevice,\r\n BaseTexture,\r\n FrameBuffer,\r\n TimestampQueryResult,\r\n TimestampQueryStatus\r\n} from '@zephyr3d/device';\r\nimport { getDevice } from '../../app/api';\r\n\r\ninterface RGPassAccessScope {\r\n passName: string;\r\n accessibleIds: Set<number>;\r\n textureIds: Set<number>;\r\n framebufferIds: Set<number>;\r\n}\r\n\r\ntype RGResolvedProfilingOptions = Required<Omit<RGProfilingOptions, 'device'>> & {\r\n device?: AbstractDevice;\r\n};\r\n\r\ninterface RGProfileScopeInternal {\r\n result: RGProfileScopeResult;\r\n queryId: number;\r\n ended: boolean;\r\n}\r\n\r\ninterface RGProfileFrameInternal {\r\n serial: number;\r\n device: AbstractDevice | null;\r\n supported: boolean;\r\n result: RGProfileResult;\r\n root: RGProfileScopeInternal;\r\n scopes: RGProfileScopeInternal[];\r\n resolvePromise: Promise<RGProfileResult>;\r\n}\r\n\r\nconst DEFAULT_PROFILING_OPTIONS: RGResolvedProfilingOptions = {\r\n enabled: false,\r\n graph: true,\r\n pass: true,\r\n subpass: true,\r\n includePendingUploads: true,\r\n allowCrossFrame: false,\r\n maxPendingFrames: 3,\r\n label: 'RenderGraph'\r\n};\r\n\r\n/** Executes compiled graphs with automatic resource lifetimes. @public */\r\nexport class RenderGraphExecutor<TTexture = BaseTexture> {\r\n private static _defaultProfilingOptions: boolean | RGProfilingOptions = false;\r\n private static _latestProfileResult: RGProfileResult | null = null;\r\n private static _latestPendingProfileFrame: RGProfileFrameInternal | null = null;\r\n private static _latestResolvedProfileSerial = 0;\r\n private static _nextProfileSerial = 0;\r\n\r\n private _allocator: RGTextureAllocator<TTexture>;\r\n private _backbufferWidth: number;\r\n private _backbufferHeight: number;\r\n private _importedTextures: Map<number, TTexture> = new Map();\r\n private _allocatedTextures: Map<number, TTexture> = new Map();\r\n private _allocatedFramebuffers: Map<number, FrameBuffer> = new Map();\r\n private _importedTextureAliases: Map<number, number> = new Map();\r\n private _transientTextureAliases: Map<number, number> = new Map();\r\n private _resolvedImportedTextures: Map<number, TTexture> = new Map();\r\n private _cleanupCallbacks: Array<() => void> = [];\r\n private _profilingOptions: RGResolvedProfilingOptions;\r\n private _pendingProfileFrames: RGProfileFrameInternal[] = [];\r\n private _latestProfileResult: RGProfileResult | null = null;\r\n private _latestResolvedProfileSerial = 0;\r\n private _textureAffinityCache: RGTextureAffinityCache<TTexture> | null;\r\n\r\n constructor(\r\n allocator: RGTextureAllocator<TTexture>,\r\n backbufferWidth: number,\r\n backbufferHeight: number,\r\n options?: RenderGraphExecutorOptions<TTexture>\r\n ) {\r\n this._allocator = allocator;\r\n this._backbufferWidth = backbufferWidth;\r\n this._backbufferHeight = backbufferHeight;\r\n this._profilingOptions = this._normalizeProfilingOptions(\r\n options?.profiling ?? RenderGraphExecutor._defaultProfilingOptions,\r\n options?.device\r\n );\r\n this._textureAffinityCache = options?.textureAffinityCache ?? null;\r\n }\r\n\r\n /** Set profiling defaults for new executors. */\r\n static setDefaultProfilingOptions(options: boolean | RGProfilingOptions): void {\r\n RenderGraphExecutor._defaultProfilingOptions = options;\r\n }\r\n\r\n /** Return the latest resolved result from any executor. */\r\n static getLatestProfileResult(): RGProfileResult | null {\r\n return RenderGraphExecutor._latestProfileResult;\r\n }\r\n\r\n /** Resolve the latest pending result from any executor. */\r\n static resolveProfileResult(): Promise<RGProfileResult | null> {\r\n return (\r\n RenderGraphExecutor._latestPendingProfileFrame?.resolvePromise ??\r\n Promise.resolve(RenderGraphExecutor._latestProfileResult)\r\n );\r\n }\r\n\r\n /** Update timestamp profiling for this executor. */\r\n setProfilingOptions(options: boolean | RGProfilingOptions): void {\r\n this._profilingOptions = this._normalizeProfilingOptions(options, this._profilingOptions.device);\r\n }\r\n\r\n /** Return this executor's latest resolved profile. */\r\n getLatestProfileResult(): RGProfileResult | null {\r\n return this._latestProfileResult;\r\n }\r\n\r\n /** Resolve this executor's latest pending profile. */\r\n resolveProfileResult(): Promise<RGProfileResult | null> {\r\n return (\r\n this._pendingProfileFrames[this._pendingProfileFrames.length - 1]?.resolvePromise ??\r\n Promise.resolve(this._latestProfileResult)\r\n );\r\n }\r\n\r\n /** Update dimensions used for backbuffer-relative resources. */\r\n setBackbufferSize(width: number, height: number): void {\r\n this._backbufferWidth = width;\r\n this._backbufferHeight = height;\r\n }\r\n\r\n /** Bind an imported texture for execution. */\r\n setImportedTexture(handle: RGHandle, texture: TTexture): void {\r\n this._importedTextures.set(handle._id, texture);\r\n }\r\n\r\n /** Execute a compiled graph and manage its transient resources. */\r\n execute(compiled: CompiledRenderGraph, bindings?: RenderGraphExecutionBindings<TTexture>): void {\r\n if (bindings?.importedTextures) {\r\n for (const [handle, texture] of bindings.importedTextures) {\r\n this.setImportedTexture(handle, texture);\r\n }\r\n }\r\n this._cleanupCallbacks.length = 0;\r\n this._resolveImportedTextureAliases(compiled);\r\n const profileFrame = this._beginProfileFrame();\r\n const affinityEntries = new Map<string, RGTextureAffinityEntry<TTexture>>();\r\n\r\n const allocateAt = new Map<number, number[]>();\r\n const releaseAt = new Map<number, number[]>();\r\n const allocateFramebufferAt = new Map<number, number[]>();\r\n const releaseFramebufferAt = new Map<number, number[]>();\r\n\r\n // Merge lifetimes of versions sharing one physical texture.\r\n this._transientTextureAliases.clear();\r\n const transientSchedules = new Map<\r\n number,\r\n { firstUse: number; lastUse: number; desc: RGTextureDesc; allocationKey: string | null }\r\n >();\r\n for (const [resId, lifetime] of compiled.lifetimes) {\r\n if (lifetime.resource.kind === 'transient') {\r\n const physicalId = lifetime.resource.physicalId;\r\n this._transientTextureAliases.set(resId, physicalId);\r\n const merged = transientSchedules.get(physicalId);\r\n if (merged) {\r\n merged.firstUse = Math.min(merged.firstUse, lifetime.firstUse);\r\n merged.lastUse = Math.max(merged.lastUse, lifetime.lastUse);\r\n } else {\r\n transientSchedules.set(physicalId, {\r\n firstUse: lifetime.firstUse,\r\n lastUse: lifetime.lastUse,\r\n desc: lifetime.resource.desc as RGTextureDesc,\r\n allocationKey: lifetime.resource.allocationKey\r\n });\r\n }\r\n } else if (lifetime.resource.kind === 'framebuffer') {\r\n if (!allocateFramebufferAt.has(lifetime.firstUse)) {\r\n allocateFramebufferAt.set(lifetime.firstUse, []);\r\n }\r\n allocateFramebufferAt.get(lifetime.firstUse)!.push(resId);\r\n\r\n if (!releaseFramebufferAt.has(lifetime.lastUse)) {\r\n releaseFramebufferAt.set(lifetime.lastUse, []);\r\n }\r\n releaseFramebufferAt.get(lifetime.lastUse)!.push(resId);\r\n }\r\n }\r\n for (const [physicalId, schedule] of transientSchedules) {\r\n if (!allocateAt.has(schedule.firstUse)) {\r\n allocateAt.set(schedule.firstUse, []);\r\n }\r\n allocateAt.get(schedule.firstUse)!.push(physicalId);\r\n\r\n if (!releaseAt.has(schedule.lastUse)) {\r\n releaseAt.set(schedule.lastUse, []);\r\n }\r\n releaseAt.get(schedule.lastUse)!.push(physicalId);\r\n }\r\n\r\n let completed = false;\r\n let executionError: unknown = null;\r\n try {\r\n for (let i = 0; i < compiled.orderedPasses.length; i++) {\r\n const pass = compiled.orderedPasses[i];\r\n\r\n const toAllocate = allocateAt.get(i);\r\n if (toAllocate) {\r\n for (const resId of toAllocate) {\r\n const schedule = transientSchedules.get(resId)!;\r\n const size = this._resolveSize(schedule.desc);\r\n const descriptorSignature = this._getTextureDescriptorSignature(schedule.desc, size);\r\n const preferred = schedule.allocationKey\r\n ? this._textureAffinityCache?.getPreferredTexture(schedule.allocationKey, descriptorSignature)\r\n : undefined;\r\n const texture = this._allocator.allocate(schedule.desc, size, preferred);\r\n this._allocatedTextures.set(resId, texture);\r\n if (schedule.allocationKey) {\r\n affinityEntries.set(schedule.allocationKey, { texture, descriptorSignature });\r\n }\r\n }\r\n }\r\n\r\n // Allocate framebuffers after their attachments.\r\n const framebuffersToAllocate = allocateFramebufferAt.get(i);\r\n if (framebuffersToAllocate) {\r\n for (const resId of framebuffersToAllocate) {\r\n const lifetime = compiled.lifetimes.get(resId)!;\r\n const desc = lifetime.resource.desc as RGFramebufferDesc;\r\n const framebuffer = this._createFramebuffer(this._resolveFramebufferDesc(desc), false);\r\n this._allocatedFramebuffers.set(resId, framebuffer);\r\n }\r\n }\r\n\r\n // Preserve pass errors ahead of release errors.\r\n let passError: unknown = null;\r\n const passProfile = this._beginPassProfileScope(profileFrame, pass);\r\n try {\r\n if (pass.subpasses.length > 0) {\r\n const accessScope = this._createAccessScope(pass);\r\n const ctx = this._createContext(accessScope);\r\n for (const subpass of pass.subpasses) {\r\n const subpassProfile = this._beginSubpassProfileScope(\r\n profileFrame,\r\n passProfile,\r\n pass,\r\n subpass.name\r\n );\r\n try {\r\n (subpass.executeFn as RGExecuteFn<unknown>)(ctx, pass.data);\r\n } catch (e) {\r\n throw this._wrapSubpassError(pass.name, subpass.name, e);\r\n } finally {\r\n this._endProfileScope(profileFrame, subpassProfile);\r\n }\r\n }\r\n } else if (pass.executeFn) {\r\n const accessScope = this._createAccessScope(pass);\r\n const ctx = this._createContext(accessScope);\r\n (pass.executeFn as RGExecuteFn<unknown>)(ctx, pass.data);\r\n }\r\n } catch (e) {\r\n passError = e;\r\n } finally {\r\n this._endProfileScope(profileFrame, passProfile);\r\n }\r\n\r\n let releaseError: unknown = null;\r\n const framebuffersToRelease = releaseFramebufferAt.get(i);\r\n if (framebuffersToRelease) {\r\n for (const resId of framebuffersToRelease) {\r\n const framebuffer = this._allocatedFramebuffers.get(resId);\r\n if (framebuffer !== undefined) {\r\n try {\r\n this._releaseFramebuffer(framebuffer);\r\n this._allocatedFramebuffers.delete(resId);\r\n } catch (e) {\r\n releaseError ??= e;\r\n }\r\n }\r\n }\r\n }\r\n const toRelease = releaseAt.get(i);\r\n if (toRelease) {\r\n for (const resId of toRelease) {\r\n const texture = this._allocatedTextures.get(resId);\r\n if (texture !== undefined) {\r\n try {\r\n this._allocator.release(texture);\r\n this._allocatedTextures.delete(resId);\r\n } catch (e) {\r\n releaseError ??= e;\r\n }\r\n }\r\n }\r\n }\r\n if (passError) {\r\n throw passError;\r\n }\r\n if (releaseError) {\r\n throw releaseError;\r\n }\r\n }\r\n completed = true;\r\n } catch (e) {\r\n executionError = e;\r\n } finally {\r\n this._finishProfileFrame(profileFrame);\r\n let cleanupError: unknown = null;\r\n try {\r\n this._runCleanupCallbacks();\r\n } catch (e) {\r\n cleanupError = e;\r\n } finally {\r\n if (!completed) {\r\n try {\r\n this.reset();\r\n } catch (e) {\r\n cleanupError ??= e;\r\n }\r\n }\r\n }\r\n if (completed && !executionError && !cleanupError) {\r\n this._textureAffinityCache?.replace(affinityEntries);\r\n }\r\n if (executionError) {\r\n throw executionError;\r\n }\r\n if (cleanupError) {\r\n throw cleanupError;\r\n }\r\n }\r\n }\r\n\r\n /** Release remaining resources and clear imported bindings. */\r\n reset(): void {\r\n this._runCleanupCallbacks();\r\n // Handles aborted execution and allocator failures.\r\n for (const framebuffer of this._allocatedFramebuffers.values()) {\r\n this._releaseFramebuffer(framebuffer);\r\n }\r\n this._allocatedFramebuffers.clear();\r\n for (const texture of this._allocatedTextures.values()) {\r\n this._allocator.release(texture);\r\n }\r\n this._allocatedTextures.clear();\r\n this._importedTextures.clear();\r\n this._importedTextureAliases.clear();\r\n this._transientTextureAliases.clear();\r\n this._resolvedImportedTextures.clear();\r\n }\r\n\r\n private _normalizeProfilingOptions(\r\n options: boolean | RGProfilingOptions | undefined,\r\n fallbackDevice?: AbstractDevice\r\n ): RGResolvedProfilingOptions {\r\n const source = typeof options === 'object' ? options : {};\r\n const enabled = typeof options === 'boolean' ? options : (source.enabled ?? true);\r\n return {\r\n enabled,\r\n graph: source.graph ?? DEFAULT_PROFILING_OPTIONS.graph,\r\n pass: source.pass ?? DEFAULT_PROFILING_OPTIONS.pass,\r\n subpass: source.subpass ?? DEFAULT_PROFILING_OPTIONS.subpass,\r\n includePendingUploads: source.includePendingUploads ?? DEFAULT_PROFILING_OPTIONS.includePendingUploads,\r\n allowCrossFrame: source.allowCrossFrame ?? DEFAULT_PROFILING_OPTIONS.allowCrossFrame,\r\n maxPendingFrames: Math.max(1, source.maxPendingFrames ?? DEFAULT_PROFILING_OPTIONS.maxPendingFrames),\r\n label: source.label ?? DEFAULT_PROFILING_OPTIONS.label,\r\n device: source.device ?? fallbackDevice\r\n };\r\n }\r\n\r\n private _getProfilingDevice(): AbstractDevice | null {\r\n if (this._profilingOptions.device) {\r\n return this._profilingOptions.device;\r\n }\r\n try {\r\n return getDevice();\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private _beginProfileFrame(): RGProfileFrameInternal | null {\r\n if (!this._profilingOptions.enabled) {\r\n return null;\r\n }\r\n const device = this._getProfilingDevice();\r\n const supported = !!device?.getDeviceCaps().miscCaps.supportTimestampQuery;\r\n const rootResult: RGProfileScopeResult = {\r\n name: this._profilingOptions.label,\r\n type: 'graph',\r\n queryId: 0,\r\n durationMs: 0,\r\n status: supported ? 'resolved' : 'unsupported',\r\n children: [],\r\n message: supported ? undefined : 'GPU timestamp queries are not supported'\r\n };\r\n const result: RGProfileResult = {\r\n frameId: device?.frameInfo.frameCounter ?? -1,\r\n status: rootResult.status,\r\n graph: rootResult,\r\n passes: rootResult.children\r\n };\r\n const root: RGProfileScopeInternal = {\r\n result: rootResult,\r\n queryId: 0,\r\n ended: false\r\n };\r\n const frame: RGProfileFrameInternal = {\r\n serial: ++RenderGraphExecutor._nextProfileSerial,\r\n device,\r\n supported,\r\n result,\r\n root,\r\n scopes: [],\r\n resolvePromise: Promise.resolve(result)\r\n };\r\n if (this._profilingOptions.graph) {\r\n this._beginTimestampScope(frame, root, this._profilingOptions.label);\r\n }\r\n return frame;\r\n }\r\n\r\n private _beginPassProfileScope(\r\n frame: RGProfileFrameInternal | null,\r\n pass: RGPass\r\n ): RGProfileScopeInternal | null {\r\n if (!frame || (!this._profilingOptions.pass && !this._profilingOptions.subpass)) {\r\n return null;\r\n }\r\n return this._beginProfileScope(frame, frame.root, 'pass', pass.name, this._profilingOptions.pass);\r\n }\r\n\r\n private _beginSubpassProfileScope(\r\n frame: RGProfileFrameInternal | null,\r\n passScope: RGProfileScopeInternal | null,\r\n pass: RGPass,\r\n subpassName: string\r\n ): RGProfileScopeInternal | null {\r\n if (!frame || !this._profilingOptions.subpass) {\r\n return null;\r\n }\r\n const parent = passScope ?? frame.root;\r\n return this._beginProfileScope(\r\n frame,\r\n parent,\r\n 'subpass',\r\n subpassName,\r\n true,\r\n `${pass.name}/${subpassName}`\r\n );\r\n }\r\n\r\n private _beginProfileScope(\r\n frame: RGProfileFrameInternal,\r\n parent: RGProfileScopeInternal,\r\n type: RGProfileScopeType,\r\n name: string,\r\n queryEnabled: boolean,\r\n queryLabel?: string\r\n ): RGProfileScopeInternal {\r\n const status =\r\n frame.supported && !queryEnabled ? 'resolved' : frame.supported ? 'pending' : 'unsupported';\r\n const result: RGProfileScopeResult = {\r\n name,\r\n type,\r\n queryId: 0,\r\n durationMs: 0,\r\n status,\r\n children: [],\r\n message: frame.supported ? undefined : 'GPU timestamp queries are not supported'\r\n };\r\n parent.result.children.push(result);\r\n const scope: RGProfileScopeInternal = {\r\n result,\r\n queryId: 0,\r\n ended: false\r\n };\r\n if (queryEnabled) {\r\n this._beginTimestampScope(frame, scope, queryLabel ?? name);\r\n }\r\n return scope;\r\n }\r\n\r\n private _beginTimestampScope(\r\n frame: RGProfileFrameInternal,\r\n scope: RGProfileScopeInternal,\r\n label: string\r\n ): void {\r\n if (!frame.supported || !frame.device) {\r\n scope.result.status = 'unsupported';\r\n scope.result.message = 'GPU timestamp queries are not supported';\r\n return;\r\n }\r\n const queryId = frame.device.beginTimestampQuery(label, {\r\n includePendingUploads: this._profilingOptions.includePendingUploads,\r\n allowCrossFrame: this._profilingOptions.allowCrossFrame\r\n });\r\n scope.queryId = queryId;\r\n scope.result.queryId = queryId;\r\n if (queryId > 0) {\r\n scope.result.status = 'pending';\r\n frame.scopes.push(scope);\r\n } else {\r\n scope.result.status = 'unsupported';\r\n scope.result.message = 'GPU timestamp query was not started';\r\n }\r\n }\r\n\r\n private _endProfileScope(frame: RGProfileFrameInternal | null, scope: RGProfileScopeInternal | null): void {\r\n if (!frame || !frame.device || !scope || scope.ended) {\r\n return;\r\n }\r\n scope.ended = true;\r\n if (scope.queryId > 0) {\r\n frame.device.endTimestampQuery(scope.queryId);\r\n }\r\n }\r\n\r\n private _finishProfileFrame(frame: RGProfileFrameInternal | null): void {\r\n if (!frame) {\r\n return;\r\n }\r\n this._endProfileScope(frame, frame.root);\r\n if (frame.scopes.length === 0 || !frame.device) {\r\n frame.result.status = this._aggregateProfileStatus(frame.result.graph);\r\n this._publishProfileResult(frame);\r\n return;\r\n }\r\n frame.resolvePromise = Promise.all(\r\n frame.scopes.map((scope) => frame.device!.resolveTimestampQuery(scope.queryId))\r\n )\r\n .then((results) => {\r\n for (let i = 0; i < results.length; i++) {\r\n this._applyTimestampResult(frame.scopes[i], results[i]);\r\n }\r\n frame.result.status = this._aggregateProfileStatus(frame.result.graph);\r\n this._publishProfileResult(frame);\r\n return frame.result;\r\n })\r\n .catch((err) => {\r\n const message = err instanceof Error ? err.message : String(err);\r\n for (const scope of frame.scopes) {\r\n scope.result.status = 'failed';\r\n scope.result.message = message;\r\n }\r\n frame.result.status = 'failed';\r\n this._publishProfileResult(frame);\r\n return frame.result;\r\n });\r\n this._trackPendingProfileFrame(frame);\r\n }\r\n\r\n private _trackPendingProfileFrame(frame: RGProfileFrameInternal): void {\r\n this._pendingProfileFrames.push(frame);\r\n while (this._pendingProfileFrames.length > this._profilingOptions.maxPendingFrames) {\r\n this._pendingProfileFrames.shift();\r\n }\r\n RenderGraphExecutor._latestPendingProfileFrame = frame;\r\n }\r\n\r\n private _publishProfileResult(frame: RGProfileFrameInternal): void {\r\n this._pendingProfileFrames = this._pendingProfileFrames.filter((pending) => pending !== frame);\r\n if (frame.serial >= this._latestResolvedProfileSerial) {\r\n this._latestResolvedProfileSerial = frame.serial;\r\n this._latestProfileResult = frame.result;\r\n }\r\n if (frame.serial >= RenderGraphExecutor._latestResolvedProfileSerial) {\r\n RenderGraphExecutor._latestResolvedProfileSerial = frame.serial;\r\n RenderGraphExecutor._latestProfileResult = frame.result;\r\n }\r\n if (RenderGraphExecutor._latestPendingProfileFrame === frame) {\r\n RenderGraphExecutor._latestPendingProfileFrame = null;\r\n }\r\n }\r\n\r\n private _applyTimestampResult(scope: RGProfileScopeInternal, result: TimestampQueryResult): void {\r\n scope.result.queryId = result.id;\r\n scope.result.durationMs = result.durationMs;\r\n scope.result.status = result.status;\r\n scope.result.message = result.message;\r\n }\r\n\r\n private _aggregateProfileStatus(scope: RGProfileScopeResult): TimestampQueryStatus {\r\n const statuses: TimestampQueryStatus[] = [];\r\n const collect = (node: RGProfileScopeResult) => {\r\n statuses.push(node.status);\r\n for (const child of node.children) {\r\n collect(child);\r\n }\r\n };\r\n collect(scope);\r\n for (const status of ['failed', 'invalid', 'exhausted', 'pending', 'auto-closed'] as const) {\r\n if (statuses.includes(status)) {\r\n return status;\r\n }\r\n }\r\n if (statuses.includes('unsupported')) {\r\n return 'unsupported';\r\n }\r\n return 'resolved';\r\n }\r\n\r\n private _resolveSize(desc: RGTextureDesc): RGResolvedSize {\r\n const mode = desc.sizeMode ?? 'backbuffer-relative';\r\n if (mode === 'absolute') {\r\n return {\r\n width: desc.width ?? 1,\r\n height: desc.height ?? 1\r\n };\r\n }\r\n const scaleX = desc.width ?? 1.0;\r\n const scaleY = desc.height ?? 1.0;\r\n return {\r\n width: Math.max(1, Math.floor(this._backbufferWidth * scaleX)),\r\n height: Math.max(1, Math.floor(this._backbufferHeight * scaleY))\r\n };\r\n }\r\n\r\n private _getTextureDescriptorSignature(desc: RGTextureDesc, size: RGResolvedSize): string {\r\n return JSON.stringify([\r\n desc.format,\r\n size.width,\r\n size.height,\r\n desc.mipLevels ?? 1,\r\n desc.arrayLayers ?? null\r\n ]);\r\n }\r\n\r\n private _resolveImportedTextureAliases(compiled: CompiledRenderGraph): void {\r\n this._importedTextureAliases.clear();\r\n this._resolvedImportedTextures.clear();\r\n const physicalToTexture = new Map<number, TTexture>();\r\n for (const lifetime of compiled.lifetimes.values()) {\r\n const resource = lifetime.resource;\r\n if (resource.kind !== 'imported') {\r\n continue;\r\n }\r\n const texture =\r\n this._importedTextures.get(resource.id) ?? this._importedTextures.get(resource.physicalId);\r\n if (texture !== undefined) {\r\n physicalToTexture.set(resource.physicalId, texture);\r\n }\r\n }\r\n for (const lifetime of compiled.lifetimes.values()) {\r\n const resource = lifetime.resource;\r\n if (resource.kind !== 'imported') {\r\n continue;\r\n }\r\n this._importedTextureAliases.set(resource.id, resource.physicalId);\r\n const texture = physicalToTexture.get(resource.physicalId);\r\n if (texture !== undefined) {\r\n this._resolvedImportedTextures.set(resource.id, texture);\r\n this._resolvedImportedTextures.set(resource.physicalId, texture);\r\n }\r\n }\r\n }\r\n\r\n private _runCleanupCallbacks(): void {\r\n let error: unknown = null;\r\n while (this._cleanupCallbacks.length > 0) {\r\n const callback = this._cleanupCallbacks.pop()!;\r\n try {\r\n callback();\r\n } catch (e) {\r\n error ??= e;\r\n }\r\n }\r\n if (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n private _createFramebuffer(desc: RGFramebufferDesc, autoCleanup = true): FrameBuffer {\r\n if (!this._allocator.allocateFramebuffer || !this._allocator.releaseFramebuffer) {\r\n throw new Error('RenderGraphExecutor: framebuffer allocation is not supported by this allocator.');\r\n }\r\n const framebuffer = this._allocator.allocateFramebuffer(desc);\r\n if (autoCleanup) {\r\n this._cleanupCallbacks.push(() => {\r\n this._allocator.releaseFramebuffer!(framebuffer);\r\n });\r\n }\r\n return framebuffer;\r\n }\r\n\r\n private _releaseFramebuffer(framebuffer: FrameBuffer): void {\r\n if (!this._allocator.releaseFramebuffer) {\r\n throw new Error('RenderGraphExecutor: framebuffer release is not supported by this allocator.');\r\n }\r\n this._allocator.releaseFramebuffer(framebuffer);\r\n }\r\n\r\n private _resolveFramebufferDesc(\r\n desc: RGFramebufferDesc,\r\n accessScope?: RGPassAccessScope\r\n ): RGFramebufferDesc {\r\n const resolveAttachment = <T extends RGTextureAttachment | null | undefined>(\r\n attachment: T\r\n ): RGTextureAttachment | null | undefined => {\r\n if (attachment instanceof RGHandle) {\r\n if (accessScope) {\r\n this._assertDeclaredAccess(accessScope, attachment, 'texture');\r\n }\r\n // The resolved physical texture stands in for the handle; the graph is\r\n // only parameterized by TTexture, which the allocator produces.\r\n return this._resolveResource(attachment) as RGTextureAttachment;\r\n }\r\n return attachment;\r\n };\r\n const colors = Array.isArray(desc.colorAttachments)\r\n ? (desc.colorAttachments.map(resolveAttachment) as RGTextureAttachment[])\r\n : desc.colorAttachments\r\n ? (resolveAttachment(desc.colorAttachments) as RGTextureAttachment)\r\n : null;\r\n return {\r\n ...desc,\r\n colorAttachments: colors,\r\n depthAttachment: resolveAttachment(desc.depthAttachment)\r\n };\r\n }\r\n\r\n private _resolveResource(handle: RGHandle): TTexture {\r\n const imported = this._importedTextures.get(handle._id);\r\n if (imported !== undefined) {\r\n return imported;\r\n }\r\n const resolvedImported = this._resolvedImportedTextures.get(handle._id);\r\n if (resolvedImported !== undefined) {\r\n return resolvedImported;\r\n }\r\n const importedAlias = this._importedTextureAliases.get(handle._id);\r\n if (importedAlias !== undefined) {\r\n const aliased =\r\n this._importedTextures.get(importedAlias) ?? this._resolvedImportedTextures.get(importedAlias);\r\n if (aliased !== undefined) {\r\n return aliased;\r\n }\r\n }\r\n const allocated = this._allocatedTextures.get(handle._id);\r\n if (allocated !== undefined) {\r\n return allocated;\r\n }\r\n // Written versions alias the original physical texture.\r\n const transientAlias = this._transientTextureAliases.get(handle._id);\r\n if (transientAlias !== undefined) {\r\n const aliased = this._allocatedTextures.get(transientAlias);\r\n if (aliased !== undefined) {\r\n return aliased;\r\n }\r\n }\r\n throw new Error(\r\n `RenderGraphExecutor: cannot resolve resource \"${handle.name}\" (id=${handle._id}). ` +\r\n `It may not have been allocated yet or was already released.`\r\n );\r\n }\r\n\r\n private _createAccessScope(pass: RGPass): RGPassAccessScope {\r\n const accessibleIds = new Set<number>();\r\n const textureIds = new Set<number>();\r\n const framebufferIds = new Set<number>();\r\n for (const resource of pass.reads) {\r\n accessibleIds.add(resource.id);\r\n if (resource.kind === 'transient' || resource.kind === 'imported') {\r\n textureIds.add(resource.id);\r\n } else if (resource.kind === 'framebuffer') {\r\n framebufferIds.add(resource.id);\r\n }\r\n }\r\n for (const resource of pass.writes) {\r\n accessibleIds.add(resource.id);\r\n if (resource.kind === 'transient' || resource.kind === 'imported') {\r\n textureIds.add(resource.id);\r\n } else if (resource.kind === 'framebuffer') {\r\n framebufferIds.add(resource.id);\r\n }\r\n }\r\n return {\r\n passName: pass.name,\r\n accessibleIds,\r\n textureIds,\r\n framebufferIds\r\n };\r\n }\r\n\r\n private _assertDeclaredAccess(\r\n accessScope: RGPassAccessScope,\r\n handle: RGHandle,\r\n access: 'texture' | 'framebuffer'\r\n ): void {\r\n if (!accessScope.accessibleIds.has(handle._id)) {\r\n throw new Error(\r\n `RenderGraphExecutor: pass \"${accessScope.passName}\" tried to access ${access} \"${handle.name}\" ` +\r\n `without declaring a read/write dependency.`\r\n );\r\n }\r\n if (access === 'texture' && !accessScope.textureIds.has(handle._id)) {\r\n throw new Error(\r\n `RenderGraphExecutor: pass \"${accessScope.passName}\" tried to access \"${handle.name}\" as a texture, ` +\r\n `but it is not a texture resource.`\r\n );\r\n }\r\n if (access === 'framebuffer' && !accessScope.framebufferIds.has(handle._id)) {\r\n throw new Error(\r\n `RenderGraphExecutor: pass \"${accessScope.passName}\" tried to access \"${handle.name}\" as a framebuffer, ` +\r\n `but it is not a framebuffer resource.`\r\n );\r\n }\r\n }\r\n\r\n private _wrapSubpassError(passName: string, subpassName: string, error: unknown): Error {\r\n const message = error instanceof Error ? error.message : String(error);\r\n const wrapped = new Error(\r\n `RenderGraphExecutor: pass \"${passName}\" subpass \"${subpassName}\" failed: ${message}`\r\n );\r\n (wrapped as Error & { cause?: unknown }).cause = error;\r\n return wrapped;\r\n }\r\n\r\n private _createContext(accessScope: RGPassAccessScope): RGExecuteContext {\r\n const self = this;\r\n return {\r\n getTexture<T>(handle: RGTextureHandle<T>): T {\r\n self._assertDeclaredAccess(accessScope, handle, 'texture');\r\n return self._resolveResource(handle) as unknown as T;\r\n },\r\n getFramebuffer(handle: RGFramebufferHandle): FrameBuffer {\r\n self._assertDeclaredAccess(accessScope, handle, 'framebuffer');\r\n const framebuffer = self._allocatedFramebuffers.get(handle._id);\r\n if (framebuffer !== undefined) {\r\n return framebuffer;\r\n }\r\n throw new Error(\r\n `RenderGraphExecutor: cannot resolve framebuffer \"${handle.name}\" (id=${handle._id}). ` +\r\n `It may not have been allocated yet or was already released.`\r\n );\r\n },\r\n createFramebuffer(desc: RGFramebufferDesc): FrameBuffer {\r\n return self._createFramebuffer(self._resolveFramebufferDesc(desc, accessScope));\r\n },\r\n deferCleanup(callback: () => void): void {\r\n self._cleanupCallbacks.push(callback);\r\n }\r\n };\r\n }\r\n}\r\n"],"names":["DEFAULT_PROFILING_OPTIONS","enabled","graph","pass","subpass","includePendingUploads","allowCrossFrame","maxPendingFrames","label","RenderGraphExecutor","_defaultProfilingOptions","_latestProfileResult","_latestPendingProfileFrame","_latestResolvedProfileSerial","_nextProfileSerial","_allocator","_backbufferWidth","_backbufferHeight","_importedTextures","Map","_allocatedTextures","_allocatedFramebuffers","_importedTextureAliases","_transientTextureAliases","_resolvedImportedTextures","_cleanupCallbacks","_profilingOptions","_pendingProfileFrames","_textureAffinityCache","allocator","backbufferWidth","backbufferHeight","options","_normalizeProfilingOptions","profiling","device","textureAffinityCache","setDefaultProfilingOptions","getLatestProfileResult","resolveProfileResult","resolvePromise","Promise","resolve","setProfilingOptions","length","setBackbufferSize","width","height","setImportedTexture","handle","texture","set","_id","execute","compiled","bindings","importedTextures","_resolveImportedTextureAliases","profileFrame","_beginProfileFrame","affinityEntries","allocateAt","releaseAt","allocateFramebufferAt","releaseFramebufferAt","clear","transientSchedules","resId","lifetime","lifetimes","resource","kind","physicalId","merged","get","firstUse","Math","min","lastUse","max","desc","allocationKey","has","push","schedule","completed","executionError","i","orderedPasses","toAllocate","size","_resolveSize","descriptorSignature","_getTextureDescriptorSignature","preferred","getPreferredTexture","undefined","allocate","framebuffersToAllocate","framebuffer","_createFramebuffer","_resolveFramebufferDesc","passError","passProfile","_beginPassProfileScope","subpasses","accessScope","_createAccessScope","ctx","_createContext","subpassProfile","_beginSubpassProfileScope","name","executeFn","data","e","_wrapSubpassError","_endProfileScope","releaseError","framebuffersToRelease","_releaseFramebuffer","delete","toRelease","release","_finishProfileFrame","cleanupError","_runCleanupCallbacks","reset","replace","values","fallbackDevice","source","_getProfilingDevice","getDevice","supported","getDeviceCaps","miscCaps","supportTimestampQuery","rootResult","type","queryId","durationMs","status","children","message","result","frameId","frameInfo","frameCounter","passes","root","ended","frame","serial","scopes","_beginTimestampScope","_beginProfileScope","passScope","subpassName","parent","queryEnabled","queryLabel","scope","beginTimestampQuery","endTimestampQuery","_aggregateProfileStatus","_publishProfileResult","all","map","resolveTimestampQuery","then","results","_applyTimestampResult","catch","err","Error","String","_trackPendingProfileFrame","shift","filter","pending","id","statuses","collect","node","child","includes","mode","sizeMode","scaleX","scaleY","floor","JSON","stringify","format","mipLevels","arrayLayers","physicalToTexture","error","callback","pop","autoCleanup","allocateFramebuffer","releaseFramebuffer","resolveAttachment","attachment","RGHandle","_assertDeclaredAccess","_resolveResource","colors","Array","isArray","colorAttachments","depthAttachment","imported","resolvedImported","importedAlias","aliased","allocated","transientAlias","accessibleIds","Set","textureIds","framebufferIds","reads","add","writes","passName","access","wrapped","cause","self","getTexture","getFramebuffer","createFramebuffer","deferCleanup"],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","sources":["../../../src/render/rendergraph/executor.ts"],"sourcesContent":["import type {\r\n CompiledRenderGraph,\r\n RenderGraphExecutorOptions,\r\n RGProfileResult,\r\n RGProfileScopeResult,\r\n RGProfileScopeType,\r\n RGProfilingOptions,\r\n RGTextureAllocator,\r\n RGTextureDesc,\r\n RGFramebufferDesc,\r\n RGResolvedSize,\r\n RGExecuteContext,\r\n RGExecuteFn,\r\n RGPass,\r\n RGTextureHandle,\r\n RGTextureAttachment,\r\n RGFramebufferHandle,\r\n RenderGraphExecutionBindings\r\n} from './types';\r\nimport { RGHandle } from './types';\r\nimport type { RGTextureAffinityCache, RGTextureAffinityEntry } from './texture_affinity_cache';\r\nimport type {\r\n AbstractDevice,\r\n BaseTexture,\r\n FrameBuffer,\r\n TimestampQueryResult,\r\n TimestampQueryStatus\r\n} from '@zephyr3d/device';\r\nimport { getDevice } from '../../app/api';\r\nimport { warnUnsupported } from '../../utility/unsupported';\r\n\r\ninterface RGPassAccessScope {\r\n passName: string;\r\n accessibleIds: Set<number>;\r\n textureIds: Set<number>;\r\n framebufferIds: Set<number>;\r\n}\r\n\r\ntype RGResolvedProfilingOptions = Required<Omit<RGProfilingOptions, 'device'>> & {\r\n device?: AbstractDevice;\r\n};\r\n\r\ninterface RGProfileScopeInternal {\r\n result: RGProfileScopeResult;\r\n queryId: number;\r\n ended: boolean;\r\n /** Device that began an external scope's query */\r\n device?: AbstractDevice;\r\n}\r\n\r\ninterface RGProfileFrameInternal {\r\n serial: number;\r\n device: AbstractDevice | null;\r\n supported: boolean;\r\n includePendingUploads: boolean;\r\n result: RGProfileResult;\r\n root: RGProfileScopeInternal;\r\n scopes: RGProfileScopeInternal[];\r\n resolvePromise: Promise<RGProfileResult>;\r\n}\r\n\r\nconst DEFAULT_PROFILING_OPTIONS: RGResolvedProfilingOptions = {\r\n enabled: false,\r\n graph: true,\r\n pass: true,\r\n subpass: true,\r\n includePendingUploads: true,\r\n allowCrossFrame: false,\r\n maxPendingFrames: 3,\r\n label: 'RenderGraph'\r\n};\r\n\r\n/** Executes compiled graphs with automatic resource lifetimes. @public */\r\nexport class RenderGraphExecutor<TTexture = BaseTexture> {\r\n private static _defaultProfilingOptions: boolean | RGProfilingOptions = false;\r\n private static _latestProfileResult: RGProfileResult | null = null;\r\n private static _latestPendingProfileFrame: RGProfileFrameInternal | null = null;\r\n private static _latestResolvedProfileSerial = 0;\r\n private static _nextProfileSerial = 0;\r\n /** External scopes recorded outside execution, waiting for the next graph to adopt them */\r\n private static _externalRoots: RGProfileScopeResult[] = [];\r\n private static _externalScopes: RGProfileScopeInternal[] = [];\r\n private static _externalFrameId = -1;\r\n /** Open external scopes, innermost last */\r\n private static _externalStack: RGProfileScopeInternal[] = [];\r\n /** The profiled frame being executed and its innermost open scope */\r\n private static _executingFrame: RGProfileFrameInternal | null = null;\r\n private static _executingScope: RGProfileScopeInternal | null = null;\r\n\r\n private _allocator: RGTextureAllocator<TTexture>;\r\n private _backbufferWidth: number;\r\n private _backbufferHeight: number;\r\n private _importedTextures: Map<number, TTexture> = new Map();\r\n private _allocatedTextures: Map<number, TTexture> = new Map();\r\n private _allocatedFramebuffers: Map<number, FrameBuffer> = new Map();\r\n private _importedTextureAliases: Map<number, number> = new Map();\r\n private _transientTextureAliases: Map<number, number> = new Map();\r\n private _resolvedImportedTextures: Map<number, TTexture> = new Map();\r\n private _cleanupCallbacks: Array<() => void> = [];\r\n private _profilingOptions: RGResolvedProfilingOptions;\r\n private _pendingProfileFrames: RGProfileFrameInternal[] = [];\r\n private _latestProfileResult: RGProfileResult | null = null;\r\n private _latestResolvedProfileSerial = 0;\r\n private _textureAffinityCache: RGTextureAffinityCache<TTexture> | null;\r\n\r\n constructor(\r\n allocator: RGTextureAllocator<TTexture>,\r\n backbufferWidth: number,\r\n backbufferHeight: number,\r\n options?: RenderGraphExecutorOptions<TTexture>\r\n ) {\r\n this._allocator = allocator;\r\n this._backbufferWidth = backbufferWidth;\r\n this._backbufferHeight = backbufferHeight;\r\n this._profilingOptions = this._normalizeProfilingOptions(\r\n options?.profiling ?? RenderGraphExecutor._defaultProfilingOptions,\r\n options?.device\r\n );\r\n this._textureAffinityCache = options?.textureAffinityCache ?? null;\r\n }\r\n\r\n /** Set profiling defaults for new executors. */\r\n static setDefaultProfilingOptions(options: boolean | RGProfilingOptions): void {\r\n RenderGraphExecutor._defaultProfilingOptions = options;\r\n RenderGraphExecutor._dropExternalScopes();\r\n }\r\n\r\n /**\r\n * Times GPU work `fn` records outside a graph pass (scene updates, simulations).\r\n * Outside execution it is reported before the next graph's passes; inside, it\r\n * nests under the current pass. Only active while profiling; otherwise calls `fn`.\r\n */\r\n static profileScope<T>(name: string, fn: () => T): T {\r\n const scope = RenderGraphExecutor._beginExternalScope(name);\r\n if (!scope) {\r\n return fn();\r\n }\r\n try {\r\n return fn();\r\n } finally {\r\n RenderGraphExecutor._endExternalScope(scope);\r\n }\r\n }\r\n\r\n private static _beginExternalScope(name: string): RGProfileScopeInternal | null {\r\n const executing = RenderGraphExecutor._executingFrame;\r\n const defaults = RenderGraphExecutor._defaultProfilingOptions;\r\n let device: AbstractDevice | null;\r\n let includePendingUploads: boolean;\r\n if (executing) {\r\n device = executing.device;\r\n includePendingUploads = executing.includePendingUploads;\r\n } else {\r\n const enabled = typeof defaults === 'object' ? (defaults.enabled ?? true) : defaults;\r\n if (!enabled) {\r\n return null;\r\n }\r\n const options = typeof defaults === 'object' ? defaults : null;\r\n try {\r\n device = options?.device ?? getDevice();\r\n } catch {\r\n device = null;\r\n }\r\n includePendingUploads =\r\n options?.includePendingUploads ?? DEFAULT_PROFILING_OPTIONS.includePendingUploads;\r\n }\r\n if (!device?.getDeviceCaps().miscCaps.supportTimestampQuery) {\r\n return null;\r\n }\r\n const stack = RenderGraphExecutor._externalStack;\r\n if (!executing && stack.length === 0) {\r\n // Scopes no graph adopted within their frame would land in an unrelated later one\r\n const frameId = device.frameInfo.frameCounter;\r\n if (frameId !== RenderGraphExecutor._externalFrameId) {\r\n RenderGraphExecutor._externalRoots.length = 0;\r\n RenderGraphExecutor._externalScopes.length = 0;\r\n RenderGraphExecutor._externalFrameId = frameId;\r\n }\r\n }\r\n const queryId = device.beginTimestampQuery(name, { includePendingUploads, allowCrossFrame: false });\r\n if (queryId <= 0) {\r\n return null;\r\n }\r\n const result: RGProfileScopeResult = {\r\n name,\r\n type: 'external',\r\n queryId,\r\n durationMs: 0,\r\n status: 'pending',\r\n children: []\r\n };\r\n const scope: RGProfileScopeInternal = { result, queryId, ended: false, device };\r\n const parent = stack[stack.length - 1] ?? RenderGraphExecutor._executingScope;\r\n if (parent) {\r\n parent.result.children.push(result);\r\n } else {\r\n RenderGraphExecutor._externalRoots.push(result);\r\n }\r\n if (executing) {\r\n executing.scopes.push(scope);\r\n } else {\r\n RenderGraphExecutor._externalScopes.push(scope);\r\n }\r\n stack.push(scope);\r\n return scope;\r\n }\r\n\r\n private static _endExternalScope(scope: RGProfileScopeInternal): void {\r\n const stack = RenderGraphExecutor._externalStack;\r\n const index = stack.lastIndexOf(scope);\r\n if (index >= 0) {\r\n stack.length = index;\r\n }\r\n if (!scope.ended) {\r\n scope.ended = true;\r\n scope.device!.endTimestampQuery(scope.queryId);\r\n }\r\n }\r\n\r\n /** Moves the external scopes recorded so far into `frame`, or discards them */\r\n private static _adoptExternalScopes(frame: RGProfileFrameInternal | null): void {\r\n const roots = RenderGraphExecutor._externalRoots;\r\n const scopes = RenderGraphExecutor._externalScopes;\r\n if (frame && frame.supported && roots.length > 0) {\r\n frame.root.result.children.push(...roots);\r\n frame.scopes.push(...scopes);\r\n }\r\n roots.length = 0;\r\n scopes.length = 0;\r\n }\r\n\r\n private static _dropExternalScopes(): void {\r\n RenderGraphExecutor._externalRoots.length = 0;\r\n RenderGraphExecutor._externalScopes.length = 0;\r\n }\r\n\r\n /** Return the latest resolved result from any executor. */\r\n static getLatestProfileResult(): RGProfileResult | null {\r\n return RenderGraphExecutor._latestProfileResult;\r\n }\r\n\r\n /** Resolve the latest pending result from any executor. */\r\n static resolveProfileResult(): Promise<RGProfileResult | null> {\r\n return (\r\n RenderGraphExecutor._latestPendingProfileFrame?.resolvePromise ??\r\n Promise.resolve(RenderGraphExecutor._latestProfileResult)\r\n );\r\n }\r\n\r\n /** Update timestamp profiling for this executor. */\r\n setProfilingOptions(options: boolean | RGProfilingOptions): void {\r\n this._profilingOptions = this._normalizeProfilingOptions(options, this._profilingOptions.device);\r\n }\r\n\r\n /** Return this executor's latest resolved profile. */\r\n getLatestProfileResult(): RGProfileResult | null {\r\n return this._latestProfileResult;\r\n }\r\n\r\n /** Resolve this executor's latest pending profile. */\r\n resolveProfileResult(): Promise<RGProfileResult | null> {\r\n return (\r\n this._pendingProfileFrames[this._pendingProfileFrames.length - 1]?.resolvePromise ??\r\n Promise.resolve(this._latestProfileResult)\r\n );\r\n }\r\n\r\n /** Update dimensions used for backbuffer-relative resources. */\r\n setBackbufferSize(width: number, height: number): void {\r\n this._backbufferWidth = width;\r\n this._backbufferHeight = height;\r\n }\r\n\r\n /** Bind an imported texture for execution. */\r\n setImportedTexture(handle: RGHandle, texture: TTexture): void {\r\n this._importedTextures.set(handle._id, texture);\r\n }\r\n\r\n /** Execute a compiled graph and manage its transient resources. */\r\n execute(compiled: CompiledRenderGraph, bindings?: RenderGraphExecutionBindings<TTexture>): void {\r\n if (bindings?.importedTextures) {\r\n for (const [handle, texture] of bindings.importedTextures) {\r\n this.setImportedTexture(handle, texture);\r\n }\r\n }\r\n this._cleanupCallbacks.length = 0;\r\n this._resolveImportedTextureAliases(compiled);\r\n const profileFrame = this._beginProfileFrame();\r\n RenderGraphExecutor._adoptExternalScopes(profileFrame);\r\n const outerExecutingFrame = RenderGraphExecutor._executingFrame;\r\n const outerExecutingScope = RenderGraphExecutor._executingScope;\r\n const affinityEntries = new Map<string, RGTextureAffinityEntry<TTexture>>();\r\n\r\n const allocateAt = new Map<number, number[]>();\r\n const releaseAt = new Map<number, number[]>();\r\n const allocateFramebufferAt = new Map<number, number[]>();\r\n const releaseFramebufferAt = new Map<number, number[]>();\r\n\r\n // Merge lifetimes of versions sharing one physical texture.\r\n this._transientTextureAliases.clear();\r\n const transientSchedules = new Map<\r\n number,\r\n { firstUse: number; lastUse: number; desc: RGTextureDesc; allocationKey: string | null }\r\n >();\r\n for (const [resId, lifetime] of compiled.lifetimes) {\r\n if (lifetime.resource.kind === 'transient') {\r\n const physicalId = lifetime.resource.physicalId;\r\n this._transientTextureAliases.set(resId, physicalId);\r\n const merged = transientSchedules.get(physicalId);\r\n if (merged) {\r\n merged.firstUse = Math.min(merged.firstUse, lifetime.firstUse);\r\n merged.lastUse = Math.max(merged.lastUse, lifetime.lastUse);\r\n } else {\r\n transientSchedules.set(physicalId, {\r\n firstUse: lifetime.firstUse,\r\n lastUse: lifetime.lastUse,\r\n desc: lifetime.resource.desc as RGTextureDesc,\r\n allocationKey: lifetime.resource.allocationKey\r\n });\r\n }\r\n } else if (lifetime.resource.kind === 'framebuffer') {\r\n if (!allocateFramebufferAt.has(lifetime.firstUse)) {\r\n allocateFramebufferAt.set(lifetime.firstUse, []);\r\n }\r\n allocateFramebufferAt.get(lifetime.firstUse)!.push(resId);\r\n\r\n if (!releaseFramebufferAt.has(lifetime.lastUse)) {\r\n releaseFramebufferAt.set(lifetime.lastUse, []);\r\n }\r\n releaseFramebufferAt.get(lifetime.lastUse)!.push(resId);\r\n }\r\n }\r\n for (const [physicalId, schedule] of transientSchedules) {\r\n if (!allocateAt.has(schedule.firstUse)) {\r\n allocateAt.set(schedule.firstUse, []);\r\n }\r\n allocateAt.get(schedule.firstUse)!.push(physicalId);\r\n\r\n if (!releaseAt.has(schedule.lastUse)) {\r\n releaseAt.set(schedule.lastUse, []);\r\n }\r\n releaseAt.get(schedule.lastUse)!.push(physicalId);\r\n }\r\n\r\n let completed = false;\r\n let executionError: unknown = null;\r\n if (profileFrame) {\r\n RenderGraphExecutor._executingFrame = profileFrame;\r\n RenderGraphExecutor._executingScope = profileFrame.root;\r\n }\r\n try {\r\n for (let i = 0; i < compiled.orderedPasses.length; i++) {\r\n const pass = compiled.orderedPasses[i];\r\n\r\n const toAllocate = allocateAt.get(i);\r\n if (toAllocate) {\r\n for (const resId of toAllocate) {\r\n const schedule = transientSchedules.get(resId)!;\r\n const size = this._resolveSize(schedule.desc);\r\n const descriptorSignature = this._getTextureDescriptorSignature(schedule.desc, size);\r\n const preferred = schedule.allocationKey\r\n ? this._textureAffinityCache?.getPreferredTexture(schedule.allocationKey, descriptorSignature)\r\n : undefined;\r\n const texture = this._allocator.allocate(schedule.desc, size, preferred);\r\n this._allocatedTextures.set(resId, texture);\r\n if (schedule.allocationKey) {\r\n affinityEntries.set(schedule.allocationKey, { texture, descriptorSignature });\r\n }\r\n }\r\n }\r\n\r\n // Allocate framebuffers after their attachments.\r\n const framebuffersToAllocate = allocateFramebufferAt.get(i);\r\n if (framebuffersToAllocate) {\r\n for (const resId of framebuffersToAllocate) {\r\n const lifetime = compiled.lifetimes.get(resId)!;\r\n const desc = lifetime.resource.desc as RGFramebufferDesc;\r\n const framebuffer = this._createFramebuffer(this._resolveFramebufferDesc(desc), false);\r\n this._allocatedFramebuffers.set(resId, framebuffer);\r\n }\r\n }\r\n\r\n // Preserve pass errors ahead of release errors.\r\n let passError: unknown = null;\r\n const passProfile = this._beginPassProfileScope(profileFrame, pass);\r\n if (profileFrame) {\r\n RenderGraphExecutor._executingScope = passProfile ?? profileFrame.root;\r\n }\r\n try {\r\n if (pass.subpasses.length > 0) {\r\n const accessScope = this._createAccessScope(pass);\r\n const ctx = this._createContext(accessScope);\r\n for (const subpass of pass.subpasses) {\r\n const subpassProfile = this._beginSubpassProfileScope(\r\n profileFrame,\r\n passProfile,\r\n pass,\r\n subpass.name\r\n );\r\n if (profileFrame) {\r\n RenderGraphExecutor._executingScope = subpassProfile ?? passProfile ?? profileFrame.root;\r\n }\r\n try {\r\n (subpass.executeFn as RGExecuteFn<unknown>)(ctx, pass.data);\r\n } catch (e) {\r\n throw this._wrapSubpassError(pass.name, subpass.name, e);\r\n } finally {\r\n this._endProfileScope(profileFrame, subpassProfile);\r\n }\r\n }\r\n } else if (pass.executeFn) {\r\n const accessScope = this._createAccessScope(pass);\r\n const ctx = this._createContext(accessScope);\r\n (pass.executeFn as RGExecuteFn<unknown>)(ctx, pass.data);\r\n }\r\n } catch (e) {\r\n passError = e;\r\n } finally {\r\n this._endProfileScope(profileFrame, passProfile);\r\n }\r\n\r\n let releaseError: unknown = null;\r\n const framebuffersToRelease = releaseFramebufferAt.get(i);\r\n if (framebuffersToRelease) {\r\n for (const resId of framebuffersToRelease) {\r\n const framebuffer = this._allocatedFramebuffers.get(resId);\r\n if (framebuffer !== undefined) {\r\n try {\r\n this._releaseFramebuffer(framebuffer);\r\n this._allocatedFramebuffers.delete(resId);\r\n } catch (e) {\r\n releaseError ??= e;\r\n }\r\n }\r\n }\r\n }\r\n const toRelease = releaseAt.get(i);\r\n if (toRelease) {\r\n for (const resId of toRelease) {\r\n const texture = this._allocatedTextures.get(resId);\r\n if (texture !== undefined) {\r\n try {\r\n this._allocator.release(texture);\r\n this._allocatedTextures.delete(resId);\r\n } catch (e) {\r\n releaseError ??= e;\r\n }\r\n }\r\n }\r\n }\r\n if (passError) {\r\n throw passError;\r\n }\r\n if (releaseError) {\r\n throw releaseError;\r\n }\r\n }\r\n completed = true;\r\n } catch (e) {\r\n executionError = e;\r\n } finally {\r\n RenderGraphExecutor._executingFrame = outerExecutingFrame;\r\n RenderGraphExecutor._executingScope = outerExecutingScope;\r\n this._finishProfileFrame(profileFrame);\r\n let cleanupError: unknown = null;\r\n try {\r\n this._runCleanupCallbacks();\r\n } catch (e) {\r\n cleanupError = e;\r\n } finally {\r\n if (!completed) {\r\n try {\r\n this.reset();\r\n } catch (e) {\r\n cleanupError ??= e;\r\n }\r\n }\r\n }\r\n if (completed && !executionError && !cleanupError) {\r\n this._textureAffinityCache?.replace(affinityEntries);\r\n }\r\n if (executionError) {\r\n throw executionError;\r\n }\r\n if (cleanupError) {\r\n throw cleanupError;\r\n }\r\n }\r\n }\r\n\r\n /** Release remaining resources and clear imported bindings. */\r\n reset(): void {\r\n this._runCleanupCallbacks();\r\n // Handles aborted execution and allocator failures.\r\n for (const framebuffer of this._allocatedFramebuffers.values()) {\r\n this._releaseFramebuffer(framebuffer);\r\n }\r\n this._allocatedFramebuffers.clear();\r\n for (const texture of this._allocatedTextures.values()) {\r\n this._allocator.release(texture);\r\n }\r\n this._allocatedTextures.clear();\r\n this._importedTextures.clear();\r\n this._importedTextureAliases.clear();\r\n this._transientTextureAliases.clear();\r\n this._resolvedImportedTextures.clear();\r\n }\r\n\r\n private _normalizeProfilingOptions(\r\n options: boolean | RGProfilingOptions | undefined,\r\n fallbackDevice?: AbstractDevice\r\n ): RGResolvedProfilingOptions {\r\n const source = typeof options === 'object' ? options : {};\r\n const enabled = typeof options === 'boolean' ? options : (source.enabled ?? true);\r\n return {\r\n enabled,\r\n graph: source.graph ?? DEFAULT_PROFILING_OPTIONS.graph,\r\n pass: source.pass ?? DEFAULT_PROFILING_OPTIONS.pass,\r\n subpass: source.subpass ?? DEFAULT_PROFILING_OPTIONS.subpass,\r\n includePendingUploads: source.includePendingUploads ?? DEFAULT_PROFILING_OPTIONS.includePendingUploads,\r\n allowCrossFrame: source.allowCrossFrame ?? DEFAULT_PROFILING_OPTIONS.allowCrossFrame,\r\n maxPendingFrames: Math.max(1, source.maxPendingFrames ?? DEFAULT_PROFILING_OPTIONS.maxPendingFrames),\r\n label: source.label ?? DEFAULT_PROFILING_OPTIONS.label,\r\n device: source.device ?? fallbackDevice\r\n };\r\n }\r\n\r\n private _getProfilingDevice(): AbstractDevice | null {\r\n if (this._profilingOptions.device) {\r\n return this._profilingOptions.device;\r\n }\r\n try {\r\n return getDevice();\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private _beginProfileFrame(): RGProfileFrameInternal | null {\r\n if (!this._profilingOptions.enabled) {\r\n return null;\r\n }\r\n const device = this._getProfilingDevice();\r\n const supported = !!device?.getDeviceCaps().miscCaps.supportTimestampQuery;\r\n if (!supported) {\r\n warnUnsupported(\r\n 'Render graph GPU profiling',\r\n 'timestamp queries (WebGPU)',\r\n \"every scope reports status 'unsupported'\"\r\n );\r\n }\r\n const rootResult: RGProfileScopeResult = {\r\n name: this._profilingOptions.label,\r\n type: 'graph',\r\n queryId: 0,\r\n durationMs: 0,\r\n status: supported ? 'resolved' : 'unsupported',\r\n children: [],\r\n message: supported ? undefined : 'GPU timestamp queries are not supported'\r\n };\r\n const result: RGProfileResult = {\r\n frameId: device?.frameInfo.frameCounter ?? -1,\r\n status: rootResult.status,\r\n graph: rootResult,\r\n passes: rootResult.children\r\n };\r\n const root: RGProfileScopeInternal = {\r\n result: rootResult,\r\n queryId: 0,\r\n ended: false\r\n };\r\n const frame: RGProfileFrameInternal = {\r\n serial: ++RenderGraphExecutor._nextProfileSerial,\r\n device,\r\n supported,\r\n includePendingUploads: this._profilingOptions.includePendingUploads,\r\n result,\r\n root,\r\n scopes: [],\r\n resolvePromise: Promise.resolve(result)\r\n };\r\n if (this._profilingOptions.graph) {\r\n this._beginTimestampScope(frame, root, this._profilingOptions.label);\r\n }\r\n return frame;\r\n }\r\n\r\n private _beginPassProfileScope(\r\n frame: RGProfileFrameInternal | null,\r\n pass: RGPass\r\n ): RGProfileScopeInternal | null {\r\n if (!frame || (!this._profilingOptions.pass && !this._profilingOptions.subpass)) {\r\n return null;\r\n }\r\n return this._beginProfileScope(frame, frame.root, 'pass', pass.name, this._profilingOptions.pass);\r\n }\r\n\r\n private _beginSubpassProfileScope(\r\n frame: RGProfileFrameInternal | null,\r\n passScope: RGProfileScopeInternal | null,\r\n pass: RGPass,\r\n subpassName: string\r\n ): RGProfileScopeInternal | null {\r\n if (!frame || !this._profilingOptions.subpass) {\r\n return null;\r\n }\r\n const parent = passScope ?? frame.root;\r\n return this._beginProfileScope(\r\n frame,\r\n parent,\r\n 'subpass',\r\n subpassName,\r\n true,\r\n `${pass.name}/${subpassName}`\r\n );\r\n }\r\n\r\n private _beginProfileScope(\r\n frame: RGProfileFrameInternal,\r\n parent: RGProfileScopeInternal,\r\n type: RGProfileScopeType,\r\n name: string,\r\n queryEnabled: boolean,\r\n queryLabel?: string\r\n ): RGProfileScopeInternal {\r\n const status =\r\n frame.supported && !queryEnabled ? 'resolved' : frame.supported ? 'pending' : 'unsupported';\r\n const result: RGProfileScopeResult = {\r\n name,\r\n type,\r\n queryId: 0,\r\n durationMs: 0,\r\n status,\r\n children: [],\r\n message: frame.supported ? undefined : 'GPU timestamp queries are not supported'\r\n };\r\n parent.result.children.push(result);\r\n const scope: RGProfileScopeInternal = {\r\n result,\r\n queryId: 0,\r\n ended: false\r\n };\r\n if (queryEnabled) {\r\n this._beginTimestampScope(frame, scope, queryLabel ?? name);\r\n }\r\n return scope;\r\n }\r\n\r\n private _beginTimestampScope(\r\n frame: RGProfileFrameInternal,\r\n scope: RGProfileScopeInternal,\r\n label: string\r\n ): void {\r\n if (!frame.supported || !frame.device) {\r\n scope.result.status = 'unsupported';\r\n scope.result.message = 'GPU timestamp queries are not supported';\r\n return;\r\n }\r\n const queryId = frame.device.beginTimestampQuery(label, {\r\n includePendingUploads: this._profilingOptions.includePendingUploads,\r\n allowCrossFrame: this._profilingOptions.allowCrossFrame\r\n });\r\n scope.queryId = queryId;\r\n scope.result.queryId = queryId;\r\n if (queryId > 0) {\r\n scope.result.status = 'pending';\r\n frame.scopes.push(scope);\r\n } else {\r\n scope.result.status = 'unsupported';\r\n scope.result.message = 'GPU timestamp query was not started';\r\n }\r\n }\r\n\r\n private _endProfileScope(frame: RGProfileFrameInternal | null, scope: RGProfileScopeInternal | null): void {\r\n if (!frame || !frame.device || !scope || scope.ended) {\r\n return;\r\n }\r\n scope.ended = true;\r\n if (scope.queryId > 0) {\r\n frame.device.endTimestampQuery(scope.queryId);\r\n }\r\n }\r\n\r\n private _finishProfileFrame(frame: RGProfileFrameInternal | null): void {\r\n if (!frame) {\r\n return;\r\n }\r\n this._endProfileScope(frame, frame.root);\r\n if (frame.scopes.length === 0 || !frame.device) {\r\n frame.result.status = this._aggregateProfileStatus(frame.result.graph);\r\n this._publishProfileResult(frame);\r\n return;\r\n }\r\n frame.resolvePromise = Promise.all(\r\n frame.scopes.map((scope) => frame.device!.resolveTimestampQuery(scope.queryId))\r\n )\r\n .then((results) => {\r\n for (let i = 0; i < results.length; i++) {\r\n this._applyTimestampResult(frame.scopes[i], results[i]);\r\n }\r\n frame.result.status = this._aggregateProfileStatus(frame.result.graph);\r\n this._publishProfileResult(frame);\r\n return frame.result;\r\n })\r\n .catch((err) => {\r\n const message = err instanceof Error ? err.message : String(err);\r\n for (const scope of frame.scopes) {\r\n scope.result.status = 'failed';\r\n scope.result.message = message;\r\n }\r\n frame.result.status = 'failed';\r\n this._publishProfileResult(frame);\r\n return frame.result;\r\n });\r\n this._trackPendingProfileFrame(frame);\r\n }\r\n\r\n private _trackPendingProfileFrame(frame: RGProfileFrameInternal): void {\r\n this._pendingProfileFrames.push(frame);\r\n while (this._pendingProfileFrames.length > this._profilingOptions.maxPendingFrames) {\r\n this._pendingProfileFrames.shift();\r\n }\r\n RenderGraphExecutor._latestPendingProfileFrame = frame;\r\n }\r\n\r\n private _publishProfileResult(frame: RGProfileFrameInternal): void {\r\n this._pendingProfileFrames = this._pendingProfileFrames.filter((pending) => pending !== frame);\r\n if (frame.serial >= this._latestResolvedProfileSerial) {\r\n this._latestResolvedProfileSerial = frame.serial;\r\n this._latestProfileResult = frame.result;\r\n }\r\n if (frame.serial >= RenderGraphExecutor._latestResolvedProfileSerial) {\r\n RenderGraphExecutor._latestResolvedProfileSerial = frame.serial;\r\n RenderGraphExecutor._latestProfileResult = frame.result;\r\n }\r\n if (RenderGraphExecutor._latestPendingProfileFrame === frame) {\r\n RenderGraphExecutor._latestPendingProfileFrame = null;\r\n }\r\n }\r\n\r\n private _applyTimestampResult(scope: RGProfileScopeInternal, result: TimestampQueryResult): void {\r\n scope.result.queryId = result.id;\r\n scope.result.durationMs = result.durationMs;\r\n scope.result.status = result.status;\r\n scope.result.message = result.message;\r\n }\r\n\r\n private _aggregateProfileStatus(scope: RGProfileScopeResult): TimestampQueryStatus {\r\n const statuses: TimestampQueryStatus[] = [];\r\n const collect = (node: RGProfileScopeResult) => {\r\n statuses.push(node.status);\r\n for (const child of node.children) {\r\n collect(child);\r\n }\r\n };\r\n collect(scope);\r\n for (const status of ['failed', 'invalid', 'exhausted', 'pending', 'auto-closed'] as const) {\r\n if (statuses.includes(status)) {\r\n return status;\r\n }\r\n }\r\n if (statuses.includes('unsupported')) {\r\n return 'unsupported';\r\n }\r\n return 'resolved';\r\n }\r\n\r\n private _resolveSize(desc: RGTextureDesc): RGResolvedSize {\r\n const mode = desc.sizeMode ?? 'backbuffer-relative';\r\n if (mode === 'absolute') {\r\n return {\r\n width: desc.width ?? 1,\r\n height: desc.height ?? 1\r\n };\r\n }\r\n const scaleX = desc.width ?? 1.0;\r\n const scaleY = desc.height ?? 1.0;\r\n return {\r\n width: Math.max(1, Math.floor(this._backbufferWidth * scaleX)),\r\n height: Math.max(1, Math.floor(this._backbufferHeight * scaleY))\r\n };\r\n }\r\n\r\n private _getTextureDescriptorSignature(desc: RGTextureDesc, size: RGResolvedSize): string {\r\n return JSON.stringify([\r\n desc.format,\r\n size.width,\r\n size.height,\r\n desc.mipLevels ?? 1,\r\n desc.arrayLayers ?? null\r\n ]);\r\n }\r\n\r\n private _resolveImportedTextureAliases(compiled: CompiledRenderGraph): void {\r\n this._importedTextureAliases.clear();\r\n this._resolvedImportedTextures.clear();\r\n const physicalToTexture = new Map<number, TTexture>();\r\n for (const lifetime of compiled.lifetimes.values()) {\r\n const resource = lifetime.resource;\r\n if (resource.kind !== 'imported') {\r\n continue;\r\n }\r\n const texture =\r\n this._importedTextures.get(resource.id) ?? this._importedTextures.get(resource.physicalId);\r\n if (texture !== undefined) {\r\n physicalToTexture.set(resource.physicalId, texture);\r\n }\r\n }\r\n for (const lifetime of compiled.lifetimes.values()) {\r\n const resource = lifetime.resource;\r\n if (resource.kind !== 'imported') {\r\n continue;\r\n }\r\n this._importedTextureAliases.set(resource.id, resource.physicalId);\r\n const texture = physicalToTexture.get(resource.physicalId);\r\n if (texture !== undefined) {\r\n this._resolvedImportedTextures.set(resource.id, texture);\r\n this._resolvedImportedTextures.set(resource.physicalId, texture);\r\n }\r\n }\r\n }\r\n\r\n private _runCleanupCallbacks(): void {\r\n let error: unknown = null;\r\n while (this._cleanupCallbacks.length > 0) {\r\n const callback = this._cleanupCallbacks.pop()!;\r\n try {\r\n callback();\r\n } catch (e) {\r\n error ??= e;\r\n }\r\n }\r\n if (error) {\r\n throw error;\r\n }\r\n }\r\n\r\n private _createFramebuffer(desc: RGFramebufferDesc, autoCleanup = true): FrameBuffer {\r\n if (!this._allocator.allocateFramebuffer || !this._allocator.releaseFramebuffer) {\r\n throw new Error('RenderGraphExecutor: framebuffer allocation is not supported by this allocator.');\r\n }\r\n const framebuffer = this._allocator.allocateFramebuffer(desc);\r\n if (autoCleanup) {\r\n this._cleanupCallbacks.push(() => {\r\n this._allocator.releaseFramebuffer!(framebuffer);\r\n });\r\n }\r\n return framebuffer;\r\n }\r\n\r\n private _releaseFramebuffer(framebuffer: FrameBuffer): void {\r\n if (!this._allocator.releaseFramebuffer) {\r\n throw new Error('RenderGraphExecutor: framebuffer release is not supported by this allocator.');\r\n }\r\n this._allocator.releaseFramebuffer(framebuffer);\r\n }\r\n\r\n private _resolveFramebufferDesc(\r\n desc: RGFramebufferDesc,\r\n accessScope?: RGPassAccessScope\r\n ): RGFramebufferDesc {\r\n const resolveAttachment = <T extends RGTextureAttachment | null | undefined>(\r\n attachment: T\r\n ): RGTextureAttachment | null | undefined => {\r\n if (attachment instanceof RGHandle) {\r\n if (accessScope) {\r\n this._assertDeclaredAccess(accessScope, attachment, 'texture');\r\n }\r\n // The resolved physical texture stands in for the handle; the graph is\r\n // only parameterized by TTexture, which the allocator produces.\r\n return this._resolveResource(attachment) as RGTextureAttachment;\r\n }\r\n return attachment;\r\n };\r\n const colors = Array.isArray(desc.colorAttachments)\r\n ? (desc.colorAttachments.map(resolveAttachment) as RGTextureAttachment[])\r\n : desc.colorAttachments\r\n ? (resolveAttachment(desc.colorAttachments) as RGTextureAttachment)\r\n : null;\r\n return {\r\n ...desc,\r\n colorAttachments: colors,\r\n depthAttachment: resolveAttachment(desc.depthAttachment)\r\n };\r\n }\r\n\r\n private _resolveResource(handle: RGHandle): TTexture {\r\n const imported = this._importedTextures.get(handle._id);\r\n if (imported !== undefined) {\r\n return imported;\r\n }\r\n const resolvedImported = this._resolvedImportedTextures.get(handle._id);\r\n if (resolvedImported !== undefined) {\r\n return resolvedImported;\r\n }\r\n const importedAlias = this._importedTextureAliases.get(handle._id);\r\n if (importedAlias !== undefined) {\r\n const aliased =\r\n this._importedTextures.get(importedAlias) ?? this._resolvedImportedTextures.get(importedAlias);\r\n if (aliased !== undefined) {\r\n return aliased;\r\n }\r\n }\r\n const allocated = this._allocatedTextures.get(handle._id);\r\n if (allocated !== undefined) {\r\n return allocated;\r\n }\r\n // Written versions alias the original physical texture.\r\n const transientAlias = this._transientTextureAliases.get(handle._id);\r\n if (transientAlias !== undefined) {\r\n const aliased = this._allocatedTextures.get(transientAlias);\r\n if (aliased !== undefined) {\r\n return aliased;\r\n }\r\n }\r\n throw new Error(\r\n `RenderGraphExecutor: cannot resolve resource \"${handle.name}\" (id=${handle._id}). ` +\r\n `It may not have been allocated yet or was already released.`\r\n );\r\n }\r\n\r\n private _createAccessScope(pass: RGPass): RGPassAccessScope {\r\n const accessibleIds = new Set<number>();\r\n const textureIds = new Set<number>();\r\n const framebufferIds = new Set<number>();\r\n for (const resource of pass.reads) {\r\n accessibleIds.add(resource.id);\r\n if (resource.kind === 'transient' || resource.kind === 'imported') {\r\n textureIds.add(resource.id);\r\n } else if (resource.kind === 'framebuffer') {\r\n framebufferIds.add(resource.id);\r\n }\r\n }\r\n for (const resource of pass.writes) {\r\n accessibleIds.add(resource.id);\r\n if (resource.kind === 'transient' || resource.kind === 'imported') {\r\n textureIds.add(resource.id);\r\n } else if (resource.kind === 'framebuffer') {\r\n framebufferIds.add(resource.id);\r\n }\r\n }\r\n return {\r\n passName: pass.name,\r\n accessibleIds,\r\n textureIds,\r\n framebufferIds\r\n };\r\n }\r\n\r\n private _assertDeclaredAccess(\r\n accessScope: RGPassAccessScope,\r\n handle: RGHandle,\r\n access: 'texture' | 'framebuffer'\r\n ): void {\r\n if (!accessScope.accessibleIds.has(handle._id)) {\r\n throw new Error(\r\n `RenderGraphExecutor: pass \"${accessScope.passName}\" tried to access ${access} \"${handle.name}\" ` +\r\n `without declaring a read/write dependency.`\r\n );\r\n }\r\n if (access === 'texture' && !accessScope.textureIds.has(handle._id)) {\r\n throw new Error(\r\n `RenderGraphExecutor: pass \"${accessScope.passName}\" tried to access \"${handle.name}\" as a texture, ` +\r\n `but it is not a texture resource.`\r\n );\r\n }\r\n if (access === 'framebuffer' && !accessScope.framebufferIds.has(handle._id)) {\r\n throw new Error(\r\n `RenderGraphExecutor: pass \"${accessScope.passName}\" tried to access \"${handle.name}\" as a framebuffer, ` +\r\n `but it is not a framebuffer resource.`\r\n );\r\n }\r\n }\r\n\r\n private _wrapSubpassError(passName: string, subpassName: string, error: unknown): Error {\r\n const message = error instanceof Error ? error.message : String(error);\r\n const wrapped = new Error(\r\n `RenderGraphExecutor: pass \"${passName}\" subpass \"${subpassName}\" failed: ${message}`\r\n );\r\n (wrapped as Error & { cause?: unknown }).cause = error;\r\n return wrapped;\r\n }\r\n\r\n private _createContext(accessScope: RGPassAccessScope): RGExecuteContext {\r\n const self = this;\r\n return {\r\n getTexture<T>(handle: RGTextureHandle<T>): T {\r\n self._assertDeclaredAccess(accessScope, handle, 'texture');\r\n return self._resolveResource(handle) as unknown as T;\r\n },\r\n getFramebuffer(handle: RGFramebufferHandle): FrameBuffer {\r\n self._assertDeclaredAccess(accessScope, handle, 'framebuffer');\r\n const framebuffer = self._allocatedFramebuffers.get(handle._id);\r\n if (framebuffer !== undefined) {\r\n return framebuffer;\r\n }\r\n throw new Error(\r\n `RenderGraphExecutor: cannot resolve framebuffer \"${handle.name}\" (id=${handle._id}). ` +\r\n `It may not have been allocated yet or was already released.`\r\n );\r\n },\r\n createFramebuffer(desc: RGFramebufferDesc): FrameBuffer {\r\n return self._createFramebuffer(self._resolveFramebufferDesc(desc, accessScope));\r\n },\r\n deferCleanup(callback: () => void): void {\r\n self._cleanupCallbacks.push(callback);\r\n }\r\n };\r\n }\r\n}\r\n"],"names":["DEFAULT_PROFILING_OPTIONS","enabled","graph","pass","subpass","includePendingUploads","allowCrossFrame","maxPendingFrames","label","RenderGraphExecutor","_defaultProfilingOptions","_latestProfileResult","_latestPendingProfileFrame","_latestResolvedProfileSerial","_nextProfileSerial","_externalRoots","_externalScopes","_externalFrameId","_externalStack","_executingFrame","_executingScope","_allocator","_backbufferWidth","_backbufferHeight","_importedTextures","Map","_allocatedTextures","_allocatedFramebuffers","_importedTextureAliases","_transientTextureAliases","_resolvedImportedTextures","_cleanupCallbacks","_profilingOptions","_pendingProfileFrames","_textureAffinityCache","allocator","backbufferWidth","backbufferHeight","options","_normalizeProfilingOptions","profiling","device","textureAffinityCache","setDefaultProfilingOptions","_dropExternalScopes","profileScope","name","fn","scope","_beginExternalScope","_endExternalScope","executing","defaults","getDevice","getDeviceCaps","miscCaps","supportTimestampQuery","stack","length","frameId","frameInfo","frameCounter","queryId","beginTimestampQuery","result","type","durationMs","status","children","ended","parent","push","scopes","index","lastIndexOf","endTimestampQuery","_adoptExternalScopes","frame","roots","supported","root","getLatestProfileResult","resolveProfileResult","resolvePromise","Promise","resolve","setProfilingOptions","setBackbufferSize","width","height","setImportedTexture","handle","texture","set","_id","execute","compiled","bindings","importedTextures","_resolveImportedTextureAliases","profileFrame","_beginProfileFrame","outerExecutingFrame","outerExecutingScope","affinityEntries","allocateAt","releaseAt","allocateFramebufferAt","releaseFramebufferAt","clear","transientSchedules","resId","lifetime","lifetimes","resource","kind","physicalId","merged","get","firstUse","Math","min","lastUse","max","desc","allocationKey","has","schedule","completed","executionError","i","orderedPasses","toAllocate","size","_resolveSize","descriptorSignature","_getTextureDescriptorSignature","preferred","getPreferredTexture","undefined","allocate","framebuffersToAllocate","framebuffer","_createFramebuffer","_resolveFramebufferDesc","passError","passProfile","_beginPassProfileScope","subpasses","accessScope","_createAccessScope","ctx","_createContext","subpassProfile","_beginSubpassProfileScope","executeFn","data","e","_wrapSubpassError","_endProfileScope","releaseError","framebuffersToRelease","_releaseFramebuffer","delete","toRelease","release","_finishProfileFrame","cleanupError","_runCleanupCallbacks","reset","replace","values","fallbackDevice","source","_getProfilingDevice","warnUnsupported","rootResult","message","passes","serial","_beginTimestampScope","_beginProfileScope","passScope","subpassName","queryEnabled","queryLabel","_aggregateProfileStatus","_publishProfileResult","all","map","resolveTimestampQuery","then","results","_applyTimestampResult","catch","err","Error","String","_trackPendingProfileFrame","shift","filter","pending","id","statuses","collect","node","child","includes","mode","sizeMode","scaleX","scaleY","floor","JSON","stringify","format","mipLevels","arrayLayers","physicalToTexture","error","callback","pop","autoCleanup","allocateFramebuffer","releaseFramebuffer","resolveAttachment","attachment","RGHandle","_assertDeclaredAccess","_resolveResource","colors","Array","isArray","colorAttachments","depthAttachment","imported","resolvedImported","importedAlias","aliased","allocated","transientAlias","accessibleIds","Set","textureIds","framebufferIds","reads","add","writes","passName","access","wrapped","cause","self","getTexture","getFramebuffer","createFramebuffer","deferCleanup"],"mappings":"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"}