@zephyr3d/editor 0.3.7 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/assets/{index-ySiLtSxz.js → index-BZ1L8ggE.js} +43 -3
  2. package/dist/assistant/zephyr-types-index.json +13230 -9488
  3. package/dist/images/icon1024.png +0 -0
  4. package/dist/index.html +1 -1
  5. package/dist/modules/zephyr3d_backend-webgl.js +2 -0
  6. package/dist/modules/zephyr3d_backend-webgl.js.map +1 -1
  7. package/dist/modules/zephyr3d_backend-webgpu.js +457 -16
  8. package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
  9. package/dist/modules/zephyr3d_device.js +27 -0
  10. package/dist/modules/zephyr3d_device.js.map +1 -1
  11. package/dist/modules/zephyr3d_loaders.js +208 -1
  12. package/dist/modules/zephyr3d_loaders.js.map +1 -1
  13. package/dist/modules/zephyr3d_scene.js +774 -80
  14. package/dist/modules/zephyr3d_scene.js.map +1 -1
  15. package/dist/vendor/zephyr3d/backend-webgl/dist/capabilities_webgl.js +2 -0
  16. package/dist/vendor/zephyr3d/backend-webgl/dist/capabilities_webgl.js.map +1 -1
  17. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js +2 -0
  18. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js.map +1 -1
  19. package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js +55 -10
  20. package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js.map +1 -1
  21. package/dist/vendor/zephyr3d/backend-webgpu/dist/computepass_webgpu.js +4 -0
  22. package/dist/vendor/zephyr3d/backend-webgpu/dist/computepass_webgpu.js.map +1 -1
  23. package/dist/vendor/zephyr3d/backend-webgpu/dist/device.js +44 -1
  24. package/dist/vendor/zephyr3d/backend-webgpu/dist/device.js.map +1 -1
  25. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +58 -5
  26. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
  27. package/dist/vendor/zephyr3d/backend-webgpu/dist/timestamp_query.js +297 -0
  28. package/dist/vendor/zephyr3d/backend-webgpu/dist/timestamp_query.js.map +1 -0
  29. package/dist/vendor/zephyr3d/device/dist/base_types.js.map +1 -1
  30. package/dist/vendor/zephyr3d/device/dist/device.js +27 -0
  31. package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
  32. package/dist/vendor/zephyr3d/device/dist/index.d.ts +81 -1
  33. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js +208 -1
  34. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js.map +1 -1
  35. package/dist/vendor/zephyr3d/loaders/dist/index.d.ts +8 -0
  36. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +334 -63
  37. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
  38. package/dist/vendor/zephyr3d/scene/dist/animation/morphtargetgrouptrack.js +66 -0
  39. package/dist/vendor/zephyr3d/scene/dist/animation/morphtargetgrouptrack.js.map +1 -0
  40. package/dist/vendor/zephyr3d/scene/dist/asset/model.js +9 -0
  41. package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
  42. package/dist/vendor/zephyr3d/scene/dist/index.d.ts +260 -4
  43. package/dist/vendor/zephyr3d/scene/dist/index.js +7 -0
  44. package/dist/vendor/zephyr3d/scene/dist/index.js.map +1 -1
  45. package/dist/vendor/zephyr3d/scene/dist/posteffect/sao.js +1 -1
  46. package/dist/vendor/zephyr3d/scene/dist/posteffect/sao.js.map +1 -1
  47. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/executor.js +270 -1
  48. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/executor.js.map +1 -1
  49. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js +19 -1
  50. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  51. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/types.js.map +1 -1
  52. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js +1 -0
  53. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js.map +1 -1
  54. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +2 -1
  55. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
  56. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js +70 -1
  57. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
  58. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
  59. package/package.json +6 -6
  60. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js +0 -320
  61. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"device.js","sources":["../src/device.ts"],"sourcesContent":["import type { Vector4, TypedArray, Immutable, Nullable } from '@zephyr3d/base';\r\nimport type {\r\n FrameBufferOptions,\r\n SamplerOptions,\r\n Texture2D,\r\n VertexLayout,\r\n GPUDataBuffer,\r\n FrameBuffer,\r\n GPUProgram,\r\n BindGroupLayout,\r\n BindGroup,\r\n TextureMipmapData,\r\n TextureImageElement,\r\n TextureCreationOptions,\r\n BufferCreationOptions,\r\n VertexLayoutOptions,\r\n GPUProgramConstructParams,\r\n DeviceCaps,\r\n DeviceOptions,\r\n RenderStateSet,\r\n PBStructTypeInfo,\r\n PrimitiveType,\r\n TextureFormat,\r\n DeviceBackend,\r\n DeviceViewport,\r\n BaseTexture,\r\n RenderBundle\r\n} from '@zephyr3d/device';\r\nimport { getTextureFormatBlockSize, BaseDevice } from '@zephyr3d/device';\r\nimport { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport { WebGPUTexture2D } from './texture2d_webgpu';\r\nimport { WebGPUTexture2DArray } from './texture2darray_webgpu';\r\nimport { WebGPUTexture3D } from './texture3d_webgpu';\r\nimport { WebGPUTextureCube } from './texturecube_webgpu';\r\nimport { WebGPUTextureVideo } from './texturevideo_webgpu';\r\nimport {\r\n WebGPUTextureCaps,\r\n WebGPUFramebufferCaps,\r\n WebGPUMiscCaps,\r\n WebGPUShaderCaps\r\n} from './capabilities_webgpu';\r\nimport { WebGPUVertexLayout } from './vertexlayout_webgpu';\r\nimport { PipelineCache } from './pipeline_cache';\r\nimport {\r\n WebGPUBlendingState,\r\n WebGPUColorState,\r\n WebGPUDepthState,\r\n WebGPURasterizerState,\r\n WebGPURenderStateSet,\r\n WebGPUStencilState\r\n} from './renderstates_webgpu';\r\nimport { WebGPUBuffer } from './buffer_webgpu';\r\nimport { WebGPUFrameBuffer } from './framebuffer_webgpu';\r\nimport { WebGPUIndexBuffer } from './indexbuffer_webgpu';\r\nimport { BindGroupCache } from './bindgroup_cache';\r\nimport { VertexLayoutCache } from './vertexlayout_cache';\r\nimport { SamplerCache } from './sampler_cache';\r\nimport { CommandQueueImmediate } from './commandqueue';\r\nimport { WebGPUStructuredBuffer } from './structuredbuffer_webgpu';\r\nimport { textureFormatInvMap } from './constants_webgpu';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\n\r\ntype WebGPURenderBundle = {\r\n dc: number;\r\n encoder: GPURenderBundleEncoder;\r\n renderBundle: Nullable<GPURenderBundle>;\r\n};\r\n\r\nexport class WebGPUDevice extends BaseDevice {\r\n private _context!: GPUCanvasContext;\r\n private _device!: GPUDevice;\r\n private _adapter!: GPUAdapter;\r\n private _deviceCaps!: DeviceCaps;\r\n private _reverseWindingOrder: boolean;\r\n private _canRender!: boolean;\r\n private _backBufferFormat!: GPUTextureFormat;\r\n private _depthFormat!: GPUTextureFormat;\r\n private _defaultMSAAColorTexture: Nullable<GPUTexture>;\r\n private _defaultMSAAColorTextureView: Nullable<GPUTextureView>;\r\n private _defaultDepthTexture!: GPUTexture;\r\n private _defaultDepthTextureView!: GPUTextureView;\r\n private _pipelineCache!: PipelineCache;\r\n private _bindGroupCache!: BindGroupCache;\r\n private _vertexLayoutCache!: VertexLayoutCache;\r\n private readonly _samplerCache: SamplerCache;\r\n private _currentProgram: Nullable<WebGPUProgram>;\r\n private _currentVertexData: Nullable<WebGPUVertexLayout>;\r\n private _currentStateSet: Nullable<WebGPURenderStateSet>;\r\n private _currentBindGroups: WebGPUBindGroup[];\r\n private _currentBindGroupOffsets: Nullable<Iterable<number>>[];\r\n private _commandQueue!: CommandQueueImmediate;\r\n private _gpuObjectHashCounter: number;\r\n private readonly _gpuObjectHasher: WeakMap<GPUObjectBase, number>;\r\n private _defaultRenderPassDesc!: GPURenderPassDescriptor;\r\n private readonly _sampleCount: number;\r\n private _emptyBindGroup!: GPUBindGroup;\r\n private _captureRenderBundle: Nullable<WebGPURenderBundle>;\r\n private _adapterInfo: any;\r\n constructor(backend: DeviceBackend, cvs: HTMLCanvasElement, options?: DeviceOptions) {\r\n super(cvs, backend, options?.dpr);\r\n this._reverseWindingOrder = false;\r\n this._defaultMSAAColorTexture = null;\r\n this._defaultMSAAColorTextureView = null;\r\n this._currentProgram = null;\r\n this._currentVertexData = null;\r\n this._currentStateSet = null;\r\n this._currentBindGroups = [];\r\n this._currentBindGroupOffsets = [];\r\n this._sampleCount = options?.msaa ? 4 : 1;\r\n this._gpuObjectHasher = new WeakMap();\r\n this._gpuObjectHashCounter = 1;\r\n this._captureRenderBundle = null;\r\n this._samplerCache = new SamplerCache(this);\r\n this._adapterInfo = {};\r\n }\r\n get context() {\r\n return this._context;\r\n }\r\n getFrameBufferSampleCount() {\r\n return this.getFramebuffer()?.getSampleCount() ?? this._sampleCount;\r\n }\r\n get device() {\r\n return this._device;\r\n }\r\n get adapter() {\r\n return this._adapter;\r\n }\r\n get commandQueue() {\r\n return this._commandQueue;\r\n }\r\n get drawingBufferWidth() {\r\n return this.getDrawingBufferWidth();\r\n }\r\n get drawingBufferHeight() {\r\n return this.getDrawingBufferHeight();\r\n }\r\n get clientWidth() {\r\n return this.canvas.clientWidth;\r\n }\r\n get clientHeight() {\r\n return this.canvas.clientHeight;\r\n }\r\n get pipelineCache() {\r\n return this._pipelineCache;\r\n }\r\n get backbufferFormat() {\r\n return this._backBufferFormat;\r\n }\r\n get backbufferDepthFormat() {\r\n return this._depthFormat;\r\n }\r\n get defaultDepthTexture() {\r\n return this._defaultDepthTexture;\r\n }\r\n get defaultDepthTextureView() {\r\n return this._defaultDepthTextureView;\r\n }\r\n get defaultMSAAColorTextureView() {\r\n return this._defaultMSAAColorTextureView;\r\n }\r\n get defaultRenderPassDesc() {\r\n return this._defaultRenderPassDesc;\r\n }\r\n get sampleCount() {\r\n return this._sampleCount;\r\n }\r\n get currentPass() {\r\n return this._commandQueue.currentPass;\r\n }\r\n get emptyBindGroup() {\r\n return this._emptyBindGroup;\r\n }\r\n getAdapterInfo() {\r\n return this._adapterInfo;\r\n }\r\n isContextLost() {\r\n return false;\r\n }\r\n getDeviceCaps(): Immutable<DeviceCaps> {\r\n return this._deviceCaps;\r\n }\r\n getDrawingBufferWidth() {\r\n return this.getFramebuffer()?.getWidth() || this.canvas.width;\r\n }\r\n getDrawingBufferHeight() {\r\n return this.getFramebuffer()?.getHeight() || this.canvas.height;\r\n }\r\n getBackBufferWidth() {\r\n return this.canvas.width;\r\n }\r\n getBackBufferHeight() {\r\n return this.canvas.height;\r\n }\r\n async initContext() {\r\n if (!navigator.gpu) {\r\n throw new Error('No browser support for WebGPU');\r\n }\r\n const adapter = await navigator.gpu.requestAdapter();\r\n if (!adapter) {\r\n throw new Error('WebGPU: requestAdapter() failed');\r\n }\r\n this._adapter = adapter;\r\n this._adapterInfo = this._adapter.info ?? {};\r\n this._device = await this._adapter.requestDevice({\r\n requiredFeatures: [...this._adapter.features] as GPUFeatureName[],\r\n requiredLimits: { ...this._adapter.limits } as any\r\n });\r\n console.info('WebGPU device features:');\r\n for (const feature of this._device.features) {\r\n console.info(` - ${feature}`);\r\n }\r\n this.device.lost.then((info) => {\r\n console.error(`WebGPU device was lost: ${info.message}`);\r\n this._canRender = false;\r\n });\r\n this._emptyBindGroup = this.device.createBindGroup({\r\n layout: this.device.createBindGroupLayout({ entries: [] }),\r\n entries: []\r\n });\r\n const context = (this.canvas.getContext('webgpu') as unknown as GPUCanvasContext) || null;\r\n if (!context) {\r\n this._canRender = false;\r\n throw new Error('WebGPU: getContext() failed');\r\n }\r\n this._context = context;\r\n this.canvas.width = this.canvas.clientWidth;\r\n this.canvas.height = this.canvas.clientHeight;\r\n this._deviceCaps = {\r\n textureCaps: new WebGPUTextureCaps(this),\r\n framebufferCaps: new WebGPUFramebufferCaps(this),\r\n miscCaps: new WebGPUMiscCaps(this),\r\n shaderCaps: new WebGPUShaderCaps(this)\r\n };\r\n this.configure();\r\n\r\n this._pipelineCache = new PipelineCache(this);\r\n this._bindGroupCache = new BindGroupCache(this);\r\n this._vertexLayoutCache = new VertexLayoutCache();\r\n this._commandQueue = new CommandQueueImmediate(this);\r\n this._canRender = true;\r\n this.setViewport(null);\r\n this.setScissor(null);\r\n\r\n await this.initResizer();\r\n }\r\n protected _handleResize(\r\n _cssWidth: number,\r\n _cssHeight: number,\r\n deviceWidth: number,\r\n deviceHeight: number\r\n ): void {\r\n const lastWidth = this.canvas.clientWidth;\r\n const lastHeight = this.canvas.clientHeight;\r\n this.canvas.width = deviceWidth;\r\n this.canvas.height = deviceHeight;\r\n if (\r\n (this.canvas.clientWidth !== lastWidth && this.canvas.clientWidth === this.canvas.width) ||\r\n (this.canvas.clientHeight !== lastHeight && this.canvas.clientHeight === this.canvas.height)\r\n ) {\r\n console.warn(\r\n '[Engine] Canvas intrinsic size affected layout. CSS size locked to prevent feedback loop.'\r\n );\r\n this.canvas.style.width = `${lastWidth}px`;\r\n this.canvas.style.height = `${lastHeight}px`;\r\n }\r\n this.createDefaultRenderAttachments();\r\n this.setViewport(null);\r\n this.setScissor(null);\r\n }\r\n nextFrame(callback: () => void) {\r\n this._commandQueue.finish().then(callback);\r\n return 0;\r\n }\r\n cancelNextFrame(_handle: number) {\r\n return;\r\n }\r\n clearFrameBuffer(\r\n clearColor: Nullable<Vector4>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ) {\r\n this._commandQueue.clear(clearColor, clearDepth, clearStencil);\r\n }\r\n // factory\r\n createGPUTimer() {\r\n // throw new Error('not implemented');\r\n return null;\r\n }\r\n createRenderStateSet() {\r\n return new WebGPURenderStateSet(this);\r\n }\r\n createBlendingState() {\r\n return new WebGPUBlendingState();\r\n }\r\n createColorState() {\r\n return new WebGPUColorState();\r\n }\r\n createRasterizerState() {\r\n return new WebGPURasterizerState();\r\n }\r\n createDepthState() {\r\n return new WebGPUDepthState();\r\n }\r\n createStencilState() {\r\n return new WebGPUStencilState();\r\n }\r\n createSampler(options: SamplerOptions) {\r\n return this.fetchSampler(options);\r\n }\r\n createTextureFromMipmapData<T extends BaseTexture>(\r\n data: TextureMipmapData,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ) {\r\n if (!data) {\r\n console.error(`Device.createTextureFromMipmapData() failed: invalid data`);\r\n return null;\r\n }\r\n if (data.isCubemap) {\r\n const tex = new WebGPUTextureCube(this);\r\n tex.createWithMipmapData(data, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else if (data.isVolume) {\r\n const tex = new WebGPUTexture3D(this);\r\n tex.createWithMipmapData(data, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else if (data.isArray) {\r\n const tex = new WebGPUTexture2DArray(this);\r\n tex.createWithMipmapData(data, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else {\r\n const tex = new WebGPUTexture2D(this);\r\n tex.createWithMipmapData(data, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n }\r\n }\r\n createTexture2D(format: TextureFormat, width: number, height: number, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGPUTexture2D) ?? new WebGPUTexture2D(this);\r\n if (!tex.isTexture2D()) {\r\n console.error('createTexture2D() failed: options.texture must be 2d texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DFromImage(element: TextureImageElement, sRGB: boolean, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGPUTexture2D) ?? new WebGPUTexture2D(this);\r\n if (!tex.isTexture2D()) {\r\n console.error('createTexture2DFromImage() failed: options.texture must be 2d texture');\r\n return null;\r\n }\r\n tex.loadFromElement(element, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DArray(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ) {\r\n const tex = (options?.texture as WebGPUTexture2DArray) ?? new WebGPUTexture2DArray(this);\r\n if (!tex.isTexture2DArray()) {\r\n console.error('createTexture2DArray() failed: options.texture must be 2d array texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, depth, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ) {\r\n if (!elements || elements.length === 0) {\r\n console.error('createTexture2DArrayFromImages() failed: Invalid image elements');\r\n return null;\r\n }\r\n let width = 0;\r\n let height = 0;\r\n for (const element of elements) {\r\n if (width === 0 || height === 0) {\r\n width = element.width;\r\n height = element.height;\r\n } else if (width !== element.width || height !== element.height) {\r\n console.error('createTexture2DArrayFromImages() failed: Image elements must have the same size');\r\n return null;\r\n }\r\n }\r\n if (options?.texture && !options.texture.isTexture2DArray()) {\r\n console.error('createTexture2DArrayFromImages() failed: options.texture must be 2d array texture');\r\n return null;\r\n }\r\n let tex: Nullable<WebGPUTexture2DArray> = options?.texture as WebGPUTexture2DArray;\r\n if (tex) {\r\n if (tex.depth !== elements.length) {\r\n console.error(\r\n 'createTexture2DArrayFromImages() failed: Layer count of options.texture not match the given image elements'\r\n );\r\n return null;\r\n }\r\n if (tex.width !== width || tex.height !== height) {\r\n console.error(\r\n 'createTexture2DArrayFromImages() failed: Size of options.texture not match the given image elements'\r\n );\r\n return null;\r\n }\r\n } else {\r\n tex = this.createTexture2DArray(\r\n sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm',\r\n width,\r\n height,\r\n elements.length,\r\n options\r\n );\r\n if (!tex) {\r\n return null;\r\n }\r\n for (let i = 0; i < elements.length; i++) {\r\n tex.updateFromElement(elements[i], 0, 0, i, 0, 0, width, height);\r\n }\r\n }\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture3D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ) {\r\n const tex = (options?.texture as WebGPUTexture3D) ?? new WebGPUTexture3D(this);\r\n if (!tex.isTexture3D()) {\r\n console.error('createTexture3D() failed: options.texture must be 3d texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, depth, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createCubeTexture(format: TextureFormat, size: number, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGPUTextureCube) ?? new WebGPUTextureCube(this);\r\n if (!tex.isTextureCube()) {\r\n console.error('createCubeTexture() failed: options.texture must be cube texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, size, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions) {\r\n const tex = new WebGPUTextureVideo(this, el);\r\n tex.samplerOptions = samplerOptions ?? null;\r\n return tex;\r\n }\r\n copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number) {\r\n if (!src?.isFramebuffer() || !dst?.isTexture2D()) {\r\n console.error('copyFramebufferToTexture2D(): invalid texture');\r\n return;\r\n }\r\n const srcTex = src.getColorAttachments()?.[index];\r\n if (!srcTex || !srcTex.isTexture2D()) {\r\n console.error('copyFramebufferToTexture2D(): Color attachment is not a 2D texture');\r\n return;\r\n }\r\n this.copyTexture2D(srcTex, src.getColorAttachmentMipLevel(index), dst, level);\r\n }\r\n copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number) {\r\n if (!src?.isTexture2D() || !dst?.isTexture2D()) {\r\n console.error('CopyTexture2D(): invalid texture');\r\n return;\r\n }\r\n if (!Number.isInteger(srcLevel) || srcLevel < 0 || srcLevel >= src.mipLevelCount) {\r\n console.error('CopyTexture2D(): invalid source mipmap level');\r\n return;\r\n }\r\n if (!Number.isInteger(dstLevel) || dstLevel < 0 || dstLevel >= dst.mipLevelCount) {\r\n console.error('CopyTexture2D(): invalid destination mipmap level');\r\n return;\r\n }\r\n const srcWidth = Math.max(src.width >> srcLevel, 1);\r\n const srcHeight = Math.max(src.height >> srcLevel, 1);\r\n const dstWidth = Math.max(dst.width >> dstLevel, 1);\r\n const dstHeight = Math.max(dst.height >> dstLevel, 1);\r\n if (srcWidth !== dstWidth || srcHeight !== dstHeight) {\r\n console.error('Source texture and destination texture must have same size');\r\n return;\r\n }\r\n if (src.format !== dst.format) {\r\n console.error('CopyTexture2D(): Source texture and destination texture must have same format');\r\n return;\r\n }\r\n const srcTex = src as WebGPUTexture2D;\r\n const dstTex = dst as WebGPUTexture2D;\r\n this._commandQueue.copyTexture(\r\n srcTex.object!,\r\n dstTex.object!,\r\n srcLevel,\r\n dstLevel,\r\n srcWidth,\r\n srcHeight,\r\n 1\r\n );\r\n }\r\n createGPUProgram(params: GPUProgramConstructParams) {\r\n return new WebGPUProgram(this, params);\r\n }\r\n createBindGroup(layout: Immutable<BindGroupLayout>) {\r\n return new WebGPUBindGroup(this, layout);\r\n }\r\n createBuffer(sizeInBytes: number, options: BufferCreationOptions) {\r\n return new WebGPUBuffer(this, this.parseBufferOptions(options), sizeInBytes);\r\n }\r\n copyBuffer(\r\n sourceBuffer: GPUDataBuffer<unknown>,\r\n destBuffer: GPUDataBuffer<unknown>,\r\n srcOffset: number,\r\n dstOffset: number,\r\n bytes: number\r\n ) {\r\n this._commandQueue.copyBuffer(\r\n sourceBuffer as WebGPUBuffer,\r\n destBuffer as WebGPUBuffer,\r\n srcOffset,\r\n dstOffset,\r\n bytes\r\n );\r\n }\r\n createIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n options?: BufferCreationOptions\r\n ) {\r\n return new WebGPUIndexBuffer(this, data, this.parseBufferOptions(options, 'index'));\r\n }\r\n createStructuredBuffer(structureType: PBStructTypeInfo, options: BufferCreationOptions, data?: TypedArray) {\r\n return new WebGPUStructuredBuffer(this, structureType, this.parseBufferOptions(options), data);\r\n }\r\n createVertexLayout(options: VertexLayoutOptions) {\r\n return new WebGPUVertexLayout(this, options);\r\n }\r\n createFrameBuffer(\r\n colorAttachments: BaseTexture[],\r\n depthAttachement: BaseTexture,\r\n options?: FrameBufferOptions\r\n ) {\r\n return new WebGPUFrameBuffer(this, colorAttachments, depthAttachement, options);\r\n }\r\n setBindGroup(index: number, bindGroup: BindGroup, dynamicOffsets?: Nullable<Iterable<number>>) {\r\n this._currentBindGroups[index] = bindGroup as WebGPUBindGroup;\r\n this._currentBindGroupOffsets[index] = dynamicOffsets ?? bindGroup?.getDynamicOffsets() ?? null;\r\n }\r\n getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>] {\r\n return [this._currentBindGroups[index], this._currentBindGroupOffsets[index]];\r\n }\r\n // render related\r\n setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n this._commandQueue.setViewport(vp);\r\n }\r\n getViewport(): Immutable<DeviceViewport> {\r\n return this._commandQueue.getViewport();\r\n }\r\n setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n this._commandQueue.setScissor(scissor);\r\n }\r\n getScissor(): Immutable<DeviceViewport> {\r\n return this._commandQueue.getScissor();\r\n }\r\n setProgram(program: Nullable<GPUProgram>) {\r\n this._currentProgram = program as WebGPUProgram;\r\n }\r\n getProgram() {\r\n return this._currentProgram;\r\n }\r\n setVertexLayout(vertexData: Nullable<VertexLayout>) {\r\n this._currentVertexData = vertexData as WebGPUVertexLayout;\r\n }\r\n getVertexLayout() {\r\n return this._currentVertexData;\r\n }\r\n setRenderStates(stateSet: Nullable<RenderStateSet>) {\r\n this._currentStateSet = stateSet as WebGPURenderStateSet;\r\n }\r\n getRenderStates() {\r\n return this._currentStateSet;\r\n }\r\n getFramebuffer() {\r\n return this._commandQueue.getFramebuffer();\r\n }\r\n reverseVertexWindingOrder(reverse: boolean): void {\r\n this._reverseWindingOrder = !!reverse;\r\n }\r\n isWindingOrderReversed(): boolean {\r\n return this._reverseWindingOrder;\r\n }\r\n /** @internal */\r\n isBufferUploading(buffer: WebGPUBuffer) {\r\n return this._commandQueue.isBufferUploading(buffer);\r\n }\r\n /** @internal */\r\n isTextureUploading(tex: WebGPUBaseTexture) {\r\n return this._commandQueue.isTextureUploading(tex);\r\n }\r\n /** @internal */\r\n getFramebufferInfo() {\r\n return this._commandQueue.getFramebufferInfo();\r\n }\r\n /** @internal */\r\n gpuGetObjectHash(obj: GPUObjectBase) {\r\n return this._gpuObjectHasher.get(obj) ?? null;\r\n }\r\n /** @internal */\r\n gpuCreateTexture(desc: GPUTextureDescriptor) {\r\n const tex = this._device!.createTexture(desc);\r\n if (tex) {\r\n this._gpuObjectHasher.set(tex, ++this._gpuObjectHashCounter);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n gpuImportExternalTexture(el: HTMLVideoElement) {\r\n const tex = this._device!.importExternalTexture({ source: el });\r\n if (tex) {\r\n this._gpuObjectHasher.set(tex, ++this._gpuObjectHashCounter);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n gpuCreateSampler(desc: GPUSamplerDescriptor) {\r\n const sampler = this._device!.createSampler(desc);\r\n if (sampler) {\r\n this._gpuObjectHasher.set(sampler, ++this._gpuObjectHashCounter);\r\n }\r\n return sampler;\r\n }\r\n /** @internal */\r\n gpuCreateBindGroup(desc: GPUBindGroupDescriptor) {\r\n const bindGroup = this._device!.createBindGroup(desc);\r\n if (bindGroup) {\r\n this._gpuObjectHasher.set(bindGroup, ++this._gpuObjectHashCounter);\r\n }\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n gpuCreateBuffer(desc: GPUBufferDescriptor) {\r\n const buffer = this._device!.createBuffer(desc);\r\n if (buffer) {\r\n this._gpuObjectHasher.set(buffer, ++this._gpuObjectHashCounter);\r\n }\r\n return buffer;\r\n }\r\n /** @internal */\r\n gpuCreateTextureView(texture: GPUTexture, desc?: GPUTextureViewDescriptor) {\r\n const view = texture?.createView(desc);\r\n if (view) {\r\n this._gpuObjectHasher.set(view, ++this._gpuObjectHashCounter);\r\n }\r\n return view;\r\n }\r\n /** @internal */\r\n gpuCreateRenderPipeline(desc: GPURenderPipelineDescriptor) {\r\n const pipeline = this._device!.createRenderPipeline(desc);\r\n if (pipeline) {\r\n this._gpuObjectHasher.set(pipeline, ++this._gpuObjectHashCounter);\r\n }\r\n return pipeline;\r\n }\r\n /** @internal */\r\n gpuCreateComputePipeline(desc: GPUComputePipelineDescriptor) {\r\n const pipeline = this._device!.createComputePipeline(desc);\r\n if (pipeline) {\r\n this._gpuObjectHasher.set(pipeline, ++this._gpuObjectHashCounter);\r\n }\r\n return pipeline;\r\n }\r\n /** @internal */\r\n fetchVertexLayout(hash: string) {\r\n return this._vertexLayoutCache.fetchVertexLayout(hash);\r\n }\r\n /** @internal */\r\n fetchSampler(options: SamplerOptions) {\r\n return this._samplerCache.fetchSampler(options);\r\n }\r\n /** @internal */\r\n fetchBindGroupLayout(desc: Immutable<BindGroupLayout>) {\r\n return this._bindGroupCache.fetchBindGroupLayout(desc);\r\n }\r\n flush(): void {\r\n this._commandQueue.flush();\r\n }\r\n async readPixels(index: number, x: number, y: number, w: number, h: number, buffer: TypedArray) {\r\n const fb = this.getFramebuffer();\r\n const colorAttachment = fb\r\n ? (fb.getColorAttachments()[index]?.object as GPUTexture)\r\n : this.context!.getCurrentTexture();\r\n const texFormat = fb\r\n ? fb.getColorAttachments()[index]?.format\r\n : textureFormatInvMap[this._backBufferFormat];\r\n if (colorAttachment && texFormat) {\r\n const pixelSize = getTextureFormatBlockSize(texFormat);\r\n const bufferSize = w * h * pixelSize;\r\n const stagingBuffer = this.createBuffer(bufferSize, {\r\n usage: 'read'\r\n });\r\n this.readPixelsToBuffer(0, x, y, w, h, stagingBuffer);\r\n const data = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\r\n await stagingBuffer.getBufferSubData(data);\r\n stagingBuffer.dispose();\r\n } else {\r\n console.error('readPixels() failed: no color attachment0 or unrecoganized color attachment format');\r\n }\r\n }\r\n readPixelsToBuffer(index: number, x: number, y: number, w: number, h: number, buffer: GPUDataBuffer) {\r\n const fb = this.getFramebuffer();\r\n const colorAttachment = fb\r\n ? (fb.getColorAttachments()[index]?.object as GPUTexture)\r\n : this.context!.getCurrentTexture();\r\n const texFormat = fb\r\n ? fb.getColorAttachments()[index]?.format\r\n : textureFormatInvMap[this._backBufferFormat];\r\n if (colorAttachment && texFormat) {\r\n this.flush();\r\n WebGPUBaseTexture.copyTexturePixelsToBuffer(\r\n this._device!,\r\n colorAttachment,\r\n texFormat,\r\n x,\r\n y,\r\n w,\r\n h,\r\n 0,\r\n 0,\r\n buffer\r\n );\r\n } else {\r\n console.error(\r\n 'readPixelsToBuffer() failed: no color attachment0 or unrecoganized color attachment format'\r\n );\r\n }\r\n }\r\n looseContext() {\r\n // not implemented\r\n }\r\n restoreContext() {\r\n // not implemented\r\n }\r\n beginCapture() {\r\n if (this._captureRenderBundle) {\r\n throw new Error('Device.beginCapture() failed: device is already capturing draw commands');\r\n }\r\n const frameBuffer = this.getFramebufferInfo();\r\n const desc: GPURenderBundleEncoderDescriptor = {\r\n colorFormats: frameBuffer.colorFormats,\r\n depthStencilFormat: frameBuffer.depthFormat,\r\n sampleCount: frameBuffer.sampleCount\r\n };\r\n this._captureRenderBundle = {\r\n dc: 0,\r\n encoder: this._device!.createRenderBundleEncoder(desc),\r\n renderBundle: null\r\n };\r\n }\r\n endCapture() {\r\n if (!this._captureRenderBundle) {\r\n throw new Error('Device.endCapture() failed: device is not capturing draw commands');\r\n }\r\n this._captureRenderBundle.renderBundle = this._captureRenderBundle.encoder.finish();\r\n const ret = this._captureRenderBundle;\r\n this._captureRenderBundle = null;\r\n return ret;\r\n }\r\n protected _executeRenderBundle(renderBundle: RenderBundle) {\r\n this._commandQueue.executeRenderBundle(\r\n (renderBundle as WebGPURenderBundle).renderBundle as GPURenderBundle\r\n );\r\n return (renderBundle as WebGPURenderBundle).dc;\r\n }\r\n bufferUpload(buffer: WebGPUBuffer, offset: number, size: number) {\r\n this._commandQueue.bufferUpload(buffer, offset, size);\r\n }\r\n textureUpload(tex: WebGPUBaseTexture) {\r\n this._commandQueue.textureUpload(tex);\r\n }\r\n flushUploads() {\r\n this._commandQueue.flushUploads();\r\n }\r\n /** @internal */\r\n protected _setFramebuffer(rt: FrameBuffer) {\r\n this._commandQueue.setFramebuffer(rt as WebGPUFrameBuffer);\r\n }\r\n /** @internal */\r\n protected onBeginFrame() {\r\n if (this._canRender) {\r\n this._commandQueue.beginFrame();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n /** @internal */\r\n protected onEndFrame() {\r\n this._commandQueue.endFrame();\r\n }\r\n /** @internal */\r\n protected _draw(primitiveType: PrimitiveType, first: number, count: number) {\r\n this._commandQueue.draw(\r\n this._currentProgram!,\r\n this._currentVertexData!,\r\n this._currentStateSet!,\r\n this._currentBindGroups,\r\n this._currentBindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n 1\r\n );\r\n if (this._captureRenderBundle) {\r\n this._captureRenderBundle.dc++;\r\n this._commandQueue.capture(\r\n this._captureRenderBundle.encoder,\r\n this._currentProgram!,\r\n this._currentVertexData!,\r\n this._currentStateSet!,\r\n this._currentBindGroups,\r\n this._currentBindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n 1\r\n );\r\n }\r\n }\r\n /** @internal */\r\n protected _drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number) {\r\n this._commandQueue.draw(\r\n this._currentProgram!,\r\n this._currentVertexData!,\r\n this._currentStateSet!,\r\n this._currentBindGroups,\r\n this._currentBindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n if (this._captureRenderBundle) {\r\n this._captureRenderBundle.dc++;\r\n this._commandQueue.capture(\r\n this._captureRenderBundle.encoder,\r\n this._currentProgram!,\r\n this._currentVertexData!,\r\n this._currentStateSet!,\r\n this._currentBindGroups,\r\n this._currentBindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n }\r\n }\r\n /** @internal */\r\n protected _compute(workgroupCountX: number, workgroupCountY: number, workgroupCountZ: number) {\r\n this._commandQueue.compute(\r\n this._currentProgram!,\r\n this._currentBindGroups,\r\n this._currentBindGroupOffsets,\r\n workgroupCountX,\r\n workgroupCountY,\r\n workgroupCountZ\r\n );\r\n }\r\n private configure() {\r\n this._backBufferFormat = navigator.gpu.getPreferredCanvasFormat();\r\n this._depthFormat = this._deviceCaps.framebufferCaps.supportDepth32floatStencil8\r\n ? 'depth32float-stencil8'\r\n : 'depth24plus-stencil8';\r\n this._context!.configure({\r\n device: this._device!,\r\n format: this._backBufferFormat,\r\n usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,\r\n alphaMode: 'opaque',\r\n colorSpace: 'srgb'\r\n });\r\n this.createDefaultRenderAttachments();\r\n }\r\n private createDefaultRenderAttachments() {\r\n const width = Math.max(1, this.canvas.width);\r\n const height = Math.max(1, this.canvas.height);\r\n this._defaultMSAAColorTexture?.destroy();\r\n this._defaultMSAAColorTexture = null;\r\n this._defaultMSAAColorTextureView = null;\r\n this._defaultDepthTexture?.destroy();\r\n if (this._sampleCount > 1) {\r\n this._defaultMSAAColorTexture = this.gpuCreateTexture({\r\n size: {\r\n width,\r\n height,\r\n depthOrArrayLayers: 1\r\n },\r\n format: this._backBufferFormat,\r\n dimension: '2d',\r\n mipLevelCount: 1,\r\n sampleCount: this._sampleCount,\r\n usage: GPUTextureUsage.RENDER_ATTACHMENT\r\n });\r\n this._defaultMSAAColorTextureView = this._defaultMSAAColorTexture.createView();\r\n }\r\n this._defaultDepthTexture = this.gpuCreateTexture({\r\n size: {\r\n width,\r\n height,\r\n depthOrArrayLayers: 1\r\n },\r\n format: this._depthFormat,\r\n dimension: '2d',\r\n mipLevelCount: 1,\r\n sampleCount: this._sampleCount,\r\n usage: GPUTextureUsage.RENDER_ATTACHMENT\r\n });\r\n this._defaultDepthTextureView = this._defaultDepthTexture.createView();\r\n this._defaultRenderPassDesc = {\r\n label: `mainRenderPass:${this._sampleCount}`,\r\n colorAttachments: [\r\n {\r\n view: this._sampleCount > 1 ? this._defaultMSAAColorTextureView : null,\r\n resolveTarget: undefined,\r\n loadOp: 'clear',\r\n clearValue: [0, 0, 0, 0],\r\n storeOp: 'store'\r\n } as GPURenderPassColorAttachment\r\n ],\r\n depthStencilAttachment: {\r\n view: this._defaultDepthTextureView,\r\n depthLoadOp: 'clear',\r\n depthClearValue: 1,\r\n depthStoreOp: 'store',\r\n stencilLoadOp: 'clear',\r\n stencilClearValue: 0,\r\n stencilStoreOp: 'store'\r\n }\r\n };\r\n }\r\n}\r\n"],"names":["WebGPUDevice","BaseDevice","_context","_device","_adapter","_deviceCaps","_reverseWindingOrder","_canRender","_backBufferFormat","_depthFormat","_defaultMSAAColorTexture","_defaultMSAAColorTextureView","_defaultDepthTexture","_defaultDepthTextureView","_pipelineCache","_bindGroupCache","_vertexLayoutCache","_samplerCache","_currentProgram","_currentVertexData","_currentStateSet","_currentBindGroups","_currentBindGroupOffsets","_commandQueue","_gpuObjectHashCounter","_gpuObjectHasher","_defaultRenderPassDesc","_sampleCount","_emptyBindGroup","_captureRenderBundle","_adapterInfo","backend","cvs","options","dpr","msaa","WeakMap","SamplerCache","context","getFrameBufferSampleCount","getFramebuffer","getSampleCount","device","adapter","commandQueue","drawingBufferWidth","getDrawingBufferWidth","drawingBufferHeight","getDrawingBufferHeight","clientWidth","canvas","clientHeight","pipelineCache","backbufferFormat","backbufferDepthFormat","defaultDepthTexture","defaultDepthTextureView","defaultMSAAColorTextureView","defaultRenderPassDesc","sampleCount","currentPass","emptyBindGroup","getAdapterInfo","isContextLost","getDeviceCaps","getWidth","width","getHeight","height","getBackBufferWidth","getBackBufferHeight","initContext","navigator","gpu","Error","requestAdapter","info","requestDevice","requiredFeatures","features","requiredLimits","limits","console","feature","lost","then","error","message","createBindGroup","layout","createBindGroupLayout","entries","getContext","textureCaps","WebGPUTextureCaps","framebufferCaps","WebGPUFramebufferCaps","miscCaps","WebGPUMiscCaps","shaderCaps","WebGPUShaderCaps","configure","PipelineCache","BindGroupCache","VertexLayoutCache","CommandQueueImmediate","setViewport","setScissor","initResizer","_handleResize","_cssWidth","_cssHeight","deviceWidth","deviceHeight","lastWidth","lastHeight","warn","style","createDefaultRenderAttachments","nextFrame","callback","finish","cancelNextFrame","_handle","clearFrameBuffer","clearColor","clearDepth","clearStencil","clear","createGPUTimer","createRenderStateSet","WebGPURenderStateSet","createBlendingState","WebGPUBlendingState","createColorState","WebGPUColorState","createRasterizerState","WebGPURasterizerState","createDepthState","WebGPUDepthState","createStencilState","WebGPUStencilState","createSampler","fetchSampler","createTextureFromMipmapData","data","sRGB","isCubemap","tex","WebGPUTextureCube","createWithMipmapData","parseTextureOptions","samplerOptions","isVolume","WebGPUTexture3D","isArray","WebGPUTexture2DArray","WebGPUTexture2D","createTexture2D","format","texture","isTexture2D","createEmpty","createTexture2DFromImage","element","loadFromElement","createTexture2DArray","depth","isTexture2DArray","createTexture2DArrayFromImages","elements","length","i","updateFromElement","createTexture3D","isTexture3D","createCubeTexture","size","isTextureCube","createTextureVideo","el","WebGPUTextureVideo","copyFramebufferToTexture2D","src","index","dst","level","isFramebuffer","srcTex","getColorAttachments","copyTexture2D","getColorAttachmentMipLevel","srcLevel","dstLevel","Number","isInteger","mipLevelCount","srcWidth","Math","max","srcHeight","dstWidth","dstHeight","dstTex","copyTexture","object","createGPUProgram","params","WebGPUProgram","WebGPUBindGroup","createBuffer","sizeInBytes","WebGPUBuffer","parseBufferOptions","copyBuffer","sourceBuffer","destBuffer","srcOffset","dstOffset","bytes","createIndexBuffer","WebGPUIndexBuffer","createStructuredBuffer","structureType","WebGPUStructuredBuffer","createVertexLayout","WebGPUVertexLayout","createFrameBuffer","colorAttachments","depthAttachement","WebGPUFrameBuffer","setBindGroup","bindGroup","dynamicOffsets","getDynamicOffsets","getBindGroup","vp","getViewport","scissor","getScissor","setProgram","program","getProgram","setVertexLayout","vertexData","getVertexLayout","setRenderStates","stateSet","getRenderStates","reverseVertexWindingOrder","reverse","isWindingOrderReversed","isBufferUploading","buffer","isTextureUploading","getFramebufferInfo","gpuGetObjectHash","obj","get","gpuCreateTexture","desc","createTexture","set","gpuImportExternalTexture","importExternalTexture","source","gpuCreateSampler","sampler","gpuCreateBindGroup","gpuCreateBuffer","gpuCreateTextureView","view","createView","gpuCreateRenderPipeline","pipeline","createRenderPipeline","gpuCreateComputePipeline","createComputePipeline","fetchVertexLayout","hash","fetchBindGroupLayout","flush","readPixels","x","y","w","h","fb","colorAttachment","getCurrentTexture","texFormat","textureFormatInvMap","pixelSize","getTextureFormatBlockSize","bufferSize","stagingBuffer","usage","readPixelsToBuffer","Uint8Array","byteOffset","byteLength","getBufferSubData","dispose","WebGPUBaseTexture","copyTexturePixelsToBuffer","looseContext","restoreContext","beginCapture","frameBuffer","colorFormats","depthStencilFormat","depthFormat","dc","encoder","createRenderBundleEncoder","renderBundle","endCapture","ret","_executeRenderBundle","executeRenderBundle","bufferUpload","offset","textureUpload","flushUploads","_setFramebuffer","rt","setFramebuffer","beginFrame","endFrame","primitiveType","first","count","draw","capture","_drawInstanced","numInstances","workgroupCountX","workgroupCountY","workgroupCountZ","compute","getPreferredCanvasFormat","supportDepth32floatStencil8","GPUTextureUsage","RENDER_ATTACHMENT","COPY_SRC","alphaMode","colorSpace","destroy","depthOrArrayLayers","dimension","label","resolveTarget","undefined","loadOp","clearValue","storeOp","depthStencilAttachment","depthLoadOp","depthClearValue","depthStoreOp","stencilLoadOp","stencilClearValue","stencilStoreOp"],"mappings":"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"}
