@zephyr3d/scene 0.9.25 → 0.9.27
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/dist/animation/animationset.js +92 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/hair/gpu_hair_simulation.js +1090 -0
- package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
- package/dist/animation/joint_dynamics/controller.js +7 -5
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/convex_collider.js +320 -0
- package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -4
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/skeleton.js +79 -25
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/spring/multi_chain_spring_system.js +577 -179
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +4 -3
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
- package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
- package/dist/animation/spring/spring_particle.js +2 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +11 -3
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +10 -0
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/engine.js +53 -43
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptingsystem.js +119 -6
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +3 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +284 -67
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/zhair/zhair_format.js +288 -0
- package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
- package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
- package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
- package/dist/asset/model.js +184 -69
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +268 -44
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +3 -1
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +9044 -5139
- package/dist/index.js +17 -6
- package/dist/index.js.map +1 -1
- package/dist/material/eye.js +932 -0
- package/dist/material/eye.js.map +1 -0
- package/dist/material/hair.js +917 -0
- package/dist/material/hair.js.map +1 -0
- package/dist/material/hairstrand.js +842 -0
- package/dist/material/hairstrand.js.map +1 -0
- package/dist/material/hairstrand_data.js +162 -0
- package/dist/material/hairstrand_data.js.map +1 -0
- package/dist/material/lambert.js +5 -2
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +48 -10
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +120 -19
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +1 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +5 -4
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +106 -19
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +4 -4
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +48 -11
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mtoon.js +6 -5
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrblueprint.js +146 -28
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrblueprint_instance.js +501 -0
- package/dist/material/pbrblueprint_instance.js.map +1 -0
- package/dist/material/pbrmr.js +15 -16
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/shader/helper.js +734 -23
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +55 -0
- package/dist/material/shader/terrain_blend.js.map +1 -0
- package/dist/material/skin.js +192 -32
- package/dist/material/skin.js.map +1 -1
- package/dist/material/spriteblueprint.js +16 -1
- package/dist/material/spriteblueprint.js.map +1 -1
- package/dist/material/subsurfaceprofile.js +86 -23
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/water.js +2059 -72
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js +167 -7
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/coloradjust.js +2 -1
- package/dist/posteffect/coloradjust.js.map +1 -1
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +2 -1
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +3 -1
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js +664 -56
- 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/sao.js +46 -44
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +368 -69
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +16 -9
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -0
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +121 -36
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js +44 -1
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +8 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +156 -5
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cull_visitor.js +20 -0
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +36 -2
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +26 -1
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +3 -2
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +1 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +6 -3
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +57 -15
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +130 -20
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +3 -0
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +6 -3
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/oit.js +29 -0
- package/dist/render/oit.js.map +1 -0
- package/dist/render/render_queue.js +39 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +4 -0
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +1 -0
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +2 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +379 -10
- 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/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/shadow_mask_pass.js +73 -8
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/sky.js +166 -126
- package/dist/render/sky.js.map +1 -1
- package/dist/render/underwater.js +624 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/water_caustics.js +1380 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/weightedblended_oit.js +3 -2
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +8 -0
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +3 -0
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +4 -1
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/hair.js +963 -0
- package/dist/scene/hair.js.map +1 -0
- package/dist/scene/light.js +5 -1
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +481 -47
- 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 +3 -0
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +3 -0
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +6 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +3 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +6 -1
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +3 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +3 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +6 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/texture_cache.js +309 -0
- package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
- package/dist/scene/water.js +546 -4
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/diffusion.js +54 -0
- package/dist/shaders/diffusion.js.map +1 -0
- package/dist/shaders/shadow.js +33 -21
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/temporal.js +71 -33
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +22 -19
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +56 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/dom.js +546 -0
- package/dist/shadow/dom.js.map +1 -0
- package/dist/shadow/pcf_opt.js +3 -5
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +1 -1
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/receiver_bias.js +41 -0
- package/dist/shadow/receiver_bias.js.map +1 -0
- package/dist/shadow/shader.js +20 -60
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js +89 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +1 -1
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +150 -37
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/shape.js +11 -2
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +50 -9
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +112 -2
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/material/func.js +142 -49
- package/dist/utility/blueprint/material/func.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +490 -25
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +898 -4
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/manager.js +434 -101
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +401 -5
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +186 -26
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +26 -5
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/hair.js +1141 -0
- package/dist/utility/serialization/scene/hair.js.map +1 -0
- package/dist/utility/serialization/scene/light.js +84 -4
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1867 -166
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +231 -14
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +141 -7
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +18 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +4 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +4 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +4 -0
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +1105 -21
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +9 -8
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/values.js +49 -2
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
- package/dist/render/rendergraph/frame_graph_context.js +0 -41
- package/dist/render/rendergraph/frame_graph_context.js.map +0 -1
- package/dist/shaders/ssgi.js +0 -63
- package/dist/shaders/ssgi.js.map +0 -1
- package/dist/shaders/ssgi_reprojection.js +0 -118
- package/dist/shaders/ssgi_reprojection.js.map +0 -1
|
@@ -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 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 { AbstractDevice, TimestampQueryResult, TimestampQueryStatus } 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 = unknown, TFramebuffer = unknown> {\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, TFramebuffer>;\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, TFramebuffer> = 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, TFramebuffer>,\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): TFramebuffer {\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: TFramebuffer): 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 = (attachment: unknown): unknown => {\r\n if (attachment instanceof RGHandle) {\r\n if (accessScope) {\r\n this._assertDeclaredAccess(accessScope, attachment, 'texture');\r\n }\r\n return this._resolveResource(attachment);\r\n }\r\n return attachment;\r\n };\r\n const colors = Array.isArray(desc.colorAttachments)\r\n ? desc.colorAttachments.map(resolveAttachment)\r\n : desc.colorAttachments\r\n ? resolveAttachment(desc.colorAttachments)\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<TFramebuffer>(handle: RGFramebufferHandle<TFramebuffer>): TFramebuffer {\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 as unknown as TFramebuffer;\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<TFramebuffer = unknown>(desc: RGFramebufferDesc): TFramebuffer {\r\n return self._createFramebuffer(\r\n self._resolveFramebufferDesc(desc, accessScope)\r\n ) as unknown as TFramebuffer;\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":";;;AAkDA,MAAMA,yBAAwD,GAAA;IAC5DC,OAAS,EAAA,KAAA;IACTC,KAAO,EAAA,IAAA;IACPC,IAAM,EAAA,IAAA;IACNC,OAAS,EAAA,IAAA;IACTC,qBAAuB,EAAA,IAAA;IACvBC,eAAiB,EAAA,KAAA;IACjBC,gBAAkB,EAAA,CAAA;IAClBC,KAAO,EAAA;AACT,CAAA;AAEA,2EACO,MAAMC,mBAAAA,CAAAA;AACX,IAAA,OAAeC,2BAAyD,KAAM;AAC9E,IAAA,OAAeC,uBAA+C,IAAK;AACnE,IAAA,OAAeC,6BAA4D,IAAK;AAChF,IAAA,OAAeC,+BAA+B,CAAE;AAChD,IAAA,OAAeC,qBAAqB,CAAE;IAE9BC,UAAuD;IACvDC,gBAAyB;IACzBC,iBAA0B;AAC1BC,IAAAA,iBAAAA,GAA2C,IAAIC,GAAM,EAAA;AACrDC,IAAAA,kBAAAA,GAA4C,IAAID,GAAM,EAAA;AACtDE,IAAAA,sBAAAA,GAAoD,IAAIF,GAAM,EAAA;AAC9DG,IAAAA,uBAAAA,GAA+C,IAAIH,GAAM,EAAA;AACzDI,IAAAA,wBAAAA,GAAgD,IAAIJ,GAAM,EAAA;AAC1DK,IAAAA,yBAAAA,GAAmD,IAAIL,GAAM,EAAA;AAC7DM,IAAAA,iBAAAA,GAAuC,EAAE;IACzCC,iBAA8C;AAC9CC,IAAAA,qBAAAA,GAAkD,EAAE;AACpDhB,IAAAA,oBAAAA,GAA+C,IAAK;AACpDE,IAAAA,4BAAAA,GAA+B,CAAE;IACjCe,qBAA+D;AAEvE,IAAA,WAAA,CACEC,SAAqD,EACrDC,eAAuB,EACvBC,gBAAwB,EACxBC,OAA8C,CAC9C;QACA,IAAI,CAACjB,UAAU,GAAGc,SAAAA;QAClB,IAAI,CAACb,gBAAgB,GAAGc,eAAAA;QACxB,IAAI,CAACb,iBAAiB,GAAGc,gBAAAA;AACzB,QAAA,IAAI,CAACL,iBAAiB,GAAG,IAAI,CAACO,0BAA0B,CACtDD,OAAAA,EAASE,SAAazB,IAAAA,mBAAAA,CAAoBC,wBAAwB,EAClEsB,OAASG,EAAAA,MAAAA,CAAAA;AAEX,QAAA,IAAI,CAACP,qBAAqB,GAAGI,OAAAA,EAASI,oBAAwB,IAAA,IAAA;AAChE;AAEA,qDACA,OAAOC,0BAA2BL,CAAAA,OAAqC,EAAQ;AAC7EvB,QAAAA,mBAAAA,CAAoBC,wBAAwB,GAAGsB,OAAAA;AACjD;gEAGA,OAAOM,sBAAiD,GAAA;AACtD,QAAA,OAAO7B,oBAAoBE,oBAAoB;AACjD;gEAGA,OAAO4B,oBAAwD,GAAA;QAC7D,OACE9B,mBAAAA,CAAoBG,0BAA0B,EAAE4B,cAAAA,IAChDC,QAAQC,OAAO,CAACjC,oBAAoBE,oBAAoB,CAAA;AAE5D;yDAGAgC,mBAAoBX,CAAAA,OAAqC,EAAQ;AAC/D,QAAA,IAAI,CAACN,iBAAiB,GAAG,IAAI,CAACO,0BAA0B,CAACD,OAAAA,EAAS,IAAI,CAACN,iBAAiB,CAACS,MAAM,CAAA;AACjG;AAEA,2DACAG,sBAAiD,GAAA;QAC/C,OAAO,IAAI,CAAC3B,oBAAoB;AAClC;AAEA,2DACA4B,oBAAwD,GAAA;AACtD,QAAA,OACE,IAAI,CAACZ,qBAAqB,CAAC,IAAI,CAACA,qBAAqB,CAACiB,MAAM,GAAG,CAAA,CAAE,EAAEJ,cACnEC,IAAAA,OAAAA,CAAQC,OAAO,CAAC,IAAI,CAAC/B,oBAAoB,CAAA;AAE7C;AAEA,qEACAkC,iBAAAA,CAAkBC,KAAa,EAAEC,MAAc,EAAQ;QACrD,IAAI,CAAC/B,gBAAgB,GAAG8B,KAAAA;QACxB,IAAI,CAAC7B,iBAAiB,GAAG8B,MAAAA;AAC3B;AAEA,mDACAC,kBAAAA,CAAmBC,MAAgB,EAAEC,OAAiB,EAAQ;AAC5D,QAAA,IAAI,CAAChC,iBAAiB,CAACiC,GAAG,CAACF,MAAAA,CAAOG,GAAG,EAAEF,OAAAA,CAAAA;AACzC;AAEA,wEACAG,OAAAA,CAAQC,QAA6B,EAAEC,QAAiD,EAAQ;AAC9F,QAAA,IAAIA,UAAUC,gBAAkB,EAAA;AAC9B,YAAA,KAAK,MAAM,CAACP,MAAAA,EAAQC,QAAQ,IAAIK,QAAAA,CAASC,gBAAgB,CAAE;gBACzD,IAAI,CAACR,kBAAkB,CAACC,MAAQC,EAAAA,OAAAA,CAAAA;AAClC;AACF;AACA,QAAA,IAAI,CAACzB,iBAAiB,CAACmB,MAAM,GAAG,CAAA;QAChC,IAAI,CAACa,8BAA8B,CAACH,QAAAA,CAAAA;QACpC,MAAMI,YAAAA,GAAe,IAAI,CAACC,kBAAkB,EAAA;AAC5C,QAAA,MAAMC,kBAAkB,IAAIzC,GAAAA,EAAAA;AAE5B,QAAA,MAAM0C,aAAa,IAAI1C,GAAAA,EAAAA;AACvB,QAAA,MAAM2C,YAAY,IAAI3C,GAAAA,EAAAA;AACtB,QAAA,MAAM4C,wBAAwB,IAAI5C,GAAAA,EAAAA;AAClC,QAAA,MAAM6C,uBAAuB,IAAI7C,GAAAA,EAAAA;;QAGjC,IAAI,CAACI,wBAAwB,CAAC0C,KAAK,EAAA;AACnC,QAAA,MAAMC,qBAAqB,IAAI/C,GAAAA,EAAAA;AAI/B,QAAA,KAAK,MAAM,CAACgD,KAAAA,EAAOC,SAAS,IAAId,QAAAA,CAASe,SAAS,CAAE;AAClD,YAAA,IAAID,QAASE,CAAAA,QAAQ,CAACC,IAAI,KAAK,WAAa,EAAA;AAC1C,gBAAA,MAAMC,UAAaJ,GAAAA,QAAAA,CAASE,QAAQ,CAACE,UAAU;AAC/C,gBAAA,IAAI,CAACjD,wBAAwB,CAAC4B,GAAG,CAACgB,KAAOK,EAAAA,UAAAA,CAAAA;gBACzC,MAAMC,MAAAA,GAASP,kBAAmBQ,CAAAA,GAAG,CAACF,UAAAA,CAAAA;AACtC,gBAAA,IAAIC,MAAQ,EAAA;oBACVA,MAAOE,CAAAA,QAAQ,GAAGC,IAAKC,CAAAA,GAAG,CAACJ,MAAOE,CAAAA,QAAQ,EAAEP,QAAAA,CAASO,QAAQ,CAAA;oBAC7DF,MAAOK,CAAAA,OAAO,GAAGF,IAAKG,CAAAA,GAAG,CAACN,MAAOK,CAAAA,OAAO,EAAEV,QAAAA,CAASU,OAAO,CAAA;iBACrD,MAAA;oBACLZ,kBAAmBf,CAAAA,GAAG,CAACqB,UAAY,EAAA;AACjCG,wBAAAA,QAAAA,EAAUP,SAASO,QAAQ;AAC3BG,wBAAAA,OAAAA,EAASV,SAASU,OAAO;wBACzBE,IAAMZ,EAAAA,QAAAA,CAASE,QAAQ,CAACU,IAAI;wBAC5BC,aAAeb,EAAAA,QAAAA,CAASE,QAAQ,CAACW;AACnC,qBAAA,CAAA;AACF;AACF,aAAA,MAAO,IAAIb,QAASE,CAAAA,QAAQ,CAACC,IAAI,KAAK,aAAe,EAAA;AACnD,gBAAA,IAAI,CAACR,qBAAsBmB,CAAAA,GAAG,CAACd,QAAAA,CAASO,QAAQ,CAAG,EAAA;AACjDZ,oBAAAA,qBAAAA,CAAsBZ,GAAG,CAACiB,QAASO,CAAAA,QAAQ,EAAE,EAAE,CAAA;AACjD;AACAZ,gBAAAA,qBAAAA,CAAsBW,GAAG,CAACN,QAAAA,CAASO,QAAQ,CAAA,CAAGQ,IAAI,CAAChB,KAAAA,CAAAA;AAEnD,gBAAA,IAAI,CAACH,oBAAqBkB,CAAAA,GAAG,CAACd,QAAAA,CAASU,OAAO,CAAG,EAAA;AAC/Cd,oBAAAA,oBAAAA,CAAqBb,GAAG,CAACiB,QAASU,CAAAA,OAAO,EAAE,EAAE,CAAA;AAC/C;AACAd,gBAAAA,oBAAAA,CAAqBU,GAAG,CAACN,QAAAA,CAASU,OAAO,CAAA,CAAGK,IAAI,CAAChB,KAAAA,CAAAA;AACnD;AACF;AACA,QAAA,KAAK,MAAM,CAACK,UAAYY,EAAAA,QAAAA,CAAS,IAAIlB,kBAAoB,CAAA;AACvD,YAAA,IAAI,CAACL,UAAWqB,CAAAA,GAAG,CAACE,QAAAA,CAAST,QAAQ,CAAG,EAAA;AACtCd,gBAAAA,UAAAA,CAAWV,GAAG,CAACiC,QAAST,CAAAA,QAAQ,EAAE,EAAE,CAAA;AACtC;AACAd,YAAAA,UAAAA,CAAWa,GAAG,CAACU,QAAAA,CAAST,QAAQ,CAAA,CAAGQ,IAAI,CAACX,UAAAA,CAAAA;AAExC,YAAA,IAAI,CAACV,SAAUoB,CAAAA,GAAG,CAACE,QAAAA,CAASN,OAAO,CAAG,EAAA;AACpChB,gBAAAA,SAAAA,CAAUX,GAAG,CAACiC,QAASN,CAAAA,OAAO,EAAE,EAAE,CAAA;AACpC;AACAhB,YAAAA,SAAAA,CAAUY,GAAG,CAACU,QAAAA,CAASN,OAAO,CAAA,CAAGK,IAAI,CAACX,UAAAA,CAAAA;AACxC;AAEA,QAAA,IAAIa,SAAY,GAAA,KAAA;AAChB,QAAA,IAAIC,cAA0B,GAAA,IAAA;QAC9B,IAAI;YACF,IAAK,IAAIC,IAAI,CAAGA,EAAAA,CAAAA,GAAIjC,SAASkC,aAAa,CAAC5C,MAAM,EAAE2C,CAAK,EAAA,CAAA;AACtD,gBAAA,MAAMpF,IAAOmD,GAAAA,QAAAA,CAASkC,aAAa,CAACD,CAAE,CAAA;gBAEtC,MAAME,UAAAA,GAAa5B,UAAWa,CAAAA,GAAG,CAACa,CAAAA,CAAAA;AAClC,gBAAA,IAAIE,UAAY,EAAA;oBACd,KAAK,MAAMtB,SAASsB,UAAY,CAAA;wBAC9B,MAAML,QAAAA,GAAWlB,kBAAmBQ,CAAAA,GAAG,CAACP,KAAAA,CAAAA;AACxC,wBAAA,MAAMuB,OAAO,IAAI,CAACC,YAAY,CAACP,SAASJ,IAAI,CAAA;AAC5C,wBAAA,MAAMY,sBAAsB,IAAI,CAACC,8BAA8B,CAACT,QAAAA,CAASJ,IAAI,EAAEU,IAAAA,CAAAA;AAC/E,wBAAA,MAAMI,SAAYV,GAAAA,QAAAA,CAASH,aAAa,GACpC,IAAI,CAACrD,qBAAqB,EAAEmE,mBAAoBX,CAAAA,QAAAA,CAASH,aAAa,EAAEW,mBACxEI,CAAAA,GAAAA,SAAAA;wBACJ,MAAM9C,OAAAA,GAAU,IAAI,CAACnC,UAAU,CAACkF,QAAQ,CAACb,QAAAA,CAASJ,IAAI,EAAEU,IAAMI,EAAAA,SAAAA,CAAAA;AAC9D,wBAAA,IAAI,CAAC1E,kBAAkB,CAAC+B,GAAG,CAACgB,KAAOjB,EAAAA,OAAAA,CAAAA;wBACnC,IAAIkC,QAAAA,CAASH,aAAa,EAAE;AAC1BrB,4BAAAA,eAAAA,CAAgBT,GAAG,CAACiC,QAASH,CAAAA,aAAa,EAAE;AAAE/B,gCAAAA,OAAAA;AAAS0C,gCAAAA;AAAoB,6BAAA,CAAA;AAC7E;AACF;AACF;;gBAGA,MAAMM,sBAAAA,GAAyBnC,qBAAsBW,CAAAA,GAAG,CAACa,CAAAA,CAAAA;AACzD,gBAAA,IAAIW,sBAAwB,EAAA;oBAC1B,KAAK,MAAM/B,SAAS+B,sBAAwB,CAAA;AAC1C,wBAAA,MAAM9B,QAAWd,GAAAA,QAAAA,CAASe,SAAS,CAACK,GAAG,CAACP,KAAAA,CAAAA;AACxC,wBAAA,MAAMa,IAAOZ,GAAAA,QAAAA,CAASE,QAAQ,CAACU,IAAI;wBACnC,MAAMmB,WAAAA,GAAc,IAAI,CAACC,kBAAkB,CAAC,IAAI,CAACC,uBAAuB,CAACrB,IAAO,CAAA,EAAA,KAAA,CAAA;AAChF,wBAAA,IAAI,CAAC3D,sBAAsB,CAAC8B,GAAG,CAACgB,KAAOgC,EAAAA,WAAAA,CAAAA;AACzC;AACF;;AAGA,gBAAA,IAAIG,SAAqB,GAAA,IAAA;AACzB,gBAAA,MAAMC,WAAc,GAAA,IAAI,CAACC,sBAAsB,CAAC9C,YAAcvD,EAAAA,IAAAA,CAAAA;gBAC9D,IAAI;AACF,oBAAA,IAAIA,IAAKsG,CAAAA,SAAS,CAAC7D,MAAM,GAAG,CAAG,EAAA;AAC7B,wBAAA,MAAM8D,WAAc,GAAA,IAAI,CAACC,kBAAkB,CAACxG,IAAAA,CAAAA;AAC5C,wBAAA,MAAMyG,GAAM,GAAA,IAAI,CAACC,cAAc,CAACH,WAAAA,CAAAA;AAChC,wBAAA,KAAK,MAAMtG,OAAAA,IAAWD,IAAKsG,CAAAA,SAAS,CAAE;4BACpC,MAAMK,cAAAA,GAAiB,IAAI,CAACC,yBAAyB,CACnDrD,YACA6C,EAAAA,WAAAA,EACApG,IACAC,EAAAA,OAAAA,CAAQ4G,IAAI,CAAA;4BAEd,IAAI;AACD5G,gCAAAA,OAAAA,CAAQ6G,SAAS,CAA0BL,GAAKzG,EAAAA,IAAAA,CAAK+G,IAAI,CAAA;AAC5D,6BAAA,CAAE,OAAOC,CAAG,EAAA;gCACV,MAAM,IAAI,CAACC,iBAAiB,CAACjH,KAAK6G,IAAI,EAAE5G,OAAQ4G,CAAAA,IAAI,EAAEG,CAAAA,CAAAA;6BAC9C,QAAA;gCACR,IAAI,CAACE,gBAAgB,CAAC3D,YAAcoD,EAAAA,cAAAA,CAAAA;AACtC;AACF;qBACK,MAAA,IAAI3G,IAAK8G,CAAAA,SAAS,EAAE;AACzB,wBAAA,MAAMP,WAAc,GAAA,IAAI,CAACC,kBAAkB,CAACxG,IAAAA,CAAAA;AAC5C,wBAAA,MAAMyG,GAAM,GAAA,IAAI,CAACC,cAAc,CAACH,WAAAA,CAAAA;AAC/BvG,wBAAAA,IAAAA,CAAK8G,SAAS,CAA0BL,GAAKzG,EAAAA,IAAAA,CAAK+G,IAAI,CAAA;AACzD;AACF,iBAAA,CAAE,OAAOC,CAAG,EAAA;oBACVb,SAAYa,GAAAA,CAAAA;iBACJ,QAAA;oBACR,IAAI,CAACE,gBAAgB,CAAC3D,YAAc6C,EAAAA,WAAAA,CAAAA;AACtC;AAEA,gBAAA,IAAIe,YAAwB,GAAA,IAAA;gBAC5B,MAAMC,qBAAAA,GAAwBvD,oBAAqBU,CAAAA,GAAG,CAACa,CAAAA,CAAAA;AACvD,gBAAA,IAAIgC,qBAAuB,EAAA;oBACzB,KAAK,MAAMpD,SAASoD,qBAAuB,CAAA;AACzC,wBAAA,MAAMpB,cAAc,IAAI,CAAC9E,sBAAsB,CAACqD,GAAG,CAACP,KAAAA,CAAAA;AACpD,wBAAA,IAAIgC,gBAAgBH,SAAW,EAAA;4BAC7B,IAAI;gCACF,IAAI,CAACwB,mBAAmB,CAACrB,WAAAA,CAAAA;AACzB,gCAAA,IAAI,CAAC9E,sBAAsB,CAACoG,MAAM,CAACtD,KAAAA,CAAAA;AACrC,6BAAA,CAAE,OAAOgD,CAAG,EAAA;gCACVG,YAAiBH,KAAAA,CAAAA;AACnB;AACF;AACF;AACF;gBACA,MAAMO,SAAAA,GAAY5D,SAAUY,CAAAA,GAAG,CAACa,CAAAA,CAAAA;AAChC,gBAAA,IAAImC,SAAW,EAAA;oBACb,KAAK,MAAMvD,SAASuD,SAAW,CAAA;AAC7B,wBAAA,MAAMxE,UAAU,IAAI,CAAC9B,kBAAkB,CAACsD,GAAG,CAACP,KAAAA,CAAAA;AAC5C,wBAAA,IAAIjB,YAAY8C,SAAW,EAAA;4BACzB,IAAI;AACF,gCAAA,IAAI,CAACjF,UAAU,CAAC4G,OAAO,CAACzE,OAAAA,CAAAA;AACxB,gCAAA,IAAI,CAAC9B,kBAAkB,CAACqG,MAAM,CAACtD,KAAAA,CAAAA;AACjC,6BAAA,CAAE,OAAOgD,CAAG,EAAA;gCACVG,YAAiBH,KAAAA,CAAAA;AACnB;AACF;AACF;AACF;AACA,gBAAA,IAAIb,SAAW,EAAA;oBACb,MAAMA,SAAAA;AACR;AACA,gBAAA,IAAIgB,YAAc,EAAA;oBAChB,MAAMA,YAAAA;AACR;AACF;YACAjC,SAAY,GAAA,IAAA;AACd,SAAA,CAAE,OAAO8B,CAAG,EAAA;YACV7B,cAAiB6B,GAAAA,CAAAA;SACT,QAAA;YACR,IAAI,CAACS,mBAAmB,CAAClE,YAAAA,CAAAA;AACzB,YAAA,IAAImE,YAAwB,GAAA,IAAA;YAC5B,IAAI;AACF,gBAAA,IAAI,CAACC,oBAAoB,EAAA;AAC3B,aAAA,CAAE,OAAOX,CAAG,EAAA;gBACVU,YAAeV,GAAAA,CAAAA;aACP,QAAA;AACR,gBAAA,IAAI,CAAC9B,SAAW,EAAA;oBACd,IAAI;AACF,wBAAA,IAAI,CAAC0C,KAAK,EAAA;AACZ,qBAAA,CAAE,OAAOZ,CAAG,EAAA;wBACVU,YAAiBV,KAAAA,CAAAA;AACnB;AACF;AACF;AACA,YAAA,IAAI9B,SAAa,IAAA,CAACC,cAAkB,IAAA,CAACuC,YAAc,EAAA;gBACjD,IAAI,CAACjG,qBAAqB,EAAEoG,OAAQpE,CAAAA,eAAAA,CAAAA;AACtC;AACA,YAAA,IAAI0B,cAAgB,EAAA;gBAClB,MAAMA,cAAAA;AACR;AACA,YAAA,IAAIuC,YAAc,EAAA;gBAChB,MAAMA,YAAAA;AACR;AACF;AACF;AAEA,oEACAE,KAAc,GAAA;AACZ,QAAA,IAAI,CAACD,oBAAoB,EAAA;;AAEzB,QAAA,KAAK,MAAM3B,WAAe,IAAA,IAAI,CAAC9E,sBAAsB,CAAC4G,MAAM,EAAI,CAAA;YAC9D,IAAI,CAACT,mBAAmB,CAACrB,WAAAA,CAAAA;AAC3B;QACA,IAAI,CAAC9E,sBAAsB,CAAC4C,KAAK,EAAA;AACjC,QAAA,KAAK,MAAMf,OAAW,IAAA,IAAI,CAAC9B,kBAAkB,CAAC6G,MAAM,EAAI,CAAA;AACtD,YAAA,IAAI,CAAClH,UAAU,CAAC4G,OAAO,CAACzE,OAAAA,CAAAA;AAC1B;QACA,IAAI,CAAC9B,kBAAkB,CAAC6C,KAAK,EAAA;QAC7B,IAAI,CAAC/C,iBAAiB,CAAC+C,KAAK,EAAA;QAC5B,IAAI,CAAC3C,uBAAuB,CAAC2C,KAAK,EAAA;QAClC,IAAI,CAAC1C,wBAAwB,CAAC0C,KAAK,EAAA;QACnC,IAAI,CAACzC,yBAAyB,CAACyC,KAAK,EAAA;AACtC;IAEQhC,0BACND,CAAAA,OAAiD,EACjDkG,cAA+B,EACH;AAC5B,QAAA,MAAMC,MAAS,GAAA,OAAOnG,OAAY,KAAA,QAAA,GAAWA,UAAU,EAAC;AACxD,QAAA,MAAM/B,UAAU,OAAO+B,OAAAA,KAAY,YAAYA,OAAWmG,GAAAA,MAAAA,CAAOlI,OAAO,IAAI,IAAA;QAC5E,OAAO;AACLA,YAAAA,OAAAA;AACAC,YAAAA,KAAAA,EAAOiI,MAAOjI,CAAAA,KAAK,IAAIF,yBAAAA,CAA0BE,KAAK;AACtDC,YAAAA,IAAAA,EAAMgI,MAAOhI,CAAAA,IAAI,IAAIH,yBAAAA,CAA0BG,IAAI;AACnDC,YAAAA,OAAAA,EAAS+H,MAAO/H,CAAAA,OAAO,IAAIJ,yBAAAA,CAA0BI,OAAO;AAC5DC,YAAAA,qBAAAA,EAAuB8H,MAAO9H,CAAAA,qBAAqB,IAAIL,yBAAAA,CAA0BK,qBAAqB;AACtGC,YAAAA,eAAAA,EAAiB6H,MAAO7H,CAAAA,eAAe,IAAIN,yBAAAA,CAA0BM,eAAe;YACpFC,gBAAkBqE,EAAAA,IAAAA,CAAKG,GAAG,CAAC,CAAA,EAAGoD,OAAO5H,gBAAgB,IAAIP,0BAA0BO,gBAAgB,CAAA;AACnGC,YAAAA,KAAAA,EAAO2H,MAAO3H,CAAAA,KAAK,IAAIR,yBAAAA,CAA0BQ,KAAK;YACtD2B,MAAQgG,EAAAA,MAAAA,CAAOhG,MAAM,IAAI+F;AAC3B,SAAA;AACF;IAEQE,mBAA6C,GAAA;AACnD,QAAA,IAAI,IAAI,CAAC1G,iBAAiB,CAACS,MAAM,EAAE;AACjC,YAAA,OAAO,IAAI,CAACT,iBAAiB,CAACS,MAAM;AACtC;QACA,IAAI;YACF,OAAOkG,SAAAA,EAAAA;AACT,SAAA,CAAE,OAAM;YACN,OAAO,IAAA;AACT;AACF;IAEQ1E,kBAAoD,GAAA;AAC1D,QAAA,IAAI,CAAC,IAAI,CAACjC,iBAAiB,CAACzB,OAAO,EAAE;YACnC,OAAO,IAAA;AACT;QACA,MAAMkC,MAAAA,GAAS,IAAI,CAACiG,mBAAmB,EAAA;AACvC,QAAA,MAAME,SAAY,GAAA,CAAC,CAACnG,MAAAA,EAAQoG,gBAAgBC,QAASC,CAAAA,qBAAAA;AACrD,QAAA,MAAMC,UAAmC,GAAA;AACvC1B,YAAAA,IAAAA,EAAM,IAAI,CAACtF,iBAAiB,CAAClB,KAAK;YAClCmI,IAAM,EAAA,OAAA;YACNC,OAAS,EAAA,CAAA;YACTC,UAAY,EAAA,CAAA;AACZC,YAAAA,MAAAA,EAAQR,YAAY,UAAa,GAAA,aAAA;AACjCS,YAAAA,QAAAA,EAAU,EAAE;AACZC,YAAAA,OAAAA,EAASV,YAAYtC,SAAY,GAAA;AACnC,SAAA;AACA,QAAA,MAAMiD,MAA0B,GAAA;YAC9BC,OAAS/G,EAAAA,MAAAA,EAAQgH,SAAUC,CAAAA,YAAAA,IAAgB,EAAC;AAC5CN,YAAAA,MAAAA,EAAQJ,WAAWI,MAAM;YACzB5I,KAAOwI,EAAAA,UAAAA;AACPW,YAAAA,MAAAA,EAAQX,WAAWK;AACrB,SAAA;AACA,QAAA,MAAMO,IAA+B,GAAA;YACnCL,MAAQP,EAAAA,UAAAA;YACRE,OAAS,EAAA,CAAA;YACTW,KAAO,EAAA;AACT,SAAA;AACA,QAAA,MAAMC,KAAgC,GAAA;YACpCC,MAAQ,EAAA,EAAEhJ,oBAAoBK,kBAAkB;AAChDqB,YAAAA,MAAAA;AACAmG,YAAAA,SAAAA;AACAW,YAAAA,MAAAA;AACAK,YAAAA,IAAAA;AACAI,YAAAA,MAAAA,EAAQ,EAAE;YACVlH,cAAgBC,EAAAA,OAAAA,CAAQC,OAAO,CAACuG,MAAAA;AAClC,SAAA;AACA,QAAA,IAAI,IAAI,CAACvH,iBAAiB,CAACxB,KAAK,EAAE;YAChC,IAAI,CAACyJ,oBAAoB,CAACH,KAAAA,EAAOF,MAAM,IAAI,CAAC5H,iBAAiB,CAAClB,KAAK,CAAA;AACrE;QACA,OAAOgJ,KAAAA;AACT;IAEQhD,sBACNgD,CAAAA,KAAoC,EACpCrJ,IAAY,EACmB;AAC/B,QAAA,IAAI,CAACqJ,KAAAA,IAAU,CAAC,IAAI,CAAC9H,iBAAiB,CAACvB,IAAI,IAAI,CAAC,IAAI,CAACuB,iBAAiB,CAACtB,OAAO,EAAG;YAC/E,OAAO,IAAA;AACT;AACA,QAAA,OAAO,IAAI,CAACwJ,kBAAkB,CAACJ,KAAAA,EAAOA,MAAMF,IAAI,EAAE,MAAQnJ,EAAAA,IAAAA,CAAK6G,IAAI,EAAE,IAAI,CAACtF,iBAAiB,CAACvB,IAAI,CAAA;AAClG;AAEQ4G,IAAAA,yBAAAA,CACNyC,KAAoC,EACpCK,SAAwC,EACxC1J,IAAY,EACZ2J,WAAmB,EACY;QAC/B,IAAI,CAACN,SAAS,CAAC,IAAI,CAAC9H,iBAAiB,CAACtB,OAAO,EAAE;YAC7C,OAAO,IAAA;AACT;QACA,MAAM2J,MAAAA,GAASF,SAAaL,IAAAA,KAAAA,CAAMF,IAAI;AACtC,QAAA,OAAO,IAAI,CAACM,kBAAkB,CAC5BJ,OACAO,MACA,EAAA,SAAA,EACAD,WACA,EAAA,IAAA,EACA,GAAG3J,IAAK6G,CAAAA,IAAI,CAAC,CAAC,EAAE8C,WAAa,CAAA,CAAA,CAAA;AAEjC;IAEQF,kBACNJ,CAAAA,KAA6B,EAC7BO,MAA8B,EAC9BpB,IAAwB,EACxB3B,IAAY,EACZgD,YAAqB,EACrBC,UAAmB,EACK;QACxB,MAAMnB,MAAAA,GACJU,KAAMlB,CAAAA,SAAS,IAAI,CAAC0B,eAAe,UAAaR,GAAAA,KAAAA,CAAMlB,SAAS,GAAG,SAAY,GAAA,aAAA;AAChF,QAAA,MAAMW,MAA+B,GAAA;AACnCjC,YAAAA,IAAAA;AACA2B,YAAAA,IAAAA;YACAC,OAAS,EAAA,CAAA;YACTC,UAAY,EAAA,CAAA;AACZC,YAAAA,MAAAA;AACAC,YAAAA,QAAAA,EAAU,EAAE;YACZC,OAASQ,EAAAA,KAAAA,CAAMlB,SAAS,GAAGtC,SAAY,GAAA;AACzC,SAAA;AACA+D,QAAAA,MAAAA,CAAOd,MAAM,CAACF,QAAQ,CAAC5D,IAAI,CAAC8D,MAAAA,CAAAA;AAC5B,QAAA,MAAMiB,KAAgC,GAAA;AACpCjB,YAAAA,MAAAA;YACAL,OAAS,EAAA,CAAA;YACTW,KAAO,EAAA;AACT,SAAA;AACA,QAAA,IAAIS,YAAc,EAAA;AAChB,YAAA,IAAI,CAACL,oBAAoB,CAACH,KAAAA,EAAOU,OAAOD,UAAcjD,IAAAA,IAAAA,CAAAA;AACxD;QACA,OAAOkD,KAAAA;AACT;AAEQP,IAAAA,oBAAAA,CACNH,KAA6B,EAC7BU,KAA6B,EAC7B1J,KAAa,EACP;AACN,QAAA,IAAI,CAACgJ,KAAMlB,CAAAA,SAAS,IAAI,CAACkB,KAAAA,CAAMrH,MAAM,EAAE;YACrC+H,KAAMjB,CAAAA,MAAM,CAACH,MAAM,GAAG,aAAA;YACtBoB,KAAMjB,CAAAA,MAAM,CAACD,OAAO,GAAG,yCAAA;AACvB,YAAA;AACF;AACA,QAAA,MAAMJ,UAAUY,KAAMrH,CAAAA,MAAM,CAACgI,mBAAmB,CAAC3J,KAAO,EAAA;AACtDH,YAAAA,qBAAAA,EAAuB,IAAI,CAACqB,iBAAiB,CAACrB,qBAAqB;AACnEC,YAAAA,eAAAA,EAAiB,IAAI,CAACoB,iBAAiB,CAACpB;AAC1C,SAAA,CAAA;AACA4J,QAAAA,KAAAA,CAAMtB,OAAO,GAAGA,OAAAA;QAChBsB,KAAMjB,CAAAA,MAAM,CAACL,OAAO,GAAGA,OAAAA;AACvB,QAAA,IAAIA,UAAU,CAAG,EAAA;YACfsB,KAAMjB,CAAAA,MAAM,CAACH,MAAM,GAAG,SAAA;YACtBU,KAAME,CAAAA,MAAM,CAACvE,IAAI,CAAC+E,KAAAA,CAAAA;SACb,MAAA;YACLA,KAAMjB,CAAAA,MAAM,CAACH,MAAM,GAAG,aAAA;YACtBoB,KAAMjB,CAAAA,MAAM,CAACD,OAAO,GAAG,qCAAA;AACzB;AACF;IAEQ3B,gBAAiBmC,CAAAA,KAAoC,EAAEU,KAAoC,EAAQ;QACzG,IAAI,CAACV,KAAS,IAAA,CAACA,KAAMrH,CAAAA,MAAM,IAAI,CAAC+H,KAAAA,IAASA,KAAMX,CAAAA,KAAK,EAAE;AACpD,YAAA;AACF;AACAW,QAAAA,KAAAA,CAAMX,KAAK,GAAG,IAAA;QACd,IAAIW,KAAAA,CAAMtB,OAAO,GAAG,CAAG,EAAA;AACrBY,YAAAA,KAAAA,CAAMrH,MAAM,CAACiI,iBAAiB,CAACF,MAAMtB,OAAO,CAAA;AAC9C;AACF;AAEQhB,IAAAA,mBAAAA,CAAoB4B,KAAoC,EAAQ;AACtE,QAAA,IAAI,CAACA,KAAO,EAAA;AACV,YAAA;AACF;AACA,QAAA,IAAI,CAACnC,gBAAgB,CAACmC,KAAAA,EAAOA,MAAMF,IAAI,CAAA;QACvC,IAAIE,KAAAA,CAAME,MAAM,CAAC9G,MAAM,KAAK,CAAK,IAAA,CAAC4G,KAAMrH,CAAAA,MAAM,EAAE;YAC9CqH,KAAMP,CAAAA,MAAM,CAACH,MAAM,GAAG,IAAI,CAACuB,uBAAuB,CAACb,KAAAA,CAAMP,MAAM,CAAC/I,KAAK,CAAA;YACrE,IAAI,CAACoK,qBAAqB,CAACd,KAAAA,CAAAA;AAC3B,YAAA;AACF;QACAA,KAAMhH,CAAAA,cAAc,GAAGC,OAAQ8H,CAAAA,GAAG,CAChCf,KAAME,CAAAA,MAAM,CAACc,GAAG,CAAC,CAACN,QAAUV,KAAMrH,CAAAA,MAAM,CAAEsI,qBAAqB,CAACP,MAAMtB,OAAO,CAAA,CAAA,CAAA,CAE5E8B,IAAI,CAAC,CAACC,OAAAA,GAAAA;AACL,YAAA,IAAK,IAAIpF,CAAI,GAAA,CAAA,EAAGA,IAAIoF,OAAQ/H,CAAAA,MAAM,EAAE2C,CAAK,EAAA,CAAA;gBACvC,IAAI,CAACqF,qBAAqB,CAACpB,KAAME,CAAAA,MAAM,CAACnE,CAAE,CAAA,EAAEoF,OAAO,CAACpF,CAAE,CAAA,CAAA;AACxD;YACAiE,KAAMP,CAAAA,MAAM,CAACH,MAAM,GAAG,IAAI,CAACuB,uBAAuB,CAACb,KAAAA,CAAMP,MAAM,CAAC/I,KAAK,CAAA;YACrE,IAAI,CAACoK,qBAAqB,CAACd,KAAAA,CAAAA;AAC3B,YAAA,OAAOA,MAAMP,MAAM;SAEpB4B,CAAAA,CAAAA,KAAK,CAAC,CAACC,GAAAA,GAAAA;AACN,YAAA,MAAM9B,UAAU8B,GAAeC,YAAAA,KAAAA,GAAQD,GAAI9B,CAAAA,OAAO,GAAGgC,MAAOF,CAAAA,GAAAA,CAAAA;AAC5D,YAAA,KAAK,MAAMZ,KAAAA,IAASV,KAAME,CAAAA,MAAM,CAAE;gBAChCQ,KAAMjB,CAAAA,MAAM,CAACH,MAAM,GAAG,QAAA;gBACtBoB,KAAMjB,CAAAA,MAAM,CAACD,OAAO,GAAGA,OAAAA;AACzB;YACAQ,KAAMP,CAAAA,MAAM,CAACH,MAAM,GAAG,QAAA;YACtB,IAAI,CAACwB,qBAAqB,CAACd,KAAAA,CAAAA;AAC3B,YAAA,OAAOA,MAAMP,MAAM;AACrB,SAAA,CAAA;QACF,IAAI,CAACgC,yBAAyB,CAACzB,KAAAA,CAAAA;AACjC;AAEQyB,IAAAA,yBAAAA,CAA0BzB,KAA6B,EAAQ;AACrE,QAAA,IAAI,CAAC7H,qBAAqB,CAACwD,IAAI,CAACqE,KAAAA,CAAAA;QAChC,MAAO,IAAI,CAAC7H,qBAAqB,CAACiB,MAAM,GAAG,IAAI,CAAClB,iBAAiB,CAACnB,gBAAgB,CAAE;YAClF,IAAI,CAACoB,qBAAqB,CAACuJ,KAAK,EAAA;AAClC;AACAzK,QAAAA,mBAAAA,CAAoBG,0BAA0B,GAAG4I,KAAAA;AACnD;AAEQc,IAAAA,qBAAAA,CAAsBd,KAA6B,EAAQ;QACjE,IAAI,CAAC7H,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACwJ,MAAM,CAAC,CAACC,OAAAA,GAAYA,OAAY5B,KAAAA,KAAAA,CAAAA;AACxF,QAAA,IAAIA,MAAMC,MAAM,IAAI,IAAI,CAAC5I,4BAA4B,EAAE;AACrD,YAAA,IAAI,CAACA,4BAA4B,GAAG2I,KAAAA,CAAMC,MAAM;AAChD,YAAA,IAAI,CAAC9I,oBAAoB,GAAG6I,KAAAA,CAAMP,MAAM;AAC1C;AACA,QAAA,IAAIO,KAAMC,CAAAA,MAAM,IAAIhJ,mBAAAA,CAAoBI,4BAA4B,EAAE;YACpEJ,mBAAoBI,CAAAA,4BAA4B,GAAG2I,KAAAA,CAAMC,MAAM;YAC/DhJ,mBAAoBE,CAAAA,oBAAoB,GAAG6I,KAAAA,CAAMP,MAAM;AACzD;QACA,IAAIxI,mBAAAA,CAAoBG,0BAA0B,KAAK4I,KAAO,EAAA;AAC5D/I,YAAAA,mBAAAA,CAAoBG,0BAA0B,GAAG,IAAA;AACnD;AACF;IAEQgK,qBAAsBV,CAAAA,KAA6B,EAAEjB,MAA4B,EAAQ;AAC/FiB,QAAAA,KAAAA,CAAMjB,MAAM,CAACL,OAAO,GAAGK,OAAOoC,EAAE;AAChCnB,QAAAA,KAAAA,CAAMjB,MAAM,CAACJ,UAAU,GAAGI,OAAOJ,UAAU;AAC3CqB,QAAAA,KAAAA,CAAMjB,MAAM,CAACH,MAAM,GAAGG,OAAOH,MAAM;AACnCoB,QAAAA,KAAAA,CAAMjB,MAAM,CAACD,OAAO,GAAGC,OAAOD,OAAO;AACvC;AAEQqB,IAAAA,uBAAAA,CAAwBH,KAA2B,EAAwB;AACjF,QAAA,MAAMoB,WAAmC,EAAE;AAC3C,QAAA,MAAMC,UAAU,CAACC,IAAAA,GAAAA;YACfF,QAASnG,CAAAA,IAAI,CAACqG,IAAAA,CAAK1C,MAAM,CAAA;AACzB,YAAA,KAAK,MAAM2C,KAAAA,IAASD,IAAKzC,CAAAA,QAAQ,CAAE;gBACjCwC,OAAQE,CAAAA,KAAAA,CAAAA;AACV;AACF,SAAA;QACAF,OAAQrB,CAAAA,KAAAA,CAAAA;AACR,QAAA,KAAK,MAAMpB,MAAU,IAAA;AAAC,YAAA,QAAA;AAAU,YAAA,SAAA;AAAW,YAAA,WAAA;AAAa,YAAA,SAAA;AAAW,YAAA;SAAc,CAAW;YAC1F,IAAIwC,QAAAA,CAASI,QAAQ,CAAC5C,MAAS,CAAA,EAAA;gBAC7B,OAAOA,MAAAA;AACT;AACF;QACA,IAAIwC,QAAAA,CAASI,QAAQ,CAAC,aAAgB,CAAA,EAAA;YACpC,OAAO,aAAA;AACT;QACA,OAAO,UAAA;AACT;AAEQ/F,IAAAA,YAAAA,CAAaX,IAAmB,EAAkB;QACxD,MAAM2G,IAAAA,GAAO3G,IAAK4G,CAAAA,QAAQ,IAAI,qBAAA;AAC9B,QAAA,IAAID,SAAS,UAAY,EAAA;YACvB,OAAO;gBACL7I,KAAOkC,EAAAA,IAAAA,CAAKlC,KAAK,IAAI,CAAA;gBACrBC,MAAQiC,EAAAA,IAAAA,CAAKjC,MAAM,IAAI;AACzB,aAAA;AACF;QACA,MAAM8I,MAAAA,GAAS7G,IAAKlC,CAAAA,KAAK,IAAI,GAAA;QAC7B,MAAMgJ,MAAAA,GAAS9G,IAAKjC,CAAAA,MAAM,IAAI,GAAA;QAC9B,OAAO;YACLD,KAAO8B,EAAAA,IAAAA,CAAKG,GAAG,CAAC,CAAGH,EAAAA,IAAAA,CAAKmH,KAAK,CAAC,IAAI,CAAC/K,gBAAgB,GAAG6K,MAAAA,CAAAA,CAAAA;YACtD9I,MAAQ6B,EAAAA,IAAAA,CAAKG,GAAG,CAAC,CAAGH,EAAAA,IAAAA,CAAKmH,KAAK,CAAC,IAAI,CAAC9K,iBAAiB,GAAG6K,MAAAA,CAAAA;AAC1D,SAAA;AACF;IAEQjG,8BAA+Bb,CAAAA,IAAmB,EAAEU,IAAoB,EAAU;QACxF,OAAOsG,IAAAA,CAAKC,SAAS,CAAC;AACpBjH,YAAAA,IAAAA,CAAKkH,MAAM;AACXxG,YAAAA,IAAAA,CAAK5C,KAAK;AACV4C,YAAAA,IAAAA,CAAK3C,MAAM;AACXiC,YAAAA,IAAAA,CAAKmH,SAAS,IAAI,CAAA;AAClBnH,YAAAA,IAAAA,CAAKoH,WAAW,IAAI;AACrB,SAAA,CAAA;AACH;AAEQ3I,IAAAA,8BAAAA,CAA+BH,QAA6B,EAAQ;QAC1E,IAAI,CAAChC,uBAAuB,CAAC2C,KAAK,EAAA;QAClC,IAAI,CAACzC,yBAAyB,CAACyC,KAAK,EAAA;AACpC,QAAA,MAAMoI,oBAAoB,IAAIlL,GAAAA,EAAAA;AAC9B,QAAA,KAAK,MAAMiD,QAAYd,IAAAA,QAAAA,CAASe,SAAS,CAAC4D,MAAM,EAAI,CAAA;YAClD,MAAM3D,QAAAA,GAAWF,SAASE,QAAQ;YAClC,IAAIA,QAAAA,CAASC,IAAI,KAAK,UAAY,EAAA;AAChC,gBAAA;AACF;AACA,YAAA,MAAMrB,UACJ,IAAI,CAAChC,iBAAiB,CAACwD,GAAG,CAACJ,QAAAA,CAAS+G,EAAE,CAAA,IAAK,IAAI,CAACnK,iBAAiB,CAACwD,GAAG,CAACJ,SAASE,UAAU,CAAA;AAC3F,YAAA,IAAItB,YAAY8C,SAAW,EAAA;AACzBqG,gBAAAA,iBAAAA,CAAkBlJ,GAAG,CAACmB,QAASE,CAAAA,UAAU,EAAEtB,OAAAA,CAAAA;AAC7C;AACF;AACA,QAAA,KAAK,MAAMkB,QAAYd,IAAAA,QAAAA,CAASe,SAAS,CAAC4D,MAAM,EAAI,CAAA;YAClD,MAAM3D,QAAAA,GAAWF,SAASE,QAAQ;YAClC,IAAIA,QAAAA,CAASC,IAAI,KAAK,UAAY,EAAA;AAChC,gBAAA;AACF;YACA,IAAI,CAACjD,uBAAuB,CAAC6B,GAAG,CAACmB,QAAS+G,CAAAA,EAAE,EAAE/G,QAAAA,CAASE,UAAU,CAAA;AACjE,YAAA,MAAMtB,OAAUmJ,GAAAA,iBAAAA,CAAkB3H,GAAG,CAACJ,SAASE,UAAU,CAAA;AACzD,YAAA,IAAItB,YAAY8C,SAAW,EAAA;AACzB,gBAAA,IAAI,CAACxE,yBAAyB,CAAC2B,GAAG,CAACmB,QAAAA,CAAS+G,EAAE,EAAEnI,OAAAA,CAAAA;AAChD,gBAAA,IAAI,CAAC1B,yBAAyB,CAAC2B,GAAG,CAACmB,QAAAA,CAASE,UAAU,EAAEtB,OAAAA,CAAAA;AAC1D;AACF;AACF;IAEQ4E,oBAA6B,GAAA;AACnC,QAAA,IAAIwE,KAAiB,GAAA,IAAA;AACrB,QAAA,MAAO,IAAI,CAAC7K,iBAAiB,CAACmB,MAAM,GAAG,CAAG,CAAA;AACxC,YAAA,MAAM2J,QAAW,GAAA,IAAI,CAAC9K,iBAAiB,CAAC+K,GAAG,EAAA;YAC3C,IAAI;AACFD,gBAAAA,QAAAA,EAAAA;AACF,aAAA,CAAE,OAAOpF,CAAG,EAAA;gBACVmF,KAAUnF,KAAAA,CAAAA;AACZ;AACF;AACA,QAAA,IAAImF,KAAO,EAAA;YACT,MAAMA,KAAAA;AACR;AACF;AAEQlG,IAAAA,kBAAAA,CAAmBpB,IAAuB,EAAEyH,WAAc,GAAA,IAAI,EAAgB;AACpF,QAAA,IAAI,CAAC,IAAI,CAAC1L,UAAU,CAAC2L,mBAAmB,IAAI,CAAC,IAAI,CAAC3L,UAAU,CAAC4L,kBAAkB,EAAE;AAC/E,YAAA,MAAM,IAAI5B,KAAM,CAAA,iFAAA,CAAA;AAClB;AACA,QAAA,MAAM5E,cAAc,IAAI,CAACpF,UAAU,CAAC2L,mBAAmB,CAAC1H,IAAAA,CAAAA;AACxD,QAAA,IAAIyH,WAAa,EAAA;AACf,YAAA,IAAI,CAAChL,iBAAiB,CAAC0D,IAAI,CAAC,IAAA;AAC1B,gBAAA,IAAI,CAACpE,UAAU,CAAC4L,kBAAkB,CAAExG,WAAAA,CAAAA;AACtC,aAAA,CAAA;AACF;QACA,OAAOA,WAAAA;AACT;AAEQqB,IAAAA,mBAAAA,CAAoBrB,WAAyB,EAAQ;AAC3D,QAAA,IAAI,CAAC,IAAI,CAACpF,UAAU,CAAC4L,kBAAkB,EAAE;AACvC,YAAA,MAAM,IAAI5B,KAAM,CAAA,8EAAA,CAAA;AAClB;AACA,QAAA,IAAI,CAAChK,UAAU,CAAC4L,kBAAkB,CAACxG,WAAAA,CAAAA;AACrC;IAEQE,uBACNrB,CAAAA,IAAuB,EACvB0B,WAA+B,EACZ;AACnB,QAAA,MAAMkG,oBAAoB,CAACC,UAAAA,GAAAA;AACzB,YAAA,IAAIA,sBAAsBC,QAAU,EAAA;AAClC,gBAAA,IAAIpG,WAAa,EAAA;AACf,oBAAA,IAAI,CAACqG,qBAAqB,CAACrG,WAAAA,EAAamG,UAAY,EAAA,SAAA,CAAA;AACtD;gBACA,OAAO,IAAI,CAACG,gBAAgB,CAACH,UAAAA,CAAAA;AAC/B;YACA,OAAOA,UAAAA;AACT,SAAA;AACA,QAAA,MAAMI,SAASC,KAAMC,CAAAA,OAAO,CAACnI,IAAKoI,CAAAA,gBAAgB,IAC9CpI,IAAKoI,CAAAA,gBAAgB,CAAC5C,GAAG,CAACoC,qBAC1B5H,IAAKoI,CAAAA,gBAAgB,GACnBR,iBAAkB5H,CAAAA,IAAAA,CAAKoI,gBAAgB,CACvC,GAAA,IAAA;QACN,OAAO;AACL,YAAA,GAAGpI,IAAI;YACPoI,gBAAkBH,EAAAA,MAAAA;YAClBI,eAAiBT,EAAAA,iBAAAA,CAAkB5H,KAAKqI,eAAe;AACzD,SAAA;AACF;AAEQL,IAAAA,gBAAAA,CAAiB/J,MAAgB,EAAY;QACnD,MAAMqK,QAAAA,GAAW,IAAI,CAACpM,iBAAiB,CAACwD,GAAG,CAACzB,OAAOG,GAAG,CAAA;AACtD,QAAA,IAAIkK,aAAatH,SAAW,EAAA;YAC1B,OAAOsH,QAAAA;AACT;QACA,MAAMC,gBAAAA,GAAmB,IAAI,CAAC/L,yBAAyB,CAACkD,GAAG,CAACzB,OAAOG,GAAG,CAAA;AACtE,QAAA,IAAImK,qBAAqBvH,SAAW,EAAA;YAClC,OAAOuH,gBAAAA;AACT;QACA,MAAMC,aAAAA,GAAgB,IAAI,CAAClM,uBAAuB,CAACoD,GAAG,CAACzB,OAAOG,GAAG,CAAA;AACjE,QAAA,IAAIoK,kBAAkBxH,SAAW,EAAA;AAC/B,YAAA,MAAMyH,OACJ,GAAA,IAAI,CAACvM,iBAAiB,CAACwD,GAAG,CAAC8I,aAAAA,CAAAA,IAAkB,IAAI,CAAChM,yBAAyB,CAACkD,GAAG,CAAC8I,aAAAA,CAAAA;AAClF,YAAA,IAAIC,YAAYzH,SAAW,EAAA;gBACzB,OAAOyH,OAAAA;AACT;AACF;QACA,MAAMC,SAAAA,GAAY,IAAI,CAACtM,kBAAkB,CAACsD,GAAG,CAACzB,OAAOG,GAAG,CAAA;AACxD,QAAA,IAAIsK,cAAc1H,SAAW,EAAA;YAC3B,OAAO0H,SAAAA;AACT;;QAEA,MAAMC,cAAAA,GAAiB,IAAI,CAACpM,wBAAwB,CAACmD,GAAG,CAACzB,OAAOG,GAAG,CAAA;AACnE,QAAA,IAAIuK,mBAAmB3H,SAAW,EAAA;AAChC,YAAA,MAAMyH,UAAU,IAAI,CAACrM,kBAAkB,CAACsD,GAAG,CAACiJ,cAAAA,CAAAA;AAC5C,YAAA,IAAIF,YAAYzH,SAAW,EAAA;gBACzB,OAAOyH,OAAAA;AACT;AACF;AACA,QAAA,MAAM,IAAI1C,KACR,CAAA,CAAC,8CAA8C,EAAE9H,MAAAA,CAAO+D,IAAI,CAAC,MAAM,EAAE/D,MAAAA,CAAOG,GAAG,CAAC,GAAG,CAAC,GAClF,CAAC,2DAA2D,CAAC,CAAA;AAEnE;AAEQuD,IAAAA,kBAAAA,CAAmBxG,IAAY,EAAqB;AAC1D,QAAA,MAAMyN,gBAAgB,IAAIC,GAAAA,EAAAA;AAC1B,QAAA,MAAMC,aAAa,IAAID,GAAAA,EAAAA;AACvB,QAAA,MAAME,iBAAiB,IAAIF,GAAAA,EAAAA;AAC3B,QAAA,KAAK,MAAMvJ,QAAAA,IAAYnE,IAAK6N,CAAAA,KAAK,CAAE;YACjCJ,aAAcK,CAAAA,GAAG,CAAC3J,QAAAA,CAAS+G,EAAE,CAAA;AAC7B,YAAA,IAAI/G,SAASC,IAAI,KAAK,eAAeD,QAASC,CAAAA,IAAI,KAAK,UAAY,EAAA;gBACjEuJ,UAAWG,CAAAA,GAAG,CAAC3J,QAAAA,CAAS+G,EAAE,CAAA;AAC5B,aAAA,MAAO,IAAI/G,QAAAA,CAASC,IAAI,KAAK,aAAe,EAAA;gBAC1CwJ,cAAeE,CAAAA,GAAG,CAAC3J,QAAAA,CAAS+G,EAAE,CAAA;AAChC;AACF;AACA,QAAA,KAAK,MAAM/G,QAAAA,IAAYnE,IAAK+N,CAAAA,MAAM,CAAE;YAClCN,aAAcK,CAAAA,GAAG,CAAC3J,QAAAA,CAAS+G,EAAE,CAAA;AAC7B,YAAA,IAAI/G,SAASC,IAAI,KAAK,eAAeD,QAASC,CAAAA,IAAI,KAAK,UAAY,EAAA;gBACjEuJ,UAAWG,CAAAA,GAAG,CAAC3J,QAAAA,CAAS+G,EAAE,CAAA;AAC5B,aAAA,MAAO,IAAI/G,QAAAA,CAASC,IAAI,KAAK,aAAe,EAAA;gBAC1CwJ,cAAeE,CAAAA,GAAG,CAAC3J,QAAAA,CAAS+G,EAAE,CAAA;AAChC;AACF;QACA,OAAO;AACL8C,YAAAA,QAAAA,EAAUhO,KAAK6G,IAAI;AACnB4G,YAAAA,aAAAA;AACAE,YAAAA,UAAAA;AACAC,YAAAA;AACF,SAAA;AACF;AAEQhB,IAAAA,qBAAAA,CACNrG,WAA8B,EAC9BzD,MAAgB,EAChBmL,MAAiC,EAC3B;QACN,IAAI,CAAC1H,YAAYkH,aAAa,CAAC1I,GAAG,CAACjC,MAAAA,CAAOG,GAAG,CAAG,EAAA;YAC9C,MAAM,IAAI2H,MACR,CAAC,2BAA2B,EAAErE,WAAYyH,CAAAA,QAAQ,CAAC,kBAAkB,EAAEC,OAAO,EAAE,EAAEnL,OAAO+D,IAAI,CAAC,EAAE,CAAC,GAC/F,CAAC,0CAA0C,CAAC,CAAA;AAElD;QACA,IAAIoH,MAAAA,KAAW,SAAa,IAAA,CAAC1H,WAAYoH,CAAAA,UAAU,CAAC5I,GAAG,CAACjC,MAAOG,CAAAA,GAAG,CAAG,EAAA;AACnE,YAAA,MAAM,IAAI2H,KACR,CAAA,CAAC,2BAA2B,EAAErE,WAAAA,CAAYyH,QAAQ,CAAC,mBAAmB,EAAElL,MAAAA,CAAO+D,IAAI,CAAC,gBAAgB,CAAC,GACnG,CAAC,iCAAiC,CAAC,CAAA;AAEzC;QACA,IAAIoH,MAAAA,KAAW,aAAiB,IAAA,CAAC1H,WAAYqH,CAAAA,cAAc,CAAC7I,GAAG,CAACjC,MAAOG,CAAAA,GAAG,CAAG,EAAA;AAC3E,YAAA,MAAM,IAAI2H,KACR,CAAA,CAAC,2BAA2B,EAAErE,WAAAA,CAAYyH,QAAQ,CAAC,mBAAmB,EAAElL,MAAAA,CAAO+D,IAAI,CAAC,oBAAoB,CAAC,GACvG,CAAC,qCAAqC,CAAC,CAAA;AAE7C;AACF;AAEQI,IAAAA,iBAAAA,CAAkB+G,QAAgB,EAAErE,WAAmB,EAAEwC,KAAc,EAAS;AACtF,QAAA,MAAMtD,UAAUsD,KAAiBvB,YAAAA,KAAAA,GAAQuB,KAAMtD,CAAAA,OAAO,GAAGgC,MAAOsB,CAAAA,KAAAA,CAAAA;AAChE,QAAA,MAAM+B,OAAU,GAAA,IAAItD,KAClB,CAAA,CAAC,2BAA2B,EAAEoD,QAAS,CAAA,WAAW,EAAErE,WAAAA,CAAY,UAAU,EAAEd,OAAS,CAAA,CAAA,CAAA;AAEtFqF,QAAAA,OAAAA,CAAwCC,KAAK,GAAGhC,KAAAA;QACjD,OAAO+B,OAAAA;AACT;AAEQxH,IAAAA,cAAAA,CAAeH,WAA8B,EAAoB;AACvE,QAAA,MAAM6H,OAAO,IAAI;QACjB,OAAO;AACLC,YAAAA,UAAAA,CAAAA,CAAcvL,MAA0B,EAAA;gBACtCsL,IAAKxB,CAAAA,qBAAqB,CAACrG,WAAAA,EAAazD,MAAQ,EAAA,SAAA,CAAA;gBAChD,OAAOsL,IAAAA,CAAKvB,gBAAgB,CAAC/J,MAAAA,CAAAA;AAC/B,aAAA;AACAwL,YAAAA,cAAAA,CAAAA,CAA6BxL,MAAyC,EAAA;gBACpEsL,IAAKxB,CAAAA,qBAAqB,CAACrG,WAAAA,EAAazD,MAAQ,EAAA,aAAA,CAAA;AAChD,gBAAA,MAAMkD,cAAcoI,IAAKlN,CAAAA,sBAAsB,CAACqD,GAAG,CAACzB,OAAOG,GAAG,CAAA;AAC9D,gBAAA,IAAI+C,gBAAgBH,SAAW,EAAA;oBAC7B,OAAOG,WAAAA;AACT;AACA,gBAAA,MAAM,IAAI4E,KACR,CAAA,CAAC,iDAAiD,EAAE9H,MAAAA,CAAO+D,IAAI,CAAC,MAAM,EAAE/D,MAAAA,CAAOG,GAAG,CAAC,GAAG,CAAC,GACrF,CAAC,2DAA2D,CAAC,CAAA;AAEnE,aAAA;AACAsL,YAAAA,iBAAAA,CAAAA,CAA0C1J,IAAuB,EAAA;AAC/D,gBAAA,OAAOuJ,KAAKnI,kBAAkB,CAC5BmI,IAAKlI,CAAAA,uBAAuB,CAACrB,IAAM0B,EAAAA,WAAAA,CAAAA,CAAAA;AAEvC,aAAA;AACAiI,YAAAA,YAAAA,CAAAA,CAAapC,QAAoB,EAAA;gBAC/BgC,IAAK9M,CAAAA,iBAAiB,CAAC0D,IAAI,CAACoH,QAAAA,CAAAA;AAC9B;AACF,SAAA;AACF;AACF;;;;"}
|
|
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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"}
|