@zephyr3d/scene 0.9.25 → 0.9.26
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/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/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 +58 -24
- 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 +178 -67
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +193 -21
- 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 +4019 -1278
- package/dist/index.js +15 -5
- 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 +338 -300
- 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 +73 -18
- 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 +330 -20
- 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 +3 -1
- 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 +4 -1
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.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 +91 -34
- 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 +45 -39
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cull_visitor.js +19 -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 +52 -51
- 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 +3 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +3 -0
- 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/oit.js +29 -0
- package/dist/render/oit.js.map +1 -0
- package/dist/render/render_queue.js +3 -0
- package/dist/render/render_queue.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 +61 -1
- package/dist/render/rendergraph/forward_plus_builder.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/weightedblended_oit.js +36 -35
- 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 +6 -0
- 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/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 +50 -50
- 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 +431 -100
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +370 -3
- 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 +133 -1
- 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 +4 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +96 -95
- 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
|
@@ -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":";;;AAyDA,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,UAAyC;IACzCC,gBAAyB;IACzBC,iBAA0B;AAC1BC,IAAAA,iBAAAA,GAA2C,IAAIC,GAAM,EAAA;AACrDC,IAAAA,kBAAAA,GAA4C,IAAID,GAAM,EAAA;AACtDE,IAAAA,sBAAAA,GAAmD,IAAIF,GAAM,EAAA;AAC7DG,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,SAAuC,EACvCC,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,EAAe;AACnF,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,WAAwB,EAAQ;AAC1D,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,CACxBC,UAAAA,GAAAA;AAEA,YAAA,IAAIA,sBAAsBC,QAAU,EAAA;AAClC,gBAAA,IAAIpG,WAAa,EAAA;AACf,oBAAA,IAAI,CAACqG,qBAAqB,CAACrG,WAAAA,EAAamG,UAAY,EAAA,SAAA,CAAA;AACtD;;;gBAGA,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,IAC7CpI,IAAKoI,CAAAA,gBAAgB,CAAC5C,GAAG,CAACoC,qBAC3B5H,IAAKoI,CAAAA,gBAAgB,GAClBR,iBAAkB5H,CAAAA,IAAAA,CAAKoI,gBAAgB,CACxC,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,CAAexL,MAA2B,EAAA;gBACxCsL,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,CAAkB1J,IAAuB,EAAA;AACvC,gBAAA,OAAOuJ,KAAKnI,kBAAkB,CAACmI,IAAKlI,CAAAA,uBAAuB,CAACrB,IAAM0B,EAAAA,WAAAA,CAAAA,CAAAA;AACpE,aAAA;AACAiI,YAAAA,YAAAA,CAAAA,CAAapC,QAAoB,EAAA;gBAC/BgC,IAAK9M,CAAAA,iBAAiB,CAAC0D,IAAI,CAACoH,QAAAA,CAAAA;AAC9B;AACF,SAAA;AACF;AACF;;;;"}
|
|
@@ -462,6 +462,11 @@ function validateProducedFrameResources(blackboard, options, renderQueue) {
|
|
|
462
462
|
builder.addSubpass('SkyMotionVectors', (rgCtx)=>{
|
|
463
463
|
renderSkyMotionVectors(ctx, rgCtx, skyMotionVectorFramebufferHandle);
|
|
464
464
|
});
|
|
465
|
+
// After the sky, which writes at the far plane: a blended surface in
|
|
466
|
+
// front of empty background has to replace what the sky put there.
|
|
467
|
+
builder.addSubpass('TransparentMotionVectors', (rgCtx)=>{
|
|
468
|
+
renderTransparentMotionVectors(frame, rgCtx, skyMotionVectorFramebufferHandle);
|
|
469
|
+
});
|
|
465
470
|
}
|
|
466
471
|
return {
|
|
467
472
|
depthHandle,
|
|
@@ -1011,6 +1016,7 @@ function validateProducedFrameResources(blackboard, options, renderQueue) {
|
|
|
1011
1016
|
const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'CompositeTail');
|
|
1012
1017
|
const hiZHandle = blackboard.get(FrameResources.HiZ);
|
|
1013
1018
|
const sceneColorCopyHandle = blackboard.get(FrameResources.SceneColorCopy);
|
|
1019
|
+
const shadowMaskHandle = blackboard.get(FrameResources.ShadowMask);
|
|
1014
1020
|
const lightPassResult = requireBuildState(fg, 'lightPass', 'LightPass', 'CompositeTail');
|
|
1015
1021
|
const renderDepthAttachment = fg.state.renderDepthAttachment;
|
|
1016
1022
|
const useFinalFramebufferAsIntermediate = fg.state.useFinalFramebufferAsIntermediate;
|
|
@@ -1074,9 +1080,23 @@ function validateProducedFrameResources(blackboard, options, renderQueue) {
|
|
|
1074
1080
|
if (sceneColorCopyHandle) {
|
|
1075
1081
|
builder.read(sceneColorCopyHandle);
|
|
1076
1082
|
}
|
|
1083
|
+
if (shadowMaskHandle) {
|
|
1084
|
+
// Transparent geometry goes through the same clustered-light bind group
|
|
1085
|
+
// as the opaque pass, which binds ctx.shadowMaskTexture whenever
|
|
1086
|
+
// screenSpaceShadowMask is on (ShaderHelper, UNIFORM_NAME_SHADOW_MASK).
|
|
1087
|
+
// Declaring the read is what keeps the mask alive: the executor derives
|
|
1088
|
+
// each resource's lastUse from declared reads and returns the texture to
|
|
1089
|
+
// the pool immediately after, so without this the mask would be recycled
|
|
1090
|
+
// after LightPass while this pass is still sampling it.
|
|
1091
|
+
builder.read(shadowMaskHandle);
|
|
1092
|
+
}
|
|
1077
1093
|
builder.read(opaqueChainResult.color);
|
|
1078
1094
|
const out = builder.write(opaqueChainResult.color);
|
|
1079
1095
|
builder.setExecute((rgCtx)=>{
|
|
1096
|
+
// Pulled here rather than inherited from LightPass's execute. The value
|
|
1097
|
+
// is the same, but relying on the leftover would make this pass depend
|
|
1098
|
+
// on execution order instead of on its own declared inputs.
|
|
1099
|
+
ctx.shadowMaskTexture = shadowMaskHandle ? rgCtx.getTexture(shadowMaskHandle) : null;
|
|
1080
1100
|
renderTransparentScenePass(frame, rgCtx, opaqueChainRan ? opaqueChainResult.color : null, lightPassResult.sceneColorFramebufferHandle);
|
|
1081
1101
|
});
|
|
1082
1102
|
return out;
|
|
@@ -1485,7 +1505,47 @@ function cleanupFrame(frame) {
|
|
|
1485
1505
|
let _skyMVProgram = null;
|
|
1486
1506
|
let _skyMVBindGroup = null;
|
|
1487
1507
|
let _skyMVBox = null;
|
|
1488
|
-
/** @internal */
|
|
1508
|
+
/** @internal */ /**
|
|
1509
|
+
* Fills in motion vectors for blended geometry that opted into them.
|
|
1510
|
+
*
|
|
1511
|
+
* @remarks
|
|
1512
|
+
* The transparent queue never reaches the ordinary prepass, so without this a
|
|
1513
|
+
* blended surface carries whatever velocity belongs to what is behind it. The
|
|
1514
|
+
* framebuffer here holds the motion vector attachment alone, so nothing touches
|
|
1515
|
+
* the linear depth the light pass and the screen-space effects read, and the
|
|
1516
|
+
* materials run with depth test on and depth write off, so the scene depth is
|
|
1517
|
+
* left as the opaque pass built it.
|
|
1518
|
+
*
|
|
1519
|
+
* Materials that have not opted in discard, which leaves the velocity beneath
|
|
1520
|
+
* them intact. See {@link MeshMaterial.transparentMotionVector} for why that is
|
|
1521
|
+
* the right default and where the approximation breaks.
|
|
1522
|
+
* @internal
|
|
1523
|
+
*/ function renderTransparentMotionVectors(frame, rgCtx, framebufferHandle) {
|
|
1524
|
+
const ctx = frame.ctx;
|
|
1525
|
+
const renderQueue = frame.renderQueue;
|
|
1526
|
+
if (!ctx.motionVectors || !renderQueue.itemList?.transparent) {
|
|
1527
|
+
return;
|
|
1528
|
+
}
|
|
1529
|
+
const device = ctx.device;
|
|
1530
|
+
device.pushDeviceStates();
|
|
1531
|
+
try {
|
|
1532
|
+
device.setFramebuffer(rgCtx.getFramebuffer(framebufferHandle));
|
|
1533
|
+
_depthPass.motionVectorOnly = true;
|
|
1534
|
+
_depthPass.encodeDepth = false;
|
|
1535
|
+
_depthPass.transmission = false;
|
|
1536
|
+
_depthPass.renderBackface = false;
|
|
1537
|
+
// Nothing is cleared: this pass only replaces the pixels its own geometry
|
|
1538
|
+
// covers, and everything else in the target is already correct.
|
|
1539
|
+
_depthPass.clearColor = null;
|
|
1540
|
+
_depthPass.clearDepth = null;
|
|
1541
|
+
_depthPass.clearStencil = null;
|
|
1542
|
+
_depthPass.render(ctx, null, null, renderQueue);
|
|
1543
|
+
} finally{
|
|
1544
|
+
_depthPass.motionVectorOnly = false;
|
|
1545
|
+
device.popDeviceStates();
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
function renderSkyMotionVectors(ctx, rgCtx, framebufferHandle) {
|
|
1489
1549
|
if (!ctx.motionVectorTexture) {
|
|
1490
1550
|
return;
|
|
1491
1551
|
}
|