1
+ {"version":3,"file":"device.js","sources":["../src/device.ts"],"sourcesContent":["import type { Vector4, TypedArray, Immutable, Nullable } from '@zephyr3d/base';\r\nimport type {\r\n FrameBufferOptions,\r\n SamplerOptions,\r\n Texture2D,\r\n VertexLayout,\r\n GPUDataBuffer,\r\n FrameBuffer,\r\n GPUProgram,\r\n BindGroupLayout,\r\n BindGroup,\r\n TextureMipmapData,\r\n TextureImageElement,\r\n TextureCreationOptions,\r\n BufferCreationOptions,\r\n VertexLayoutOptions,\r\n GPUProgramConstructParams,\r\n DeviceCaps,\r\n DeviceOptions,\r\n RenderStateSet,\r\n PBStructTypeInfo,\r\n PrimitiveType,\r\n TextureFormat,\r\n DeviceBackend,\r\n DeviceViewport,\r\n BaseTexture,\r\n RenderBundle\r\n} from '@zephyr3d/device';\r\nimport { getTextureFormatBlockSize, BaseDevice } from '@zephyr3d/device';\r\nimport { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport { WebGPUTexture2D } from './texture2d_webgpu';\r\nimport { WebGPUTexture2DArray } from './texture2darray_webgpu';\r\nimport { WebGPUTexture3D } from './texture3d_webgpu';\r\nimport { WebGPUTextureCube } from './texturecube_webgpu';\r\nimport { WebGPUTextureVideo } from './texturevideo_webgpu';\r\nimport {\r\n WebGPUTextureCaps,\r\n WebGPUFramebufferCaps,\r\n WebGPUMiscCaps,\r\n WebGPUShaderCaps\r\n} from './capabilities_webgpu';\r\nimport { WebGPUVertexLayout } from './vertexlayout_webgpu';\r\nimport { PipelineCache } from './pipeline_cache';\r\nimport {\r\n WebGPUBlendingState,\r\n WebGPUColorState,\r\n WebGPUDepthState,\r\n WebGPURasterizerState,\r\n WebGPURenderStateSet,\r\n WebGPUStencilState\r\n} from './renderstates_webgpu';\r\nimport { WebGPUBuffer } from './buffer_webgpu';\r\nimport { WebGPUFrameBuffer } from './framebuffer_webgpu';\r\nimport { WebGPUIndexBuffer } from './indexbuffer_webgpu';\r\nimport { BindGroupCache } from './bindgroup_cache';\r\nimport { VertexLayoutCache } from './vertexlayout_cache';\r\nimport { SamplerCache } from './sampler_cache';\r\nimport { CommandQueueImmediate } from './commandqueue';\r\nimport { WebGPUStructuredBuffer } from './structuredbuffer_webgpu';\r\nimport { textureFormatInvMap } from './constants_webgpu';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport { WebGPUTimestampQueryManager } from './timestamp_query';\r\nimport type {\r\n TimestampQueryFilter,\r\n TimestampQueryHandle,\r\n TimestampQueryOptions,\r\n TimestampQueryResult\r\n} from './timestamp_query';\r\n\r\ntype WebGPURenderBundle = {\r\n dc: number;\r\n encoder: GPURenderBundleEncoder;\r\n renderBundle: Nullable<GPURenderBundle>;\r\n};\r\n\r\nexport class WebGPUDevice extends BaseDevice {\r\n private _context!: GPUCanvasContext;\r\n private _device!: GPUDevice;\r\n private _adapter!: GPUAdapter;\r\n private _deviceCaps!: DeviceCaps;\r\n private _reverseWindingOrder: boolean;\r\n private _canRender!: boolean;\r\n private _backBufferFormat!: GPUTextureFormat;\r\n private _depthFormat!: GPUTextureFormat;\r\n private _defaultMSAAColorTexture: Nullable<GPUTexture>;\r\n private _defaultMSAAColorTextureView: Nullable<GPUTextureView>;\r\n private _defaultDepthTexture!: GPUTexture;\r\n private _defaultDepthTextureView!: GPUTextureView;\r\n private _pipelineCache!: PipelineCache;\r\n private _bindGroupCache!: BindGroupCache;\r\n private _vertexLayoutCache!: VertexLayoutCache;\r\n private readonly _samplerCache: SamplerCache;\r\n private _currentProgram: Nullable<WebGPUProgram>;\r\n private _currentVertexData: Nullable<WebGPUVertexLayout>;\r\n private _currentStateSet: Nullable<WebGPURenderStateSet>;\r\n private _currentBindGroups: WebGPUBindGroup[];\r\n private _currentBindGroupOffsets: Nullable<Iterable<number>>[];\r\n private _commandQueue!: CommandQueueImmediate;\r\n private _gpuObjectHashCounter: number;\r\n private readonly _gpuObjectHasher: WeakMap<GPUObjectBase, number>;\r\n private _defaultRenderPassDesc!: GPURenderPassDescriptor;\r\n private readonly _sampleCount: number;\r\n private _emptyBindGroup!: GPUBindGroup;\r\n private _captureRenderBundle: Nullable<WebGPURenderBundle>;\r\n private _adapterInfo: any;\r\n private _timestampQueries!: WebGPUTimestampQueryManager;\r\n constructor(backend: DeviceBackend, cvs: HTMLCanvasElement, options?: DeviceOptions) {\r\n super(cvs, backend, options?.dpr);\r\n this._reverseWindingOrder = false;\r\n this._defaultMSAAColorTexture = null;\r\n this._defaultMSAAColorTextureView = null;\r\n this._currentProgram = null;\r\n this._currentVertexData = null;\r\n this._currentStateSet = null;\r\n this._currentBindGroups = [];\r\n this._currentBindGroupOffsets = [];\r\n this._sampleCount = options?.msaa ? 4 : 1;\r\n this._gpuObjectHasher = new WeakMap();\r\n this._gpuObjectHashCounter = 1;\r\n this._captureRenderBundle = null;\r\n this._samplerCache = new SamplerCache(this);\r\n this._adapterInfo = {};\r\n }\r\n get context() {\r\n return this._context;\r\n }\r\n getFrameBufferSampleCount() {\r\n return this.getFramebuffer()?.getSampleCount() ?? this._sampleCount;\r\n }\r\n get device() {\r\n return this._device;\r\n }\r\n get adapter() {\r\n return this._adapter;\r\n }\r\n get commandQueue() {\r\n return this._commandQueue;\r\n }\r\n get drawingBufferWidth() {\r\n return this.getDrawingBufferWidth();\r\n }\r\n get drawingBufferHeight() {\r\n return this.getDrawingBufferHeight();\r\n }\r\n get clientWidth() {\r\n return this.canvas.clientWidth;\r\n }\r\n get clientHeight() {\r\n return this.canvas.clientHeight;\r\n }\r\n get pipelineCache() {\r\n return this._pipelineCache;\r\n }\r\n get backbufferFormat() {\r\n return this._backBufferFormat;\r\n }\r\n get backbufferDepthFormat() {\r\n return this._depthFormat;\r\n }\r\n get defaultDepthTexture() {\r\n return this._defaultDepthTexture;\r\n }\r\n get defaultDepthTextureView() {\r\n return this._defaultDepthTextureView;\r\n }\r\n get defaultMSAAColorTextureView() {\r\n return this._defaultMSAAColorTextureView;\r\n }\r\n get defaultRenderPassDesc() {\r\n return this._defaultRenderPassDesc;\r\n }\r\n get sampleCount() {\r\n return this._sampleCount;\r\n }\r\n get currentPass() {\r\n return this._commandQueue.currentPass;\r\n }\r\n get emptyBindGroup() {\r\n return this._emptyBindGroup;\r\n }\r\n getAdapterInfo() {\r\n return this._adapterInfo;\r\n }\r\n isContextLost() {\r\n return false;\r\n }\r\n getDeviceCaps(): Immutable<DeviceCaps> {\r\n return this._deviceCaps;\r\n }\r\n getDrawingBufferWidth() {\r\n return this.getFramebuffer()?.getWidth() || this.canvas.width;\r\n }\r\n getDrawingBufferHeight() {\r\n return this.getFramebuffer()?.getHeight() || this.canvas.height;\r\n }\r\n getBackBufferWidth() {\r\n return this.canvas.width;\r\n }\r\n getBackBufferHeight() {\r\n return this.canvas.height;\r\n }\r\n async initContext() {\r\n if (!navigator.gpu) {\r\n throw new Error('No browser support for WebGPU');\r\n }\r\n const adapter = await navigator.gpu.requestAdapter();\r\n if (!adapter) {\r\n throw new Error('WebGPU: requestAdapter() failed');\r\n }\r\n this._adapter = adapter;\r\n this._adapterInfo = this._adapter.info ?? {};\r\n this._device = await this._adapter.requestDevice({\r\n requiredFeatures: [...this._adapter.features] as GPUFeatureName[],\r\n requiredLimits: {\r\n maxBufferSize: this._adapter.limits.maxBufferSize,\r\n maxBindingsPerBindGroup: this._adapter.limits.maxBindingsPerBindGroup,\r\n maxTextureDimension2D: this._adapter.limits.maxTextureDimension2D,\r\n maxComputeWorkgroupSizeX: this._adapter.limits.maxComputeWorkgroupSizeX,\r\n maxComputeWorkgroupSizeY: this._adapter.limits.maxComputeWorkgroupSizeY,\r\n maxComputeWorkgroupSizeZ: this._adapter.limits.maxComputeWorkgroupSizeZ,\r\n maxSampledTexturesPerShaderStage: this._adapter.limits.maxSampledTexturesPerShaderStage,\r\n maxSamplersPerShaderStage: this._adapter.limits.maxSamplersPerShaderStage,\r\n maxStorageBuffersPerShaderStage: this._adapter.limits.maxStorageBuffersPerShaderStage,\r\n maxStorageTexturesPerShaderStage: this._adapter.limits.maxStorageTexturesPerShaderStage,\r\n maxUniformBuffersPerShaderStage: this._adapter.limits.maxUniformBuffersPerShaderStage,\r\n maxUniformBufferBindingSize: this._adapter.limits.maxUniformBufferBindingSize,\r\n maxStorageBufferBindingSize: this._adapter.limits.maxStorageBufferBindingSize,\r\n maxInterStageShaderVariables: this._adapter.limits.maxInterStageShaderVariables,\r\n maxColorAttachments: this._adapter.limits.maxColorAttachments,\r\n maxColorAttachmentBytesPerSample: this._adapter.limits.maxColorAttachmentBytesPerSample,\r\n maxComputeWorkgroupStorageSize: this._adapter.limits.maxComputeWorkgroupStorageSize,\r\n maxComputeInvocationsPerWorkgroup: this._adapter.limits.maxComputeInvocationsPerWorkgroup,\r\n maxComputeWorkgroupsPerDimension: this._adapter.limits.maxComputeWorkgroupsPerDimension\r\n }\r\n });\r\n console.info('WebGPU device features:');\r\n for (const feature of this._device.features) {\r\n console.info(` - ${feature}`);\r\n }\r\n this.device.lost.then((info) => {\r\n console.error(`WebGPU device was lost: ${info.message}`);\r\n this._canRender = false;\r\n });\r\n this._emptyBindGroup = this.device.createBindGroup({\r\n layout: this.device.createBindGroupLayout({ entries: [] }),\r\n entries: []\r\n });\r\n const context = (this.canvas.getContext('webgpu') as unknown as GPUCanvasContext) || null;\r\n if (!context) {\r\n this._canRender = false;\r\n throw new Error('WebGPU: getContext() failed');\r\n }\r\n this._context = context;\r\n this.canvas.width = this.canvas.clientWidth;\r\n this.canvas.height = this.canvas.clientHeight;\r\n this._deviceCaps = {\r\n textureCaps: new WebGPUTextureCaps(this),\r\n framebufferCaps: new WebGPUFramebufferCaps(this),\r\n miscCaps: new WebGPUMiscCaps(this),\r\n shaderCaps: new WebGPUShaderCaps(this)\r\n };\r\n this.configure();\r\n\r\n this._pipelineCache = new PipelineCache(this);\r\n this._bindGroupCache = new BindGroupCache(this);\r\n this._vertexLayoutCache = new VertexLayoutCache();\r\n this._commandQueue = new CommandQueueImmediate(this);\r\n this._timestampQueries = new WebGPUTimestampQueryManager(this);\r\n this._canRender = true;\r\n this.setViewport(null);\r\n this.setScissor(null);\r\n\r\n await this.initResizer();\r\n }\r\n protected _handleResize(\r\n _cssWidth: number,\r\n _cssHeight: number,\r\n deviceWidth: number,\r\n deviceHeight: number\r\n ): void {\r\n const lastWidth = this.canvas.clientWidth;\r\n const lastHeight = this.canvas.clientHeight;\r\n this.canvas.width = deviceWidth;\r\n this.canvas.height = deviceHeight;\r\n if (\r\n (this.canvas.clientWidth !== lastWidth && this.canvas.clientWidth === this.canvas.width) ||\r\n (this.canvas.clientHeight !== lastHeight && this.canvas.clientHeight === this.canvas.height)\r\n ) {\r\n console.warn(\r\n '[Engine] Canvas intrinsic size affected layout. CSS size locked to prevent feedback loop.'\r\n );\r\n this.canvas.style.width = `${lastWidth}px`;\r\n this.canvas.style.height = `${lastHeight}px`;\r\n }\r\n this.createDefaultRenderAttachments();\r\n this.setViewport(null);\r\n this.setScissor(null);\r\n }\r\n nextFrame(callback: () => void) {\r\n this._commandQueue.finish().then(callback);\r\n return 0;\r\n }\r\n cancelNextFrame(_handle: number) {\r\n return;\r\n }\r\n clearFrameBuffer(\r\n clearColor: Nullable<Vector4>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ) {\r\n this._commandQueue.clear(clearColor, clearDepth, clearStencil);\r\n }\r\n // factory\r\n createGPUTimer() {\r\n // throw new Error('not implemented');\r\n return null;\r\n }\r\n beginTimestampQuery(label?: string, options?: TimestampQueryOptions): number {\r\n return this._timestampQueries.begin(label, options);\r\n }\r\n endTimestampQuery(id: number): void {\r\n this._timestampQueries.end(id);\r\n }\r\n pollTimestampQuery(query: TimestampQueryHandle): Nullable<TimestampQueryResult> {\r\n return this._timestampQueries.poll(query);\r\n }\r\n resolveTimestampQuery(query: TimestampQueryHandle): Promise<TimestampQueryResult> {\r\n return this._timestampQueries.resolve(query);\r\n }\r\n collectTimestampQueries(filter?: TimestampQueryFilter): TimestampQueryResult[] {\r\n return this._timestampQueries.collect(filter);\r\n }\r\n createRenderStateSet() {\r\n return new WebGPURenderStateSet(this);\r\n }\r\n createBlendingState() {\r\n return new WebGPUBlendingState();\r\n }\r\n createColorState() {\r\n return new WebGPUColorState();\r\n }\r\n createRasterizerState() {\r\n return new WebGPURasterizerState();\r\n }\r\n createDepthState() {\r\n return new WebGPUDepthState();\r\n }\r\n createStencilState() {\r\n return new WebGPUStencilState();\r\n }\r\n createSampler(options: SamplerOptions) {\r\n return this.fetchSampler(options);\r\n }\r\n createTextureFromMipmapData<T extends BaseTexture>(\r\n data: TextureMipmapData,\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ) {\r\n if (!data) {\r\n console.error(`Device.createTextureFromMipmapData() failed: invalid data`);\r\n return null;\r\n }\r\n if (data.isCubemap) {\r\n const tex = new WebGPUTextureCube(this);\r\n tex.createWithMipmapData(data, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else if (data.isVolume) {\r\n const tex = new WebGPUTexture3D(this);\r\n tex.createWithMipmapData(data, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else if (data.isArray) {\r\n const tex = new WebGPUTexture2DArray(this);\r\n tex.createWithMipmapData(data, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n } else {\r\n const tex = new WebGPUTexture2D(this);\r\n tex.createWithMipmapData(data, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex as unknown as T;\r\n }\r\n }\r\n createTexture2D(format: TextureFormat, width: number, height: number, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGPUTexture2D) ?? new WebGPUTexture2D(this);\r\n if (!tex.isTexture2D()) {\r\n console.error('createTexture2D() failed: options.texture must be 2d texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DFromImage(element: TextureImageElement, sRGB: boolean, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGPUTexture2D) ?? new WebGPUTexture2D(this);\r\n if (!tex.isTexture2D()) {\r\n console.error('createTexture2DFromImage() failed: options.texture must be 2d texture');\r\n return null;\r\n }\r\n tex.loadFromElement(element, sRGB, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DArray(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ) {\r\n const tex = (options?.texture as WebGPUTexture2DArray) ?? new WebGPUTexture2DArray(this);\r\n if (!tex.isTexture2DArray()) {\r\n console.error('createTexture2DArray() failed: options.texture must be 2d array texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, depth, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture2DArrayFromImages(\r\n elements: TextureImageElement[],\r\n sRGB: boolean,\r\n options?: TextureCreationOptions\r\n ) {\r\n if (!elements || elements.length === 0) {\r\n console.error('createTexture2DArrayFromImages() failed: Invalid image elements');\r\n return null;\r\n }\r\n let width = 0;\r\n let height = 0;\r\n for (const element of elements) {\r\n if (width === 0 || height === 0) {\r\n width = element.width;\r\n height = element.height;\r\n } else if (width !== element.width || height !== element.height) {\r\n console.error('createTexture2DArrayFromImages() failed: Image elements must have the same size');\r\n return null;\r\n }\r\n }\r\n if (options?.texture && !options.texture.isTexture2DArray()) {\r\n console.error('createTexture2DArrayFromImages() failed: options.texture must be 2d array texture');\r\n return null;\r\n }\r\n let tex: Nullable<WebGPUTexture2DArray> = options?.texture as WebGPUTexture2DArray;\r\n if (tex) {\r\n if (tex.depth !== elements.length) {\r\n console.error(\r\n 'createTexture2DArrayFromImages() failed: Layer count of options.texture not match the given image elements'\r\n );\r\n return null;\r\n }\r\n if (tex.width !== width || tex.height !== height) {\r\n console.error(\r\n 'createTexture2DArrayFromImages() failed: Size of options.texture not match the given image elements'\r\n );\r\n return null;\r\n }\r\n } else {\r\n tex = this.createTexture2DArray(\r\n sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm',\r\n width,\r\n height,\r\n elements.length,\r\n options\r\n );\r\n if (!tex) {\r\n return null;\r\n }\r\n for (let i = 0; i < elements.length; i++) {\r\n tex.updateFromElement(elements[i], 0, 0, i, 0, 0, width, height);\r\n }\r\n }\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTexture3D(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n options?: TextureCreationOptions\r\n ) {\r\n const tex = (options?.texture as WebGPUTexture3D) ?? new WebGPUTexture3D(this);\r\n if (!tex.isTexture3D()) {\r\n console.error('createTexture3D() failed: options.texture must be 3d texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, width, height, depth, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createCubeTexture(format: TextureFormat, size: number, options?: TextureCreationOptions) {\r\n const tex = (options?.texture as WebGPUTextureCube) ?? new WebGPUTextureCube(this);\r\n if (!tex.isTextureCube()) {\r\n console.error('createCubeTexture() failed: options.texture must be cube texture');\r\n return null;\r\n }\r\n tex.createEmpty(format, size, this.parseTextureOptions(options));\r\n tex.samplerOptions = options?.samplerOptions ?? null;\r\n return tex;\r\n }\r\n createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions) {\r\n const tex = new WebGPUTextureVideo(this, el);\r\n tex.samplerOptions = samplerOptions ?? null;\r\n return tex;\r\n }\r\n copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number) {\r\n if (!src?.isFramebuffer() || !dst?.isTexture2D()) {\r\n console.error('copyFramebufferToTexture2D(): invalid texture');\r\n return;\r\n }\r\n const srcTex = src.getColorAttachments()?.[index];\r\n if (!srcTex || !srcTex.isTexture2D()) {\r\n console.error('copyFramebufferToTexture2D(): Color attachment is not a 2D texture');\r\n return;\r\n }\r\n this.copyTexture2D(srcTex, src.getColorAttachmentMipLevel(index), dst, level);\r\n }\r\n copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number) {\r\n if (!src?.isTexture2D() || !dst?.isTexture2D()) {\r\n console.error('CopyTexture2D(): invalid texture');\r\n return;\r\n }\r\n if (!Number.isInteger(srcLevel) || srcLevel < 0 || srcLevel >= src.mipLevelCount) {\r\n console.error('CopyTexture2D(): invalid source mipmap level');\r\n return;\r\n }\r\n if (!Number.isInteger(dstLevel) || dstLevel < 0 || dstLevel >= dst.mipLevelCount) {\r\n console.error('CopyTexture2D(): invalid destination mipmap level');\r\n return;\r\n }\r\n const srcWidth = Math.max(src.width >> srcLevel, 1);\r\n const srcHeight = Math.max(src.height >> srcLevel, 1);\r\n const dstWidth = Math.max(dst.width >> dstLevel, 1);\r\n const dstHeight = Math.max(dst.height >> dstLevel, 1);\r\n if (srcWidth !== dstWidth || srcHeight !== dstHeight) {\r\n console.error('Source texture and destination texture must have same size');\r\n return;\r\n }\r\n if (src.format !== dst.format) {\r\n console.error('CopyTexture2D(): Source texture and destination texture must have same format');\r\n return;\r\n }\r\n const srcTex = src as WebGPUTexture2D;\r\n const dstTex = dst as WebGPUTexture2D;\r\n this._commandQueue.copyTexture(\r\n srcTex.object!,\r\n dstTex.object!,\r\n srcLevel,\r\n dstLevel,\r\n srcWidth,\r\n srcHeight,\r\n 1\r\n );\r\n }\r\n createGPUProgram(params: GPUProgramConstructParams) {\r\n return new WebGPUProgram(this, params);\r\n }\r\n createBindGroup(layout: Immutable<BindGroupLayout>) {\r\n return new WebGPUBindGroup(this, layout);\r\n }\r\n createBuffer(sizeInBytes: number, options: BufferCreationOptions) {\r\n return new WebGPUBuffer(this, this.parseBufferOptions(options), sizeInBytes);\r\n }\r\n copyBuffer(\r\n sourceBuffer: GPUDataBuffer<unknown>,\r\n destBuffer: GPUDataBuffer<unknown>,\r\n srcOffset: number,\r\n dstOffset: number,\r\n bytes: number\r\n ) {\r\n this._commandQueue.copyBuffer(\r\n sourceBuffer as WebGPUBuffer,\r\n destBuffer as WebGPUBuffer,\r\n srcOffset,\r\n dstOffset,\r\n bytes\r\n );\r\n }\r\n createIndexBuffer(\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n options?: BufferCreationOptions\r\n ) {\r\n return new WebGPUIndexBuffer(this, data, this.parseBufferOptions(options, 'index'));\r\n }\r\n createStructuredBuffer(structureType: PBStructTypeInfo, options: BufferCreationOptions, data?: TypedArray) {\r\n return new WebGPUStructuredBuffer(this, structureType, this.parseBufferOptions(options), data);\r\n }\r\n createVertexLayout(options: VertexLayoutOptions) {\r\n return new WebGPUVertexLayout(this, options);\r\n }\r\n createFrameBuffer(\r\n colorAttachments: BaseTexture[],\r\n depthAttachement: BaseTexture,\r\n options?: FrameBufferOptions\r\n ) {\r\n return new WebGPUFrameBuffer(this, colorAttachments, depthAttachement, options);\r\n }\r\n setBindGroup(index: number, bindGroup: BindGroup, dynamicOffsets?: Nullable<Iterable<number>>) {\r\n this._currentBindGroups[index] = bindGroup as WebGPUBindGroup;\r\n this._currentBindGroupOffsets[index] = dynamicOffsets ?? bindGroup?.getDynamicOffsets() ?? null;\r\n }\r\n getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>] {\r\n return [this._currentBindGroups[index], this._currentBindGroupOffsets[index]];\r\n }\r\n // render related\r\n setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n this._commandQueue.setViewport(vp);\r\n }\r\n getViewport(): Immutable<DeviceViewport> {\r\n return this._commandQueue.getViewport();\r\n }\r\n setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n this._commandQueue.setScissor(scissor);\r\n }\r\n getScissor(): Immutable<DeviceViewport> {\r\n return this._commandQueue.getScissor();\r\n }\r\n setProgram(program: Nullable<GPUProgram>) {\r\n this._currentProgram = program as WebGPUProgram;\r\n }\r\n getProgram() {\r\n return this._currentProgram;\r\n }\r\n setVertexLayout(vertexData: Nullable<VertexLayout>) {\r\n this._currentVertexData = vertexData as WebGPUVertexLayout;\r\n }\r\n getVertexLayout() {\r\n return this._currentVertexData;\r\n }\r\n setRenderStates(stateSet: Nullable<RenderStateSet>) {\r\n this._currentStateSet = stateSet as WebGPURenderStateSet;\r\n }\r\n getRenderStates() {\r\n return this._currentStateSet;\r\n }\r\n getFramebuffer() {\r\n return this._commandQueue.getFramebuffer();\r\n }\r\n reverseVertexWindingOrder(reverse: boolean): void {\r\n this._reverseWindingOrder = !!reverse;\r\n }\r\n isWindingOrderReversed(): boolean {\r\n return this._reverseWindingOrder;\r\n }\r\n /** @internal */\r\n isBufferUploading(buffer: WebGPUBuffer) {\r\n return this._commandQueue.isBufferUploading(buffer);\r\n }\r\n /** @internal */\r\n isTextureUploading(tex: WebGPUBaseTexture) {\r\n return this._commandQueue.isTextureUploading(tex);\r\n }\r\n /** @internal */\r\n getFramebufferInfo() {\r\n return this._commandQueue.getFramebufferInfo();\r\n }\r\n /** @internal */\r\n gpuGetObjectHash(obj: GPUObjectBase) {\r\n return this._gpuObjectHasher.get(obj) ?? null;\r\n }\r\n /** @internal */\r\n gpuCreateTexture(desc: GPUTextureDescriptor) {\r\n const tex = this._device!.createTexture(desc);\r\n if (tex) {\r\n this._gpuObjectHasher.set(tex, ++this._gpuObjectHashCounter);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n gpuImportExternalTexture(el: HTMLVideoElement) {\r\n const tex = this._device!.importExternalTexture({ source: el });\r\n if (tex) {\r\n this._gpuObjectHasher.set(tex, ++this._gpuObjectHashCounter);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n gpuCreateSampler(desc: GPUSamplerDescriptor) {\r\n const sampler = this._device!.createSampler(desc);\r\n if (sampler) {\r\n this._gpuObjectHasher.set(sampler, ++this._gpuObjectHashCounter);\r\n }\r\n return sampler;\r\n }\r\n /** @internal */\r\n gpuCreateBindGroup(desc: GPUBindGroupDescriptor) {\r\n const bindGroup = this._device!.createBindGroup(desc);\r\n if (bindGroup) {\r\n this._gpuObjectHasher.set(bindGroup, ++this._gpuObjectHashCounter);\r\n }\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n gpuCreateBuffer(desc: GPUBufferDescriptor) {\r\n const buffer = this._device!.createBuffer(desc);\r\n if (buffer) {\r\n this._gpuObjectHasher.set(buffer, ++this._gpuObjectHashCounter);\r\n }\r\n return buffer;\r\n }\r\n /** @internal */\r\n gpuCreateTextureView(texture: GPUTexture, desc?: GPUTextureViewDescriptor) {\r\n const view = texture?.createView(desc);\r\n if (view) {\r\n this._gpuObjectHasher.set(view, ++this._gpuObjectHashCounter);\r\n }\r\n return view;\r\n }\r\n /** @internal */\r\n gpuCreateRenderPipeline(desc: GPURenderPipelineDescriptor) {\r\n const pipeline = this._device!.createRenderPipeline(desc);\r\n if (pipeline) {\r\n this._gpuObjectHasher.set(pipeline, ++this._gpuObjectHashCounter);\r\n }\r\n return pipeline;\r\n }\r\n /** @internal */\r\n gpuCreateComputePipeline(desc: GPUComputePipelineDescriptor) {\r\n const pipeline = this._device!.createComputePipeline(desc);\r\n if (pipeline) {\r\n this._gpuObjectHasher.set(pipeline, ++this._gpuObjectHashCounter);\r\n }\r\n return pipeline;\r\n }\r\n /** @internal */\r\n fetchVertexLayout(hash: string) {\r\n return this._vertexLayoutCache.fetchVertexLayout(hash);\r\n }\r\n /** @internal */\r\n fetchSampler(options: SamplerOptions) {\r\n return this._samplerCache.fetchSampler(options);\r\n }\r\n /** @internal */\r\n fetchBindGroupLayout(desc: Immutable<BindGroupLayout>) {\r\n return this._bindGroupCache.fetchBindGroupLayout(desc);\r\n }\r\n flush(): void {\r\n this._commandQueue.flush();\r\n }\r\n async readPixels(index: number, x: number, y: number, w: number, h: number, buffer: TypedArray) {\r\n const fb = this.getFramebuffer();\r\n const colorAttachment = fb\r\n ? (fb.getColorAttachments()[index]?.object as GPUTexture)\r\n : this.context!.getCurrentTexture();\r\n const texFormat = fb\r\n ? fb.getColorAttachments()[index]?.format\r\n : textureFormatInvMap[this._backBufferFormat];\r\n if (colorAttachment && texFormat) {\r\n const pixelSize = getTextureFormatBlockSize(texFormat);\r\n const bufferSize = w * h * pixelSize;\r\n const stagingBuffer = this.createBuffer(bufferSize, {\r\n usage: 'read'\r\n });\r\n this.readPixelsToBuffer(0, x, y, w, h, stagingBuffer);\r\n const data = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\r\n await stagingBuffer.getBufferSubData(data);\r\n stagingBuffer.dispose();\r\n } else {\r\n console.error('readPixels() failed: no color attachment0 or unrecoganized color attachment format');\r\n }\r\n }\r\n readPixelsToBuffer(index: number, x: number, y: number, w: number, h: number, buffer: GPUDataBuffer) {\r\n const fb = this.getFramebuffer();\r\n const colorAttachment = fb\r\n ? (fb.getColorAttachments()[index]?.object as GPUTexture)\r\n : this.context!.getCurrentTexture();\r\n const texFormat = fb\r\n ? fb.getColorAttachments()[index]?.format\r\n : textureFormatInvMap[this._backBufferFormat];\r\n if (colorAttachment && texFormat) {\r\n this.flush();\r\n WebGPUBaseTexture.copyTexturePixelsToBuffer(\r\n this._device!,\r\n colorAttachment,\r\n texFormat,\r\n x,\r\n y,\r\n w,\r\n h,\r\n 0,\r\n 0,\r\n buffer\r\n );\r\n } else {\r\n console.error(\r\n 'readPixelsToBuffer() failed: no color attachment0 or unrecoganized color attachment format'\r\n );\r\n }\r\n }\r\n looseContext() {\r\n // not implemented\r\n }\r\n restoreContext() {\r\n // not implemented\r\n }\r\n beginCapture() {\r\n if (this._captureRenderBundle) {\r\n throw new Error('Device.beginCapture() failed: device is already capturing draw commands');\r\n }\r\n const frameBuffer = this.getFramebufferInfo();\r\n const desc: GPURenderBundleEncoderDescriptor = {\r\n colorFormats: frameBuffer.colorFormats,\r\n depthStencilFormat: frameBuffer.depthFormat,\r\n sampleCount: frameBuffer.sampleCount\r\n };\r\n this._captureRenderBundle = {\r\n dc: 0,\r\n encoder: this._device!.createRenderBundleEncoder(desc),\r\n renderBundle: null\r\n };\r\n }\r\n endCapture() {\r\n if (!this._captureRenderBundle) {\r\n throw new Error('Device.endCapture() failed: device is not capturing draw commands');\r\n }\r\n this._captureRenderBundle.renderBundle = this._captureRenderBundle.encoder.finish();\r\n const ret = this._captureRenderBundle;\r\n this._captureRenderBundle = null;\r\n return ret;\r\n }\r\n protected _executeRenderBundle(renderBundle: RenderBundle) {\r\n this._commandQueue.executeRenderBundle(\r\n (renderBundle as WebGPURenderBundle).renderBundle as GPURenderBundle\r\n );\r\n return (renderBundle as WebGPURenderBundle).dc;\r\n }\r\n bufferUpload(buffer: WebGPUBuffer, offset: number, size: number) {\r\n this._commandQueue.bufferUpload(buffer, offset, size);\r\n }\r\n textureUpload(tex: WebGPUBaseTexture) {\r\n this._commandQueue.textureUpload(tex);\r\n }\r\n flushUploads() {\r\n this._commandQueue.flushUploads();\r\n }\r\n /** @internal */\r\n createTimestampResolveCommandBuffer() {\r\n return this._timestampQueries.createResolveCommandBuffer();\r\n }\r\n /** @internal */\r\n onTimestampCommandBuffersSubmitted() {\r\n this._timestampQueries.onSubmitted();\r\n }\r\n /** @internal */\r\n protected _setFramebuffer(rt: FrameBuffer) {\r\n this._commandQueue.setFramebuffer(rt as WebGPUFrameBuffer);\r\n }\r\n /** @internal */\r\n protected onBeginFrame() {\r\n if (this._canRender) {\r\n this._commandQueue.beginFrame();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n /** @internal */\r\n protected onEndFrame() {\r\n this._timestampQueries.autoCloseOpenScopes();\r\n this._commandQueue.endFrame();\r\n }\r\n /** @internal */\r\n protected _draw(primitiveType: PrimitiveType, first: number, count: number) {\r\n this._commandQueue.draw(\r\n this._currentProgram!,\r\n this._currentVertexData!,\r\n this._currentStateSet!,\r\n this._currentBindGroups,\r\n this._currentBindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n 1\r\n );\r\n if (this._captureRenderBundle) {\r\n this._captureRenderBundle.dc++;\r\n this._commandQueue.capture(\r\n this._captureRenderBundle.encoder,\r\n this._currentProgram!,\r\n this._currentVertexData!,\r\n this._currentStateSet!,\r\n this._currentBindGroups,\r\n this._currentBindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n 1\r\n );\r\n }\r\n }\r\n /** @internal */\r\n protected _drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number) {\r\n this._commandQueue.draw(\r\n this._currentProgram!,\r\n this._currentVertexData!,\r\n this._currentStateSet!,\r\n this._currentBindGroups,\r\n this._currentBindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n if (this._captureRenderBundle) {\r\n this._captureRenderBundle.dc++;\r\n this._commandQueue.capture(\r\n this._captureRenderBundle.encoder,\r\n this._currentProgram!,\r\n this._currentVertexData!,\r\n this._currentStateSet!,\r\n this._currentBindGroups,\r\n this._currentBindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n }\r\n }\r\n /** @internal */\r\n protected _compute(workgroupCountX: number, workgroupCountY: number, workgroupCountZ: number) {\r\n this._commandQueue.compute(\r\n this._currentProgram!,\r\n this._currentBindGroups,\r\n this._currentBindGroupOffsets,\r\n workgroupCountX,\r\n workgroupCountY,\r\n workgroupCountZ\r\n );\r\n }\r\n private configure() {\r\n this._backBufferFormat = navigator.gpu.getPreferredCanvasFormat();\r\n this._depthFormat = this._deviceCaps.framebufferCaps.supportDepth32floatStencil8\r\n ? 'depth32float-stencil8'\r\n : 'depth24plus-stencil8';\r\n this._context!.configure({\r\n device: this._device!,\r\n format: this._backBufferFormat,\r\n usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,\r\n alphaMode: 'opaque',\r\n colorSpace: 'srgb'\r\n });\r\n this.createDefaultRenderAttachments();\r\n }\r\n private createDefaultRenderAttachments() {\r\n const width = Math.max(1, this.canvas.width);\r\n const height = Math.max(1, this.canvas.height);\r\n this._defaultMSAAColorTexture?.destroy();\r\n this._defaultMSAAColorTexture = null;\r\n this._defaultMSAAColorTextureView = null;\r\n this._defaultDepthTexture?.destroy();\r\n if (this._sampleCount > 1) {\r\n this._defaultMSAAColorTexture = this.gpuCreateTexture({\r\n size: {\r\n width,\r\n height,\r\n depthOrArrayLayers: 1\r\n },\r\n format: this._backBufferFormat,\r\n dimension: '2d',\r\n mipLevelCount: 1,\r\n sampleCount: this._sampleCount,\r\n usage: GPUTextureUsage.RENDER_ATTACHMENT\r\n });\r\n this._defaultMSAAColorTextureView = this._defaultMSAAColorTexture.createView();\r\n }\r\n this._defaultDepthTexture = this.gpuCreateTexture({\r\n size: {\r\n width,\r\n height,\r\n depthOrArrayLayers: 1\r\n },\r\n format: this._depthFormat,\r\n dimension: '2d',\r\n mipLevelCount: 1,\r\n sampleCount: this._sampleCount,\r\n usage: GPUTextureUsage.RENDER_ATTACHMENT\r\n });\r\n this._defaultDepthTextureView = this._defaultDepthTexture.createView();\r\n this._defaultRenderPassDesc = {\r\n label: `mainRenderPass:${this._sampleCount}`,\r\n colorAttachments: [\r\n {\r\n view: this._sampleCount > 1 ? this._defaultMSAAColorTextureView : null,\r\n resolveTarget: undefined,\r\n loadOp: 'clear',\r\n clearValue: [0, 0, 0, 0],\r\n storeOp: 'store'\r\n } as GPURenderPassColorAttachment\r\n ],\r\n depthStencilAttachment: {\r\n view: this._defaultDepthTextureView,\r\n depthLoadOp: 'clear',\r\n depthClearValue: 1,\r\n depthStoreOp: 'store',\r\n stencilLoadOp: 'clear',\r\n stencilClearValue: 0,\r\n stencilStoreOp: 'store'\r\n }\r\n };\r\n }\r\n}\r\n"],"names":["WebGPUDevice","BaseDevice","_context","_device","_adapter","_deviceCaps","_reverseWindingOrder","_canRender","_backBufferFormat","_depthFormat","_defaultMSAAColorTexture","_defaultMSAAColorTextureView","_defaultDepthTexture","_defaultDepthTextureView","_pipelineCache","_bindGroupCache","_vertexLayoutCache","_samplerCache","_currentProgram","_currentVertexData","_currentStateSet","_currentBindGroups","_currentBindGroupOffsets","_commandQueue","_gpuObjectHashCounter","_gpuObjectHasher","_defaultRenderPassDesc","_sampleCount","_emptyBindGroup","_captureRenderBundle","_adapterInfo","_timestampQueries","backend","cvs","options","dpr","msaa","WeakMap","SamplerCache","context","getFrameBufferSampleCount","getFramebuffer","getSampleCount","device","adapter","commandQueue","drawingBufferWidth","getDrawingBufferWidth","drawingBufferHeight","getDrawingBufferHeight","clientWidth","canvas","clientHeight","pipelineCache","backbufferFormat","backbufferDepthFormat","defaultDepthTexture","defaultDepthTextureView","defaultMSAAColorTextureView","defaultRenderPassDesc","sampleCount","currentPass","emptyBindGroup","getAdapterInfo","isContextLost","getDeviceCaps","getWidth","width","getHeight","height","getBackBufferWidth","getBackBufferHeight","initContext","navigator","gpu","Error","requestAdapter","info","requestDevice","requiredFeatures","features","requiredLimits","maxBufferSize","limits","maxBindingsPerBindGroup","maxTextureDimension2D","maxComputeWorkgroupSizeX","maxComputeWorkgroupSizeY","maxComputeWorkgroupSizeZ","maxSampledTexturesPerShaderStage","maxSamplersPerShaderStage","maxStorageBuffersPerShaderStage","maxStorageTexturesPerShaderStage","maxUniformBuffersPerShaderStage","maxUniformBufferBindingSize","maxStorageBufferBindingSize","maxInterStageShaderVariables","maxColorAttachments","maxColorAttachmentBytesPerSample","maxComputeWorkgroupStorageSize","maxComputeInvocationsPerWorkgroup","maxComputeWorkgroupsPerDimension","console","feature","lost","then","error","message","createBindGroup","layout","createBindGroupLayout","entries","getContext","textureCaps","WebGPUTextureCaps","framebufferCaps","WebGPUFramebufferCaps","miscCaps","WebGPUMiscCaps","shaderCaps","WebGPUShaderCaps","configure","PipelineCache","BindGroupCache","VertexLayoutCache","CommandQueueImmediate","WebGPUTimestampQueryManager","setViewport","setScissor","initResizer","_handleResize","_cssWidth","_cssHeight","deviceWidth","deviceHeight","lastWidth","lastHeight","warn","style","createDefaultRenderAttachments","nextFrame","callback","finish","cancelNextFrame","_handle","clearFrameBuffer","clearColor","clearDepth","clearStencil","clear","createGPUTimer","beginTimestampQuery","label","begin","endTimestampQuery","id","end","pollTimestampQuery","query","poll","resolveTimestampQuery","resolve","collectTimestampQueries","filter","collect","createRenderStateSet","WebGPURenderStateSet","createBlendingState","WebGPUBlendingState","createColorState","WebGPUColorState","createRasterizerState","WebGPURasterizerState","createDepthState","WebGPUDepthState","createStencilState","WebGPUStencilState","createSampler","fetchSampler","createTextureFromMipmapData","data","sRGB","isCubemap","tex","WebGPUTextureCube","createWithMipmapData","parseTextureOptions","samplerOptions","isVolume","WebGPUTexture3D","isArray","WebGPUTexture2DArray","WebGPUTexture2D","createTexture2D","format","texture","isTexture2D","createEmpty","createTexture2DFromImage","element","loadFromElement","createTexture2DArray","depth","isTexture2DArray","createTexture2DArrayFromImages","elements","length","i","updateFromElement","createTexture3D","isTexture3D","createCubeTexture","size","isTextureCube","createTextureVideo","el","WebGPUTextureVideo","copyFramebufferToTexture2D","src","index","dst","level","isFramebuffer","srcTex","getColorAttachments","copyTexture2D","getColorAttachmentMipLevel","srcLevel","dstLevel","Number","isInteger","mipLevelCount","srcWidth","Math","max","srcHeight","dstWidth","dstHeight","dstTex","copyTexture","object","createGPUProgram","params","WebGPUProgram","WebGPUBindGroup","createBuffer","sizeInBytes","WebGPUBuffer","parseBufferOptions","copyBuffer","sourceBuffer","destBuffer","srcOffset","dstOffset","bytes","createIndexBuffer","WebGPUIndexBuffer","createStructuredBuffer","structureType","WebGPUStructuredBuffer","createVertexLayout","WebGPUVertexLayout","createFrameBuffer","colorAttachments","depthAttachement","WebGPUFrameBuffer","setBindGroup","bindGroup","dynamicOffsets","getDynamicOffsets","getBindGroup","vp","getViewport","scissor","getScissor","setProgram","program","getProgram","setVertexLayout","vertexData","getVertexLayout","setRenderStates","stateSet","getRenderStates","reverseVertexWindingOrder","reverse","isWindingOrderReversed","isBufferUploading","buffer","isTextureUploading","getFramebufferInfo","gpuGetObjectHash","obj","get","gpuCreateTexture","desc","createTexture","set","gpuImportExternalTexture","importExternalTexture","source","gpuCreateSampler","sampler","gpuCreateBindGroup","gpuCreateBuffer","gpuCreateTextureView","view","createView","gpuCreateRenderPipeline","pipeline","createRenderPipeline","gpuCreateComputePipeline","createComputePipeline","fetchVertexLayout","hash","fetchBindGroupLayout","flush","readPixels","x","y","w","h","fb","colorAttachment","getCurrentTexture","texFormat","textureFormatInvMap","pixelSize","getTextureFormatBlockSize","bufferSize","stagingBuffer","usage","readPixelsToBuffer","Uint8Array","byteOffset","byteLength","getBufferSubData","dispose","WebGPUBaseTexture","copyTexturePixelsToBuffer","looseContext","restoreContext","beginCapture","frameBuffer","colorFormats","depthStencilFormat","depthFormat","dc","encoder","createRenderBundleEncoder","renderBundle","endCapture","ret","_executeRenderBundle","executeRenderBundle","bufferUpload","offset","textureUpload","flushUploads","createTimestampResolveCommandBuffer","createResolveCommandBuffer","onTimestampCommandBuffersSubmitted","onSubmitted","_setFramebuffer","rt","setFramebuffer","beginFrame","autoCloseOpenScopes","endFrame","primitiveType","first","count","draw","capture","_drawInstanced","numInstances","workgroupCountX","workgroupCountY","workgroupCountZ","compute","getPreferredCanvasFormat","supportDepth32floatStencil8","GPUTextureUsage","RENDER_ATTACHMENT","COPY_SRC","alphaMode","colorSpace","destroy","depthOrArrayLayers","dimension","resolveTarget","undefined","loadOp","clearValue","storeOp","depthStencilAttachment","depthLoadOp","depthClearValue","depthStoreOp","stencilLoadOp","stencilClearValue","stencilStoreOp"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA4EO,MAAMA,YAAqBC,SAAAA,UAAAA,CAAAA;IACxBC,QAA4B;IAC5BC,OAAoB;IACpBC,QAAsB;IACtBC,WAAyB;IACzBC,oBAA8B;IAC9BC,UAAqB;IACrBC,iBAAqC;IACrCC,YAAgC;IAChCC,wBAA+C;IAC/CC,4BAAuD;IACvDC,oBAAkC;IAClCC,wBAA0C;IAC1CC,cAA+B;IAC/BC,eAAiC;IACjCC,kBAAuC;IAC9BC,aAA4B;IACrCC,eAAyC;IACzCC,kBAAiD;IACjDC,gBAAiD;IACjDC,kBAAsC;IACtCC,wBAAuD;IACvDC,aAAsC;IACtCC,qBAA8B;IACrBC,gBAAiD;IAC1DC,sBAAiD;IACxCC,YAAqB;IAC9BC,eAA+B;IAC/BC,oBAAmD;IACnDC,YAAkB;IAClBC,iBAAgD;AACxD,IAAA,WAAA,CAAYC,OAAsB,EAAEC,GAAsB,EAAEC,OAAuB,CAAE;QACnF,KAAK,CAACD,GAAKD,EAAAA,OAAAA,EAASE,OAASC,EAAAA,GAAAA,CAAAA;QAC7B,IAAI,CAAC7B,oBAAoB,GAAG,KAAA;QAC5B,IAAI,CAACI,wBAAwB,GAAG,IAAA;QAChC,IAAI,CAACC,4BAA4B,GAAG,IAAA;QACpC,IAAI,CAACO,eAAe,GAAG,IAAA;QACvB,IAAI,CAACC,kBAAkB,GAAG,IAAA;QAC1B,IAAI,CAACC,gBAAgB,GAAG,IAAA;QACxB,IAAI,CAACC,kBAAkB,GAAG,EAAE;QAC5B,IAAI,CAACC,wBAAwB,GAAG,EAAE;AAClC,QAAA,IAAI,CAACK,YAAY,GAAGO,OAAAA,EAASE,OAAO,CAAI,GAAA,CAAA;QACxC,IAAI,CAACX,gBAAgB,GAAG,IAAIY,OAAAA,EAAAA;QAC5B,IAAI,CAACb,qBAAqB,GAAG,CAAA;QAC7B,IAAI,CAACK,oBAAoB,GAAG,IAAA;AAC5B,QAAA,IAAI,CAACZ,aAAa,GAAG,IAAIqB,aAAa,IAAI,CAAA;QAC1C,IAAI,CAACR,YAAY,GAAG,EAAC;AACvB;AACA,IAAA,IAAIS,OAAU,GAAA;QACZ,OAAO,IAAI,CAACrC,QAAQ;AACtB;IACAsC,yBAA4B,GAAA;AAC1B,QAAA,OAAO,IAAI,CAACC,cAAc,IAAIC,cAAoB,EAAA,IAAA,IAAI,CAACf,YAAY;AACrE;AACA,IAAA,IAAIgB,MAAS,GAAA;QACX,OAAO,IAAI,CAACxC,OAAO;AACrB;AACA,IAAA,IAAIyC,OAAU,GAAA;QACZ,OAAO,IAAI,CAACxC,QAAQ;AACtB;AACA,IAAA,IAAIyC,YAAe,GAAA;QACjB,OAAO,IAAI,CAACtB,aAAa;AAC3B;AACA,IAAA,IAAIuB,kBAAqB,GAAA;QACvB,OAAO,IAAI,CAACC,qBAAqB,EAAA;AACnC;AACA,IAAA,IAAIC,mBAAsB,GAAA;QACxB,OAAO,IAAI,CAACC,sBAAsB,EAAA;AACpC;AACA,IAAA,IAAIC,WAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAACC,MAAM,CAACD,WAAW;AAChC;AACA,IAAA,IAAIE,YAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAACD,MAAM,CAACC,YAAY;AACjC;AACA,IAAA,IAAIC,aAAgB,GAAA;QAClB,OAAO,IAAI,CAACvC,cAAc;AAC5B;AACA,IAAA,IAAIwC,gBAAmB,GAAA;QACrB,OAAO,IAAI,CAAC9C,iBAAiB;AAC/B;AACA,IAAA,IAAI+C,qBAAwB,GAAA;QAC1B,OAAO,IAAI,CAAC9C,YAAY;AAC1B;AACA,IAAA,IAAI+C,mBAAsB,GAAA;QACxB,OAAO,IAAI,CAAC5C,oBAAoB;AAClC;AACA,IAAA,IAAI6C,uBAA0B,GAAA;QAC5B,OAAO,IAAI,CAAC5C,wBAAwB;AACtC;AACA,IAAA,IAAI6C,2BAA8B,GAAA;QAChC,OAAO,IAAI,CAAC/C,4BAA4B;AAC1C;AACA,IAAA,IAAIgD,qBAAwB,GAAA;QAC1B,OAAO,IAAI,CAACjC,sBAAsB;AACpC;AACA,IAAA,IAAIkC,WAAc,GAAA;QAChB,OAAO,IAAI,CAACjC,YAAY;AAC1B;AACA,IAAA,IAAIkC,WAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAACtC,aAAa,CAACsC,WAAW;AACvC;AACA,IAAA,IAAIC,cAAiB,GAAA;QACnB,OAAO,IAAI,CAAClC,eAAe;AAC7B;IACAmC,cAAiB,GAAA;QACf,OAAO,IAAI,CAACjC,YAAY;AAC1B;IACAkC,aAAgB,GAAA;QACd,OAAO,KAAA;AACT;IACAC,aAAuC,GAAA;QACrC,OAAO,IAAI,CAAC5D,WAAW;AACzB;IACA0C,qBAAwB,GAAA;QACtB,OAAO,IAAI,CAACN,cAAc,EAAA,EAAIyB,cAAc,IAAI,CAACf,MAAM,CAACgB,KAAK;AAC/D;IACAlB,sBAAyB,GAAA;QACvB,OAAO,IAAI,CAACR,cAAc,EAAA,EAAI2B,eAAe,IAAI,CAACjB,MAAM,CAACkB,MAAM;AACjE;IACAC,kBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAACnB,MAAM,CAACgB,KAAK;AAC1B;IACAI,mBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAACpB,MAAM,CAACkB,MAAM;AAC3B;AACA,IAAA,MAAMG,WAAc,GAAA;QAClB,IAAI,CAACC,SAAUC,CAAAA,GAAG,EAAE;AAClB,YAAA,MAAM,IAAIC,KAAM,CAAA,+BAAA,CAAA;AAClB;AACA,QAAA,MAAM/B,OAAU,GAAA,MAAM6B,SAAUC,CAAAA,GAAG,CAACE,cAAc,EAAA;AAClD,QAAA,IAAI,CAAChC,OAAS,EAAA;AACZ,YAAA,MAAM,IAAI+B,KAAM,CAAA,iCAAA,CAAA;AAClB;QACA,IAAI,CAACvE,QAAQ,GAAGwC,OAAAA;QAChB,IAAI,CAACd,YAAY,GAAG,IAAI,CAAC1B,QAAQ,CAACyE,IAAI,IAAI,EAAC;QAC3C,IAAI,CAAC1E,OAAO,GAAG,MAAM,IAAI,CAACC,QAAQ,CAAC0E,aAAa,CAAC;YAC/CC,gBAAkB,EAAA;mBAAI,IAAI,CAAC3E,QAAQ,CAAC4E;AAAS,aAAA;YAC7CC,cAAgB,EAAA;AACdC,gBAAAA,aAAAA,EAAe,IAAI,CAAC9E,QAAQ,CAAC+E,MAAM,CAACD,aAAa;AACjDE,gBAAAA,uBAAAA,EAAyB,IAAI,CAAChF,QAAQ,CAAC+E,MAAM,CAACC,uBAAuB;AACrEC,gBAAAA,qBAAAA,EAAuB,IAAI,CAACjF,QAAQ,CAAC+E,MAAM,CAACE,qBAAqB;AACjEC,gBAAAA,wBAAAA,EAA0B,IAAI,CAAClF,QAAQ,CAAC+E,MAAM,CAACG,wBAAwB;AACvEC,gBAAAA,wBAAAA,EAA0B,IAAI,CAACnF,QAAQ,CAAC+E,MAAM,CAACI,wBAAwB;AACvEC,gBAAAA,wBAAAA,EAA0B,IAAI,CAACpF,QAAQ,CAAC+E,MAAM,CAACK,wBAAwB;AACvEC,gBAAAA,gCAAAA,EAAkC,IAAI,CAACrF,QAAQ,CAAC+E,MAAM,CAACM,gCAAgC;AACvFC,gBAAAA,yBAAAA,EAA2B,IAAI,CAACtF,QAAQ,CAAC+E,MAAM,CAACO,yBAAyB;AACzEC,gBAAAA,+BAAAA,EAAiC,IAAI,CAACvF,QAAQ,CAAC+E,MAAM,CAACQ,+BAA+B;AACrFC,gBAAAA,gCAAAA,EAAkC,IAAI,CAACxF,QAAQ,CAAC+E,MAAM,CAACS,gCAAgC;AACvFC,gBAAAA,+BAAAA,EAAiC,IAAI,CAACzF,QAAQ,CAAC+E,MAAM,CAACU,+BAA+B;AACrFC,gBAAAA,2BAAAA,EAA6B,IAAI,CAAC1F,QAAQ,CAAC+E,MAAM,CAACW,2BAA2B;AAC7EC,gBAAAA,2BAAAA,EAA6B,IAAI,CAAC3F,QAAQ,CAAC+E,MAAM,CAACY,2BAA2B;AAC7EC,gBAAAA,4BAAAA,EAA8B,IAAI,CAAC5F,QAAQ,CAAC+E,MAAM,CAACa,4BAA4B;AAC/EC,gBAAAA,mBAAAA,EAAqB,IAAI,CAAC7F,QAAQ,CAAC+E,MAAM,CAACc,mBAAmB;AAC7DC,gBAAAA,gCAAAA,EAAkC,IAAI,CAAC9F,QAAQ,CAAC+E,MAAM,CAACe,gCAAgC;AACvFC,gBAAAA,8BAAAA,EAAgC,IAAI,CAAC/F,QAAQ,CAAC+E,MAAM,CAACgB,8BAA8B;AACnFC,gBAAAA,iCAAAA,EAAmC,IAAI,CAAChG,QAAQ,CAAC+E,MAAM,CAACiB,iCAAiC;AACzFC,gBAAAA,gCAAAA,EAAkC,IAAI,CAACjG,QAAQ,CAAC+E,MAAM,CAACkB;AACzD;AACF,SAAA,CAAA;AACAC,QAAAA,OAAAA,CAAQzB,IAAI,CAAC,yBAAA,CAAA;AACb,QAAA,KAAK,MAAM0B,OAAW,IAAA,IAAI,CAACpG,OAAO,CAAC6E,QAAQ,CAAE;AAC3CsB,YAAAA,OAAAA,CAAQzB,IAAI,CAAC,CAAC,GAAG,EAAE0B,OAAS,CAAA,CAAA,CAAA;AAC9B;AACA,QAAA,IAAI,CAAC5D,MAAM,CAAC6D,IAAI,CAACC,IAAI,CAAC,CAAC5B,IAAAA,GAAAA;AACrByB,YAAAA,OAAAA,CAAQI,KAAK,CAAC,CAAC,wBAAwB,EAAE7B,IAAAA,CAAK8B,OAAO,CAAE,CAAA,CAAA;YACvD,IAAI,CAACpG,UAAU,GAAG,KAAA;AACpB,SAAA,CAAA;QACA,IAAI,CAACqB,eAAe,GAAG,IAAI,CAACe,MAAM,CAACiE,eAAe,CAAC;AACjDC,YAAAA,MAAAA,EAAQ,IAAI,CAAClE,MAAM,CAACmE,qBAAqB,CAAC;AAAEC,gBAAAA,OAAAA,EAAS;AAAG,aAAA,CAAA;AACxDA,YAAAA,OAAAA,EAAS;AACX,SAAA,CAAA;QACA,MAAMxE,OAAAA,GAAU,IAAK,CAACY,MAAM,CAAC6D,UAAU,CAAC,QAA6C,CAAA,IAAA,IAAA;AACrF,QAAA,IAAI,CAACzE,OAAS,EAAA;YACZ,IAAI,CAAChC,UAAU,GAAG,KAAA;AAClB,YAAA,MAAM,IAAIoE,KAAM,CAAA,6BAAA,CAAA;AAClB;QACA,IAAI,CAACzE,QAAQ,GAAGqC,OAAAA;QAChB,IAAI,CAACY,MAAM,CAACgB,KAAK,GAAG,IAAI,CAAChB,MAAM,CAACD,WAAW;QAC3C,IAAI,CAACC,MAAM,CAACkB,MAAM,GAAG,IAAI,CAAClB,MAAM,CAACC,YAAY;QAC7C,IAAI,CAAC/C,WAAW,GAAG;YACjB4G,WAAa,EAAA,IAAIC,kBAAkB,IAAI,CAAA;YACvCC,eAAiB,EAAA,IAAIC,sBAAsB,IAAI,CAAA;YAC/CC,QAAU,EAAA,IAAIC,eAAe,IAAI,CAAA;YACjCC,UAAY,EAAA,IAAIC,iBAAiB,IAAI;AACvC,SAAA;AACA,QAAA,IAAI,CAACC,SAAS,EAAA;AAEd,QAAA,IAAI,CAAC3G,cAAc,GAAG,IAAI4G,cAAc,IAAI,CAAA;AAC5C,QAAA,IAAI,CAAC3G,eAAe,GAAG,IAAI4G,eAAe,IAAI,CAAA;QAC9C,IAAI,CAAC3G,kBAAkB,GAAG,IAAI4G,iBAAAA,EAAAA;AAC9B,QAAA,IAAI,CAACrG,aAAa,GAAG,IAAIsG,sBAAsB,IAAI,CAAA;AACnD,QAAA,IAAI,CAAC9F,iBAAiB,GAAG,IAAI+F,4BAA4B,IAAI,CAAA;QAC7D,IAAI,CAACvH,UAAU,GAAG,IAAA;QAClB,IAAI,CAACwH,WAAW,CAAC,IAAA,CAAA;QACjB,IAAI,CAACC,UAAU,CAAC,IAAA,CAAA;QAEhB,MAAM,IAAI,CAACC,WAAW,EAAA;AACxB;AACUC,IAAAA,aAAAA,CACRC,SAAiB,EACjBC,UAAkB,EAClBC,WAAmB,EACnBC,YAAoB,EACd;AACN,QAAA,MAAMC,SAAY,GAAA,IAAI,CAACpF,MAAM,CAACD,WAAW;AACzC,QAAA,MAAMsF,UAAa,GAAA,IAAI,CAACrF,MAAM,CAACC,YAAY;AAC3C,QAAA,IAAI,CAACD,MAAM,CAACgB,KAAK,GAAGkE,WAAAA;AACpB,QAAA,IAAI,CAAClF,MAAM,CAACkB,MAAM,GAAGiE,YAAAA;AACrB,QAAA,IACE,IAAK,CAACnF,MAAM,CAACD,WAAW,KAAKqF,SAAAA,IAAa,IAAI,CAACpF,MAAM,CAACD,WAAW,KAAK,IAAI,CAACC,MAAM,CAACgB,KAAK,IACtF,IAAI,CAAChB,MAAM,CAACC,YAAY,KAAKoF,cAAc,IAAI,CAACrF,MAAM,CAACC,YAAY,KAAK,IAAI,CAACD,MAAM,CAACkB,MAAM,EAC3F;AACAiC,YAAAA,OAAAA,CAAQmC,IAAI,CACV,2FAAA,CAAA;YAEF,IAAI,CAACtF,MAAM,CAACuF,KAAK,CAACvE,KAAK,GAAG,CAAA,EAAGoE,SAAU,CAAA,EAAE,CAAC;YAC1C,IAAI,CAACpF,MAAM,CAACuF,KAAK,CAACrE,MAAM,GAAG,CAAA,EAAGmE,UAAW,CAAA,EAAE,CAAC;AAC9C;AACA,QAAA,IAAI,CAACG,8BAA8B,EAAA;QACnC,IAAI,CAACZ,WAAW,CAAC,IAAA,CAAA;QACjB,IAAI,CAACC,UAAU,CAAC,IAAA,CAAA;AAClB;AACAY,IAAAA,SAAAA,CAAUC,QAAoB,EAAE;AAC9B,QAAA,IAAI,CAACtH,aAAa,CAACuH,MAAM,EAAA,CAAGrC,IAAI,CAACoC,QAAAA,CAAAA;QACjC,OAAO,CAAA;AACT;AACAE,IAAAA,eAAAA,CAAgBC,OAAe,EAAE;AAC/B,QAAA;AACF;AACAC,IAAAA,gBAAAA,CACEC,UAA6B,EAC7BC,UAA4B,EAC5BC,YAA8B,EAC9B;AACA,QAAA,IAAI,CAAC7H,aAAa,CAAC8H,KAAK,CAACH,YAAYC,UAAYC,EAAAA,YAAAA,CAAAA;AACnD;;IAEAE,cAAiB,GAAA;;QAEf,OAAO,IAAA;AACT;IACAC,mBAAoBC,CAAAA,KAAc,EAAEtH,OAA+B,EAAU;AAC3E,QAAA,OAAO,IAAI,CAACH,iBAAiB,CAAC0H,KAAK,CAACD,KAAOtH,EAAAA,OAAAA,CAAAA;AAC7C;AACAwH,IAAAA,iBAAAA,CAAkBC,EAAU,EAAQ;AAClC,QAAA,IAAI,CAAC5H,iBAAiB,CAAC6H,GAAG,CAACD,EAAAA,CAAAA;AAC7B;AACAE,IAAAA,kBAAAA,CAAmBC,KAA2B,EAAkC;AAC9E,QAAA,OAAO,IAAI,CAAC/H,iBAAiB,CAACgI,IAAI,CAACD,KAAAA,CAAAA;AACrC;AACAE,IAAAA,qBAAAA,CAAsBF,KAA2B,EAAiC;AAChF,QAAA,OAAO,IAAI,CAAC/H,iBAAiB,CAACkI,OAAO,CAACH,KAAAA,CAAAA;AACxC;AACAI,IAAAA,uBAAAA,CAAwBC,MAA6B,EAA0B;AAC7E,QAAA,OAAO,IAAI,CAACpI,iBAAiB,CAACqI,OAAO,CAACD,MAAAA,CAAAA;AACxC;IACAE,oBAAuB,GAAA;QACrB,OAAO,IAAIC,qBAAqB,IAAI,CAAA;AACtC;IACAC,mBAAsB,GAAA;AACpB,QAAA,OAAO,IAAIC,mBAAAA,EAAAA;AACb;IACAC,gBAAmB,GAAA;AACjB,QAAA,OAAO,IAAIC,gBAAAA,EAAAA;AACb;IACAC,qBAAwB,GAAA;AACtB,QAAA,OAAO,IAAIC,qBAAAA,EAAAA;AACb;IACAC,gBAAmB,GAAA;AACjB,QAAA,OAAO,IAAIC,gBAAAA,EAAAA;AACb;IACAC,kBAAqB,GAAA;AACnB,QAAA,OAAO,IAAIC,kBAAAA,EAAAA;AACb;AACAC,IAAAA,aAAAA,CAAc/I,OAAuB,EAAE;QACrC,OAAO,IAAI,CAACgJ,YAAY,CAAChJ,OAAAA,CAAAA;AAC3B;AACAiJ,IAAAA,2BAAAA,CACEC,IAAuB,EACvBC,IAAa,EACbnJ,OAAgC,EAChC;AACA,QAAA,IAAI,CAACkJ,IAAM,EAAA;AACT9E,YAAAA,OAAAA,CAAQI,KAAK,CAAC,CAAC,yDAAyD,CAAC,CAAA;YACzE,OAAO,IAAA;AACT;QACA,IAAI0E,IAAAA,CAAKE,SAAS,EAAE;YAClB,MAAMC,GAAAA,GAAM,IAAIC,iBAAAA,CAAkB,IAAI,CAAA;AACtCD,YAAAA,GAAAA,CAAIE,oBAAoB,CAACL,IAAAA,EAAMC,MAAM,IAAI,CAACK,mBAAmB,CAACxJ,OAAAA,CAAAA,CAAAA;YAC9DqJ,GAAII,CAAAA,cAAc,GAAGzJ,OAAAA,EAASyJ,cAAkB,IAAA,IAAA;YAChD,OAAOJ,GAAAA;SACF,MAAA,IAAIH,IAAKQ,CAAAA,QAAQ,EAAE;YACxB,MAAML,GAAAA,GAAM,IAAIM,eAAAA,CAAgB,IAAI,CAAA;AACpCN,YAAAA,GAAAA,CAAIE,oBAAoB,CAACL,IAAAA,EAAM,IAAI,CAACM,mBAAmB,CAACxJ,OAAAA,CAAAA,CAAAA;YACxDqJ,GAAII,CAAAA,cAAc,GAAGzJ,OAAAA,EAASyJ,cAAkB,IAAA,IAAA;YAChD,OAAOJ,GAAAA;SACF,MAAA,IAAIH,IAAKU,CAAAA,OAAO,EAAE;YACvB,MAAMP,GAAAA,GAAM,IAAIQ,oBAAAA,CAAqB,IAAI,CAAA;AACzCR,YAAAA,GAAAA,CAAIE,oBAAoB,CAACL,IAAAA,EAAM,IAAI,CAACM,mBAAmB,CAACxJ,OAAAA,CAAAA,CAAAA;YACxDqJ,GAAII,CAAAA,cAAc,GAAGzJ,OAAAA,EAASyJ,cAAkB,IAAA,IAAA;YAChD,OAAOJ,GAAAA;SACF,MAAA;YACL,MAAMA,GAAAA,GAAM,IAAIS,eAAAA,CAAgB,IAAI,CAAA;AACpCT,YAAAA,GAAAA,CAAIE,oBAAoB,CAACL,IAAAA,EAAMC,MAAM,IAAI,CAACK,mBAAmB,CAACxJ,OAAAA,CAAAA,CAAAA;YAC9DqJ,GAAII,CAAAA,cAAc,GAAGzJ,OAAAA,EAASyJ,cAAkB,IAAA,IAAA;YAChD,OAAOJ,GAAAA;AACT;AACF;AACAU,IAAAA,eAAAA,CAAgBC,MAAqB,EAAE/H,KAAa,EAAEE,MAAc,EAAEnC,OAAgC,EAAE;AACtG,QAAA,MAAMqJ,MAAM,OAACrJ,EAASiK,OAA+B,IAAA,IAAIH,gBAAgB,IAAI,CAAA;QAC7E,IAAI,CAACT,GAAIa,CAAAA,WAAW,EAAI,EAAA;AACtB9F,YAAAA,OAAAA,CAAQI,KAAK,CAAC,8DAAA,CAAA;YACd,OAAO,IAAA;AACT;QACA6E,GAAIc,CAAAA,WAAW,CAACH,MAAQ/H,EAAAA,KAAAA,EAAOE,QAAQ,IAAI,CAACqH,mBAAmB,CAACxJ,OAAAA,CAAAA,CAAAA;QAChEqJ,GAAII,CAAAA,cAAc,GAAGzJ,OAAAA,EAASyJ,cAAkB,IAAA,IAAA;QAChD,OAAOJ,GAAAA;AACT;AACAe,IAAAA,wBAAAA,CAAyBC,OAA4B,EAAElB,IAAa,EAAEnJ,OAAgC,EAAE;AACtG,QAAA,MAAMqJ,MAAM,OAACrJ,EAASiK,OAA+B,IAAA,IAAIH,gBAAgB,IAAI,CAAA;QAC7E,IAAI,CAACT,GAAIa,CAAAA,WAAW,EAAI,EAAA;AACtB9F,YAAAA,OAAAA,CAAQI,KAAK,CAAC,uEAAA,CAAA;YACd,OAAO,IAAA;AACT;AACA6E,QAAAA,GAAAA,CAAIiB,eAAe,CAACD,OAAAA,EAASlB,MAAM,IAAI,CAACK,mBAAmB,CAACxJ,OAAAA,CAAAA,CAAAA;QAC5DqJ,GAAII,CAAAA,cAAc,GAAGzJ,OAAAA,EAASyJ,cAAkB,IAAA,IAAA;QAChD,OAAOJ,GAAAA;AACT;IACAkB,oBACEP,CAAAA,MAAqB,EACrB/H,KAAa,EACbE,MAAc,EACdqI,KAAa,EACbxK,OAAgC,EAChC;AACA,QAAA,MAAMqJ,MAAM,OAACrJ,EAASiK,OAAoC,IAAA,IAAIJ,qBAAqB,IAAI,CAAA;QACvF,IAAI,CAACR,GAAIoB,CAAAA,gBAAgB,EAAI,EAAA;AAC3BrG,YAAAA,OAAAA,CAAQI,KAAK,CAAC,yEAAA,CAAA;YACd,OAAO,IAAA;AACT;QACA6E,GAAIc,CAAAA,WAAW,CAACH,MAAQ/H,EAAAA,KAAAA,EAAOE,QAAQqI,KAAO,EAAA,IAAI,CAAChB,mBAAmB,CAACxJ,OAAAA,CAAAA,CAAAA;QACvEqJ,GAAII,CAAAA,cAAc,GAAGzJ,OAAAA,EAASyJ,cAAkB,IAAA,IAAA;QAChD,OAAOJ,GAAAA;AACT;AACAqB,IAAAA,8BAAAA,CACEC,QAA+B,EAC/BxB,IAAa,EACbnJ,OAAgC,EAChC;AACA,QAAA,IAAI,CAAC2K,QAAAA,IAAYA,QAASC,CAAAA,MAAM,KAAK,CAAG,EAAA;AACtCxG,YAAAA,OAAAA,CAAQI,KAAK,CAAC,iEAAA,CAAA;YACd,OAAO,IAAA;AACT;AACA,QAAA,IAAIvC,KAAQ,GAAA,CAAA;AACZ,QAAA,IAAIE,MAAS,GAAA,CAAA;QACb,KAAK,MAAMkI,WAAWM,QAAU,CAAA;YAC9B,IAAI1I,KAAAA,KAAU,CAAKE,IAAAA,MAAAA,KAAW,CAAG,EAAA;AAC/BF,gBAAAA,KAAAA,GAAQoI,QAAQpI,KAAK;AACrBE,gBAAAA,MAAAA,GAASkI,QAAQlI,MAAM;aAClB,MAAA,IAAIF,UAAUoI,OAAQpI,CAAAA,KAAK,IAAIE,MAAWkI,KAAAA,OAAAA,CAAQlI,MAAM,EAAE;AAC/DiC,gBAAAA,OAAAA,CAAQI,KAAK,CAAC,iFAAA,CAAA;gBACd,OAAO,IAAA;AACT;AACF;AACA,QAAA,IAAIxE,SAASiK,OAAW,IAAA,CAACjK,QAAQiK,OAAO,CAACQ,gBAAgB,EAAI,EAAA;AAC3DrG,YAAAA,OAAAA,CAAQI,KAAK,CAAC,mFAAA,CAAA;YACd,OAAO,IAAA;AACT;AACA,QAAA,IAAI6E,MAAsCrJ,OAASiK,EAAAA,OAAAA;AACnD,QAAA,IAAIZ,GAAK,EAAA;AACP,YAAA,IAAIA,GAAImB,CAAAA,KAAK,KAAKG,QAAAA,CAASC,MAAM,EAAE;AACjCxG,gBAAAA,OAAAA,CAAQI,KAAK,CACX,4GAAA,CAAA;gBAEF,OAAO,IAAA;AACT;AACA,YAAA,IAAI6E,IAAIpH,KAAK,KAAKA,SAASoH,GAAIlH,CAAAA,MAAM,KAAKA,MAAQ,EAAA;AAChDiC,gBAAAA,OAAAA,CAAQI,KAAK,CACX,qGAAA,CAAA;gBAEF,OAAO,IAAA;AACT;SACK,MAAA;YACL6E,GAAM,GAAA,IAAI,CAACkB,oBAAoB,CAC7BpB,IAAAA,GAAO,iBAAoB,GAAA,YAAA,EAC3BlH,KACAE,EAAAA,MAAAA,EACAwI,QAASC,CAAAA,MAAM,EACf5K,OAAAA,CAAAA;AAEF,YAAA,IAAI,CAACqJ,GAAK,EAAA;gBACR,OAAO,IAAA;AACT;AACA,YAAA,IAAK,IAAIwB,CAAI,GAAA,CAAA,EAAGA,IAAIF,QAASC,CAAAA,MAAM,EAAEC,CAAK,EAAA,CAAA;gBACxCxB,GAAIyB,CAAAA,iBAAiB,CAACH,QAAQ,CAACE,CAAAA,CAAE,EAAE,CAAA,EAAG,CAAGA,EAAAA,CAAAA,EAAG,CAAG,EAAA,CAAA,EAAG5I,KAAOE,EAAAA,MAAAA,CAAAA;AAC3D;AACF;QACAkH,GAAII,CAAAA,cAAc,GAAGzJ,OAAAA,EAASyJ,cAAkB,IAAA,IAAA;QAChD,OAAOJ,GAAAA;AACT;IACA0B,eACEf,CAAAA,MAAqB,EACrB/H,KAAa,EACbE,MAAc,EACdqI,KAAa,EACbxK,OAAgC,EAChC;AACA,QAAA,MAAMqJ,MAAM,OAACrJ,EAASiK,OAA+B,IAAA,IAAIN,gBAAgB,IAAI,CAAA;QAC7E,IAAI,CAACN,GAAI2B,CAAAA,WAAW,EAAI,EAAA;AACtB5G,YAAAA,OAAAA,CAAQI,KAAK,CAAC,8DAAA,CAAA;YACd,OAAO,IAAA;AACT;QACA6E,GAAIc,CAAAA,WAAW,CAACH,MAAQ/H,EAAAA,KAAAA,EAAOE,QAAQqI,KAAO,EAAA,IAAI,CAAChB,mBAAmB,CAACxJ,OAAAA,CAAAA,CAAAA;QACvEqJ,GAAII,CAAAA,cAAc,GAAGzJ,OAAAA,EAASyJ,cAAkB,IAAA,IAAA;QAChD,OAAOJ,GAAAA;AACT;AACA4B,IAAAA,iBAAAA,CAAkBjB,MAAqB,EAAEkB,IAAY,EAAElL,OAAgC,EAAE;AACvF,QAAA,MAAMqJ,MAAM,OAACrJ,EAASiK,OAAiC,IAAA,IAAIX,kBAAkB,IAAI,CAAA;QACjF,IAAI,CAACD,GAAI8B,CAAAA,aAAa,EAAI,EAAA;AACxB/G,YAAAA,OAAAA,CAAQI,KAAK,CAAC,kEAAA,CAAA;YACd,OAAO,IAAA;AACT;AACA6E,QAAAA,GAAAA,CAAIc,WAAW,CAACH,MAAAA,EAAQkB,MAAM,IAAI,CAAC1B,mBAAmB,CAACxJ,OAAAA,CAAAA,CAAAA;QACvDqJ,GAAII,CAAAA,cAAc,GAAGzJ,OAAAA,EAASyJ,cAAkB,IAAA,IAAA;QAChD,OAAOJ,GAAAA;AACT;IACA+B,kBAAmBC,CAAAA,EAAoB,EAAE5B,cAA+B,EAAE;AACxE,QAAA,MAAMJ,GAAM,GAAA,IAAIiC,kBAAmB,CAAA,IAAI,EAAED,EAAAA,CAAAA;QACzChC,GAAII,CAAAA,cAAc,GAAGA,cAAkB,IAAA,IAAA;QACvC,OAAOJ,GAAAA;AACT;AACAkC,IAAAA,0BAAAA,CAA2BC,GAAgB,EAAEC,KAAa,EAAEC,GAAc,EAAEC,KAAa,EAAE;AACzF,QAAA,IAAI,CAACH,GAAAA,EAAKI,aAAmB,EAAA,IAAA,CAACF,KAAKxB,WAAe,EAAA,EAAA;AAChD9F,YAAAA,OAAAA,CAAQI,KAAK,CAAC,+CAAA,CAAA;AACd,YAAA;AACF;AACA,QAAA,MAAMqH,MAASL,GAAAA,GAAAA,CAAIM,mBAAmB,EAAA,GAAKL,KAAM,CAAA;AACjD,QAAA,IAAI,CAACI,MAAAA,IAAU,CAACA,MAAAA,CAAO3B,WAAW,EAAI,EAAA;AACpC9F,YAAAA,OAAAA,CAAQI,KAAK,CAAC,oEAAA,CAAA;AACd,YAAA;AACF;QACA,IAAI,CAACuH,aAAa,CAACF,MAAAA,EAAQL,IAAIQ,0BAA0B,CAACP,QAAQC,GAAKC,EAAAA,KAAAA,CAAAA;AACzE;AACAI,IAAAA,aAAAA,CAAcP,GAAc,EAAES,QAAgB,EAAEP,GAAc,EAAEQ,QAAgB,EAAE;AAChF,QAAA,IAAI,CAACV,GAAAA,EAAKtB,WAAiB,EAAA,IAAA,CAACwB,KAAKxB,WAAe,EAAA,EAAA;AAC9C9F,YAAAA,OAAAA,CAAQI,KAAK,CAAC,kCAAA,CAAA;AACd,YAAA;AACF;QACA,IAAI,CAAC2H,MAAOC,CAAAA,SAAS,CAACH,QAAAA,CAAAA,IAAaA,WAAW,CAAKA,IAAAA,QAAAA,IAAYT,GAAIa,CAAAA,aAAa,EAAE;AAChFjI,YAAAA,OAAAA,CAAQI,KAAK,CAAC,8CAAA,CAAA;AACd,YAAA;AACF;QACA,IAAI,CAAC2H,MAAOC,CAAAA,SAAS,CAACF,QAAAA,CAAAA,IAAaA,WAAW,CAAKA,IAAAA,QAAAA,IAAYR,GAAIW,CAAAA,aAAa,EAAE;AAChFjI,YAAAA,OAAAA,CAAQI,KAAK,CAAC,mDAAA,CAAA;AACd,YAAA;AACF;AACA,QAAA,MAAM8H,WAAWC,IAAKC,CAAAA,GAAG,CAAChB,GAAIvJ,CAAAA,KAAK,IAAIgK,QAAU,EAAA,CAAA,CAAA;AACjD,QAAA,MAAMQ,YAAYF,IAAKC,CAAAA,GAAG,CAAChB,GAAIrJ,CAAAA,MAAM,IAAI8J,QAAU,EAAA,CAAA,CAAA;AACnD,QAAA,MAAMS,WAAWH,IAAKC,CAAAA,GAAG,CAACd,GAAIzJ,CAAAA,KAAK,IAAIiK,QAAU,EAAA,CAAA,CAAA;AACjD,QAAA,MAAMS,YAAYJ,IAAKC,CAAAA,GAAG,CAACd,GAAIvJ,CAAAA,MAAM,IAAI+J,QAAU,EAAA,CAAA,CAAA;QACnD,IAAII,QAAAA,KAAaI,QAAYD,IAAAA,SAAAA,KAAcE,SAAW,EAAA;AACpDvI,YAAAA,OAAAA,CAAQI,KAAK,CAAC,4DAAA,CAAA;AACd,YAAA;AACF;AACA,QAAA,IAAIgH,GAAIxB,CAAAA,MAAM,KAAK0B,GAAAA,CAAI1B,MAAM,EAAE;AAC7B5F,YAAAA,OAAAA,CAAQI,KAAK,CAAC,+EAAA,CAAA;AACd,YAAA;AACF;AACA,QAAA,MAAMqH,MAASL,GAAAA,GAAAA;AACf,QAAA,MAAMoB,MAASlB,GAAAA,GAAAA;AACf,QAAA,IAAI,CAACrM,aAAa,CAACwN,WAAW,CAC5BhB,MAAOiB,CAAAA,MAAM,EACbF,MAAAA,CAAOE,MAAM,EACbb,QACAC,EAAAA,QAAAA,EACAI,UACAG,SACA,EAAA,CAAA,CAAA;AAEJ;AACAM,IAAAA,gBAAAA,CAAiBC,MAAiC,EAAE;QAClD,OAAO,IAAIC,aAAc,CAAA,IAAI,EAAED,MAAAA,CAAAA;AACjC;AACAtI,IAAAA,eAAAA,CAAgBC,MAAkC,EAAE;QAClD,OAAO,IAAIuI,eAAgB,CAAA,IAAI,EAAEvI,MAAAA,CAAAA;AACnC;IACAwI,YAAaC,CAAAA,WAAmB,EAAEpN,OAA8B,EAAE;QAChE,OAAO,IAAIqN,aAAa,IAAI,EAAE,IAAI,CAACC,kBAAkB,CAACtN,OAAUoN,CAAAA,EAAAA,WAAAA,CAAAA;AAClE;IACAG,UACEC,CAAAA,YAAoC,EACpCC,UAAkC,EAClCC,SAAiB,EACjBC,SAAiB,EACjBC,KAAa,EACb;QACA,IAAI,CAACvO,aAAa,CAACkO,UAAU,CAC3BC,YACAC,EAAAA,UAAAA,EACAC,WACAC,SACAC,EAAAA,KAAAA,CAAAA;AAEJ;IACAC,iBACE3E,CAAAA,IAAyD,EACzDlJ,OAA+B,EAC/B;QACA,OAAO,IAAI8N,kBAAkB,IAAI,EAAE5E,MAAM,IAAI,CAACoE,kBAAkB,CAACtN,OAAS,EAAA,OAAA,CAAA,CAAA;AAC5E;AACA+N,IAAAA,sBAAAA,CAAuBC,aAA+B,EAAEhO,OAA8B,EAAEkJ,IAAiB,EAAE;QACzG,OAAO,IAAI+E,uBAAuB,IAAI,EAAED,eAAe,IAAI,CAACV,kBAAkB,CAACtN,OAAUkJ,CAAAA,EAAAA,IAAAA,CAAAA;AAC3F;AACAgF,IAAAA,kBAAAA,CAAmBlO,OAA4B,EAAE;QAC/C,OAAO,IAAImO,kBAAmB,CAAA,IAAI,EAAEnO,OAAAA,CAAAA;AACtC;AACAoO,IAAAA,iBAAAA,CACEC,gBAA+B,EAC/BC,gBAA6B,EAC7BtO,OAA4B,EAC5B;AACA,QAAA,OAAO,IAAIuO,iBAAAA,CAAkB,IAAI,EAAEF,kBAAkBC,gBAAkBtO,EAAAA,OAAAA,CAAAA;AACzE;AACAwO,IAAAA,YAAAA,CAAa/C,KAAa,EAAEgD,SAAoB,EAAEC,cAA2C,EAAE;AAC7F,QAAA,IAAI,CAACvP,kBAAkB,CAACsM,KAAAA,CAAM,GAAGgD,SAAAA;AACjC,QAAA,IAAI,CAACrP,wBAAwB,CAACqM,MAAM,GAAGiD,cAAAA,IAAkBD,WAAWE,iBAAuB,EAAA,IAAA,IAAA;AAC7F;AACAC,IAAAA,YAAAA,CAAanD,KAAa,EAA2C;QACnE,OAAO;YAAC,IAAI,CAACtM,kBAAkB,CAACsM,KAAM,CAAA;YAAE,IAAI,CAACrM,wBAAwB,CAACqM,KAAM;AAAC,SAAA;AAC/E;;AAEA5F,IAAAA,WAAAA,CAAYgJ,EAAkD,EAAE;AAC9D,QAAA,IAAI,CAACxP,aAAa,CAACwG,WAAW,CAACgJ,EAAAA,CAAAA;AACjC;IACAC,WAAyC,GAAA;AACvC,QAAA,OAAO,IAAI,CAACzP,aAAa,CAACyP,WAAW,EAAA;AACvC;AACAhJ,IAAAA,UAAAA,CAAWiJ,OAAuD,EAAE;AAClE,QAAA,IAAI,CAAC1P,aAAa,CAACyG,UAAU,CAACiJ,OAAAA,CAAAA;AAChC;IACAC,UAAwC,GAAA;AACtC,QAAA,OAAO,IAAI,CAAC3P,aAAa,CAAC2P,UAAU,EAAA;AACtC;AACAC,IAAAA,UAAAA,CAAWC,OAA6B,EAAE;QACxC,IAAI,CAAClQ,eAAe,GAAGkQ,OAAAA;AACzB;IACAC,UAAa,GAAA;QACX,OAAO,IAAI,CAACnQ,eAAe;AAC7B;AACAoQ,IAAAA,eAAAA,CAAgBC,UAAkC,EAAE;QAClD,IAAI,CAACpQ,kBAAkB,GAAGoQ,UAAAA;AAC5B;IACAC,eAAkB,GAAA;QAChB,OAAO,IAAI,CAACrQ,kBAAkB;AAChC;AACAsQ,IAAAA,eAAAA,CAAgBC,QAAkC,EAAE;QAClD,IAAI,CAACtQ,gBAAgB,GAAGsQ,QAAAA;AAC1B;IACAC,eAAkB,GAAA;QAChB,OAAO,IAAI,CAACvQ,gBAAgB;AAC9B;IACAqB,cAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAClB,aAAa,CAACkB,cAAc,EAAA;AAC1C;AACAmP,IAAAA,yBAAAA,CAA0BC,OAAgB,EAAQ;AAChD,QAAA,IAAI,CAACvR,oBAAoB,GAAG,CAAC,CAACuR,OAAAA;AAChC;IACAC,sBAAkC,GAAA;QAChC,OAAO,IAAI,CAACxR,oBAAoB;AAClC;qBAEAyR,iBAAkBC,CAAAA,MAAoB,EAAE;AACtC,QAAA,OAAO,IAAI,CAACzQ,aAAa,CAACwQ,iBAAiB,CAACC,MAAAA,CAAAA;AAC9C;qBAEAC,kBAAmB1G,CAAAA,GAAsB,EAAE;AACzC,QAAA,OAAO,IAAI,CAAChK,aAAa,CAAC0Q,kBAAkB,CAAC1G,GAAAA,CAAAA;AAC/C;AACA,qBACA2G,kBAAqB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC3Q,aAAa,CAAC2Q,kBAAkB,EAAA;AAC9C;qBAEAC,gBAAiBC,CAAAA,GAAkB,EAAE;AACnC,QAAA,OAAO,IAAI,CAAC3Q,gBAAgB,CAAC4Q,GAAG,CAACD,GAAQ,CAAA,IAAA,IAAA;AAC3C;qBAEAE,gBAAiBC,CAAAA,IAA0B,EAAE;AAC3C,QAAA,MAAMhH,MAAM,IAAI,CAACpL,OAAO,CAAEqS,aAAa,CAACD,IAAAA,CAAAA;AACxC,QAAA,IAAIhH,GAAK,EAAA;YACP,IAAI,CAAC9J,gBAAgB,CAACgR,GAAG,CAAClH,GAAK,EAAA,EAAE,IAAI,CAAC/J,qBAAqB,CAAA;AAC7D;QACA,OAAO+J,GAAAA;AACT;qBAEAmH,wBAAyBnF,CAAAA,EAAoB,EAAE;AAC7C,QAAA,MAAMhC,MAAM,IAAI,CAACpL,OAAO,CAAEwS,qBAAqB,CAAC;YAAEC,MAAQrF,EAAAA;AAAG,SAAA,CAAA;AAC7D,QAAA,IAAIhC,GAAK,EAAA;YACP,IAAI,CAAC9J,gBAAgB,CAACgR,GAAG,CAAClH,GAAK,EAAA,EAAE,IAAI,CAAC/J,qBAAqB,CAAA;AAC7D;QACA,OAAO+J,GAAAA;AACT;qBAEAsH,gBAAiBN,CAAAA,IAA0B,EAAE;AAC3C,QAAA,MAAMO,UAAU,IAAI,CAAC3S,OAAO,CAAE8K,aAAa,CAACsH,IAAAA,CAAAA;AAC5C,QAAA,IAAIO,OAAS,EAAA;YACX,IAAI,CAACrR,gBAAgB,CAACgR,GAAG,CAACK,OAAS,EAAA,EAAE,IAAI,CAACtR,qBAAqB,CAAA;AACjE;QACA,OAAOsR,OAAAA;AACT;qBAEAC,kBAAmBR,CAAAA,IAA4B,EAAE;AAC/C,QAAA,MAAM5B,YAAY,IAAI,CAACxQ,OAAO,CAAEyG,eAAe,CAAC2L,IAAAA,CAAAA;AAChD,QAAA,IAAI5B,SAAW,EAAA;YACb,IAAI,CAAClP,gBAAgB,CAACgR,GAAG,CAAC9B,SAAW,EAAA,EAAE,IAAI,CAACnP,qBAAqB,CAAA;AACnE;QACA,OAAOmP,SAAAA;AACT;qBAEAqC,eAAgBT,CAAAA,IAAyB,EAAE;AACzC,QAAA,MAAMP,SAAS,IAAI,CAAC7R,OAAO,CAAEkP,YAAY,CAACkD,IAAAA,CAAAA;AAC1C,QAAA,IAAIP,MAAQ,EAAA;YACV,IAAI,CAACvQ,gBAAgB,CAACgR,GAAG,CAACT,MAAQ,EAAA,EAAE,IAAI,CAACxQ,qBAAqB,CAAA;AAChE;QACA,OAAOwQ,MAAAA;AACT;AACA,qBACAiB,oBAAAA,CAAqB9G,OAAmB,EAAEoG,IAA+B,EAAE;QACzE,MAAMW,IAAAA,GAAO/G,SAASgH,UAAWZ,CAAAA,IAAAA,CAAAA;AACjC,QAAA,IAAIW,IAAM,EAAA;YACR,IAAI,CAACzR,gBAAgB,CAACgR,GAAG,CAACS,IAAM,EAAA,EAAE,IAAI,CAAC1R,qBAAqB,CAAA;AAC9D;QACA,OAAO0R,IAAAA;AACT;qBAEAE,uBAAwBb,CAAAA,IAAiC,EAAE;AACzD,QAAA,MAAMc,WAAW,IAAI,CAAClT,OAAO,CAAEmT,oBAAoB,CAACf,IAAAA,CAAAA;AACpD,QAAA,IAAIc,QAAU,EAAA;YACZ,IAAI,CAAC5R,gBAAgB,CAACgR,GAAG,CAACY,QAAU,EAAA,EAAE,IAAI,CAAC7R,qBAAqB,CAAA;AAClE;QACA,OAAO6R,QAAAA;AACT;qBAEAE,wBAAyBhB,CAAAA,IAAkC,EAAE;AAC3D,QAAA,MAAMc,WAAW,IAAI,CAAClT,OAAO,CAAEqT,qBAAqB,CAACjB,IAAAA,CAAAA;AACrD,QAAA,IAAIc,QAAU,EAAA;YACZ,IAAI,CAAC5R,gBAAgB,CAACgR,GAAG,CAACY,QAAU,EAAA,EAAE,IAAI,CAAC7R,qBAAqB,CAAA;AAClE;QACA,OAAO6R,QAAAA;AACT;qBAEAI,iBAAkBC,CAAAA,IAAY,EAAE;AAC9B,QAAA,OAAO,IAAI,CAAC1S,kBAAkB,CAACyS,iBAAiB,CAACC,IAAAA,CAAAA;AACnD;qBAEAxI,YAAahJ,CAAAA,OAAuB,EAAE;AACpC,QAAA,OAAO,IAAI,CAACjB,aAAa,CAACiK,YAAY,CAAChJ,OAAAA,CAAAA;AACzC;qBAEAyR,oBAAqBpB,CAAAA,IAAgC,EAAE;AACrD,QAAA,OAAO,IAAI,CAACxR,eAAe,CAAC4S,oBAAoB,CAACpB,IAAAA,CAAAA;AACnD;IACAqB,KAAc,GAAA;QACZ,IAAI,CAACrS,aAAa,CAACqS,KAAK,EAAA;AAC1B;AACA,IAAA,MAAMC,UAAWlG,CAAAA,KAAa,EAAEmG,CAAS,EAAEC,CAAS,EAAEC,CAAS,EAAEC,CAAS,EAAEjC,MAAkB,EAAE;QAC9F,MAAMkC,EAAAA,GAAK,IAAI,CAACzR,cAAc,EAAA;AAC9B,QAAA,MAAM0R,eAAkBD,GAAAA,EAAAA,GACnBA,EAAGlG,CAAAA,mBAAmB,EAAE,CAACL,KAAM,CAAA,EAAEqB,MAClC,GAAA,IAAI,CAACzM,OAAO,CAAE6R,iBAAiB,EAAA;AACnC,QAAA,MAAMC,SAAYH,GAAAA,EAAAA,GACdA,EAAGlG,CAAAA,mBAAmB,EAAE,CAACL,KAAAA,CAAM,EAAEzB,MAAAA,GACjCoI,mBAAmB,CAAC,IAAI,CAAC9T,iBAAiB,CAAC;AAC/C,QAAA,IAAI2T,mBAAmBE,SAAW,EAAA;AAChC,YAAA,MAAME,YAAYC,yBAA0BH,CAAAA,SAAAA,CAAAA;YAC5C,MAAMI,UAAAA,GAAaT,IAAIC,CAAIM,GAAAA,SAAAA;AAC3B,YAAA,MAAMG,aAAgB,GAAA,IAAI,CAACrF,YAAY,CAACoF,UAAY,EAAA;gBAClDE,KAAO,EAAA;AACT,aAAA,CAAA;AACA,YAAA,IAAI,CAACC,kBAAkB,CAAC,GAAGd,CAAGC,EAAAA,CAAAA,EAAGC,GAAGC,CAAGS,EAAAA,aAAAA,CAAAA;YACvC,MAAMtJ,IAAAA,GAAO,IAAIyJ,UAAAA,CAAW7C,MAAOA,CAAAA,MAAM,EAAEA,MAAO8C,CAAAA,UAAU,EAAE9C,MAAAA,CAAO+C,UAAU,CAAA;YAC/E,MAAML,aAAAA,CAAcM,gBAAgB,CAAC5J,IAAAA,CAAAA;AACrCsJ,YAAAA,aAAAA,CAAcO,OAAO,EAAA;SAChB,MAAA;AACL3O,YAAAA,OAAAA,CAAQI,KAAK,CAAC,oFAAA,CAAA;AAChB;AACF;IACAkO,kBAAmBjH,CAAAA,KAAa,EAAEmG,CAAS,EAAEC,CAAS,EAAEC,CAAS,EAAEC,CAAS,EAAEjC,MAAqB,EAAE;QACnG,MAAMkC,EAAAA,GAAK,IAAI,CAACzR,cAAc,EAAA;AAC9B,QAAA,MAAM0R,eAAkBD,GAAAA,EAAAA,GACnBA,EAAGlG,CAAAA,mBAAmB,EAAE,CAACL,KAAM,CAAA,EAAEqB,MAClC,GAAA,IAAI,CAACzM,OAAO,CAAE6R,iBAAiB,EAAA;AACnC,QAAA,MAAMC,SAAYH,GAAAA,EAAAA,GACdA,EAAGlG,CAAAA,mBAAmB,EAAE,CAACL,KAAAA,CAAM,EAAEzB,MAAAA,GACjCoI,mBAAmB,CAAC,IAAI,CAAC9T,iBAAiB,CAAC;AAC/C,QAAA,IAAI2T,mBAAmBE,SAAW,EAAA;AAChC,YAAA,IAAI,CAACT,KAAK,EAAA;AACVsB,YAAAA,iBAAAA,CAAkBC,yBAAyB,CACzC,IAAI,CAAChV,OAAO,EACZgU,eACAE,EAAAA,SAAAA,EACAP,CACAC,EAAAA,CAAAA,EACAC,CACAC,EAAAA,CAAAA,EACA,GACA,CACAjC,EAAAA,MAAAA,CAAAA;SAEG,MAAA;AACL1L,YAAAA,OAAAA,CAAQI,KAAK,CACX,4FAAA,CAAA;AAEJ;AACF;IACA0O,YAAe,GAAA;;AAEf;IACAC,cAAiB,GAAA;;AAEjB;IACAC,YAAe,GAAA;QACb,IAAI,IAAI,CAACzT,oBAAoB,EAAE;AAC7B,YAAA,MAAM,IAAI8C,KAAM,CAAA,yEAAA,CAAA;AAClB;QACA,MAAM4Q,WAAAA,GAAc,IAAI,CAACrD,kBAAkB,EAAA;AAC3C,QAAA,MAAMK,IAAyC,GAAA;AAC7CiD,YAAAA,YAAAA,EAAcD,YAAYC,YAAY;AACtCC,YAAAA,kBAAAA,EAAoBF,YAAYG,WAAW;AAC3C9R,YAAAA,WAAAA,EAAa2R,YAAY3R;AAC3B,SAAA;QACA,IAAI,CAAC/B,oBAAoB,GAAG;YAC1B8T,EAAI,EAAA,CAAA;AACJC,YAAAA,OAAAA,EAAS,IAAI,CAACzV,OAAO,CAAE0V,yBAAyB,CAACtD,IAAAA,CAAAA;YACjDuD,YAAc,EAAA;AAChB,SAAA;AACF;IACAC,UAAa,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAClU,oBAAoB,EAAE;AAC9B,YAAA,MAAM,IAAI8C,KAAM,CAAA,mEAAA,CAAA;AAClB;QACA,IAAI,CAAC9C,oBAAoB,CAACiU,YAAY,GAAG,IAAI,CAACjU,oBAAoB,CAAC+T,OAAO,CAAC9M,MAAM,EAAA;QACjF,MAAMkN,GAAAA,GAAM,IAAI,CAACnU,oBAAoB;QACrC,IAAI,CAACA,oBAAoB,GAAG,IAAA;QAC5B,OAAOmU,GAAAA;AACT;AACUC,IAAAA,oBAAAA,CAAqBH,YAA0B,EAAE;AACzD,QAAA,IAAI,CAACvU,aAAa,CAAC2U,mBAAmB,CACnCJ,aAAoCA,YAAY,CAAA;QAEnD,OAAQA,aAAoCH,EAAE;AAChD;AACAQ,IAAAA,YAAAA,CAAanE,MAAoB,EAAEoE,MAAc,EAAEhJ,IAAY,EAAE;AAC/D,QAAA,IAAI,CAAC7L,aAAa,CAAC4U,YAAY,CAACnE,QAAQoE,MAAQhJ,EAAAA,IAAAA,CAAAA;AAClD;AACAiJ,IAAAA,aAAAA,CAAc9K,GAAsB,EAAE;AACpC,QAAA,IAAI,CAAChK,aAAa,CAAC8U,aAAa,CAAC9K,GAAAA,CAAAA;AACnC;IACA+K,YAAe,GAAA;QACb,IAAI,CAAC/U,aAAa,CAAC+U,YAAY,EAAA;AACjC;AACA,qBACAC,mCAAsC,GAAA;AACpC,QAAA,OAAO,IAAI,CAACxU,iBAAiB,CAACyU,0BAA0B,EAAA;AAC1D;AACA,qBACAC,kCAAqC,GAAA;QACnC,IAAI,CAAC1U,iBAAiB,CAAC2U,WAAW,EAAA;AACpC;AACA,qBACUC,eAAgBC,CAAAA,EAAe,EAAE;AACzC,QAAA,IAAI,CAACrV,aAAa,CAACsV,cAAc,CAACD,EAAAA,CAAAA;AACpC;qBAEA,YAAyB,GAAA;QACvB,IAAI,IAAI,CAACrW,UAAU,EAAE;YACnB,IAAI,CAACgB,aAAa,CAACuV,UAAU,EAAA;YAC7B,OAAO,IAAA;SACF,MAAA;YACL,OAAO,KAAA;AACT;AACF;qBAEA,UAAuB,GAAA;QACrB,IAAI,CAAC/U,iBAAiB,CAACgV,mBAAmB,EAAA;QAC1C,IAAI,CAACxV,aAAa,CAACyV,QAAQ,EAAA;AAC7B;qBAEA,KAAgBC,CAAAA,aAA4B,EAAEC,KAAa,EAAEC,KAAa,EAAE;QAC1E,IAAI,CAAC5V,aAAa,CAAC6V,IAAI,CACrB,IAAI,CAAClW,eAAe,EACpB,IAAI,CAACC,kBAAkB,EACvB,IAAI,CAACC,gBAAgB,EACrB,IAAI,CAACC,kBAAkB,EACvB,IAAI,CAACC,wBAAwB,EAC7B2V,aACAC,EAAAA,KAAAA,EACAC,KACA,EAAA,CAAA,CAAA;QAEF,IAAI,IAAI,CAACtV,oBAAoB,EAAE;YAC7B,IAAI,CAACA,oBAAoB,CAAC8T,EAAE,EAAA;AAC5B,YAAA,IAAI,CAACpU,aAAa,CAAC8V,OAAO,CACxB,IAAI,CAACxV,oBAAoB,CAAC+T,OAAO,EACjC,IAAI,CAAC1U,eAAe,EACpB,IAAI,CAACC,kBAAkB,EACvB,IAAI,CAACC,gBAAgB,EACrB,IAAI,CAACC,kBAAkB,EACvB,IAAI,CAACC,wBAAwB,EAC7B2V,aAAAA,EACAC,OACAC,KACA,EAAA,CAAA,CAAA;AAEJ;AACF;qBAEA,cAAUG,CAAeL,aAA4B,EAAEC,KAAa,EAAEC,KAAa,EAAEI,YAAoB,EAAE;QACzG,IAAI,CAAChW,aAAa,CAAC6V,IAAI,CACrB,IAAI,CAAClW,eAAe,EACpB,IAAI,CAACC,kBAAkB,EACvB,IAAI,CAACC,gBAAgB,EACrB,IAAI,CAACC,kBAAkB,EACvB,IAAI,CAACC,wBAAwB,EAC7B2V,aACAC,EAAAA,KAAAA,EACAC,KACAI,EAAAA,YAAAA,CAAAA;QAEF,IAAI,IAAI,CAAC1V,oBAAoB,EAAE;YAC7B,IAAI,CAACA,oBAAoB,CAAC8T,EAAE,EAAA;AAC5B,YAAA,IAAI,CAACpU,aAAa,CAAC8V,OAAO,CACxB,IAAI,CAACxV,oBAAoB,CAAC+T,OAAO,EACjC,IAAI,CAAC1U,eAAe,EACpB,IAAI,CAACC,kBAAkB,EACvB,IAAI,CAACC,gBAAgB,EACrB,IAAI,CAACC,kBAAkB,EACvB,IAAI,CAACC,wBAAwB,EAC7B2V,aAAAA,EACAC,OACAC,KACAI,EAAAA,YAAAA,CAAAA;AAEJ;AACF;qBAEA,QAAmBC,CAAAA,eAAuB,EAAEC,eAAuB,EAAEC,eAAuB,EAAE;AAC5F,QAAA,IAAI,CAACnW,aAAa,CAACoW,OAAO,CACxB,IAAI,CAACzW,eAAe,EACpB,IAAI,CAACG,kBAAkB,EACvB,IAAI,CAACC,wBAAwB,EAC7BkW,iBACAC,eACAC,EAAAA,eAAAA,CAAAA;AAEJ;IACQjQ,SAAY,GAAA;AAClB,QAAA,IAAI,CAACjH,iBAAiB,GAAGiE,SAAUC,CAAAA,GAAG,CAACkT,wBAAwB,EAAA;QAC/D,IAAI,CAACnX,YAAY,GAAG,IAAI,CAACJ,WAAW,CAAC8G,eAAe,CAAC0Q,2BAA2B,GAC5E,uBACA,GAAA,sBAAA;AACJ,QAAA,IAAI,CAAC3X,QAAQ,CAAEuH,SAAS,CAAC;YACvB9E,MAAQ,EAAA,IAAI,CAACxC,OAAO;YACpB+L,MAAQ,EAAA,IAAI,CAAC1L,iBAAiB;AAC9BmU,YAAAA,KAAAA,EAAOmD,eAAgBC,CAAAA,iBAAiB,GAAGD,eAAAA,CAAgBE,QAAQ;YACnEC,SAAW,EAAA,QAAA;YACXC,UAAY,EAAA;AACd,SAAA,CAAA;AACA,QAAA,IAAI,CAACvP,8BAA8B,EAAA;AACrC;IACQA,8BAAiC,GAAA;QACvC,MAAMxE,KAAAA,GAAQsK,KAAKC,GAAG,CAAC,GAAG,IAAI,CAACvL,MAAM,CAACgB,KAAK,CAAA;QAC3C,MAAME,MAAAA,GAASoK,KAAKC,GAAG,CAAC,GAAG,IAAI,CAACvL,MAAM,CAACkB,MAAM,CAAA;QAC7C,IAAI,CAAC3D,wBAAwB,EAAEyX,OAAAA,EAAAA;QAC/B,IAAI,CAACzX,wBAAwB,GAAG,IAAA;QAChC,IAAI,CAACC,4BAA4B,GAAG,IAAA;QACpC,IAAI,CAACC,oBAAoB,EAAEuX,OAAAA,EAAAA;AAC3B,QAAA,IAAI,IAAI,CAACxW,YAAY,GAAG,CAAG,EAAA;AACzB,YAAA,IAAI,CAACjB,wBAAwB,GAAG,IAAI,CAAC4R,gBAAgB,CAAC;gBACpDlF,IAAM,EAAA;AACJjJ,oBAAAA,KAAAA;AACAE,oBAAAA,MAAAA;oBACA+T,kBAAoB,EAAA;AACtB,iBAAA;gBACAlM,MAAQ,EAAA,IAAI,CAAC1L,iBAAiB;gBAC9B6X,SAAW,EAAA,IAAA;gBACX9J,aAAe,EAAA,CAAA;gBACf3K,WAAa,EAAA,IAAI,CAACjC,YAAY;AAC9BgT,gBAAAA,KAAAA,EAAOmD,gBAAgBC;AACzB,aAAA,CAAA;AACA,YAAA,IAAI,CAACpX,4BAA4B,GAAG,IAAI,CAACD,wBAAwB,CAACyS,UAAU,EAAA;AAC9E;AACA,QAAA,IAAI,CAACvS,oBAAoB,GAAG,IAAI,CAAC0R,gBAAgB,CAAC;YAChDlF,IAAM,EAAA;AACJjJ,gBAAAA,KAAAA;AACAE,gBAAAA,MAAAA;gBACA+T,kBAAoB,EAAA;AACtB,aAAA;YACAlM,MAAQ,EAAA,IAAI,CAACzL,YAAY;YACzB4X,SAAW,EAAA,IAAA;YACX9J,aAAe,EAAA,CAAA;YACf3K,WAAa,EAAA,IAAI,CAACjC,YAAY;AAC9BgT,YAAAA,KAAAA,EAAOmD,gBAAgBC;AACzB,SAAA,CAAA;AACA,QAAA,IAAI,CAAClX,wBAAwB,GAAG,IAAI,CAACD,oBAAoB,CAACuS,UAAU,EAAA;QACpE,IAAI,CAACzR,sBAAsB,GAAG;AAC5B8H,YAAAA,KAAAA,EAAO,CAAC,eAAe,EAAE,IAAI,CAAC7H,YAAY,CAAE,CAAA;YAC5C4O,gBAAkB,EAAA;AAChB,gBAAA;oBACE2C,IAAM,EAAA,IAAI,CAACvR,YAAY,GAAG,IAAI,IAAI,CAAChB,4BAA4B,GAAG,IAAA;oBAClE2X,aAAeC,EAAAA,SAAAA;oBACfC,MAAQ,EAAA,OAAA;oBACRC,UAAY,EAAA;AAAC,wBAAA,CAAA;AAAG,wBAAA,CAAA;AAAG,wBAAA,CAAA;AAAG,wBAAA;AAAE,qBAAA;oBACxBC,OAAS,EAAA;AACX;AACD,aAAA;YACDC,sBAAwB,EAAA;gBACtBzF,IAAM,EAAA,IAAI,CAACrS,wBAAwB;gBACnC+X,WAAa,EAAA,OAAA;gBACbC,eAAiB,EAAA,CAAA;gBACjBC,YAAc,EAAA,OAAA;gBACdC,aAAe,EAAA,OAAA;gBACfC,iBAAmB,EAAA,CAAA;gBACnBC,cAAgB,EAAA;AAClB;AACF,SAAA;AACF;AACF;;;;"}
@@ -13,6 +13,7 @@ class WebGPURenderPass {
13
13
  _currentViewport;
14
14
  _currentScissor;
15
15
  _frameBufferInfo;
16
+ _deferredMipmapTextures;
16
17
  constructor(device){
17
18
  this._device = device;
18
19
  this._renderCommandEncoder = null;
@@ -21,6 +22,7 @@ class WebGPURenderPass {
21
22
  this._currentViewport = null;
22
23
  this._currentScissor = null;
23
24
  this._frameBufferInfo = this.createFrameBufferInfo(null);
25
+ this._deferredMipmapTextures = [];
24
26
  }
25
27
  get active() {
26
28
  return !!this._renderPassEncoder;
@@ -168,6 +170,10 @@ class WebGPURenderPass {
168
170
  if (validation & VALIDATION_FAILED) {
169
171
  return;
170
172
  }
173
+ if (this.hasDeferredMipmapsForBindGroups(bindGroups)) {
174
+ this.end();
175
+ this.flushDeferredMipmapsForBindGroups(bindGroups);
176
+ }
171
177
  if (validation & VALIDATION_NEED_NEW_PASS) {
172
178
  this.end();
173
179
  }
@@ -287,7 +293,7 @@ class WebGPURenderPass {
287
293
  this.setViewport(this._currentViewport);
288
294
  this.setScissor(this._currentScissor);
289
295
  }
290
- end() {
296
+ end(generateMipmaps = true) {
291
297
  if (!this.active) {
292
298
  return;
293
299
  }
@@ -302,15 +308,38 @@ class WebGPURenderPass {
302
308
  const options = this._frameBufferInfo.frameBuffer.getOptions();
303
309
  if (options.colorAttachments) {
304
310
  for (const attachment of options.colorAttachments){
305
- attachment.texture._markAsCurrentFB(false);
306
- if (attachment.generateMipmaps && attachment.texture.mipLevelCount > 1) {
307
- attachment.texture.generateMipmaps();
308
- }
311
+ const texture = attachment.texture;
312
+ texture._markAsCurrentFB(false);
313
+ this.handleColorAttachmentMipmap(texture, !!attachment.generateMipmaps, generateMipmaps);
309
314
  }
310
315
  }
311
316
  options.depthAttachment?.texture?._markAsCurrentFB(false);
312
317
  }
313
318
  }
319
+ hasDeferredMipmapsForBindGroups(bindGroups) {
320
+ return bindGroups?.some((bindGroup)=>{
321
+ return bindGroup?.textureList.some((texture)=>this._deferredMipmapTextures.indexOf(texture) >= 0);
322
+ });
323
+ }
324
+ flushDeferredMipmapsForBindGroups(bindGroups) {
325
+ if (!bindGroups) {
326
+ this.flushDeferredMipmaps();
327
+ return;
328
+ }
329
+ for (const bindGroup of bindGroups){
330
+ for (const texture of bindGroup?.textureList ?? []){
331
+ this.flushDeferredMipmap(texture);
332
+ }
333
+ }
334
+ }
335
+ flushDeferredMipmaps() {
336
+ const textures = this._deferredMipmapTextures.splice(0);
337
+ for (const texture of textures){
338
+ if (!texture.disposed) {
339
+ texture.generateMipmaps();
340
+ }
341
+ }
342
+ }
314
343
  capture(renderBundleEncoder, program, vertexData, stateSet, bindGroups, bindGroupOffsets, primitiveType, first, count, numInstances) {
315
344
  const validation = this.validateDraw(program, bindGroups, stateSet, primitiveType, first, count, numInstances);
316
345
  if (validation & VALIDATION_FAILED) {
@@ -421,6 +450,30 @@ class WebGPURenderPass {
421
450
  }
422
451
  return validation;
423
452
  }
453
+ handleColorAttachmentMipmap(texture, attachmentGenerateMipmaps, generateMipmaps) {
454
+ if (!attachmentGenerateMipmaps || texture.mipLevelCount <= 1) {
455
+ return;
456
+ }
457
+ if (generateMipmaps) {
458
+ this.removeDeferredMipmap(texture);
459
+ texture.generateMipmaps();
460
+ } else if (this._deferredMipmapTextures.indexOf(texture) < 0) {
461
+ this._deferredMipmapTextures.push(texture);
462
+ }
463
+ }
464
+ flushDeferredMipmap(texture) {
465
+ if (this.removeDeferredMipmap(texture) && !texture.disposed) {
466
+ texture.generateMipmaps();
467
+ }
468
+ }
469
+ removeDeferredMipmap(texture) {
470
+ const index = this._deferredMipmapTextures.indexOf(texture);
471
+ if (index >= 0) {
472
+ this._deferredMipmapTextures.splice(index, 1);
473
+ return true;
474
+ }
475
+ return false;
476
+ }
424
477
  setBindGroupsForRender(renderPassEncoder, program, bindGroups, bindGroupOffsets, renderBundleEncoder) {
425
478
  if (bindGroups) {
426
479
  for(let i = 0; i < 4; i++){