@zephyr3d/scene 0.9.26 → 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.
- package/README.md +60 -27
- package/dist/animation/animation_bank.js +634 -0
- package/dist/animation/animation_bank.js.map +1 -0
- package/dist/animation/animation_bank_gpu.js +256 -0
- package/dist/animation/animation_bank_gpu.js.map +1 -0
- package/dist/animation/animationset.js +146 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_component.js +406 -0
- package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
- package/dist/animation/cloth/gpu_cloth_system.js +332 -202
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/gpu_animation_driver.js +289 -0
- package/dist/animation/gpu_animation_driver.js.map +1 -0
- package/dist/animation/joint_dynamics/collision.js +112 -1
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +6 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +50 -12
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/skeleton.js +300 -56
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skin_palette_atlas.js +252 -0
- package/dist/animation/skin_palette_atlas.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +298 -38
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +2 -0
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +159 -21
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_solver.js +173 -0
- package/dist/animation/spring/spring_solver.js.map +1 -0
- package/dist/animation/spring/spring_system.js +249 -24
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +32 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/app.js +26 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +86 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/gamepad.js +191 -0
- package/dist/app/gamepad.js.map +1 -0
- package/dist/app/inputactions.js +271 -0
- package/dist/app/inputactions.js.map +1 -0
- package/dist/app/inputmgr.js +331 -22
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/loading.js +138 -0
- package/dist/app/loading.js.map +1 -0
- package/dist/app/pipelinecache.js +209 -0
- package/dist/app/pipelinecache.js.map +1 -0
- package/dist/app/runtimescript.js +25 -0
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/scriptingsystem.js +54 -0
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +7 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/asset_manifest.js +59 -0
- package/dist/asset/asset_manifest.js.map +1 -0
- package/dist/asset/asset_preload.js +258 -0
- package/dist/asset/asset_preload.js.map +1 -0
- package/dist/asset/assetmanager.js +117 -65
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/dist/asset/loaders/ktx2/basis_location.js +17 -0
- package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
- package/dist/asset/mesh_lod_builder.js +104 -0
- package/dist/asset/mesh_lod_builder.js.map +1 -0
- package/dist/asset/mesh_settings.js +111 -0
- package/dist/asset/mesh_settings.js.map +1 -0
- package/dist/asset/meshopt_decoder.js +18 -0
- package/dist/asset/meshopt_decoder.js.map +1 -0
- package/dist/asset/meshopt_simplifier.js +26 -0
- package/dist/asset/meshopt_simplifier.js.map +1 -0
- package/dist/asset/model.js +177 -3
- package/dist/asset/model.js.map +1 -1
- package/dist/asset/texture_settings.js +231 -0
- package/dist/asset/texture_settings.js.map +1 -0
- package/dist/asset/zmsh_binary.js +131 -0
- package/dist/asset/zmsh_binary.js.map +1 -0
- package/dist/asset/zsdf_binary.js +111 -0
- package/dist/asset/zsdf_binary.js.map +1 -0
- package/dist/blitter/bilateralblur.js +1 -2
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/gaussianblur.js +1 -6
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +31 -10
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +178 -200
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/follow.js +342 -0
- package/dist/camera/follow.js.map +1 -0
- package/dist/camera/fps.js +9 -7
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +46 -19
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +30475 -19865
- package/dist/index.js +67 -12
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +3 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/eye.js +1 -1
- package/dist/material/eye.js.map +1 -1
- package/dist/material/hair.js +2 -3
- package/dist/material/hair.js.map +1 -1
- package/dist/material/hairstrand.js +235 -235
- package/dist/material/hairstrand.js.map +1 -1
- package/dist/material/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +362 -300
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +118 -45
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +223 -83
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +31 -206
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +1 -1
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrmr.js +3 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +3 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/sdf_debug.js +78 -0
- package/dist/material/sdf_debug.js.map +1 -0
- package/dist/material/shader/helper.js +733 -190
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +204 -43
- package/dist/material/shader/terrain_blend.js.map +1 -1
- package/dist/material/skin.js +331 -297
- package/dist/material/skin.js.map +1 -1
- package/dist/material/skinprofile.js +1058 -0
- package/dist/material/skinprofile.js.map +1 -0
- package/dist/material/sss.js +353 -0
- package/dist/material/sss.js.map +1 -0
- package/dist/material/sss_kernel.js +265 -0
- package/dist/material/sss_kernel.js.map +1 -0
- package/dist/material/sssprofile.js +879 -0
- package/dist/material/sssprofile.js.map +1 -0
- package/dist/material/subsurfaceprofile.js +4 -8
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/terrain-cm.js +464 -188
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js +3 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +2009 -201
- package/dist/material/water.js.map +1 -1
- package/dist/node_modules/meshoptimizer/LICENSE +21 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
- package/dist/physics/character.js +226 -0
- package/dist/physics/character.js.map +1 -0
- package/dist/physics/collider.js +209 -0
- package/dist/physics/collider.js.map +1 -0
- package/dist/physics/events.js +79 -0
- package/dist/physics/events.js.map +1 -0
- package/dist/physics/joint.js +272 -0
- package/dist/physics/joint.js.map +1 -0
- package/dist/physics/node_physics.js +234 -0
- package/dist/physics/node_physics.js.map +1 -0
- package/dist/physics/part.js +91 -0
- package/dist/physics/part.js.map +1 -0
- package/dist/physics/rigid_body.js +379 -0
- package/dist/physics/rigid_body.js.map +1 -0
- package/dist/physics/vehicle.js +335 -0
- package/dist/physics/vehicle.js.map +1 -0
- package/dist/physics/world.js +25 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/posteffect/bloom.js +49 -14
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/motionblur.js +668 -63
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +48 -50
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +605 -355
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +91 -162
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -11
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +34 -15
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +1 -0
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +40 -39
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +328 -62
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +958 -224
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +26 -5
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/debug_views.js +37 -0
- package/dist/render/debug_views.js.map +1 -0
- package/dist/render/depthpass.js +5 -1
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +53 -6
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +53 -53
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +196 -113
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +8 -13
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +268 -136
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +113 -28
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/gi/probe_volume.js +1334 -0
- package/dist/render/gi/probe_volume.js.map +1 -0
- package/dist/render/gi/scene_gi.js +282 -0
- package/dist/render/gi/scene_gi.js.map +1 -0
- package/dist/render/gi/voxel_atlas.js +198 -0
- package/dist/render/gi/voxel_atlas.js.map +1 -0
- package/dist/render/gi/voxel_lighting.js +652 -0
- package/dist/render/gi/voxel_lighting.js.map +1 -0
- package/dist/render/gi/voxel_scene.js +642 -0
- package/dist/render/gi/voxel_scene.js.map +1 -0
- package/dist/render/gi/voxelize_pass.js +223 -0
- package/dist/render/gi/voxelize_pass.js.map +1 -0
- package/dist/render/globalbindgroup_allocator.js +3 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/gpu_picking.js +9 -36
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/instance_culling.js +499 -0
- package/dist/render/instance_culling.js.map +1 -0
- package/dist/render/lightpass.js +23 -9
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/lod.js +46 -0
- package/dist/render/lod.js.map +1 -0
- package/dist/render/oit.js +11 -11
- package/dist/render/oit.js.map +1 -1
- package/dist/render/primitive.js +301 -9
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/primitive_readback.js +209 -0
- package/dist/render/primitive_readback.js.map +1 -0
- package/dist/render/render_queue.js +198 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +14 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +15 -1
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/executor.js +136 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +585 -59
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/scene_render_context.js +31 -2
- package/dist/render/rendergraph/scene_render_context.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +28 -5
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sdf/box_allocator.js +98 -0
- package/dist/render/sdf/box_allocator.js.map +1 -0
- package/dist/render/sdf/global_sdf.js +865 -0
- package/dist/render/sdf/global_sdf.js.map +1 -0
- package/dist/render/sdf/scene_sdf.js +562 -0
- package/dist/render/sdf/scene_sdf.js.map +1 -0
- package/dist/render/sdf/sdf_atlas.js +227 -0
- package/dist/render/sdf/sdf_atlas.js.map +1 -0
- package/dist/render/sdf/sdf_programs.js +42 -0
- package/dist/render/sdf/sdf_programs.js.map +1 -0
- package/dist/render/sdf/sdf_view.js +199 -0
- package/dist/render/sdf/sdf_view.js.map +1 -0
- package/dist/render/sdf/waterline.js +610 -0
- package/dist/render/sdf/waterline.js.map +1 -0
- package/dist/render/shadow_mask_pass.js +142 -25
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/shore_wave_generator.js +1193 -0
- package/dist/render/shore_wave_generator.js.map +1 -0
- package/dist/render/sky.js +516 -86
- package/dist/render/sky.js.map +1 -1
- package/dist/render/transmission_thickness_pass.js +477 -0
- package/dist/render/transmission_thickness_pass.js.map +1 -0
- package/dist/render/underwater.js +524 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/virtualtexture/virtual_texture.js +1214 -0
- package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_common.js +472 -0
- package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
- package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
- package/dist/render/volumetric_cloud/debug_view.js +131 -0
- package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
- package/dist/render/volumetric_cloud/resources.js +380 -0
- package/dist/render/volumetric_cloud/resources.js.map +1 -0
- package/dist/render/volumetric_cloud/sky_cache.js +380 -0
- package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
- package/dist/render/water_caustics.js +1195 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/water_foam.js +627 -0
- package/dist/render/water_foam.js.map +1 -0
- package/dist/render/water_interaction.js +1795 -0
- package/dist/render/water_interaction.js.map +1 -0
- package/dist/render/weightedblended_oit.js +36 -36
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +9 -4
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +108 -12
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +28 -7
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/foliage.js +1020 -0
- package/dist/scene/foliage.js.map +1 -0
- package/dist/scene/foliage_buckets.js +147 -0
- package/dist/scene/foliage_buckets.js.map +1 -0
- package/dist/scene/foliage_mask.js +358 -0
- package/dist/scene/foliage_mask.js.map +1 -0
- package/dist/scene/hair.js +15 -4
- package/dist/scene/hair.js.map +1 -1
- package/dist/scene/light.js +179 -13
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +327 -45
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +9 -3
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +9 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +8 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/physics_settings.js +157 -0
- package/dist/scene/physics_settings.js.map +1 -0
- package/dist/scene/scene.js +190 -44
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +147 -6
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
- package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +881 -42
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grass_gpu.js +929 -0
- package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +180 -9
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +465 -36
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
- package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
- package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
- package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
- package/dist/scene/update_queue.js +54 -0
- package/dist/scene/update_queue.js.map +1 -0
- package/dist/scene/water.js +997 -96
- package/dist/scene/water.js.map +1 -1
- package/dist/scene/water_surface_sampler.js +324 -0
- package/dist/scene/water_surface_sampler.js.map +1 -0
- package/dist/scene/wind.js +317 -0
- package/dist/scene/wind.js.map +1 -0
- package/dist/shaders/atmosphere.js +388 -166
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +100 -32
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/gi.js +365 -0
- package/dist/shaders/gi.js.map +1 -0
- package/dist/shaders/ltc_rect.js +202 -0
- package/dist/shaders/ltc_rect.js.map +1 -0
- package/dist/shaders/misc.js +1 -10
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +5 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/probes.js +309 -0
- package/dist/shaders/probes.js.map +1 -0
- package/dist/shaders/sdf.js +537 -0
- package/dist/shaders/sdf.js.map +1 -0
- package/dist/shaders/shadow.js +104 -70
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/skin_brdf.js +243 -0
- package/dist/shaders/skin_brdf.js.map +1 -0
- package/dist/shaders/ssr.js +6 -159
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +38 -27
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +40 -87
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +42 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +110 -19
- package/dist/shadow/dom.js.map +1 -1
- package/dist/shadow/esm.js +3 -3
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +15 -48
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +15 -53
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +34 -9
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +3 -8
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +87 -49
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +93 -53
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +18 -72
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +3 -3
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/shape.js +44 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/utility/buoyancy.js +287 -0
- package/dist/utility/buoyancy.js.map +1 -0
- package/dist/utility/physical.js +10 -1
- package/dist/utility/physical.js.map +1 -1
- package/dist/utility/pmrem.js +17 -43
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/sdf/bake.js +435 -0
- package/dist/utility/sdf/bake.js.map +1 -0
- package/dist/utility/sdf/bvh.js +576 -0
- package/dist/utility/sdf/bvh.js.map +1 -0
- package/dist/utility/serialization/manager.js +36 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +77 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +11 -4
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +140 -279
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth.js +25 -0
- package/dist/utility/serialization/scene/cloth.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +14 -6
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/foliage.js +821 -0
- package/dist/utility/serialization/scene/foliage.js.map +1 -0
- package/dist/utility/serialization/scene/hair.js +11 -4
- package/dist/utility/serialization/scene/hair.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +115 -7
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +388 -220
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +69 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +140 -5
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/node_physics.js +1318 -0
- package/dist/utility/serialization/scene/node_physics.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +11 -4
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/physics.js +120 -0
- package/dist/utility/serialization/scene/physics.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +124 -10
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +1687 -51
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +11 -4
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +163 -33
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +11 -4
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +2473 -114
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +97 -109
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/foam.js +170 -0
- package/dist/utility/textures/foam.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +17 -43
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +4 -4
- package/dist/utility/textures/ltcdata.js.map +1 -1
- package/dist/utility/textures/ltclut.js +16 -6
- package/dist/utility/textures/ltclut.js.map +1 -1
- package/dist/utility/unsupported.js +24 -0
- package/dist/utility/unsupported.js.map +1 -0
- package/dist/values.js +13 -1
- package/dist/values.js.map +1 -1
- package/package.json +25 -12
- package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/src/asset/meshoptimizer/LICENSE +21 -0
|
@@ -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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"}
|