@zephyr3d/editor 0.3.5 → 0.3.7

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 (48) hide show
  1. package/dist/assets/{index-DlnbO59X.js → index-ySiLtSxz.js} +2 -2
  2. package/dist/assistant/zephyr-types-index.json +14215 -7892
  3. package/dist/index.html +1 -1
  4. package/dist/modules/zephyr3d_backend-webgl.js.map +1 -1
  5. package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
  6. package/dist/modules/zephyr3d_base.js +152 -152
  7. package/dist/modules/zephyr3d_base.js.map +1 -1
  8. package/dist/modules/zephyr3d_imgui.js.map +1 -1
  9. package/dist/modules/zephyr3d_loaders.js +6 -6
  10. package/dist/modules/zephyr3d_loaders.js.map +1 -1
  11. package/dist/modules/zephyr3d_scene.js +2538 -348
  12. package/dist/modules/zephyr3d_scene.js.map +1 -1
  13. package/dist/vendor/zephyr3d/backend-webgl/dist/index.js.map +1 -1
  14. package/dist/vendor/zephyr3d/backend-webgpu/dist/index.js.map +1 -1
  15. package/dist/vendor/zephyr3d/base/dist/vfs/common.js +152 -152
  16. package/dist/vendor/zephyr3d/base/dist/vfs/common.js.map +1 -1
  17. package/dist/vendor/zephyr3d/imgui/dist/index.d.ts +7 -0
  18. package/dist/vendor/zephyr3d/imgui/dist/index.js.map +1 -1
  19. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js +6 -6
  20. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js.map +1 -1
  21. package/dist/vendor/zephyr3d/scene/dist/animation/animation.js +87 -0
  22. package/dist/vendor/zephyr3d/scene/dist/animation/animation.js.map +1 -1
  23. package/dist/vendor/zephyr3d/scene/dist/animation/animationcontroller.js +503 -0
  24. package/dist/vendor/zephyr3d/scene/dist/animation/animationcontroller.js.map +1 -0
  25. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +782 -156
  26. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
  27. package/dist/vendor/zephyr3d/scene/dist/animation/animationtimeline.js +974 -0
  28. package/dist/vendor/zephyr3d/scene/dist/animation/animationtimeline.js.map +1 -0
  29. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js +320 -0
  30. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
  31. package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js +130 -125
  32. package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js.map +1 -1
  33. package/dist/vendor/zephyr3d/scene/dist/asset/model.js +64 -63
  34. package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
  35. package/dist/vendor/zephyr3d/scene/dist/index.d.ts +1270 -9
  36. package/dist/vendor/zephyr3d/scene/dist/index.js +3 -1
  37. package/dist/vendor/zephyr3d/scene/dist/index.js.map +1 -1
  38. package/dist/vendor/zephyr3d/scene/dist/material/mixins/lit.js +7 -3
  39. package/dist/vendor/zephyr3d/scene/dist/material/mixins/lit.js.map +1 -1
  40. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +1 -0
  41. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
  42. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js +4 -3
  43. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
  44. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js +1 -1
  45. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
  46. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js +3 -2
  47. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js.map +1 -1
  48. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"zephyr3d_backend-webgpu.js","sources":["../../../../libs/backend-webgpu/src/gpuobject_webgpu.ts","../../../../libs/backend-webgpu/src/gpuprogram_webgpu.ts","../../../../libs/backend-webgpu/src/uploadringbuffer.ts","../../../../libs/backend-webgpu/src/buffer_webgpu.ts","../../../../libs/backend-webgpu/src/structuredbuffer_webgpu.ts","../../../../libs/backend-webgpu/src/bindgroup_webgpu.ts","../../../../libs/backend-webgpu/src/constants_webgpu.ts","../../../../libs/backend-webgpu/src/utils_webgpu.ts","../../../../libs/backend-webgpu/src/basetexture_webgpu.ts","../../../../libs/backend-webgpu/src/texture2d_webgpu.ts","../../../../libs/backend-webgpu/src/texture2darray_webgpu.ts","../../../../libs/backend-webgpu/src/texture3d_webgpu.ts","../../../../libs/backend-webgpu/src/texturecube_webgpu.ts","../../../../libs/backend-webgpu/src/texturevideo_webgpu.ts","../../../../libs/backend-webgpu/src/capabilities_webgpu.ts","../../../../libs/backend-webgpu/src/vertexlayout_webgpu.ts","../../../../libs/backend-webgpu/src/renderstates_webgpu.ts","../../../../libs/backend-webgpu/src/pipeline_cache.ts","../../../../libs/backend-webgpu/src/framebuffer_webgpu.ts","../../../../libs/backend-webgpu/src/indexbuffer_webgpu.ts","../../../../libs/backend-webgpu/src/bindgroup_cache.ts","../../../../libs/backend-webgpu/src/vertexlayout_cache.ts","../../../../libs/backend-webgpu/src/sampler_webgpu.ts","../../../../libs/backend-webgpu/src/sampler_cache.ts","../../../../libs/backend-webgpu/src/renderpass_webgpu.ts","../../../../libs/backend-webgpu/src/computepass_webgpu.ts","../../../../libs/backend-webgpu/src/commandqueue.ts","../../../../libs/backend-webgpu/src/device.ts","../../../../libs/backend-webgpu/src/index.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n VertexLayout,\r\n TextureSampler,\r\n BaseTexture,\r\n Texture2D,\r\n Texture2DArray,\r\n Texture3D,\r\n TextureCube,\r\n TextureVideo,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n GPUObject\r\n} from '@zephyr3d/device';\r\nimport { genDefaultName } from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Disposable } from '@zephyr3d/base';\r\n\r\nlet _uniqueId = 0;\r\n\r\nexport abstract class WebGPUObject<T> extends Disposable implements GPUObject<T> {\r\n protected _device: WebGPUDevice;\r\n protected _object: Nullable<T>;\r\n protected _uid: number;\r\n protected _cid: number;\r\n protected _name: string;\r\n protected _queueState: number;\r\n protected _restoreHandler: Nullable<(tex: GPUObject) => void>;\r\n constructor(device: WebGPUDevice) {\r\n super();\r\n this._device = device;\r\n this._object = null;\r\n this._uid = ++_uniqueId;\r\n this._cid = 1;\r\n this._name = genDefaultName(this);\r\n this._queueState = 0;\r\n this._restoreHandler = null;\r\n this._device.addGPUObject(this);\r\n }\r\n get device(): AbstractDevice {\r\n return this._device;\r\n }\r\n get object() {\r\n return this._object;\r\n }\r\n get uid() {\r\n return this._uid;\r\n }\r\n get cid() {\r\n return this._cid;\r\n }\r\n get restoreHandler() {\r\n return this._restoreHandler;\r\n }\r\n set restoreHandler(handler: Nullable<(obj: GPUObject) => void>) {\r\n this._restoreHandler = handler;\r\n }\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val) {\r\n if (val !== this._name) {\r\n const lastName = this._name;\r\n this._name = val;\r\n this._device.dispatchEvent('gpuobject_rename', this, lastName);\r\n }\r\n }\r\n get queueState() {\r\n return this._queueState;\r\n }\r\n set queueState(val) {\r\n this._queueState = val;\r\n }\r\n isVertexLayout(): this is VertexLayout {\r\n return false;\r\n }\r\n isFramebuffer(): this is FrameBuffer {\r\n return false;\r\n }\r\n isSampler(): this is TextureSampler {\r\n return false;\r\n }\r\n isTexture(): this is BaseTexture {\r\n return false;\r\n }\r\n isTexture2D(): this is Texture2D {\r\n return false;\r\n }\r\n isTexture2DArray(): this is Texture2DArray {\r\n return false;\r\n }\r\n isTexture3D(): this is Texture3D {\r\n return false;\r\n }\r\n isTextureCube(): this is TextureCube {\r\n return false;\r\n }\r\n isTextureVideo(): this is TextureVideo {\r\n return false;\r\n }\r\n isProgram(): this is GPUProgram {\r\n return false;\r\n }\r\n isBuffer(): this is GPUDataBuffer {\r\n return false;\r\n }\r\n isBindGroup(): this is BindGroup {\r\n return false;\r\n }\r\n reload() {\r\n if (this.disposed) {\r\n this._device.restoreObject(this);\r\n this._cid++;\r\n }\r\n }\r\n destroy() {\r\n throw new Error('Abstract function call: dispose()');\r\n }\r\n restore() {\r\n throw new Error('Abstract function call: restore()');\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._device.disposeObject(this, true);\r\n }\r\n}\r\n","import type {\r\n GPUProgramConstructParams,\r\n RenderProgramConstructParams,\r\n ComputeProgramConstructParams,\r\n GPUProgram,\r\n BindGroupLayout,\r\n PBStructTypeInfo,\r\n ShaderKind\r\n} from '@zephyr3d/device';\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Immutable, Nullable } from '@zephyr3d/base';\r\n\r\nexport class WebGPUProgram extends WebGPUObject<unknown> implements GPUProgram {\r\n private static _hashCounter = 0;\r\n private readonly _type: 'render' | 'compute';\r\n private readonly _vs!: string;\r\n private readonly _fs!: string;\r\n private readonly _cs!: string;\r\n private readonly _label: string;\r\n private readonly _hash: string;\r\n private readonly _fragmentOutputCount: number;\r\n private _error: string;\r\n private readonly _bindGroupLayouts: BindGroupLayout[];\r\n private readonly _vertexAttributes!: string;\r\n private _csModule!: GPUShaderModule;\r\n private _vsModule!: GPUShaderModule;\r\n private _fsModule!: GPUShaderModule;\r\n private _pipelineLayout!: GPUPipelineLayout;\r\n constructor(device: WebGPUDevice, params: GPUProgramConstructParams) {\r\n super(device);\r\n this._type = params.type;\r\n this._label = params.label ?? `Program ${this.uid}`;\r\n this._bindGroupLayouts = [...params.params.bindGroupLayouts];\r\n this._error = '';\r\n if (params.type === 'render') {\r\n const renderParams = params.params as RenderProgramConstructParams;\r\n this._vs = renderParams.vs;\r\n this._fs = renderParams.fs;\r\n this._fragmentOutputCount =\r\n renderParams.fragmentOutputCount ?? WebGPUProgram.countFragmentOutputs(this._fs);\r\n this._vertexAttributes = renderParams.vertexAttributes ? renderParams.vertexAttributes.join(':') : '';\r\n } else {\r\n const computeParams = params.params as ComputeProgramConstructParams;\r\n this._cs = computeParams.source;\r\n this._fragmentOutputCount = 0;\r\n }\r\n this._load();\r\n this._hash = String(++WebGPUProgram._hashCounter);\r\n }\r\n get type() {\r\n return this._type;\r\n }\r\n get label() {\r\n return this._label;\r\n }\r\n getCompileError() {\r\n return this._error;\r\n }\r\n getShaderSource(kin: ShaderKind) {\r\n switch (kin) {\r\n case 'vertex':\r\n return this._vs;\r\n case 'fragment':\r\n return this._fs;\r\n case 'compute':\r\n return this._cs;\r\n default:\r\n return null;\r\n }\r\n }\r\n getBindingInfo(name: string) {\r\n for (let group = 0; group < this._bindGroupLayouts.length; group++) {\r\n const layout = this._bindGroupLayouts[group];\r\n const bindName = layout.nameMap?.[name] ?? name;\r\n for (let binding = 0; binding < layout.entries.length; binding++) {\r\n const bindingPoint = layout.entries[binding];\r\n if (bindingPoint.name === bindName) {\r\n return {\r\n group: group,\r\n binding: binding,\r\n type: bindingPoint.type\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n get bindGroupLayouts(): Immutable<BindGroupLayout[]> {\r\n return this._bindGroupLayouts;\r\n }\r\n get vertexAttributes() {\r\n return this._vertexAttributes;\r\n }\r\n get fragmentOutputCount() {\r\n return this._fragmentOutputCount;\r\n }\r\n get hash() {\r\n return this._hash;\r\n }\r\n getPipelineLayout() {\r\n return this._pipelineLayout;\r\n }\r\n getShaderModule() {\r\n return {\r\n vsModule: this._vsModule,\r\n fsModule: this._fsModule,\r\n csModule: this._csModule,\r\n pipelineLayout: this._pipelineLayout\r\n };\r\n }\r\n get fsModule() {\r\n return this._fsModule;\r\n }\r\n destroy() {\r\n this._object = null;\r\n }\r\n restore() {\r\n if (!this._object) {\r\n this._load();\r\n }\r\n }\r\n isProgram(): this is GPUProgram {\r\n return true;\r\n }\r\n createUniformBuffer(uniform: string) {\r\n const type = this.getBindingInfo(uniform)?.type as PBStructTypeInfo;\r\n return type ? this.device.createStructuredBuffer(type, { usage: 'uniform' }) : null;\r\n }\r\n private _load() {\r\n if (this._type === 'render') {\r\n this._vsModule = this.createShaderModule(this._vs);\r\n this._fsModule = this.createShaderModule(this._fs);\r\n } else {\r\n this._csModule = this.createShaderModule(this._cs);\r\n }\r\n this._pipelineLayout = this.createPipelineLayout(this._bindGroupLayouts);\r\n this._object = {};\r\n }\r\n private createPipelineLayout(bindGroupLayouts: BindGroupLayout[]) {\r\n const layouts: GPUBindGroupLayout[] = [];\r\n bindGroupLayouts.forEach((val) => {\r\n layouts.push(this._device.fetchBindGroupLayout(val)[1]);\r\n });\r\n return this._device.device.createPipelineLayout({\r\n bindGroupLayouts: layouts\r\n });\r\n }\r\n private createShaderModule(code: string) {\r\n let sm: Nullable<GPUShaderModule> = this._device.device.createShaderModule({ label: this._label, code });\r\n if (sm) {\r\n const func: (this: GPUShaderModule) => Promise<GPUCompilationInfo> =\r\n (sm as any).compilationInfo || (sm as any).getCompilationInfo;\r\n if (!func) {\r\n return sm;\r\n }\r\n func.call(sm).then((compilationInfo) => {\r\n let err = false;\r\n if (compilationInfo?.messages?.length > 0) {\r\n let msg = '';\r\n for (const message of compilationInfo.messages) {\r\n if (message.type === 'error') {\r\n err = true;\r\n }\r\n msg += `Line ${message.lineNum}:${message.linePos} - ${code.slice(\r\n message.offset,\r\n message.offset + message.length\r\n )}\\n`;\r\n msg += `${message.message}\\n`;\r\n if (message.type === 'error') {\r\n err = true;\r\n console.error(msg);\r\n } else if (message.type === 'warning') {\r\n console.warn(msg);\r\n } else {\r\n console.info(msg);\r\n }\r\n this._error += msg;\r\n }\r\n }\r\n if (err) {\r\n sm = null;\r\n }\r\n });\r\n }\r\n return sm;\r\n }\r\n private static countFragmentOutputs(source: string) {\r\n const outputStruct = /struct\\s+zFSOutput\\s*\\{([\\s\\S]*?)\\};/.exec(source);\r\n if (!outputStruct) {\r\n return 0;\r\n }\r\n let count = 0;\r\n const re = /@location\\((\\d+)\\)/g;\r\n let match: Nullable<RegExpExecArray>;\r\n while ((match = re.exec(outputStruct[1]))) {\r\n count = Math.max(count, Number(match[1]) + 1);\r\n }\r\n return count;\r\n }\r\n use() {\r\n this._device.setProgram(this);\r\n }\r\n}\r\n","import type { Nullable } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nexport interface MappedBuffer {\r\n buffer: GPUBuffer;\r\n size: number;\r\n offset: number;\r\n used: boolean;\r\n mappedRange: Nullable<ArrayBuffer>;\r\n}\r\n\r\nexport interface UploadBuffer {\r\n mappedBuffer: MappedBuffer;\r\n uploadSize: number;\r\n uploadBuffer: Nullable<GPUBuffer>;\r\n uploadOffset: number;\r\n}\r\n\r\nexport interface UploadImage {\r\n offsetX: number;\r\n offsetY: number;\r\n offsetZ: number;\r\n srcX: number;\r\n srcY: number;\r\n srcZ: number;\r\n width: number;\r\n height: number;\r\n depth: number;\r\n mipLevel: number;\r\n image: ImageBitmap | HTMLCanvasElement | OffscreenCanvas;\r\n}\r\n\r\nexport interface UploadTexture {\r\n mappedBuffer: MappedBuffer;\r\n uploadOffsetX: number;\r\n uploadOffsetY: number;\r\n uploadOffsetZ: number;\r\n uploadWidth: number;\r\n uploadHeight: number;\r\n uploadDepth: number;\r\n bufferStride: number;\r\n mipLevel: number;\r\n}\r\n\r\nexport class UploadRingBuffer {\r\n private readonly _device: WebGPUDevice;\r\n private _bufferList: MappedBuffer[];\r\n private readonly _defaultSize: number;\r\n private _unmappedBufferList: MappedBuffer[];\r\n constructor(device: WebGPUDevice, defaultSize = 64 * 1024) {\r\n this._device = device;\r\n this._bufferList = [];\r\n this._defaultSize = defaultSize;\r\n this._unmappedBufferList = [];\r\n }\r\n uploadBuffer(\r\n src: Nullable<ArrayBuffer>,\r\n dst: Nullable<GPUBuffer>,\r\n srcOffset: number,\r\n dstOffset: number,\r\n uploadSize: number\r\n ) {\r\n const size = (uploadSize + 3) & ~3;\r\n const mappedBuffer = this.fetchBufferMapped(size);\r\n if (src) {\r\n const mappedRange = mappedBuffer.mappedRange; //mappedBuffer.buffer.getMappedRange(mappedBuffer.offset, size);\r\n new Uint8Array(mappedRange!, mappedBuffer.offset, size).set(new Uint8Array(src, srcOffset, uploadSize));\r\n }\r\n const upload = {\r\n mappedBuffer: { ...mappedBuffer },\r\n uploadSize: size,\r\n uploadBuffer: dst,\r\n uploadOffset: dstOffset\r\n };\r\n mappedBuffer.offset += size;\r\n mappedBuffer.offset = (mappedBuffer.offset + 7) & ~7;\r\n return upload;\r\n }\r\n beginUploads() {\r\n for (let i = this._bufferList.length - 1; i >= 0; i--) {\r\n const buffer = this._bufferList[i];\r\n if (buffer.used) {\r\n buffer.buffer.unmap();\r\n this._unmappedBufferList.push(buffer);\r\n this._bufferList.splice(i, 1);\r\n buffer.mappedRange = null;\r\n }\r\n }\r\n return this._unmappedBufferList.length;\r\n }\r\n endUploads() {\r\n for (const buffer of this._unmappedBufferList) {\r\n buffer.buffer.mapAsync(GPUMapMode.WRITE).then(() => {\r\n buffer.offset = 0;\r\n buffer.used = false;\r\n buffer.mappedRange = buffer.buffer.getMappedRange();\r\n this._bufferList.push(buffer);\r\n });\r\n }\r\n this._unmappedBufferList = [];\r\n }\r\n purge() {\r\n for (let i = this._bufferList.length - 1; i >= 0; i--) {\r\n const buffer = this._bufferList[i];\r\n if (buffer.mappedRange) {\r\n buffer.buffer.unmap();\r\n buffer.buffer.destroy();\r\n }\r\n }\r\n this._bufferList = [];\r\n for (const buffer of this._unmappedBufferList) {\r\n buffer.buffer.destroy();\r\n }\r\n this._unmappedBufferList = [];\r\n }\r\n fetchBufferMapped(size: number) {\r\n for (const buffer of this._bufferList) {\r\n if (buffer.size - buffer.offset >= size) {\r\n buffer.used = true;\r\n return buffer;\r\n }\r\n }\r\n const bufferSize = (Math.max(size, this._defaultSize) + 3) & ~3;\r\n const buf = this._device.device.createBuffer({\r\n label: `StagingRingBuffer${this._bufferList.length}:${bufferSize}`,\r\n size: bufferSize,\r\n usage: GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC,\r\n mappedAtCreation: true\r\n });\r\n this._bufferList.push({\r\n buffer: buf,\r\n size: bufferSize,\r\n offset: 0,\r\n used: true,\r\n mappedRange: buf.getMappedRange()\r\n });\r\n return this._bufferList[this._bufferList.length - 1];\r\n }\r\n}\r\n","import type { GPUDataBuffer } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport { UploadRingBuffer } from './uploadringbuffer';\r\nimport type { Nullable, TypedArray, TypedArrayConstructor } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { MappedBuffer } from './uploadringbuffer';\r\n\r\ntype PendingUploadRange = {\r\n offset: number;\r\n size: number;\r\n};\r\n\r\nexport class WebGPUBuffer extends WebGPUObject<GPUBuffer> implements GPUDataBuffer<GPUBuffer> {\r\n private readonly _size: number;\r\n private readonly _usage: number;\r\n private _gpuUsage: number;\r\n private _memCost: number;\r\n private readonly _ringBuffer: UploadRingBuffer;\r\n protected _pendingUploads: PendingUploadRange[];\r\n private _pendingUploadBuffer: Nullable<MappedBuffer>;\r\n constructor(device: WebGPUDevice, usage: number, data: TypedArray | number) {\r\n super(device);\r\n this._object = null;\r\n this._memCost = 0;\r\n this._usage = usage;\r\n this._gpuUsage = 0;\r\n this._size = typeof data === 'number' ? data : data.byteLength;\r\n if (this._size <= 0) {\r\n throw new Error('can not create buffer with zero size');\r\n }\r\n this._ringBuffer = new UploadRingBuffer(device, (this._size + 15) & ~15);\r\n this._pendingUploads = [];\r\n this._pendingUploadBuffer = null;\r\n this.load(typeof data === 'number' ? null : data);\r\n }\r\n get hash() {\r\n return this._object ? this._device.gpuGetObjectHash(this._object) : 0;\r\n }\r\n get byteLength() {\r\n return this._size;\r\n }\r\n get usage() {\r\n return this._usage;\r\n }\r\n get gpuUsage() {\r\n return this._gpuUsage;\r\n }\r\n private mergePendingUpload(offset: number, size: number) {\r\n let start = offset;\r\n let end = offset + size;\r\n let insertIndex = this._pendingUploads.length;\r\n for (let i = 0; i < this._pendingUploads.length; i++) {\r\n const pending = this._pendingUploads[i];\r\n const pendingEnd = pending.offset + pending.size;\r\n if (pending.offset > end) {\r\n insertIndex = i;\r\n break;\r\n }\r\n if (pendingEnd >= start && pending.offset <= end) {\r\n start = Math.min(start, pending.offset);\r\n end = Math.max(end, pendingEnd);\r\n this._pendingUploads.splice(i, 1);\r\n i--;\r\n insertIndex = i + 1;\r\n }\r\n }\r\n this._pendingUploads.splice(insertIndex, 0, {\r\n offset: start,\r\n size: end - start\r\n });\r\n }\r\n bufferSubData(dstByteOffset: number, data: TypedArray, srcOffset?: number, srcLength?: number) {\r\n srcOffset = Number(srcOffset) || 0;\r\n dstByteOffset = Number(dstByteOffset) || 0;\r\n srcLength = Number(srcLength) || data.length - srcOffset;\r\n if (srcOffset + srcLength > data.length) {\r\n throw new Error('bufferSubData() failed: source buffer is too small');\r\n }\r\n if (dstByteOffset + srcLength * data.BYTES_PER_ELEMENT > this.byteLength) {\r\n throw new Error('bufferSubData() failed: dest buffer is too small');\r\n }\r\n const uploadSize = srcLength * data.BYTES_PER_ELEMENT;\r\n if ((dstByteOffset & 3) !== 0 || (uploadSize & 3) !== 0) {\r\n throw new Error(\r\n 'bufferSubData() failed: destination byte offset or upload size must be 4 bytes aligned'\r\n );\r\n }\r\n const uploadOffset = data.byteOffset + srcOffset * data.BYTES_PER_ELEMENT;\r\n // Resolve segment ownership before mutating the shared staging page. If this\r\n // upload has to start a new segment, the previous segment must snapshot its\r\n // pending uploads against the old staging contents first.\r\n this._device.bufferUpload(this, dstByteOffset, uploadSize);\r\n this._pendingUploadBuffer ??= this._ringBuffer.fetchBufferMapped((this.byteLength + 15) & ~15);\r\n new Uint8Array(this._pendingUploadBuffer.mappedRange!, dstByteOffset, uploadSize).set(\r\n new Uint8Array(data.buffer, uploadOffset, uploadSize)\r\n );\r\n this.mergePendingUpload(dstByteOffset, uploadSize);\r\n }\r\n async getBufferSubData(\r\n dstBuffer?: Nullable<Uint8Array<ArrayBuffer>>,\r\n offsetInBytes?: number,\r\n sizeInBytes?: number\r\n ) {\r\n let sourceBuffer: GPUDataBuffer = this;\r\n offsetInBytes = Number(offsetInBytes) || 0;\r\n sizeInBytes = Number(sizeInBytes) || this.byteLength - offsetInBytes;\r\n if (offsetInBytes < 0 || offsetInBytes + sizeInBytes > this.byteLength) {\r\n throw new Error('data query range out of bounds');\r\n }\r\n if (dstBuffer && dstBuffer.byteLength < sizeInBytes) {\r\n throw new Error('no enough space for querying buffer data');\r\n }\r\n let readOffsetInBytes = offsetInBytes;\r\n if (!(this._usage & (GPUResourceUsageFlags.BF_READ | GPUResourceUsageFlags.BF_PACK_PIXEL))) {\r\n if (this._gpuUsage & GPUBufferUsage.COPY_SRC) {\r\n const copyOffsetInBytes = offsetInBytes & ~3;\r\n readOffsetInBytes = offsetInBytes - copyOffsetInBytes;\r\n const copySizeInBytes = (readOffsetInBytes + sizeInBytes + 3) & ~3;\r\n sourceBuffer = this._device.createBuffer(copySizeInBytes, { usage: 'read' });\r\n this._device.copyBuffer(this, sourceBuffer, copyOffsetInBytes, 0, copySizeInBytes);\r\n this._device.flush();\r\n } else {\r\n throw new Error('getBufferSubData() failed: buffer does not have BF_READ or BF_PACK_PIXEL flag set');\r\n }\r\n } else {\r\n this.sync();\r\n }\r\n const buffer = sourceBuffer.object as GPUBuffer;\r\n await buffer.mapAsync(GPUMapMode.READ);\r\n const range = buffer.getMappedRange();\r\n dstBuffer = dstBuffer || new Uint8Array(sizeInBytes);\r\n dstBuffer.set(new Uint8Array(range, readOffsetInBytes, sizeInBytes));\r\n buffer.unmap();\r\n\r\n if (sourceBuffer !== this) {\r\n sourceBuffer.dispose();\r\n }\r\n\r\n return dstBuffer;\r\n }\r\n restore() {\r\n if (!this._device.isContextLost()) {\r\n this.load();\r\n }\r\n }\r\n destroy() {\r\n if (this._object) {\r\n this._object.destroy();\r\n this._object = null;\r\n this._gpuUsage = 0;\r\n this._memCost = 0;\r\n this._pendingUploadBuffer = null;\r\n this._pendingUploads.length = 0;\r\n }\r\n }\r\n isBuffer(): this is GPUDataBuffer {\r\n return true;\r\n }\r\n beginSyncChanges(encoder: GPUCommandEncoder) {\r\n if (this._pendingUploads.length > 0) {\r\n if (!this._object || !this._pendingUploadBuffer) {\r\n this._pendingUploads.length = 0;\r\n this._pendingUploadBuffer = null;\r\n this._ringBuffer.beginUploads();\r\n return;\r\n }\r\n const cmdEncoder = encoder || this._device.device.createCommandEncoder();\r\n for (const upload of this._pendingUploads) {\r\n cmdEncoder.copyBufferToBuffer(\r\n this._pendingUploadBuffer.buffer,\r\n upload.offset,\r\n this._object!,\r\n upload.offset,\r\n upload.size\r\n );\r\n }\r\n if (!encoder) {\r\n this._device.device.queue.submit([cmdEncoder.finish()]);\r\n }\r\n this._pendingUploads.length = 0;\r\n this._pendingUploadBuffer = null;\r\n this._ringBuffer.beginUploads();\r\n }\r\n }\r\n endSyncChanges() {\r\n if (this._usage & GPUResourceUsageFlags.DYNAMIC) {\r\n this._ringBuffer.endUploads();\r\n } else {\r\n this._ringBuffer.purge();\r\n }\r\n }\r\n private load(data?: Nullable<TypedArray>) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n this._memCost = 0;\r\n if (!this._device.isContextLost()) {\r\n if (!this._object) {\r\n this._gpuUsage = 0;\r\n let label = '';\r\n if (this._usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n this._gpuUsage |= GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\r\n label += '[vertex]';\r\n }\r\n if (this._usage & GPUResourceUsageFlags.BF_INDEX) {\r\n this._gpuUsage |= GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\r\n label += '[index]';\r\n }\r\n if (this._usage & GPUResourceUsageFlags.BF_UNIFORM) {\r\n this._gpuUsage |= GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\r\n label += '[uniform]';\r\n }\r\n if (this._usage & GPUResourceUsageFlags.BF_STORAGE) {\r\n this._gpuUsage |= GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\r\n label += '[storage]';\r\n }\r\n if (this._usage & (GPUResourceUsageFlags.BF_READ | GPUResourceUsageFlags.BF_PACK_PIXEL)) {\r\n this._gpuUsage |= GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ;\r\n label += '[mapRead]';\r\n }\r\n if (this._usage & (GPUResourceUsageFlags.BF_WRITE | GPUResourceUsageFlags.BF_UNPACK_PIXEL)) {\r\n this._gpuUsage |= GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE;\r\n label += '[mapWrite]';\r\n }\r\n if (data) {\r\n this._object = this._device.gpuCreateBuffer({\r\n label: label,\r\n size: (data.byteLength + 15) & ~15,\r\n usage: this._gpuUsage,\r\n mappedAtCreation: true\r\n });\r\n const range = this._object.getMappedRange();\r\n new (data.constructor as TypedArrayConstructor)(range).set(data);\r\n this._object.unmap();\r\n } else {\r\n this._object = this._device.gpuCreateBuffer({\r\n label: label,\r\n size: (this.byteLength + 15) & ~15,\r\n usage: this._gpuUsage\r\n });\r\n }\r\n const memCost = this.byteLength;\r\n this._device.updateVideoMemoryCost(memCost - this._memCost);\r\n this._memCost = memCost;\r\n }\r\n }\r\n }\r\n private sync() {\r\n if (this._pendingUploads.length > 0) {\r\n this._device.flush();\r\n }\r\n }\r\n}\r\n","import type { StructuredBuffer, StructuredValue, PBStructTypeInfo, PBTypeInfo } from '@zephyr3d/device';\r\nimport {\r\n StructuredBufferData,\r\n GPUResourceUsageFlags,\r\n PBPrimitiveType,\r\n PBPrimitiveTypeInfo\r\n} from '@zephyr3d/device';\r\nimport { WebGPUBuffer } from './buffer_webgpu';\r\nimport type { Immutable, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nconst typeU8Vec2_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U8VEC2_NORM);\r\nconst typeU8Vec4_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U8VEC4_NORM);\r\nconst typeI8Vec2_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I8VEC2_NORM);\r\nconst typeI8Vec4_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I8VEC4_NORM);\r\nconst typeU16Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16VEC2);\r\nconst typeU16Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16VEC4);\r\nconst typeI16Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I16VEC2);\r\nconst typeI16Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I16VEC4);\r\nconst typeU16Vec2_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16VEC2_NORM);\r\nconst typeU16Vec4_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16VEC4_NORM);\r\nconst typeI16Vec2_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I16VEC2_NORM);\r\nconst typeI16Vec4_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I16VEC4_NORM);\r\nconst typeF16Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F16VEC2);\r\nconst typeF16Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F16VEC4);\r\nconst typeF32 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F32);\r\nconst typeF32Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F32VEC2);\r\nconst typeF32Vec3 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F32VEC3);\r\nconst typeF32Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F32VEC4);\r\nconst typeU32 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32);\r\nconst typeU32Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32VEC2);\r\nconst typeU32Vec3 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32VEC3);\r\nconst typeU32Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32VEC4);\r\nconst typeI32 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I32);\r\nconst typeI32Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I32VEC2);\r\nconst typeI32Vec3 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I32VEC3);\r\nconst typeI32Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I32VEC4);\r\n\r\nconst vertexFormatTable: Record<string, GPUVertexFormat> = {\r\n [typeU8Vec2_Norm.typeId]: 'unorm8x2',\r\n [typeU8Vec4_Norm.typeId]: 'unorm8x4',\r\n [typeI8Vec2_Norm.typeId]: 'snorm8x2',\r\n [typeI8Vec4_Norm.typeId]: 'snorm8x4',\r\n [typeU16Vec2.typeId]: 'uint16x2',\r\n [typeU16Vec4.typeId]: 'uint16x4',\r\n [typeI16Vec2.typeId]: 'sint16x2',\r\n [typeI16Vec4.typeId]: 'sint16x4',\r\n [typeU16Vec2_Norm.typeId]: 'unorm16x2',\r\n [typeU16Vec4_Norm.typeId]: 'unorm16x4',\r\n [typeI16Vec2_Norm.typeId]: 'snorm16x2',\r\n [typeI16Vec4_Norm.typeId]: 'snorm16x4',\r\n [typeF16Vec2.typeId]: 'float16x2',\r\n [typeF16Vec4.typeId]: 'float16x4',\r\n [typeF32.typeId]: 'float32',\r\n [typeF32Vec2.typeId]: 'float32x2',\r\n [typeF32Vec3.typeId]: 'float32x3',\r\n [typeF32Vec4.typeId]: 'float32x4',\r\n [typeU32.typeId]: 'uint32',\r\n [typeU32Vec2.typeId]: 'uint32x2',\r\n [typeU32Vec3.typeId]: 'uint32x3',\r\n [typeU32Vec4.typeId]: 'uint32x4',\r\n [typeI32.typeId]: 'sint32',\r\n [typeI32Vec2.typeId]: 'sint32x2',\r\n [typeI32Vec3.typeId]: 'sint32x3',\r\n [typeI32Vec4.typeId]: 'sint32x4'\r\n};\r\n\r\nexport class WebGPUStructuredBuffer extends WebGPUBuffer implements StructuredBuffer {\r\n private _structure: PBStructTypeInfo;\r\n private _data: StructuredBufferData;\r\n constructor(device: WebGPUDevice, structure: PBStructTypeInfo, usage: number, source?: TypedArray) {\r\n if (!structure?.isStructType()) {\r\n throw new Error('invalid structure type');\r\n }\r\n if (usage & GPUResourceUsageFlags.BF_INDEX) {\r\n throw new Error('structured buffer must not have Index usage flag');\r\n }\r\n if (\r\n usage &\r\n (GPUResourceUsageFlags.BF_READ |\r\n GPUResourceUsageFlags.BF_WRITE |\r\n GPUResourceUsageFlags.BF_PACK_PIXEL |\r\n GPUResourceUsageFlags.BF_UNPACK_PIXEL)\r\n ) {\r\n throw new Error('structured buffer must not have Read or Write usage flags');\r\n }\r\n if (usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n if (structure.structMembers.length !== 1 || !structure.structMembers[0].type.isArrayType()) {\r\n throw new Error('structured buffer for vertex usage must have only one array member');\r\n }\r\n }\r\n if (usage & GPUResourceUsageFlags.BF_UNIFORM || usage & GPUResourceUsageFlags.BF_STORAGE) {\r\n usage |= GPUResourceUsageFlags.DYNAMIC;\r\n }\r\n const layout = structure.toBufferLayout(0, structure.layout);\r\n if (source && layout.byteSize !== source.byteLength) {\r\n throw new Error(\r\n `create structured buffer failed: invalid source size: ${source.byteLength}, should be ${layout.byteSize}`\r\n );\r\n }\r\n super(device, usage, source || layout.byteSize);\r\n this._data = new StructuredBufferData(layout, this);\r\n this._structure = structure;\r\n }\r\n set(name: string, value: StructuredValue) {\r\n this._data.set(name, value);\r\n }\r\n get structure(): Immutable<PBStructTypeInfo> {\r\n return this._structure;\r\n }\r\n set structure(st: PBStructTypeInfo) {\r\n if (st && !st.isCompatibleType(this._structure)) {\r\n const layout = st.toBufferLayout(0, st.layout);\r\n if (layout.byteSize > this.byteLength) {\r\n throw new Error(`set structure type failed: new structure type is too large: ${layout.byteSize}`);\r\n }\r\n this._data = new StructuredBufferData(layout, this);\r\n this._structure = st;\r\n }\r\n }\r\n static getGPUVertexFormat(type: PBTypeInfo) {\r\n return vertexFormatTable[type.typeId];\r\n }\r\n}\r\n","import type {\r\n BufferCreationOptions,\r\n StructuredValue,\r\n TextureVideo,\r\n PBStructTypeInfo,\r\n BindGroupLayout,\r\n BaseTexture,\r\n TextureSampler,\r\n BindGroup,\r\n BindGroupLayoutEntry,\r\n GPUDataBuffer\r\n} from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUStructuredBuffer } from './structuredbuffer_webgpu';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUTextureVideo } from './texturevideo_webgpu';\r\nimport type { WebGPUTextureSampler } from './sampler_webgpu';\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport type { Immutable, Nullable, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUBuffer } from './buffer_webgpu';\r\n\r\nexport class WebGPUBindGroup extends WebGPUObject<unknown> implements BindGroup {\r\n private readonly _layout: Immutable<BindGroupLayout>;\r\n private _layoutDesc: Nullable<GPUBindGroupLayoutDescriptor>;\r\n private _entries: Nullable<GPUBindGroupEntry[]>;\r\n private _bindGroup: Nullable<GPUBindGroup>;\r\n private _buffers: WebGPUBuffer[];\r\n private _textures: WebGPUBaseTexture[];\r\n private _createdBuffers: WebGPUBuffer[];\r\n private _gpuId: number;\r\n private _videoTextures: Nullable<WebGPUTextureVideo[]>;\r\n private _dynamicOffsets: Nullable<number[]>;\r\n private _resources: {\r\n [name: string]:\r\n | [WebGPUBuffer, number, number]\r\n | WebGPUTextureVideo\r\n | [WebGPUBaseTexture, Nullable<GPUTextureView>]\r\n | GPUSampler;\r\n };\r\n constructor(device: WebGPUDevice, layout: Immutable<BindGroupLayout>) {\r\n super(device);\r\n this._device = device;\r\n this._layout = layout;\r\n this._layoutDesc = null;\r\n this._entries = null;\r\n this._bindGroup = null;\r\n this._dynamicOffsets = null;\r\n this._gpuId = 0;\r\n this._resources = {};\r\n this._buffers = [];\r\n this._textures = [];\r\n this._createdBuffers = [];\r\n this._videoTextures = null;\r\n for (const entry of this._layout.entries) {\r\n if (entry.buffer && entry.buffer.hasDynamicOffset) {\r\n if (!this._dynamicOffsets) {\r\n this._dynamicOffsets = [];\r\n }\r\n this._dynamicOffsets[entry.buffer.dynamicOffsetIndex] = 0;\r\n }\r\n }\r\n }\r\n get bindGroup() {\r\n if (!this._bindGroup) {\r\n this._bindGroup = this._create();\r\n }\r\n return this._bindGroup;\r\n }\r\n get layoutDescriptor() {\r\n if (!this._bindGroup) {\r\n this._bindGroup = this._create();\r\n }\r\n return this._layoutDesc;\r\n }\r\n get entries() {\r\n if (!this._bindGroup) {\r\n this._bindGroup = this._create();\r\n }\r\n return this._entries;\r\n }\r\n getGPUId() {\r\n return `${this._uid}:${this._gpuId}`;\r\n }\r\n get bufferList() {\r\n return this._buffers;\r\n }\r\n get textureList() {\r\n return this._textures;\r\n }\r\n invalidate() {\r\n this._bindGroup = null;\r\n this._gpuId++;\r\n }\r\n getLayout(): Immutable<BindGroupLayout> {\r\n return this._layout;\r\n }\r\n getDynamicOffsets(): Nullable<Immutable<number[]>> {\r\n return this._dynamicOffsets;\r\n }\r\n getBuffer(name: string, nocreate = true) {\r\n return this._getBuffer(\r\n name,\r\n GPUResourceUsageFlags.BF_UNIFORM | GPUResourceUsageFlags.BF_STORAGE,\r\n nocreate\r\n );\r\n }\r\n setBuffer(name: string, buffer: GPUDataBuffer, offset?: number, bindOffset?: number, bindSize?: number) {\r\n const bindName = this._layout.nameMap?.[name] ?? name;\r\n for (const entry of this._layout.entries) {\r\n if (entry.name === bindName) {\r\n if (!entry.buffer) {\r\n console.error(`setBuffer() failed: resource '${name}' is not buffer`);\r\n } else {\r\n bindOffset = bindOffset ?? 0;\r\n bindSize = bindSize ?? (buffer ? Math.max(0, buffer.byteLength - bindOffset) : 0);\r\n const info = this._resources[entry.name] as [WebGPUBuffer, number, number];\r\n const bufferUsage =\r\n entry.buffer.type === 'uniform'\r\n ? GPUResourceUsageFlags.BF_UNIFORM\r\n : GPUResourceUsageFlags.BF_STORAGE;\r\n if (!buffer || !(buffer.usage & bufferUsage)) {\r\n console.error(\r\n `setBuffer() failed: buffer resource '${name}' must be type '${entry.buffer.type}'`\r\n );\r\n } else if (buffer !== info?.[0] || bindOffset !== info?.[1] || bindSize !== info?.[2]) {\r\n this._resources[entry.name] = [buffer as WebGPUBuffer, bindOffset, bindSize];\r\n this.invalidate();\r\n }\r\n if (entry.buffer.hasDynamicOffset) {\r\n this._dynamicOffsets![entry.buffer.dynamicOffsetIndex] = offset ?? 0;\r\n }\r\n }\r\n return;\r\n }\r\n }\r\n console.error(`setBuffer() failed: no buffer resource named '${name}'`);\r\n }\r\n setValue(name: string, value: StructuredValue) {\r\n const mappedName = this._layout.nameMap?.[name];\r\n if (mappedName) {\r\n this.setValue(mappedName, { [name]: value });\r\n } else {\r\n const buffer = this._getBuffer(\r\n name,\r\n GPUResourceUsageFlags.BF_UNIFORM | GPUResourceUsageFlags.BF_STORAGE,\r\n false\r\n );\r\n if (buffer) {\r\n if (!(buffer instanceof WebGPUStructuredBuffer)) {\r\n throw new Error(`BindGroup.setValue() failed: '${name}' is not structured buffer`);\r\n }\r\n if (typeof value === 'number') {\r\n throw new Error(`BindGroup.setValue() failed: cannot set ${value} to '${name}'`);\r\n }\r\n if ('BYTES_PER_ELEMENT' in value) {\r\n buffer.bufferSubData(0, value as TypedArray);\r\n } else {\r\n for (const k in value) {\r\n buffer.set(k, value[k]);\r\n }\r\n }\r\n } else {\r\n console.error(`setValue() failed: no uniform buffer named '${name}'`);\r\n }\r\n }\r\n }\r\n setRawData(name: string, byteOffset: number, data: TypedArray, srcPos?: number, srcLength?: number) {\r\n const mappedName = this._layout.nameMap?.[name];\r\n if (mappedName) {\r\n this.setRawData(mappedName, byteOffset, data, srcPos, srcLength);\r\n } else {\r\n const buffer = this._getBuffer(\r\n name,\r\n GPUResourceUsageFlags.BF_UNIFORM | GPUResourceUsageFlags.BF_STORAGE,\r\n false\r\n );\r\n if (buffer) {\r\n buffer.bufferSubData(byteOffset, data, srcPos, srcLength);\r\n } else {\r\n console.error(`set(): no uniform buffer named '${name}'`);\r\n }\r\n }\r\n }\r\n getTexture(name: string) {\r\n const entry = this._findTextureLayout(name);\r\n if (entry) {\r\n const t = this._resources[name] as [WebGPUBaseTexture, GPUTextureView];\r\n return t ? t[0] : null;\r\n } else {\r\n throw new Error(`getTexture() failed:${name} is not a texture`);\r\n }\r\n }\r\n setTextureView(\r\n name: string,\r\n value: BaseTexture,\r\n level?: number,\r\n face?: number,\r\n mipCount?: number,\r\n sampler?: Nullable<TextureSampler>\r\n ) {\r\n if (!value) {\r\n throw new Error(`WebGPUBindGroup.setTextureView() failed: invalid texture uniform value: ${value}`);\r\n } else {\r\n const entry = this._findTextureLayout(name);\r\n if (entry) {\r\n if (entry.externalTexture) {\r\n throw new Error(`WebGPUBindGroup.setTextureView() failed: video texture does not have view`);\r\n } else if (value.isTextureVideo()) {\r\n throw new Error(`WebGPUBindGroup.setTextureView() failed: invalid texture type`);\r\n }\r\n const t = this._resources[name] as [WebGPUBaseTexture, GPUTextureView];\r\n const view = (value as WebGPUBaseTexture).getView(level, face, mipCount);\r\n if (!t || t[1] !== view) {\r\n this._resources[name] = [value as WebGPUBaseTexture, view];\r\n this.invalidate();\r\n }\r\n if (entry.texture?.autoBindSampler) {\r\n const samplerEntry = this._findSamplerLayout(entry.texture.autoBindSampler);\r\n if (!samplerEntry || !samplerEntry.sampler) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTextureView() failed: sampler entry not found: ${entry.texture.autoBindSampler}`\r\n );\r\n }\r\n const s = (\r\n !sampler || sampler.compare ? value.getDefaultSampler(false) : sampler\r\n ) as WebGPUTextureSampler;\r\n if (s.object !== this._resources[entry.texture.autoBindSampler]) {\r\n this._resources[entry.texture.autoBindSampler] = s.object!;\r\n this.invalidate();\r\n }\r\n }\r\n if (entry.texture?.autoBindSamplerComparison) {\r\n const samplerEntry = this._findSamplerLayout(entry.texture.autoBindSamplerComparison);\r\n if (!samplerEntry || !samplerEntry.sampler) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTextureView() failed: sampler entry not found: ${entry.texture.autoBindSamplerComparison}`\r\n );\r\n }\r\n const s = (\r\n !sampler || !sampler.compare ? value.getDefaultSampler(true) : sampler\r\n ) as WebGPUTextureSampler;\r\n if (s.object !== this._resources[entry.texture.autoBindSamplerComparison]) {\r\n this._resources[entry.texture.autoBindSamplerComparison] = s.object!;\r\n this.invalidate();\r\n }\r\n }\r\n } else {\r\n throw new Error(`WebGPUBindGroup.setView() failed: no texture uniform named '${name}'`);\r\n }\r\n }\r\n }\r\n setTexture(name: string, value: BaseTexture | TextureVideo, sampler?: Nullable<TextureSampler>) {\r\n if (!value) {\r\n throw new Error(`WebGPUBindGroup.setTexture() failed: invalid texture uniform value: ${value}`);\r\n } else {\r\n const entry = this._findTextureLayout(name);\r\n if (entry) {\r\n const t = this._resources[name];\r\n if (entry.externalTexture) {\r\n if (!value.isTextureVideo()) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTexture() failed: invalid texture type of resource '${name}'`\r\n );\r\n }\r\n if (!t || t !== value) {\r\n if (t) {\r\n (t as WebGPUTextureVideo).removeBindGroupReference(this);\r\n }\r\n if (value) {\r\n (value as WebGPUTextureVideo).addBindGroupReference(this);\r\n }\r\n this._resources[name] = value as WebGPUTextureVideo;\r\n this.invalidate();\r\n this._videoTextures = [];\r\n for (const entry of this._layout.entries) {\r\n if (entry.externalTexture) {\r\n const tex = this._resources[entry.name] as WebGPUTextureVideo;\r\n if (tex && this._videoTextures.indexOf(tex) < 0) {\r\n this._videoTextures.push(tex);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n if (value.isTextureVideo()) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTexture() failed: invalid texture type of resource '${name}'`\r\n );\r\n }\r\n const view = (value as WebGPUBaseTexture).getDefaultView();\r\n if (!entry.externalTexture && !view) {\r\n throw new Error('WebGPUBindGroup.setTexture() failed: create texture view failed');\r\n }\r\n if (!t || (t as [WebGPUBaseTexture, Nullable<GPUTextureView>])[0] !== value) {\r\n this._resources[name] = [value as WebGPUBaseTexture, view];\r\n this.invalidate();\r\n }\r\n }\r\n const autoBindSampler = entry.texture?.autoBindSampler || entry.externalTexture?.autoBindSampler;\r\n if (autoBindSampler) {\r\n const samplerEntry = this._findSamplerLayout(autoBindSampler);\r\n if (!samplerEntry || !samplerEntry.sampler) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTexture() failed: sampler entry not found: ${autoBindSampler}`\r\n );\r\n }\r\n const s = (\r\n !sampler || sampler.compare ? value.getDefaultSampler(false) : sampler\r\n ) as WebGPUTextureSampler;\r\n if (s.object !== this._resources[autoBindSampler]) {\r\n this._resources[autoBindSampler] = s.object!;\r\n this.invalidate();\r\n }\r\n }\r\n const autoBindSamplerComparison = entry.texture?.autoBindSamplerComparison;\r\n if (autoBindSamplerComparison) {\r\n const samplerEntry = this._findSamplerLayout(autoBindSamplerComparison);\r\n if (!samplerEntry || !samplerEntry.sampler) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTexture() failed: sampler entry not found: ${autoBindSamplerComparison}`\r\n );\r\n }\r\n const s = (\r\n !sampler || !sampler.compare ? value.getDefaultSampler(true) : sampler\r\n ) as WebGPUTextureSampler;\r\n if (s.object !== this._resources[autoBindSamplerComparison]) {\r\n this._resources[autoBindSamplerComparison] = s.object!;\r\n this.invalidate();\r\n }\r\n }\r\n } else {\r\n throw new Error(`WebGPUBindGroup.setTexture() failed: no texture uniform named '${name}'`);\r\n }\r\n }\r\n }\r\n setSampler(name: string, value: TextureSampler) {\r\n const sampler = (value as WebGPUTextureSampler)?.object;\r\n if (!sampler) {\r\n console.error(`WebGPUBindGroup.setSampler() failed: invalid sampler uniform value: ${value}`);\r\n } else if (this._resources[name] !== sampler) {\r\n if (!this._findSamplerLayout(name)) {\r\n console.error(`WebGPUBindGroup.setSampler() failed: no sampler uniform named '${name}'`);\r\n } else {\r\n this._resources[name] = sampler;\r\n this.invalidate();\r\n }\r\n }\r\n }\r\n destroy() {\r\n this.invalidate();\r\n this._resources = {};\r\n this._buffers = [];\r\n this._textures = [];\r\n this._videoTextures = null;\r\n this._object = null;\r\n for (const buffer of this._createdBuffers) {\r\n buffer.dispose();\r\n }\r\n this._createdBuffers = [];\r\n }\r\n restore() {\r\n this.invalidate();\r\n this._object = {};\r\n }\r\n isBindGroup(): this is BindGroup {\r\n return true;\r\n }\r\n /** @internal */\r\n updateVideoTextures() {\r\n this._videoTextures?.forEach((t) => {\r\n if (t.updateVideoFrame()) {\r\n this.invalidate();\r\n }\r\n });\r\n }\r\n /** @internal */\r\n private _findTextureLayout(name: string): Nullable<Immutable<BindGroupLayoutEntry>> {\r\n for (const entry of this._layout.entries) {\r\n if ((entry.texture || entry.storageTexture || entry.externalTexture) && entry.name === name) {\r\n return entry;\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private _findSamplerLayout(name: string): Nullable<Immutable<BindGroupLayoutEntry>> {\r\n for (const entry of this._layout.entries) {\r\n if (entry.sampler && entry.name === name) {\r\n return entry;\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private _getBuffer(name: string, usage: number, nocreate = false) {\r\n const info = this._getBufferInfo(name, usage, nocreate);\r\n return info?.[0] ?? null;\r\n }\r\n /** @internal */\r\n private _getBufferInfo(name: string, usage: number, nocreate = false) {\r\n const bindName = this._layout.nameMap?.[name] ?? name;\r\n for (const entry of this._layout.entries) {\r\n if (entry.buffer && entry.name === bindName) {\r\n const bufferUsage =\r\n entry.buffer.type === 'uniform'\r\n ? GPUResourceUsageFlags.BF_UNIFORM\r\n : GPUResourceUsageFlags.BF_STORAGE;\r\n if (!(usage & bufferUsage)) {\r\n return null;\r\n }\r\n let buffer = this._resources[entry.name] as [Nullable<WebGPUBuffer>, number, number];\r\n if (!nocreate && buffer?.[0]?.disposed) {\r\n buffer[0] = null;\r\n this.invalidate();\r\n }\r\n if ((!buffer || !buffer[0]) && !nocreate) {\r\n const options: BufferCreationOptions = {\r\n usage: bufferUsage === GPUResourceUsageFlags.BF_UNIFORM ? 'uniform' : undefined,\r\n storage: bufferUsage === GPUResourceUsageFlags.BF_STORAGE,\r\n dynamic: true\r\n };\r\n const gpuBuffer = this._device.createStructuredBuffer(\r\n entry.type as PBStructTypeInfo,\r\n options\r\n ) as WebGPUStructuredBuffer;\r\n buffer = [gpuBuffer, 0, gpuBuffer.byteLength];\r\n this._resources[entry.name] = buffer as [WebGPUBuffer, number, number];\r\n this._createdBuffers.push(gpuBuffer);\r\n }\r\n return buffer as [WebGPUBuffer, number, number];\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private _create() {\r\n let bindGroup: Nullable<GPUBindGroup> = null;\r\n this._layoutDesc = null;\r\n this._entries = null;\r\n this._textures = [];\r\n this._buffers = [];\r\n const entries = [] as GPUBindGroupEntry[];\r\n let resourceOk = true;\r\n for (const entry of this._layout.entries) {\r\n const ge = { binding: entry.binding } as GPUBindGroupEntry;\r\n if (entry.buffer) {\r\n const buffer = this._getBufferInfo(\r\n entry.name,\r\n entry.buffer.type === 'uniform'\r\n ? GPUResourceUsageFlags.BF_UNIFORM\r\n : GPUResourceUsageFlags.BF_STORAGE,\r\n true\r\n );\r\n if (!buffer) {\r\n throw new Error(\r\n `Uniform buffer '${entry.name}' not exists, maybe you forgot settings some uniform values`\r\n );\r\n }\r\n if (this._buffers.indexOf(buffer[0]) < 0) {\r\n this._buffers.push(buffer[0]);\r\n }\r\n ge.resource = {\r\n buffer: buffer[0].object!,\r\n offset: buffer[1],\r\n size: buffer[2]\r\n };\r\n resourceOk = resourceOk && !!buffer[0].object;\r\n } else if (entry.texture || entry.storageTexture) {\r\n const t = this._resources[entry.name] as [WebGPUBaseTexture, GPUTextureView];\r\n if (!t) {\r\n console.error(`Missing texture in bind group: ${entry.name}`);\r\n resourceOk = false;\r\n } else {\r\n if (this._textures.indexOf(t[0]) < 0) {\r\n this._textures.push(t[0]);\r\n }\r\n ge.resource = t[1];\r\n resourceOk = resourceOk && !!t[1];\r\n }\r\n } else if (entry.externalTexture) {\r\n const t = this._resources[entry.name] as WebGPUTextureVideo;\r\n ge.resource = t.object!;\r\n resourceOk = resourceOk && !!t.object;\r\n } else if (entry.sampler) {\r\n const sampler = this._resources[entry.name] as GPUSampler;\r\n ge.resource = sampler;\r\n resourceOk = resourceOk && !!sampler;\r\n }\r\n entries.push(ge);\r\n }\r\n if (!resourceOk) {\r\n return null;\r\n }\r\n const [desc, layout] = this._device.fetchBindGroupLayout(this._layout);\r\n const descriptor: GPUBindGroupDescriptor = {\r\n layout: layout,\r\n entries\r\n };\r\n if (layout.label) {\r\n descriptor.label = `${layout.label}.bindgroup`;\r\n }\r\n bindGroup = this._device.gpuCreateBindGroup(descriptor);\r\n if (!bindGroup) {\r\n console.error('Create bindgroup failed');\r\n }\r\n this._layoutDesc = desc;\r\n this._entries = entries;\r\n return bindGroup;\r\n }\r\n}\r\n","import type { Nullable } from '@zephyr3d/base';\r\nimport type {\r\n TextureFormat,\r\n CompareFunc,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n PrimitiveType,\r\n BlendEquation,\r\n BlendFunc,\r\n FaceMode,\r\n FaceWinding,\r\n StencilOp\r\n} from '@zephyr3d/device';\r\n\r\nexport const textureWrappingMap: Record<TextureAddressMode, GPUAddressMode> = {\r\n repeat: 'repeat',\r\n 'mirrored-repeat': 'mirror-repeat',\r\n clamp: 'clamp-to-edge'\r\n};\r\n\r\nexport const textureFilterMap: Record<TextureFilterMode, GPUFilterMode | undefined> = {\r\n nearest: 'nearest',\r\n linear: 'linear',\r\n none: undefined\r\n};\r\n\r\nexport const compareFuncMap: Record<CompareFunc, GPUCompareFunction> = {\r\n always: 'always',\r\n le: 'less-equal',\r\n ge: 'greater-equal',\r\n lt: 'less',\r\n gt: 'greater',\r\n eq: 'equal',\r\n ne: 'not-equal',\r\n never: 'never'\r\n};\r\n\r\nexport const stencilOpMap: Record<StencilOp, GPUStencilOperation> = {\r\n keep: 'keep',\r\n replace: 'replace',\r\n zero: 'zero',\r\n invert: 'invert',\r\n incr: 'increment-clamp',\r\n decr: 'decrement-clamp',\r\n 'incr-wrap': 'increment-wrap',\r\n 'decr-wrap': 'decrement-wrap'\r\n};\r\n\r\nexport const primitiveTypeMap: Record<PrimitiveType, Nullable<GPUPrimitiveTopology>> = {\r\n 'triangle-list': 'triangle-list',\r\n 'triangle-strip': 'triangle-strip',\r\n 'triangle-fan': null,\r\n 'line-list': 'line-list',\r\n 'line-strip': 'line-strip',\r\n 'point-list': 'point-list'\r\n};\r\n\r\nexport const faceWindingMap: Record<FaceWinding, GPUFrontFace> = {\r\n ccw: 'ccw',\r\n cw: 'cw'\r\n};\r\n\r\nexport const faceModeMap: Record<FaceMode, GPUCullMode> = {\r\n back: 'back',\r\n front: 'front',\r\n none: 'none'\r\n};\r\n\r\nexport const blendEquationMap: Record<BlendEquation, GPUBlendOperation> = {\r\n add: 'add',\r\n subtract: 'subtract',\r\n 'reverse-subtract': 'reverse-subtract',\r\n min: 'min',\r\n max: 'max'\r\n};\r\n\r\nexport const blendFuncMap: Record<BlendFunc, GPUBlendFactor> = {\r\n 'const-color': 'constant',\r\n 'const-alpha': 'constant',\r\n 'dst-color': 'dst',\r\n 'dst-alpha': 'dst-alpha',\r\n 'inv-const-color': 'one-minus-constant',\r\n 'inv-const-alpha': 'one-minus-constant',\r\n 'inv-dst-color': 'one-minus-dst',\r\n 'inv-dst-alpha': 'one-minus-dst-alpha',\r\n 'src-color': 'src',\r\n 'src-alpha': 'src-alpha',\r\n 'inv-src-color': 'one-minus-src',\r\n 'inv-src-alpha': 'one-minus-src-alpha',\r\n 'src-alpha-saturate': 'src-alpha-saturated',\r\n one: 'one',\r\n zero: 'zero'\r\n};\r\n\r\nexport const vertexFormatToHash: Record<string, string> = {\r\n float32: '0',\r\n float32x2: '1',\r\n float32x3: '2',\r\n float32x4: '3',\r\n uint32: '4',\r\n uint32x2: '5',\r\n uint32x3: '6',\r\n uint32x4: '7',\r\n sint32: '8',\r\n sint32x2: '9',\r\n sint32x3: 'a',\r\n sint32x4: 'b',\r\n uint16x2: 'c',\r\n uint16x4: 'd',\r\n unorm16x2: 'e',\r\n unorm16x4: 'f',\r\n sint16x2: 'g',\r\n sint16x4: 'h',\r\n snorm16x2: 'i',\r\n snorm16x4: 'j',\r\n uint8x2: 'k',\r\n uint8x4: 'l',\r\n unorm8x2: 'm',\r\n unorm8x4: 'n',\r\n sint8x2: 'o',\r\n sint8x4: 'p',\r\n snorm8x2: 'q',\r\n snorm8x4: 'r'\r\n};\r\n\r\nexport const textureFormatMap: Record<TextureFormat, GPUTextureFormat> = {\r\n ['rgba8unorm']: 'rgba8unorm',\r\n ['rgba8snorm']: 'rgba8snorm',\r\n ['bgra8unorm']: 'bgra8unorm',\r\n ['dxt1']: 'bc1-rgba-unorm',\r\n ['dxt3']: 'bc2-rgba-unorm',\r\n ['dxt5']: 'bc3-rgba-unorm',\r\n ['dxt1-srgb']: 'bc1-rgba-unorm-srgb',\r\n ['dxt3-srgb']: 'bc2-rgba-unorm-srgb',\r\n ['dxt5-srgb']: 'bc3-rgba-unorm-srgb',\r\n ['bc4']: 'bc4-r-unorm',\r\n ['bc4-signed']: 'bc4-r-snorm',\r\n ['bc5']: 'bc5-rg-unorm',\r\n ['bc5-signed']: 'bc5-rg-snorm',\r\n ['bc6h']: 'bc6h-rgb-ufloat',\r\n ['bc6h-signed']: 'bc6h-rgb-float',\r\n ['bc7']: 'bc7-rgba-unorm',\r\n ['bc7-srgb']: 'bc7-rgba-unorm-srgb',\r\n ['astc-4x4']: 'astc-4x4-unorm',\r\n ['astc-4x4-srgb']: 'astc-4x4-unorm-srgb',\r\n ['astc-5x4']: 'astc-5x4-unorm',\r\n ['astc-5x4-srgb']: 'astc-5x4-unorm-srgb',\r\n ['astc-5x5']: 'astc-5x5-unorm',\r\n ['astc-5x5-srgb']: 'astc-5x5-unorm-srgb',\r\n ['astc-6x5']: 'astc-6x5-unorm',\r\n ['astc-6x5-srgb']: 'astc-6x5-unorm-srgb',\r\n ['astc-6x6']: 'astc-6x6-unorm',\r\n ['astc-6x6-srgb']: 'astc-6x6-unorm-srgb',\r\n ['astc-8x5']: 'astc-8x5-unorm',\r\n ['astc-8x5-srgb']: 'astc-8x5-unorm-srgb',\r\n ['astc-8x6']: 'astc-8x6-unorm',\r\n ['astc-8x6-srgb']: 'astc-8x6-unorm-srgb',\r\n ['astc-8x8']: 'astc-8x8-unorm',\r\n ['astc-8x8-srgb']: 'astc-8x8-unorm-srgb',\r\n ['astc-10x5']: 'astc-10x5-unorm',\r\n ['astc-10x5-srgb']: 'astc-10x5-unorm-srgb',\r\n ['astc-10x6']: 'astc-10x6-unorm',\r\n ['astc-10x6-srgb']: 'astc-10x6-unorm-srgb',\r\n ['astc-10x8']: 'astc-10x8-unorm',\r\n ['astc-10x8-srgb']: 'astc-10x8-unorm-srgb',\r\n ['astc-10x10']: 'astc-10x10-unorm',\r\n ['astc-10x10-srgb']: 'astc-10x10-unorm-srgb',\r\n ['astc-12x10']: 'astc-12x10-unorm',\r\n ['astc-12x10-srgb']: 'astc-12x10-unorm-srgb',\r\n ['astc-12x12']: 'astc-12x12-unorm',\r\n ['astc-12x12-srgb']: 'astc-12x12-unorm-srgb',\r\n ['r8unorm']: 'r8unorm',\r\n ['r8snorm']: 'r8snorm',\r\n ['r16f']: 'r16float',\r\n ['r32f']: 'r32float',\r\n ['r8ui']: 'r8uint',\r\n ['r8i']: 'r8sint',\r\n ['r16ui']: 'r16uint',\r\n ['r16i']: 'r16sint',\r\n ['r32ui']: 'r32uint',\r\n ['r32i']: 'r32sint',\r\n ['rg8unorm']: 'rg8unorm',\r\n ['rg8snorm']: 'rg8snorm',\r\n ['rg16f']: 'rg16float',\r\n ['rg32f']: 'rg32float',\r\n ['rg8ui']: 'rg8uint',\r\n ['rg8i']: 'rg8sint',\r\n ['rg16ui']: 'rg16uint',\r\n ['rg16i']: 'rg16sint',\r\n ['rg32ui']: 'rg32uint',\r\n ['rg32i']: 'rg32sint',\r\n ['rgba8unorm-srgb']: 'rgba8unorm-srgb',\r\n ['bgra8unorm-srgb']: 'bgra8unorm-srgb',\r\n ['rgba16f']: 'rgba16float',\r\n ['rgba32f']: 'rgba32float',\r\n ['rgba8ui']: 'rgba8uint',\r\n ['rgba8i']: 'rgba8sint',\r\n ['rgba16ui']: 'rgba16uint',\r\n ['rgba16i']: 'rgba16sint',\r\n ['rgba32ui']: 'rgba32uint',\r\n ['rgba32i']: 'rgba32sint',\r\n ['rg11b10uf']: 'rg11b10ufloat',\r\n ['d16']: 'depth16unorm',\r\n ['d24']: 'depth24plus',\r\n ['d32f']: 'depth32float',\r\n ['d32fs8']: 'depth32float-stencil8',\r\n ['d24s8']: 'depth24plus-stencil8'\r\n};\r\n\r\nfunction zip<K = string>(keys: string[], values: K[]): Record<string, K> {\r\n const ret: Record<string, K> = {};\r\n const len = keys.length;\r\n for (let i = 0; i < len; i++) {\r\n ret[keys[i]] = values[i];\r\n }\r\n return ret;\r\n}\r\n\r\nexport const textureFormatInvMap = zip<TextureFormat>(\r\n Object.values(textureFormatMap),\r\n Object.keys(textureFormatMap) as TextureFormat[]\r\n);\r\n\r\nexport const hashToVertexFormat: Record<string, string> = zip(\r\n Object.values(vertexFormatToHash),\r\n Object.keys(vertexFormatToHash)\r\n);\r\n","import type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport type { WebGPURenderStateSet } from './renderstates_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { FrameBufferInfo } from './pipeline_cache';\r\nimport type { WebGPURenderPass } from './renderpass_webgpu';\r\n\r\nexport class WebGPUClearQuad {\r\n private static _clearPrograms: { [hash: string]: { program: WebGPUProgram; bindGroup: WebGPUBindGroup } } =\r\n {};\r\n private static _clearStateSet: Nullable<WebGPURenderStateSet> = null;\r\n private static readonly _defaultClearColor = new Vector4(0, 0, 0, 1);\r\n\r\n static drawClearQuad(\r\n renderPass: WebGPURenderPass,\r\n clearColor: Nullable<Float32Array<ArrayBuffer>>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ) {\r\n if (!this._clearStateSet) {\r\n this.initClearQuad(renderPass);\r\n }\r\n const hash = renderPass.getFrameBufferInfo().clearHash;\r\n const program = this.getClearProgram(renderPass.getDevice(), hash);\r\n const bClearColor = !!clearColor;\r\n const bClearDepth = !(clearDepth === null || clearDepth === undefined);\r\n const bClearStencil = !(clearStencil === null || clearStencil === undefined);\r\n program.bindGroup.setValue('clearDepth', clearDepth ?? 1);\r\n program.bindGroup.setValue('clearColor', clearColor ?? this._defaultClearColor);\r\n this._clearStateSet!.useDepthState().enableWrite(bClearDepth);\r\n this._clearStateSet!.useColorState().setColorMask(bClearColor, bClearColor, bClearColor, bClearColor);\r\n this._clearStateSet!.useStencilState()\r\n .enable(bClearStencil)\r\n .setReference(bClearStencil ? clearStencil : 0);\r\n renderPass\r\n .getDevice()\r\n .commandQueue.draw(\r\n program.program,\r\n null,\r\n this._clearStateSet!,\r\n [program.bindGroup],\r\n null,\r\n 'triangle-strip',\r\n 0,\r\n 4,\r\n 1\r\n );\r\n }\r\n private static getClearProgram(device: WebGPUDevice, hash: string) {\r\n let programInfo = this._clearPrograms[hash];\r\n if (!programInfo) {\r\n const colorAttachments = hash.split('');\r\n const program = device.buildRenderProgram({\r\n label: `ClearQuad-${hash}`,\r\n vertex(pb) {\r\n this.clearDepth = pb.float().uniform(0);\r\n this.coords = [pb.vec2(-1, 1), pb.vec2(1, 1), pb.vec2(-1, -1), pb.vec2(1, -1)];\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.coords.at(this.$builtins.vertexIndex), this.clearDepth, 1);\r\n });\r\n },\r\n fragment(pb) {\r\n this.clearColor = pb.vec4().uniform(0);\r\n if (colorAttachments.length === 0) {\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = this.clearColor;\r\n });\r\n } else {\r\n for (let i = 0; i < colorAttachments.length; i++) {\r\n this.$outputs[`outColor${i}`] =\r\n colorAttachments[i] === 'f'\r\n ? pb.vec4()\r\n : colorAttachments[i] === 'i'\r\n ? pb.ivec4()\r\n : pb.uvec4();\r\n }\r\n pb.main(function () {\r\n for (let i = 0; i < colorAttachments.length; i++) {\r\n this.$outputs[`outColor${i}`] =\r\n colorAttachments[i] === 'f'\r\n ? this.clearColor\r\n : colorAttachments[i] === 'i'\r\n ? pb.ivec4(this.clearColor)\r\n : pb.uvec4(this.clearColor);\r\n }\r\n });\r\n }\r\n }\r\n }) as WebGPUProgram;\r\n const bindGroup = device.createBindGroup(program.bindGroupLayouts[0]) as WebGPUBindGroup;\r\n programInfo = {\r\n program,\r\n bindGroup\r\n };\r\n this._clearPrograms[hash] = programInfo;\r\n }\r\n return programInfo;\r\n }\r\n private static initClearQuad(renderPass: WebGPURenderPass) {\r\n this._clearStateSet = renderPass.getDevice().createRenderStateSet() as unknown as WebGPURenderStateSet;\r\n this._clearStateSet.useDepthState().enableTest(false);\r\n this._clearStateSet.useRasterizerState().setCullMode('none');\r\n this._clearStateSet\r\n .useStencilState()\r\n .enable(true)\r\n .setFrontOp('replace', 'replace', 'replace')\r\n .setBackOp('replace', 'replace', 'replace')\r\n .setFrontCompareFunc('always')\r\n .setBackCompareFunc('always');\r\n }\r\n}\r\n\r\nexport class WebGPUMipmapGenerator {\r\n static _frameBufferInfo: Nullable<FrameBufferInfo> = null;\r\n static _mipmapGenerationProgram: Nullable<WebGPUProgram> = null;\r\n static _mipmapGenerationStateSet: Nullable<WebGPURenderStateSet> = null;\r\n static getMipmapGenerationBindGroupLayout(device: WebGPUDevice) {\r\n if (!this._mipmapGenerationProgram) {\r\n this.initMipmapGeneration(device);\r\n }\r\n return this._mipmapGenerationProgram!.bindGroupLayouts[0];\r\n }\r\n static generateMipmap(device: WebGPUDevice, tex: WebGPUBaseTexture, cmdEncoder?: GPUCommandEncoder) {\r\n if (!tex.isRenderable()) {\r\n return;\r\n }\r\n if (!this._mipmapGenerationProgram) {\r\n this.initMipmapGeneration(device);\r\n }\r\n const encoder = cmdEncoder ?? device.device.createCommandEncoder();\r\n const miplevels = tex.mipLevelCount;\r\n const numLayers = tex.isTextureCube() ? 6 : tex.isTexture2DArray() ? tex.depth : 1;\r\n tex.setMipmapDirty(false);\r\n for (let face = 0; face < numLayers; face++) {\r\n for (let level = 1; level < miplevels; level++) {\r\n this.generateMiplevel(device, encoder, tex, tex.object!, tex.gpuFormat!, level, level, face);\r\n }\r\n }\r\n if (!cmdEncoder) {\r\n device.device.queue.submit([encoder.finish()]);\r\n }\r\n }\r\n static generateMipmapsForBindGroups(device: WebGPUDevice, bindGroups: WebGPUBindGroup[]) {\r\n for (const bindGroup of bindGroups) {\r\n if (bindGroup) {\r\n for (const tex of bindGroup.textureList) {\r\n if (!tex.disposed && tex.isMipmapDirty()) {\r\n WebGPUMipmapGenerator.generateMipmap(device, tex);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n private static generateMiplevel(\r\n device: WebGPUDevice,\r\n commandEncoder: GPUCommandEncoder,\r\n srcTex: WebGPUBaseTexture,\r\n dstTex: GPUTexture,\r\n format: GPUTextureFormat,\r\n dstLevel: number,\r\n srcLevel: number,\r\n face: number\r\n ) {\r\n const renderPassEncoder = this.beginMipmapGenerationPass(commandEncoder, dstTex, format, dstLevel, face);\r\n renderPassEncoder.setBindGroup(0, srcTex.getMipmapGenerationBindGroup(srcLevel, face).bindGroup);\r\n const pipeline = device.pipelineCache.fetchRenderPipeline(\r\n this._mipmapGenerationProgram!,\r\n null,\r\n this._mipmapGenerationStateSet!,\r\n 'triangle-strip',\r\n this._frameBufferInfo!\r\n );\r\n if (pipeline) {\r\n renderPassEncoder.setPipeline(pipeline);\r\n renderPassEncoder.draw(4, 1, 0);\r\n }\r\n renderPassEncoder.end();\r\n }\r\n private static beginMipmapGenerationPass(\r\n encoder: GPUCommandEncoder,\r\n texture: GPUTexture,\r\n format: GPUTextureFormat,\r\n level: number,\r\n face: number\r\n ) {\r\n const passDesc: GPURenderPassDescriptor = {\r\n colorAttachments: [\r\n {\r\n view: texture.createView({\r\n dimension: '2d',\r\n baseMipLevel: level || 0,\r\n mipLevelCount: 1,\r\n baseArrayLayer: face || 0,\r\n arrayLayerCount: 1\r\n }),\r\n loadOp: 'clear',\r\n clearValue: [0, 0, 0, 0],\r\n storeOp: 'store'\r\n }\r\n ]\r\n };\r\n this._frameBufferInfo = {\r\n frameBuffer: null,\r\n colorFormats: [format],\r\n depthFormat: null,\r\n sampleCount: 1,\r\n hash: null,\r\n clearHash: null\r\n } as unknown as FrameBufferInfo;\r\n this._frameBufferInfo.hash = `${this._frameBufferInfo.colorFormats.join('-')}:${\r\n this._frameBufferInfo.depthFormat\r\n }:${this._frameBufferInfo.sampleCount}`;\r\n const renderPassEncoder = encoder.beginRenderPass(passDesc);\r\n renderPassEncoder.insertDebugMarker('MipmapGeneration');\r\n return renderPassEncoder;\r\n }\r\n private static initMipmapGeneration(device: WebGPUDevice) {\r\n this._mipmapGenerationProgram = device.buildRenderProgram({\r\n label: 'MipmapGeneration',\r\n vertex(pb) {\r\n this.$outputs.outUV = pb.vec2();\r\n this.coords = [pb.vec2(-1, 1), pb.vec2(1, 1), pb.vec2(-1, -1), pb.vec2(1, -1)];\r\n this.uv = [pb.vec2(0, 0), pb.vec2(1, 0), pb.vec2(0, 1), pb.vec2(1, 1)];\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.coords.at(this.$builtins.vertexIndex), 0, 1);\r\n this.$outputs.outUV = this.uv.at(this.$builtins.vertexIndex);\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n this.tex = pb.tex2D().uniform(0);\r\n pb.main(function () {\r\n this.$outputs.color = pb.textureSampleLevel(this.tex, this.$inputs.outUV, 0);\r\n });\r\n }\r\n }) as WebGPUProgram;\r\n this._mipmapGenerationStateSet = device.createRenderStateSet() as WebGPURenderStateSet;\r\n this._mipmapGenerationStateSet.useDepthState().enableTest(false).enableWrite(false);\r\n this._mipmapGenerationStateSet.useRasterizerState().setCullMode('none');\r\n }\r\n}\r\n","/// <reference types=\"@webgpu/types\" />\r\n\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport type {\r\n SamplerOptions,\r\n BaseTexture,\r\n GPUDataBuffer,\r\n TextureType,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport {\r\n isCompressedTextureFormat,\r\n hasDepthChannel,\r\n isFloatTextureFormat,\r\n isIntegerTextureFormat,\r\n isSignedTextureFormat,\r\n getTextureFormatBlockWidth,\r\n getTextureFormatBlockHeight,\r\n getTextureFormatBlockSize,\r\n GPUResourceUsageFlags,\r\n isSRGBTextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { UploadTexture, UploadImage } from './uploadringbuffer';\r\nimport { UploadRingBuffer } from './uploadringbuffer';\r\nimport { textureFormatMap } from './constants_webgpu';\r\nimport type { Immutable, Nullable, RequireOptionals, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUBuffer } from './buffer_webgpu';\r\nimport type { WebGPUTextureCaps, TextureFormatInfoWebGPU } from './capabilities_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport { WebGPUMipmapGenerator } from './utils_webgpu';\r\n\r\nexport abstract class WebGPUBaseTexture<\r\n T extends GPUTexture | GPUExternalTexture = GPUTexture\r\n> extends WebGPUObject<T> {\r\n protected _target: TextureType;\r\n protected _memCost: number;\r\n protected _views: GPUTextureView[][][];\r\n protected _defaultView: Nullable<GPUTextureView>;\r\n protected _mipmapDirty: boolean;\r\n protected _flags: number;\r\n protected _width: number;\r\n protected _height: number;\r\n protected _depth: number;\r\n protected _format: Nullable<TextureFormat>;\r\n protected _renderable: boolean;\r\n protected _fb: boolean;\r\n protected _gpuFormat: Nullable<GPUTextureFormat>;\r\n protected _mipLevelCount: number;\r\n protected _samplerOptions: Nullable<RequireOptionals<SamplerOptions>>;\r\n protected _ringBuffer: UploadRingBuffer;\r\n protected _mipBindGroups: WebGPUBindGroup[][];\r\n protected _pendingUploads: (UploadTexture | UploadImage)[];\r\n constructor(device: WebGPUDevice, target: TextureType) {\r\n super(device);\r\n this._target = target;\r\n this._flags = 0;\r\n this._width = 0;\r\n this._height = 0;\r\n this._depth = 0;\r\n this._renderable = false;\r\n this._fb = false;\r\n this._format = null;\r\n this._gpuFormat = null;\r\n this._mipLevelCount = 0;\r\n this._samplerOptions = null;\r\n this._memCost = 0;\r\n this._mipmapDirty = false;\r\n this._mipBindGroups = [];\r\n this._views = [];\r\n this._defaultView = null;\r\n this._ringBuffer = new UploadRingBuffer(device);\r\n this._pendingUploads = [];\r\n }\r\n get hash() {\r\n return this._object ? this._device.gpuGetObjectHash(this._object) : 0;\r\n }\r\n get target() {\r\n return this._target;\r\n }\r\n get width() {\r\n return this._width;\r\n }\r\n get height() {\r\n return this._height;\r\n }\r\n get depth() {\r\n return this._depth;\r\n }\r\n get memCost() {\r\n return this._memCost;\r\n }\r\n get format() {\r\n return this._format!;\r\n }\r\n get mipLevelCount() {\r\n return this._mipLevelCount;\r\n }\r\n get gpuFormat() {\r\n return this._gpuFormat;\r\n }\r\n get samplerOptions(): Nullable<Immutable<SamplerOptions>> {\r\n return this._samplerOptions;\r\n }\r\n set samplerOptions(options: Nullable<Immutable<SamplerOptions>>) {\r\n if (this._format) {\r\n const params = (this.getTextureCaps() as WebGPUTextureCaps).getTextureFormatInfo(this._format);\r\n this._samplerOptions = options\r\n ? Object.assign({}, this._getSamplerOptions(params, !!options.compare), options)\r\n : null;\r\n } else {\r\n console.error('Set sampler options failed: texture not initialized');\r\n }\r\n }\r\n abstract init(): void;\r\n abstract readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ): Promise<void>;\r\n abstract readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ): void;\r\n isTexture(): this is BaseTexture {\r\n return true;\r\n }\r\n isFilterable() {\r\n if (!this._format || !this.getTextureCaps().getTextureFormatInfo(this._format)?.filterable) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n /** @internal */\r\n clearPendingUploads() {\r\n if (this._pendingUploads.length > 0) {\r\n this._pendingUploads = [];\r\n this._ringBuffer.purge();\r\n }\r\n }\r\n isMipmapDirty() {\r\n return this._mipmapDirty;\r\n }\r\n setMipmapDirty(b: boolean) {\r\n this._mipmapDirty = b;\r\n }\r\n destroy() {\r\n if (this._object) {\r\n if (!this.isTextureVideo()) {\r\n (this._object as GPUTexture).destroy();\r\n }\r\n this._object = null;\r\n this._device.updateVideoMemoryCost(-this._memCost);\r\n this._memCost = 0;\r\n this._ringBuffer.purge();\r\n this._views = [];\r\n for (const face of this._mipBindGroups) {\r\n for (const level of face) {\r\n level?.dispose();\r\n }\r\n }\r\n this._mipBindGroups = [];\r\n }\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n this.init();\r\n }\r\n }\r\n getTextureCaps() {\r\n return this._device.getDeviceCaps().textureCaps;\r\n }\r\n isSRGBFormat() {\r\n return !!this._format && isSRGBTextureFormat(this._format);\r\n }\r\n isFloatFormat() {\r\n return !!this._format && isFloatTextureFormat(this._format);\r\n }\r\n isIntegerFormat() {\r\n return !!this._format && isIntegerTextureFormat(this._format);\r\n }\r\n isSignedFormat() {\r\n return !!this._format && isSignedTextureFormat(this._format);\r\n }\r\n isCompressedFormat() {\r\n return !!this._format && isCompressedTextureFormat(this._format);\r\n }\r\n isDepth() {\r\n return !!this._format && hasDepthChannel(this._format);\r\n }\r\n isRenderable() {\r\n return this._renderable;\r\n }\r\n getView(level?: number, face?: number, mipCount?: number) {\r\n level = Number(level) || 0;\r\n face = Number(face) || 0;\r\n mipCount = Number(mipCount) || 0;\r\n if (!this._views[face]) {\r\n this._views[face] = [];\r\n }\r\n if (!this._views[face][level]) {\r\n this._views[face][level] = [];\r\n }\r\n if (!this._views[face][level][mipCount]) {\r\n this._views[face][level][mipCount] = this.createView(level, face, mipCount)!;\r\n }\r\n return this._views[face][level][mipCount];\r\n }\r\n getDefaultView() {\r\n if (!this._defaultView && this._object && !this.isTextureVideo()) {\r\n this._defaultView = this._device.gpuCreateTextureView(this._object as GPUTexture, {\r\n dimension: this.isTextureCube()\r\n ? 'cube'\r\n : this.isTexture3D()\r\n ? '3d'\r\n : this.isTexture2DArray()\r\n ? '2d-array'\r\n : '2d',\r\n arrayLayerCount: this.isTextureCube() ? 6 : this.isTexture2DArray() ? this._depth : 1,\r\n aspect: hasDepthChannel(this.format) ? 'depth-only' : 'all'\r\n });\r\n }\r\n return this._defaultView;\r\n }\r\n copyPixelDataToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n level: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (this.isTextureVideo()) {\r\n throw new Error('copyPixelDataToBuffer() failed: can not copy pixel data of video texture');\r\n }\r\n this.sync();\r\n WebGPUBaseTexture.copyTexturePixelsToBuffer(\r\n this._device.device,\r\n this.object as GPUTexture,\r\n this.format,\r\n x,\r\n y,\r\n w,\r\n h,\r\n layer,\r\n level,\r\n buffer\r\n );\r\n }\r\n generateMipmaps() {\r\n this._mipmapDirty = true;\r\n this._device.textureUpload(this as WebGPUBaseTexture);\r\n }\r\n beginSyncChanges(encoder: Nullable<GPUCommandEncoder>) {\r\n if (!this.isTextureVideo() && this._pendingUploads.length > 0 && this._object) {\r\n const cmdEncoder = encoder || this._device.device.createCommandEncoder();\r\n for (const u of this._pendingUploads) {\r\n if ((u as UploadTexture).mappedBuffer) {\r\n const upload = u as UploadTexture;\r\n cmdEncoder.copyBufferToTexture(\r\n {\r\n buffer: upload.mappedBuffer.buffer,\r\n offset: upload.mappedBuffer.offset,\r\n bytesPerRow: upload.bufferStride,\r\n rowsPerImage: upload.uploadHeight\r\n },\r\n {\r\n texture: this._object as GPUTexture,\r\n origin: {\r\n x: upload.uploadOffsetX,\r\n y: upload.uploadOffsetY,\r\n z: upload.uploadOffsetZ\r\n },\r\n mipLevel: upload.mipLevel\r\n },\r\n {\r\n width: upload.uploadWidth,\r\n height: upload.uploadHeight,\r\n depthOrArrayLayers: upload.uploadDepth\r\n }\r\n );\r\n } else if ((u as UploadImage).image) {\r\n const upload = u as UploadImage;\r\n // FIXME: copy image cannot be queued into the command buffer\r\n const copyView: GPUImageCopyTextureTagged = {\r\n texture: this._object as GPUTexture,\r\n origin: {\r\n x: upload.offsetX,\r\n y: upload.offsetY,\r\n z: upload.offsetZ\r\n },\r\n mipLevel: upload.mipLevel,\r\n premultipliedAlpha: false\r\n };\r\n this._device.device.queue.copyExternalImageToTexture(\r\n {\r\n source: upload.image,\r\n origin: {\r\n x: upload.srcX,\r\n y: upload.srcY\r\n }\r\n },\r\n copyView,\r\n {\r\n width: upload.width,\r\n height: upload.height,\r\n depthOrArrayLayers: upload.depth\r\n }\r\n );\r\n }\r\n }\r\n this._pendingUploads.length = 0;\r\n if (!encoder) {\r\n this._device.device.queue.submit([cmdEncoder.finish()]);\r\n }\r\n this._ringBuffer.beginUploads();\r\n }\r\n }\r\n endSyncChanges() {\r\n if (this._flags & GPUResourceUsageFlags.DYNAMIC) {\r\n this._ringBuffer.endUploads();\r\n } else {\r\n this._ringBuffer.purge();\r\n }\r\n }\r\n getDefaultSampler(shadow: boolean) {\r\n const params = (this.getTextureCaps() as WebGPUTextureCaps).getTextureFormatInfo(this._format!);\r\n return this._device.createSampler(\r\n !this._samplerOptions || !this._samplerOptions.compare !== !shadow\r\n ? this._getSamplerOptions(params, shadow)\r\n : this._samplerOptions\r\n );\r\n }\r\n abstract createView(level?: number, face?: number, mipCount?: number): Nullable<GPUTextureView>;\r\n /** @internal */\r\n private sync() {\r\n this._device.flush();\r\n /*\r\n if (this._pendingUploads) {\r\n if (this._device.isTextureUploading(this as WebGPUBaseTexture)) {\r\n this._device.currentPass.end();\r\n } else {\r\n this.beginSyncChanges(null);\r\n this.endSyncChanges();\r\n }\r\n }\r\n */\r\n }\r\n /** @internal */\r\n protected _calcMipLevelCount(format: TextureFormat, width: number, height: number, _depth: number) {\r\n if (hasDepthChannel(format) || this.isTexture3D() || this.isTextureVideo()) {\r\n return 1;\r\n }\r\n if (this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP) {\r\n return 1;\r\n }\r\n const params = (this.getTextureCaps() as WebGPUTextureCaps).getTextureFormatInfo(format);\r\n if (!params || !params.renderable) {\r\n return 1;\r\n }\r\n return Math.floor(Math.log2(Math.max(width, height))) + 1;\r\n }\r\n /** @internal */\r\n protected allocInternal(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n if (this.isTextureVideo()) {\r\n return;\r\n }\r\n if (numMipLevels === 0) {\r\n numMipLevels = this._calcMipLevelCount(format, width, height, depth);\r\n } else if (numMipLevels !== 1) {\r\n let size = Math.max(width, height);\r\n if (this.isTexture3D()) {\r\n size = Math.max(size, depth);\r\n }\r\n const autoMipLevelCount = Math.floor(Math.log2(size)) + 1; //this._calcMipLevelCount(format, width, height, depth);\r\n //const autoMipLevelCount = this._calcMipLevelCount(format, width, height, depth);\r\n if (!Number.isInteger(numMipLevels) || numMipLevels < 0 || numMipLevels > autoMipLevelCount) {\r\n numMipLevels = autoMipLevelCount;\r\n }\r\n }\r\n if (\r\n this._object &&\r\n (this._format !== format || this._width !== width || this._height !== height || this._depth !== depth,\r\n this._mipLevelCount !== numMipLevels)\r\n ) {\r\n const obj = this._object;\r\n this._device.runNextFrame(() => {\r\n (obj as GPUTexture).destroy();\r\n });\r\n this._object = null;\r\n }\r\n if (!this._object) {\r\n this._format = format;\r\n this._width = width;\r\n this._height = height;\r\n this._depth = depth;\r\n this._mipLevelCount = numMipLevels;\r\n if (!this._device.isContextLost()) {\r\n this._gpuFormat = textureFormatMap[this._format];\r\n const params = (this.getTextureCaps() as WebGPUTextureCaps).getTextureFormatInfo(this._format);\r\n this._renderable = params.renderable && !(this._flags & GPUResourceUsageFlags.TF_WRITABLE);\r\n this._object = this._device.gpuCreateTexture({\r\n size: {\r\n width: this._width,\r\n height: this._height,\r\n depthOrArrayLayers: this.isTextureCube() ? 6 : this._depth\r\n },\r\n format: this._gpuFormat,\r\n mipLevelCount: this._mipLevelCount,\r\n sampleCount: 1,\r\n dimension: this.isTexture3D() ? '3d' : '2d',\r\n usage:\r\n GPUTextureUsage.TEXTURE_BINDING |\r\n GPUTextureUsage.COPY_DST |\r\n GPUTextureUsage.COPY_SRC |\r\n (this._renderable && !this.isTexture3D() ? GPUTextureUsage.RENDER_ATTACHMENT : 0) |\r\n (this._flags & GPUResourceUsageFlags.TF_WRITABLE ? GPUTextureUsage.STORAGE_BINDING : 0)\r\n }) as any;\r\n const memCost = (this.getTextureCaps() as WebGPUTextureCaps).calcMemoryUsage(\r\n this._format,\r\n this._width * this._height * (this.isTextureCube() ? 6 : this._depth)\r\n );\r\n this._device.updateVideoMemoryCost(memCost - this._memCost);\r\n this._memCost = memCost;\r\n }\r\n }\r\n }\r\n static calculateBufferSizeForCopy(width: number, height: number, format: TextureFormat) {\r\n const blockWidth = getTextureFormatBlockWidth(format);\r\n const blockHeight = getTextureFormatBlockHeight(format);\r\n const blockSize = getTextureFormatBlockSize(format);\r\n const blocksPerRow = Math.ceil(width / blockWidth);\r\n const blocksPerCol = Math.ceil(height / blockHeight);\r\n const rowStride = blocksPerRow * blockSize;\r\n const bufferStride = (rowStride + 255) & ~255;\r\n const size = blocksPerCol * rowStride;\r\n const sizeAligned = blocksPerCol * bufferStride;\r\n return { size, sizeAligned, strideAligned: bufferStride, stride: rowStride, numRows: blocksPerCol };\r\n }\r\n /** @internal */\r\n static copyTexturePixelsToBuffer(\r\n device: GPUDevice,\r\n texture: GPUTexture,\r\n format: TextureFormat,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n level: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (!((buffer as WebGPUBuffer).gpuUsage & GPUBufferUsage.COPY_DST)) {\r\n console.error(\r\n 'copyTexturePixelsToBuffer() failed: destination buffer does not have COPY_DST usage set'\r\n );\r\n return;\r\n }\r\n const { size, sizeAligned, stride, strideAligned, numRows } = this.calculateBufferSizeForCopy(\r\n w,\r\n h,\r\n format\r\n );\r\n if (buffer.byteLength < size) {\r\n console.error(\r\n `copyTexturePixelsToBuffer() failed: destination buffer size is ${buffer.byteLength}, should be at least ${size}`\r\n );\r\n return;\r\n }\r\n const tmpBuffer = device.createBuffer({\r\n size: sizeAligned,\r\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC\r\n });\r\n const encoder = device.createCommandEncoder();\r\n encoder.copyTextureToBuffer(\r\n {\r\n texture: texture,\r\n mipLevel: level ?? 0,\r\n origin: {\r\n x: x,\r\n y: y,\r\n z: layer ?? 0\r\n }\r\n },\r\n {\r\n buffer: tmpBuffer as GPUBuffer,\r\n offset: 0,\r\n bytesPerRow: strideAligned\r\n },\r\n {\r\n width: w,\r\n height: h,\r\n depthOrArrayLayers: 1\r\n }\r\n );\r\n if (size !== sizeAligned) {\r\n for (let i = 0; i < numRows; i++) {\r\n encoder.copyBufferToBuffer(\r\n tmpBuffer,\r\n i * strideAligned,\r\n buffer.object as GPUBuffer,\r\n i * stride,\r\n stride\r\n );\r\n }\r\n } else {\r\n encoder.copyBufferToBuffer(tmpBuffer, 0, buffer.object as GPUBuffer, 0, size);\r\n }\r\n device.queue.submit([encoder.finish()]);\r\n tmpBuffer.destroy();\r\n }\r\n /** @internal */\r\n protected uploadRaw(\r\n pixels: TypedArray,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n offsetX: number,\r\n offsetY: number,\r\n offsetZ: number,\r\n miplevel: number\r\n ) {\r\n if (this.isTextureVideo()) {\r\n console.error('BaseTexture.uploadRaw(): Cannot upload to video texture');\r\n return;\r\n }\r\n const data = new Uint8Array(pixels.buffer, pixels.byteOffset, pixels.byteLength);\r\n const info = (this.getTextureCaps() as WebGPUTextureCaps).getTextureFormatInfo(this._format!);\r\n const blockWidth = info.blockWidth || 1;\r\n const blockHeight = info.blockHeight || 1;\r\n const blocksPerRow = Math.ceil(width / blockWidth);\r\n const blocksPerCol = Math.ceil(height / blockHeight);\r\n const rowStride = blocksPerRow * info.size;\r\n if (rowStride * blocksPerCol * depth > data.byteLength) {\r\n throw new Error(`WebGPUTexture.update() invalid data size: ${data.byteLength}`);\r\n }\r\n if (!this._device.commandQueue.hasActiveWork() && !this._device.isTextureUploading(this as any)) {\r\n this.clearPendingUploads();\r\n const destination: GPUTexelCopyTextureInfo = {\r\n texture: this._object as GPUTexture,\r\n mipLevel: miplevel,\r\n origin: {\r\n x: offsetX,\r\n y: offsetY,\r\n z: offsetZ\r\n }\r\n };\r\n const dataLayout: GPUTexelCopyBufferLayout = {\r\n bytesPerRow: rowStride,\r\n rowsPerImage: blockHeight * blocksPerCol\r\n };\r\n const size: GPUExtent3D = {\r\n width: blockWidth * blocksPerRow,\r\n height: blockHeight * blocksPerCol,\r\n depthOrArrayLayers: depth\r\n };\r\n this._device.device.queue.writeTexture(destination, data, dataLayout, size);\r\n } else {\r\n this._device.textureUpload(this as WebGPUBaseTexture);\r\n const bufferStride = (rowStride + 255) & ~255; // align to 256 bytes\r\n const uploadSize = bufferStride * blocksPerCol * depth;\r\n const upload = this._ringBuffer.uploadBuffer(null, null, 0, 0, uploadSize);\r\n const mappedRange = upload.mappedBuffer.mappedRange!;\r\n const src = new Uint8Array(data);\r\n const dst = new Uint8Array(mappedRange, upload.mappedBuffer.offset, uploadSize);\r\n if (uploadSize === data.byteLength) {\r\n dst.set(new Uint8Array(data));\r\n } else {\r\n for (let d = 0; d < depth; d++) {\r\n const srcLayerOffset = d * rowStride * blocksPerRow;\r\n const dstLayerOffset = d * bufferStride * blocksPerCol;\r\n for (let i = 0; i < blocksPerCol; i++) {\r\n dst.set(\r\n src.subarray(srcLayerOffset + i * rowStride, srcLayerOffset + (i + 1) * rowStride),\r\n dstLayerOffset + i * bufferStride\r\n );\r\n }\r\n }\r\n }\r\n this._pendingUploads.push({\r\n mappedBuffer: upload.mappedBuffer,\r\n uploadOffsetX: offsetX,\r\n uploadOffsetY: offsetY,\r\n uploadOffsetZ: offsetZ,\r\n uploadWidth: blockWidth * blocksPerRow,\r\n uploadHeight: blockHeight * blocksPerCol,\r\n uploadDepth: depth,\r\n bufferStride: bufferStride,\r\n mipLevel: miplevel\r\n });\r\n }\r\n }\r\n /** @internal */\r\n protected uploadImageData(\r\n data: ImageBitmap | HTMLCanvasElement,\r\n srcX: number,\r\n srcY: number,\r\n width: number,\r\n height: number,\r\n destX: number,\r\n destY: number,\r\n miplevel: number,\r\n layer: number\r\n ) {\r\n if (this.isTextureVideo()) {\r\n console.error('BaseTexture.uploadImageData(): Cannot upload to video texture');\r\n return;\r\n }\r\n if (this._device.device.queue.copyExternalImageToTexture) {\r\n if (this._device.commandQueue.hasActiveWork() || this._device.isTextureUploading(this as any)) {\r\n this._device.flush();\r\n }\r\n const copyView: GPUCopyExternalImageDestInfo = {\r\n texture: this._object as GPUTexture,\r\n origin: {\r\n x: destX,\r\n y: destY,\r\n z: layer ?? 0\r\n },\r\n mipLevel: miplevel ?? 0,\r\n premultipliedAlpha: false\r\n };\r\n this._device.device.queue.copyExternalImageToTexture(\r\n {\r\n source: data,\r\n origin: {\r\n x: srcX ?? 0,\r\n y: srcY ?? 0\r\n }\r\n },\r\n copyView,\r\n {\r\n width: width,\r\n height: height,\r\n depthOrArrayLayers: 1\r\n }\r\n );\r\n } else {\r\n this._device.textureUpload(this as WebGPUBaseTexture);\r\n this._pendingUploads.push({\r\n image: data,\r\n offsetX: destX,\r\n offsetY: destY,\r\n offsetZ: layer ?? 0,\r\n srcX: srcX ?? 0,\r\n srcY: srcY ?? 0,\r\n srcZ: 0,\r\n width: width,\r\n height: height,\r\n depth: 1,\r\n mipLevel: miplevel ?? 0\r\n });\r\n }\r\n }\r\n getMipmapGenerationBindGroup(level: number, face: number) {\r\n const faceGroups = this._mipBindGroups;\r\n let levelGroups = faceGroups[face];\r\n if (!levelGroups) {\r\n levelGroups = [];\r\n faceGroups[face] = levelGroups;\r\n }\r\n let levelGroup = levelGroups[level];\r\n if (!levelGroup) {\r\n levelGroup = this._device.createBindGroup(\r\n WebGPUMipmapGenerator.getMipmapGenerationBindGroupLayout(this._device)\r\n ) as WebGPUBindGroup;\r\n levelGroup.setTextureView('tex', this, level - 1, face, 1);\r\n levelGroups[level] = levelGroup;\r\n }\r\n return levelGroup;\r\n }\r\n /** @internal */\r\n protected _getSamplerOptions(params: Partial<TextureFormatInfoWebGPU>, shadow: boolean) {\r\n const comparison = this.isDepth() && shadow;\r\n const filterable = params.filterable || comparison;\r\n const magFilter = filterable ? 'linear' : 'nearest';\r\n const minFilter = params.filterable ? 'linear' : 'nearest';\r\n const mipFilter = this._mipLevelCount > 1 ? (filterable ? 'linear' : 'nearest') : 'none';\r\n return {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n addressW: 'clamp',\r\n magFilter,\r\n minFilter,\r\n mipFilter,\r\n lodMin: 0,\r\n lodMax: 32,\r\n maxAnisotropy: 1,\r\n compare: comparison ? 'lt' : null\r\n } as const;\r\n }\r\n /** @internal */\r\n _markAsCurrentFB(b: boolean) {\r\n this._fb = b;\r\n }\r\n /** @internal */\r\n _isMarkedAsCurrentFB() {\r\n return this._fb;\r\n }\r\n}\r\n","import type {\r\n TextureImageElement,\r\n TextureMipmapData,\r\n Texture2D,\r\n GPUDataBuffer,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { linearTextureFormatToSRGB, GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nexport class WebGPUTexture2D extends WebGPUBaseTexture implements Texture2D<GPUTexture> {\r\n constructor(device: WebGPUDevice) {\r\n super(device, '2d');\r\n }\r\n isTexture2D(): this is Texture2D {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._mipLevelCount);\r\n }\r\n update(data: TypedArray, xOffset: number, yOffset: number, width: number, height: number) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n this.uploadRaw(data, width, height, 1, xOffset, yOffset, 0, 0);\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n destX: number,\r\n destY: number,\r\n srcX: number,\r\n srcY: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n if (data instanceof HTMLCanvasElement || this._device.isTextureUploading(this)) {\r\n // Copy the pixel values out in case the canvas content may be changed later\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, srcX, srcY, width, height, 0, 0, width, height);\r\n const imageData = ctx.getImageData(0, 0, width, height);\r\n this.update(imageData.data, destX, destY, width, height);\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n } else {\r\n this.uploadImageData(data, srcX, srcY, width, height, destX, destY, 0, 0);\r\n }\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (faceOrLayer !== 0) {\r\n throw new Error(`Texture2D.readPixels(): parameter faceOrLayer must be 0`);\r\n }\r\n if (mipLevel >= this.mipLevelCount || mipLevel < 0) {\r\n throw new Error(`Texture2D.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n const { size } = WebGPUBaseTexture.calculateBufferSizeForCopy(w, h, this.format);\r\n if (buffer.byteLength < size) {\r\n throw new Error(\r\n `Texture2D.readPixels() failed: destination buffer size is ${buffer.byteLength}, should be at least ${size}`\r\n );\r\n }\r\n const tmpBuffer = this._device.createBuffer(size, { usage: 'read' });\r\n await this.copyPixelDataToBuffer(x, y, w, h, 0, mipLevel, tmpBuffer);\r\n await tmpBuffer.getBufferSubData(\r\n new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength),\r\n 0,\r\n size\r\n );\r\n tmpBuffer.dispose();\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (faceOrLayer !== 0) {\r\n throw new Error(`Texture2D.readPixels(): parameter faceOrLayer must be 0`);\r\n }\r\n if (mipLevel >= this.mipLevelCount || mipLevel < 0) {\r\n throw new Error(`Texture2D.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n this.copyPixelDataToBuffer(x, y, w, h, 0, mipLevel, buffer);\r\n }\r\n loadFromElement(element: TextureImageElement, sRGB: boolean, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n const format = sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm';\r\n this.loadImage(element, format);\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n this.loadEmpty(format, width, height, 0);\r\n }\r\n createView(level?: number, face?: number, mipCount?: number) {\r\n return this._object\r\n ? this._device.gpuCreateTextureView(this._object, {\r\n dimension: '2d',\r\n baseMipLevel: level ?? 0,\r\n mipLevelCount: mipCount || this._mipLevelCount - (level ?? 0),\r\n baseArrayLayer: 0,\r\n arrayLayerCount: 1\r\n })\r\n : null;\r\n }\r\n createWithMipmapData(data: TextureMipmapData, sRGB: boolean, creationFlags?: number) {\r\n if (data.isCubemap || data.isVolume) {\r\n console.error('loading 2d texture with mipmap data failed: data is not 2d texture');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadLevels(data, sRGB);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadEmpty(format: TextureFormat, width: number, height: number, numMipLevels: number) {\r\n this.allocInternal(format, width, height, 1, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n /** @internal */\r\n private loadLevels(levels: TextureMipmapData, sRGB: boolean) {\r\n let format = sRGB ? linearTextureFormatToSRGB(levels.format) : levels.format;\r\n let swizzle = false;\r\n if (format === 'bgra8unorm') {\r\n format = 'rgba8unorm';\r\n swizzle = true;\r\n } else if (this._format === 'bgra8unorm-srgb') {\r\n format = 'rgba8unorm-srgb';\r\n swizzle = true;\r\n }\r\n const width = levels.width;\r\n const height = levels.height;\r\n const mipLevelCount = levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, 1, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n for (let i = 0; i < levels.mipDatas[0].length; i++) {\r\n if (swizzle) {\r\n // convert bgra to rgba\r\n for (let j = 0; j < levels.mipDatas[0][i].width * levels.mipDatas[0][i].height; j++) {\r\n const t = levels.mipDatas[0][i].data[j * 4];\r\n levels.mipDatas[0][i].data[j * 4] = levels.mipDatas[0][i].data[j * 4 + 2];\r\n levels.mipDatas[0][i].data[j * 4 + 2] = t;\r\n }\r\n }\r\n this.uploadRaw(\r\n levels.mipDatas[0][i].data,\r\n levels.mipDatas[0][i].width,\r\n levels.mipDatas[0][i].height,\r\n 1,\r\n 0,\r\n 0,\r\n 0,\r\n i\r\n );\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadImage(element: TextureImageElement, format: TextureFormat) {\r\n this.allocInternal(format, Number(element.width), Number(element.height), 1, 0);\r\n if (!this._device.isContextLost()) {\r\n this.updateFromElement(element, 0, 0, 0, 0, this._width, this._height);\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n}\r\n","import type {\r\n TextureImageElement,\r\n Texture2DArray,\r\n GPUDataBuffer,\r\n TextureFormat,\r\n TextureMipmapData\r\n} from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nexport class WebGPUTexture2DArray extends WebGPUBaseTexture implements Texture2DArray<GPUTexture> {\r\n constructor(device: WebGPUDevice) {\r\n super(device, '2darray');\r\n }\r\n isTexture2DArray(): this is Texture2DArray {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n update(\r\n data: TypedArray,\r\n xOffset: number,\r\n yOffset: number,\r\n zOffset: number,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n this.uploadRaw(data, width, height, depth, xOffset, yOffset, zOffset, 0);\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n destX: number,\r\n destY: number,\r\n destZ: number,\r\n srcX: number,\r\n srcY: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n if (data instanceof HTMLCanvasElement || this._device.isTextureUploading(this)) {\r\n // Copy the pixel values out in case the canvas content may be changed later\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, srcX, srcY, width, height, 0, 0, width, height);\r\n const imageData = ctx.getImageData(0, 0, width, height);\r\n this.update(imageData.data, destX, destY, destZ, width, height, 1);\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n } else {\r\n this.uploadImageData(data, srcX, srcY, width, height, destX, destY, 0, destZ);\r\n }\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, depth: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n this.loadEmpty(format, width, height, depth, 0);\r\n }\r\n createWithMipmapData(data: TextureMipmapData, creationFlags?: number) {\r\n if (!data.arraySize) {\r\n console.error('Texture2DArray.createWithMipmapData() failed: Data is not texture array');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(\r\n 'Texture2DArray.createWithMipmapData() failed: Webgl device does not support storage texture'\r\n );\r\n } else {\r\n this.loadLevels(data);\r\n }\r\n }\r\n }\r\n createView(level?: number, face?: number, mipCount?: number) {\r\n return this._object\r\n ? this._device.gpuCreateTextureView(this._object, {\r\n dimension: '2d',\r\n baseMipLevel: level ?? 0,\r\n mipLevelCount: mipCount || this._mipLevelCount - (level ?? 0),\r\n baseArrayLayer: face ?? 0,\r\n arrayLayerCount: 1\r\n })\r\n : null;\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (layer < 0 || layer >= this._depth) {\r\n throw new Error(`Texture2DArray.readPixels(): invalid layer: ${layer}`);\r\n }\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`Texture2DArray.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n const { size } = WebGPUBaseTexture.calculateBufferSizeForCopy(w, h, this.format);\r\n if (buffer.byteLength < size) {\r\n throw new Error(\r\n `Texture2D.readPixels() failed: destination buffer size is ${buffer.byteLength}, should be at least ${size}`\r\n );\r\n }\r\n const tmpBuffer = this._device.createBuffer(size, { usage: 'read' });\r\n await this.copyPixelDataToBuffer(x, y, w, h, layer, mipLevel, tmpBuffer);\r\n await tmpBuffer.getBufferSubData(\r\n new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength),\r\n 0,\r\n size\r\n );\r\n tmpBuffer.dispose();\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (layer < 0 || layer >= this._depth) {\r\n throw new Error(`Texture2DArray.readPixelsToBuffer(): invalid layer: ${layer}`);\r\n }\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`Texture2DArray.readPixelsToBuffer(): invalid miplevel: ${mipLevel}`);\r\n }\r\n this.copyPixelDataToBuffer(x, y, w, h, layer, mipLevel, buffer);\r\n }\r\n private loadEmpty(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n this.allocInternal(format, width, height, depth, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n private loadLevels(levels: TextureMipmapData) {\r\n const format = levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n const depth = levels.arraySize;\r\n const mipLevelCount =\r\n levels.mipLevels === 1 && !(this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP)\r\n ? this._calcMipLevelCount(levels.format, width, height, depth)\r\n : levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('Texture2DArray.loadLevels(): No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, levels.arraySize, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n for (let layer = 0; layer < levels.arraySize; layer++) {\r\n if (levels.mipDatas[layer].length !== levels.mipLevels) {\r\n console.error(`Texture2DArray.loadLevels() failed: Invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < levels.mipLevels; i++) {\r\n this.uploadRaw(\r\n levels.mipDatas[layer][i].data,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n 0,\r\n 0,\r\n layer,\r\n i\r\n );\r\n }\r\n }\r\n if (levels.mipLevels !== this.mipLevelCount) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n}\r\n","import type { Texture3D, GPUDataBuffer, TextureFormat, TextureMipmapData } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nexport class WebGPUTexture3D extends WebGPUBaseTexture implements Texture3D<GPUTexture> {\r\n constructor(device: WebGPUDevice) {\r\n super(device, '3d');\r\n }\r\n isTexture3D(): this is Texture3D {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n update(\r\n data: TypedArray,\r\n xOffset: number,\r\n yOffset: number,\r\n zOffset: number,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n this.uploadRaw(data, width, height, depth, xOffset, yOffset, zOffset, 0);\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, depth: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n this.loadEmpty(format, width, height, depth, 0);\r\n }\r\n createView(_level?: number, face?: number, _mipCount?: number) {\r\n return this._object\r\n ? this._device.gpuCreateTextureView(this._object, {\r\n dimension: '2d',\r\n baseMipLevel: 0,\r\n mipLevelCount: 1,\r\n baseArrayLayer: face,\r\n arrayLayerCount: 1\r\n })\r\n : null;\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (mipLevel !== 0) {\r\n throw new Error(`Texture3D.readPixels(): parameter mipLevel must be 0`);\r\n }\r\n const { size } = WebGPUBaseTexture.calculateBufferSizeForCopy(w, h, this.format);\r\n if (buffer.byteLength < size) {\r\n throw new Error(\r\n `Texture2D.readPixels() failed: destination buffer size is ${buffer.byteLength}, should be at least ${size}`\r\n );\r\n }\r\n const tmpBuffer = this._device.createBuffer(size, { usage: 'read' });\r\n await this.copyPixelDataToBuffer(x, y, w, h, layer, 0, tmpBuffer);\r\n await tmpBuffer.getBufferSubData(\r\n new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength),\r\n 0,\r\n size\r\n );\r\n tmpBuffer.dispose();\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (mipLevel !== 0) {\r\n throw new Error(`Texture3D.readPixelsToBuffer(): parameter mipLevel must be 0`);\r\n }\r\n this.copyPixelDataToBuffer(x, y, w, h, layer, 0, buffer);\r\n }\r\n createWithMipmapData(data: TextureMipmapData, creationFlags?: number) {\r\n if (!data.arraySize) {\r\n console.error('Texture2DArray.createWithMipmapData() failed: Data is not texture array');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(\r\n 'Texture2DArray.createWithMipmapData() failed: Webgl device does not support storage texture'\r\n );\r\n } else {\r\n this.loadLevels(data);\r\n }\r\n }\r\n }\r\n private loadLevels(levels: TextureMipmapData) {\r\n const format = levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n const depth = levels.depth;\r\n const mipLevelCount =\r\n levels.mipLevels === 1 && !(this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP)\r\n ? this._calcMipLevelCount(levels.format, width, height, depth)\r\n : levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('Texture3D.loadLevels(): No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, depth, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n for (let layer = 0; layer < depth; layer++) {\r\n if (levels.mipDatas[layer].length !== levels.mipLevels) {\r\n console.error(`Texture3D.loadLevels() failed: Invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < levels.mipLevels; i++) {\r\n this.uploadRaw(\r\n levels.mipDatas[layer][i].data,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n 0,\r\n 0,\r\n layer,\r\n i\r\n );\r\n }\r\n }\r\n if (levels.mipLevels !== this.mipLevelCount) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n private loadEmpty(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n this.allocInternal(format, width, height, depth, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n}\r\n","import type { CubeFace, TypedArray } from '@zephyr3d/base';\r\nimport type {\r\n TextureMipmapData,\r\n TextureCube,\r\n TextureImageElement,\r\n GPUDataBuffer,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { linearTextureFormatToSRGB, GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nexport class WebGPUTextureCube extends WebGPUBaseTexture implements TextureCube<GPUTexture> {\r\n constructor(device: WebGPUDevice) {\r\n super(device, 'cube');\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._mipLevelCount);\r\n }\r\n update(data: TypedArray, xOffset: number, yOffset: number, width: number, height: number, face: CubeFace) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n this.uploadRaw(data, width, height, 1, xOffset, yOffset, face, 0);\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n destX: number,\r\n destY: number,\r\n face: number,\r\n srcX: number,\r\n srcY: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n if (data instanceof HTMLCanvasElement || this._device.isTextureUploading(this)) {\r\n // Copy the pixel values out in case the canvas content may be changed later\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, srcX, srcY, width, height, 0, 0, width, height);\r\n const imageData = ctx.getImageData(0, 0, width, height);\r\n this.update(imageData.data, destX, destY, width, height, face);\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n } else {\r\n this.uploadImageData(data, srcX, srcY, width, height, destX, destY, 0, face);\r\n }\r\n }\r\n createEmpty(format: TextureFormat, size: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('storage texture can not be cube texture'));\r\n } else {\r\n this.loadEmpty(format, size, 0);\r\n }\r\n }\r\n isTextureCube(): this is TextureCube {\r\n return true;\r\n }\r\n createView(level?: number, face?: number, mipCount?: number) {\r\n return this._object\r\n ? this._device.gpuCreateTextureView(this._object, {\r\n format: this._gpuFormat!,\r\n dimension: '2d',\r\n baseMipLevel: level ?? 0,\r\n mipLevelCount: mipCount || this._mipLevelCount - (level ?? 0),\r\n baseArrayLayer: face ?? 0,\r\n arrayLayerCount: 1,\r\n aspect: 'all'\r\n })\r\n : null;\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n face: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`TextureCube.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n const { size } = WebGPUBaseTexture.calculateBufferSizeForCopy(w, h, this.format);\r\n if (buffer.byteLength < size) {\r\n throw new Error(\r\n `Texture2D.readPixels() failed: destination buffer size is ${buffer.byteLength}, should be at least ${size}`\r\n );\r\n }\r\n const tmpBuffer = this._device.createBuffer(size, { usage: 'read' });\r\n await this.copyPixelDataToBuffer(x, y, w, h, face, mipLevel, tmpBuffer);\r\n await tmpBuffer.getBufferSubData(\r\n new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength),\r\n 0,\r\n size\r\n );\r\n tmpBuffer.dispose();\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n face: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`TextureCube.readPixelsToBuffer(): invalid miplevel: ${mipLevel}`);\r\n }\r\n this.copyPixelDataToBuffer(x, y, w, h, face, mipLevel, buffer);\r\n }\r\n createWithMipmapData(data: TextureMipmapData, sRGB: boolean, creationFlags?: number) {\r\n if (!data.isCubemap) {\r\n console.error('loading cubmap with mipmap data failed: data is not cubemap');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error('webgl device does not support storage texture');\r\n } else {\r\n this.loadLevels(data, sRGB);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadEmpty(format: TextureFormat, size: number, mipLevelCount: number) {\r\n this.allocInternal(format, size, size, 1, mipLevelCount);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n /** @internal */\r\n /*\r\n private loadImages(images: HTMLImageElement[], format: TextureFormat): void {\r\n const width = images[0].width;\r\n const height = images[0].height;\r\n if (images.length !== 6) {\r\n console.error(new Error('cubemap face list must have 6 images'));\r\n return;\r\n }\r\n for (let i = 1; i < 6; i++) {\r\n if (images[i].width !== width || images[i].height !== height) {\r\n console.error(new Error('cubemap face images must have identical sizes'));\r\n return;\r\n }\r\n }\r\n if (width === 0 || height === 0) {\r\n return;\r\n }\r\n this.allocInternal(format, width, height, 1, 0);\r\n if (!this._device.isContextLost()) {\r\n const w = this._width;\r\n const h = this._height;\r\n for (let face = 0; face < 6; face++) {\r\n createImageBitmap(images[face], {\r\n premultiplyAlpha: 'none'\r\n }).then((bmData) => {\r\n this.updateFromElement(bmData, 0, 0, face, 0, 0, w, h);\r\n });\r\n }\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n */\r\n /** @internal */\r\n private loadLevels(levels: TextureMipmapData, sRGB: boolean) {\r\n const format = sRGB ? linearTextureFormatToSRGB(levels.format) : levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n //const mipLevelCount = levels.mipLevels;\r\n const mipLevelCount =\r\n levels.mipLevels === 1 && !(this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP)\r\n ? this._calcMipLevelCount(levels.format, width, height, 1)\r\n : levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('TextureCube.loadLevels(): No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, 1, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n for (let face = 0; face < 6; face++) {\r\n if (levels.mipDatas[face].length !== levels.mipLevels) {\r\n console.error(`TextureCube.loadLevels() failed: Invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < levels.mipLevels; i++) {\r\n this.uploadRaw(\r\n levels.mipDatas[face][i].data,\r\n levels.mipDatas[face][i].width,\r\n levels.mipDatas[face][i].height,\r\n 1,\r\n 0,\r\n 0,\r\n face,\r\n i\r\n );\r\n }\r\n }\r\n }\r\n if (levels.mipLevels !== this.mipLevelCount) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n}\r\n","import type { TypedArray } from '@zephyr3d/base';\r\nimport type { GPUDataBuffer, TextureVideo } from '@zephyr3d/device';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\n\r\nexport class WebGPUTextureVideo\r\n extends WebGPUBaseTexture<GPUExternalTexture>\r\n implements TextureVideo<GPUExternalTexture>\r\n{\r\n private readonly _source: HTMLVideoElement;\r\n private readonly _refBindGroups: WebGPUBindGroup[];\r\n constructor(device: WebGPUDevice, element: HTMLVideoElement) {\r\n super(device, '2d');\r\n this._source = element;\r\n this._width = 0;\r\n this._height = 0;\r\n this._refBindGroups = [];\r\n this.loadFromElement();\r\n }\r\n isTextureVideo(): this is TextureVideo {\r\n return true;\r\n }\r\n addBindGroupReference(bindGroup: WebGPUBindGroup) {\r\n this._refBindGroups.push(bindGroup);\r\n }\r\n removeBindGroupReference(bindGroup: WebGPUBindGroup) {\r\n const index = this._refBindGroups.indexOf(bindGroup);\r\n if (index >= 0) {\r\n this._refBindGroups.splice(index, 1);\r\n }\r\n }\r\n get width() {\r\n return this._width;\r\n }\r\n get height() {\r\n return this._height;\r\n }\r\n get source() {\r\n return this._source;\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n this.loadElement(this._source);\r\n }\r\n }\r\n updateVideoFrame() {\r\n if (this._source.readyState > 2) {\r\n const videoFrame = new (window as any).VideoFrame(this._source);\r\n videoFrame.close();\r\n this._object = this._device.gpuImportExternalTexture(this._source);\r\n return true;\r\n }\r\n return false;\r\n }\r\n createView(_level?: number, _face?: number, _mipCount?: number) {\r\n return null;\r\n }\r\n init() {\r\n this.loadFromElement();\r\n }\r\n async readPixels(\r\n _x: number,\r\n _y: number,\r\n _w: number,\r\n _h: number,\r\n _faceOrLayer: number,\r\n _mipLevel: number,\r\n _buffer: TypedArray\r\n ) {\r\n throw new Error(`Video texture does not support readPixels()`);\r\n }\r\n readPixelsToBuffer(\r\n _x: number,\r\n _y: number,\r\n _w: number,\r\n _h: number,\r\n _faceOrLayer: number,\r\n _mipLevel: number,\r\n _buffer: GPUDataBuffer<unknown>\r\n ) {\r\n throw new Error(`Video texture does not support readPixelsToBuffer()`);\r\n }\r\n /** @internal */\r\n loadFromElement() {\r\n this.loadElement(this._source);\r\n }\r\n /** @internal */\r\n private loadElement(element: HTMLVideoElement) {\r\n this._format = 'rgba8unorm';\r\n this._width = element.videoWidth;\r\n this._height = element.videoHeight;\r\n this._depth = 1;\r\n this._mipLevelCount = 1;\r\n if (!this._device.isContextLost()) {\r\n if (element.readyState > 2) {\r\n this._object = this._device.gpuImportExternalTexture(element);\r\n const that = this;\r\n this._device.runNextFrame(function updateVideoFrame() {\r\n if (!that.disposed) {\r\n if (that._source.readyState > 2) {\r\n const videoFrame = new (window as any).VideoFrame(that._source);\r\n videoFrame.close();\r\n that._object = that._device.gpuImportExternalTexture(that._source);\r\n for (const bindGroup of that._refBindGroups) {\r\n bindGroup.invalidate();\r\n }\r\n }\r\n that._device.runNextFrame(updateVideoFrame);\r\n }\r\n });\r\n }\r\n }\r\n return !!this._object;\r\n }\r\n}\r\n","import type {\r\n TextureFormat,\r\n FramebufferCaps,\r\n TextureFormatInfo,\r\n MiscCaps,\r\n ShaderCaps,\r\n TextureCaps\r\n} from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Immutable } from '@zephyr3d/base';\r\n\r\nexport interface TextureParams {\r\n gpuFormat: GPUTextureFormat;\r\n stride: number;\r\n filterable: boolean;\r\n renderable: boolean;\r\n repeatable: boolean;\r\n compressed: boolean;\r\n writable: boolean;\r\n generateMipmap: boolean;\r\n}\r\n\r\nexport interface TextureFormatInfoWebGPU extends TextureFormatInfo {\r\n gpuSampleType: GPUTextureSampleType;\r\n filterable: boolean;\r\n renderable: boolean;\r\n compressed: boolean;\r\n writable: boolean;\r\n}\r\n\r\nexport class WebGPUFramebufferCaps implements FramebufferCaps {\r\n maxDrawBuffers: number;\r\n maxColorAttachmentBytesPerSample: number;\r\n supportRenderMipmap: boolean;\r\n supportMultisampledFramebuffer: boolean;\r\n supportFloatBlending: boolean;\r\n supportDepth32float: boolean;\r\n supportDepth32floatStencil8: boolean;\r\n constructor(device: WebGPUDevice) {\r\n this.maxDrawBuffers = device.device.limits.maxColorAttachments;\r\n this.maxColorAttachmentBytesPerSample = device.device.limits.maxColorAttachmentBytesPerSample;\r\n this.supportRenderMipmap = true;\r\n this.supportMultisampledFramebuffer = true;\r\n this.supportFloatBlending = device.device.features.has('float32-blendable');\r\n this.supportDepth32float = true;\r\n this.supportDepth32floatStencil8 = device.device.features.has('depth32float-stencil8');\r\n }\r\n}\r\n\r\nexport class WebGPUMiscCaps implements MiscCaps {\r\n supportOversizedViewport: boolean;\r\n supportBlendMinMax: boolean;\r\n support32BitIndex: boolean;\r\n supportDepthClamp: boolean;\r\n maxBindGroups: number;\r\n maxTexCoordIndex: number;\r\n constructor(device: WebGPUDevice) {\r\n this.supportOversizedViewport = false;\r\n this.supportBlendMinMax = true;\r\n this.support32BitIndex = true;\r\n this.supportDepthClamp = device.device.features.has('depth-clip-control');\r\n this.maxBindGroups = 4;\r\n this.maxTexCoordIndex = 8;\r\n }\r\n}\r\nexport class WebGPUShaderCaps implements ShaderCaps {\r\n supportFragmentDepth: boolean;\r\n supportStandardDerivatives: boolean;\r\n supportShaderTextureLod: boolean;\r\n supportHighPrecisionFloat: boolean;\r\n maxUniformBufferSize: number;\r\n uniformBufferOffsetAlignment: number;\r\n maxStorageBufferSize: number;\r\n storageBufferOffsetAlignment: number;\r\n constructor(device: WebGPUDevice) {\r\n this.supportFragmentDepth = true;\r\n this.supportStandardDerivatives = true;\r\n this.supportShaderTextureLod = true;\r\n this.supportHighPrecisionFloat = true;\r\n this.maxUniformBufferSize = device.device.limits.maxUniformBufferBindingSize || 65536;\r\n this.uniformBufferOffsetAlignment = device.device.limits.minUniformBufferOffsetAlignment || 256;\r\n this.maxStorageBufferSize = device.device.limits.maxStorageBufferBindingSize || 128 * 1024 * 1024;\r\n this.storageBufferOffsetAlignment = device.device.limits.minStorageBufferOffsetAlignment || 256;\r\n }\r\n}\r\nexport class WebGPUTextureCaps implements TextureCaps {\r\n private readonly _textureFormatInfos: Record<TextureFormat, TextureFormatInfoWebGPU>;\r\n maxTextureSize: number;\r\n maxCubeTextureSize: number;\r\n npo2Mipmapping: boolean;\r\n npo2Repeating: boolean;\r\n supportS3TC: boolean;\r\n supportS3TCSRGB: boolean;\r\n supportBPTC: boolean;\r\n supportRGTC: boolean;\r\n supportASTC: boolean;\r\n supportDepthTexture: boolean;\r\n support3DTexture: boolean;\r\n supportSRGBTexture: boolean;\r\n supportFloatTexture: boolean;\r\n supportLinearFloatTexture: boolean;\r\n supportHalfFloatTexture: boolean;\r\n supportLinearHalfFloatTexture: boolean;\r\n supportAnisotropicFiltering: boolean;\r\n supportFloatColorBuffer: boolean;\r\n supportHalfFloatColorBuffer: boolean;\r\n supportFloatBlending: boolean;\r\n constructor(device: WebGPUDevice) {\r\n this.supportAnisotropicFiltering = true;\r\n this.supportDepthTexture = true;\r\n this.support3DTexture = true;\r\n this.supportSRGBTexture = true;\r\n this.supportFloatTexture = true;\r\n this.supportFloatColorBuffer = true;\r\n this.supportHalfFloatColorBuffer = true;\r\n this.supportFloatBlending = true;\r\n this.supportS3TC = device.device.features.has('texture-compression-bc');\r\n this.supportS3TCSRGB = this.supportS3TC;\r\n this.supportBPTC = this.supportS3TC;\r\n this.supportRGTC = this.supportS3TC;\r\n this.supportASTC = device.device.features.has('texture-compression-astc');\r\n this.supportHalfFloatTexture = true;\r\n this.maxTextureSize = device.device.limits.maxTextureDimension2D;\r\n this.maxCubeTextureSize = device.device.limits.maxTextureDimension2D;\r\n this.npo2Mipmapping = true;\r\n this.npo2Repeating = true;\r\n const float32Filterable = device.device.features.has('float32-filterable');\r\n this._textureFormatInfos = {\r\n ['rgba8unorm']: {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n },\r\n ['rgba8snorm']: {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n },\r\n ['bgra8unorm']: {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false, // TODO: require \"bgra8unorm-storage\" feature\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n }\r\n } as Record<TextureFormat, TextureFormatInfoWebGPU>;\r\n if (this.supportASTC) {\r\n for (const k of [\r\n '4x4',\r\n '5x4',\r\n '5x5',\r\n '6x5',\r\n '6x6',\r\n '8x5',\r\n '8x6',\r\n '8x8',\r\n '10x5',\r\n '10x6',\r\n '10x8',\r\n '10x10',\r\n '12x10',\r\n '12x12'\r\n ]) {\r\n const [w, h] = k.split('x').map((val) => Number(val));\r\n this._textureFormatInfos[`astc-${k}` as keyof typeof this._textureFormatInfos] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: w,\r\n blockHeight: h\r\n };\r\n this._textureFormatInfos[`astc-${k}-srgb` as keyof typeof this._textureFormatInfos] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n writable: false,\r\n blockWidth: w,\r\n blockHeight: h\r\n };\r\n }\r\n }\r\n if (this.supportS3TC) {\r\n this._textureFormatInfos['dxt1'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt3'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt5'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (this.supportRGTC) {\r\n this._textureFormatInfos['bc4'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc4-signed'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n this._textureFormatInfos['bc5'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc5-signed'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n if (this.supportBPTC) {\r\n this._textureFormatInfos['bc6h'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc6h-signed'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc7'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc7-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (this.supportS3TCSRGB) {\r\n this._textureFormatInfos['dxt1-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt3-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt5-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n this._textureFormatInfos['r8unorm'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r8snorm'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r16f'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r32f'] = {\r\n gpuSampleType: float32Filterable ? 'float' : 'unfilterable-float',\r\n filterable: float32Filterable,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['r8ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r8i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r16ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r16i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r32ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['r32i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg8unorm'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg8snorm'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg16f'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg32f'] = {\r\n gpuSampleType: float32Filterable ? 'float' : 'unfilterable-float',\r\n filterable: float32Filterable,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rg8ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg8i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg16ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg16i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg32ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rg32i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba8unorm-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['bgra8unorm-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba16f'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba32f'] = {\r\n gpuSampleType: float32Filterable ? 'float' : 'unfilterable-float',\r\n filterable: float32Filterable,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rgba8ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba8i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba16ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba16i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba32ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rgba32i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rg11b10uf'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: device.device.features.has('rg11b10ufloat-renderable'),\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d16'] = {\r\n gpuSampleType: 'depth',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['d24'] = {\r\n gpuSampleType: 'depth',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d32f'] = {\r\n gpuSampleType: 'depth',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d32fs8'] = {\r\n gpuSampleType: 'depth',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['d24s8'] = {\r\n gpuSampleType: 'depth',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this.supportLinearFloatTexture =\r\n this._textureFormatInfos['r32f'].filterable &&\r\n this._textureFormatInfos['rg32f'].filterable &&\r\n this._textureFormatInfos['rgba32f'].filterable;\r\n this.supportLinearHalfFloatTexture =\r\n this._textureFormatInfos['r16f'].filterable &&\r\n this._textureFormatInfos['rg16f'].filterable &&\r\n this._textureFormatInfos['rgba16f'].filterable;\r\n }\r\n calcMemoryUsage(format: TextureFormat, numPixels: number) {\r\n return this._textureFormatInfos[format] ? this._textureFormatInfos[format].size * numPixels : 0;\r\n }\r\n getTextureFormatInfo(format: TextureFormat): Immutable<TextureFormatInfoWebGPU> {\r\n return this._textureFormatInfos[format];\r\n }\r\n}\r\n","import type {\r\n PrimitiveType,\r\n StructuredBuffer,\r\n VertexLayout,\r\n VertexSemantic,\r\n VertexLayoutOptions,\r\n VertexBufferInfo\r\n} from '@zephyr3d/device';\r\nimport {\r\n getVertexAttribFormat,\r\n getVertexAttribName,\r\n PBPrimitiveType,\r\n PBPrimitiveTypeInfo,\r\n VertexData\r\n} from '@zephyr3d/device';\r\nimport { vertexFormatToHash } from './constants_webgpu';\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport { WebGPUStructuredBuffer } from './structuredbuffer_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nexport class WebGPUVertexLayout extends WebGPUObject<unknown> implements VertexLayout<unknown> {\r\n private static _hashCounter = 0;\r\n private static _defaultBuffers: StructuredBuffer[] = [];\r\n private readonly _vertexData: VertexData;\r\n private readonly _hash: string;\r\n private _layouts: {\r\n [hash: string]: { layoutHash: string; buffers: VertexBufferInfo[] };\r\n };\r\n constructor(device: WebGPUDevice, options: VertexLayoutOptions) {\r\n super(device);\r\n this._vertexData = new VertexData();\r\n for (const vb of options.vertexBuffers) {\r\n this._vertexData.setVertexBuffer(vb.buffer, vb.stepMode);\r\n }\r\n if (options.indexBuffer) {\r\n this._vertexData.setIndexBuffer(options.indexBuffer);\r\n }\r\n this._hash = String(++WebGPUVertexLayout._hashCounter);\r\n this._layouts = {};\r\n }\r\n destroy() {\r\n this._object = null;\r\n }\r\n restore() {\r\n this._object = {};\r\n }\r\n setDrawOffset(buffer: StructuredBuffer, byteOffset: number) {\r\n for (const info of this._vertexData.vertexBuffers) {\r\n if (info?.buffer === buffer) {\r\n info.drawOffset = byteOffset;\r\n }\r\n }\r\n }\r\n get hash() {\r\n return this._hash;\r\n }\r\n get vertexBuffers() {\r\n return this._vertexData.vertexBuffers;\r\n }\r\n get indexBuffer() {\r\n return this._vertexData.indexBuffer;\r\n }\r\n getDrawOffset() {\r\n return this._vertexData.getDrawOffset();\r\n }\r\n getVertexBuffer(semantic: VertexSemantic) {\r\n return this._vertexData.getVertexBuffer(semantic);\r\n }\r\n getVertexBufferInfo(semantic: VertexSemantic) {\r\n return this._vertexData.getVertexBufferInfo(semantic);\r\n }\r\n getIndexBuffer() {\r\n return this._vertexData.getIndexBuffer();\r\n }\r\n getLayouts(attributes: string) {\r\n if (!attributes) {\r\n return null;\r\n }\r\n let layout = this._layouts[attributes];\r\n if (!layout) {\r\n layout = this.calcHash(attributes);\r\n this._layouts[attributes] = layout;\r\n }\r\n return layout;\r\n }\r\n private getDefaultBuffer(attrib: number, numVertices: number) {\r\n let buffer: Nullable<StructuredBuffer> = WebGPUVertexLayout._defaultBuffers[0];\r\n if (buffer) {\r\n const n = Math.floor((buffer.byteLength / 4) * 4);\r\n if (n < numVertices) {\r\n buffer = null;\r\n }\r\n }\r\n if (!buffer) {\r\n buffer = this._device.createVertexBuffer(\r\n getVertexAttribFormat(getVertexAttribName(attrib), 'f32', 4)!,\r\n new Float32Array(numVertices * 4)\r\n );\r\n WebGPUVertexLayout._defaultBuffers.unshift(buffer!);\r\n }\r\n return buffer;\r\n }\r\n private calcHash(attribHash: string) {\r\n const layouts: string[] = [];\r\n const layoutVertexBuffers: VertexBufferInfo[] = [];\r\n const vertexBuffers = this._vertexData.vertexBuffers;\r\n const attributes = attribHash.split(':').map((val) => Number(val));\r\n for (let idx = 0; idx < attributes.length; idx++) {\r\n const attrib = attributes[idx];\r\n let bufferInfo = vertexBuffers[attrib];\r\n let buffer: Nullable<StructuredBuffer> = bufferInfo?.buffer ?? null;\r\n if (!buffer) {\r\n console.warn(`No vertex buffer set for location <${getVertexAttribName(attrib)}>`);\r\n buffer = this.getDefaultBuffer(attrib, this._vertexData.numVertices)!;\r\n bufferInfo = {\r\n buffer,\r\n offset: 0,\r\n drawOffset: 0,\r\n type: new PBPrimitiveTypeInfo(PBPrimitiveType.F32VEC4),\r\n stride: 4 * 4,\r\n stepMode: 'vertex'\r\n };\r\n }\r\n const gpuFormat = WebGPUStructuredBuffer.getGPUVertexFormat(bufferInfo!.type);\r\n if (!gpuFormat) {\r\n throw new Error('Invalid vertex buffer format');\r\n }\r\n const index = layoutVertexBuffers.findIndex((val) => val.buffer === buffer);\r\n const stride = bufferInfo!.stride;\r\n let layout = index >= 0 ? layouts[index] : `${stride}-${Number(bufferInfo!.stepMode === 'instance')}`;\r\n layout += `-${vertexFormatToHash[gpuFormat]}-${bufferInfo!.offset}-${idx}`;\r\n if (index >= 0) {\r\n layouts[index] = layout;\r\n } else {\r\n layouts.push(layout);\r\n layoutVertexBuffers.push(bufferInfo!);\r\n }\r\n }\r\n return {\r\n layoutHash: layouts.join(':'),\r\n buffers: layoutVertexBuffers\r\n };\r\n }\r\n bind() {\r\n this._device.setVertexLayout(this);\r\n }\r\n draw(primitiveType: PrimitiveType, first: number, count: number) {\r\n this.bind();\r\n this._device.draw(primitiveType, first, count);\r\n }\r\n drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number) {\r\n this.bind();\r\n this._device.drawInstanced(primitiveType, first, count, numInstances);\r\n }\r\n}\r\n","import type {\r\n CompareFunc,\r\n ColorState,\r\n BlendingState,\r\n RasterizerState,\r\n DepthState,\r\n StencilState,\r\n RenderStateSet,\r\n BlendEquation,\r\n BlendFunc,\r\n FaceMode,\r\n StencilOp\r\n} from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nexport abstract class WebGPURenderState {\r\n protected static _defaultState: WebGPURenderState;\r\n protected _hash: Nullable<string>;\r\n static get defaultState() {\r\n return this._defaultState;\r\n }\r\n constructor() {\r\n this._hash = null;\r\n }\r\n get hash() {\r\n return this._getHash(this.constructor);\r\n }\r\n invalidateHash() {\r\n this._hash = null;\r\n }\r\n protected _getHash(ctor: any) {\r\n if (this === ctor.defaultState) {\r\n return '';\r\n } else {\r\n if (this._hash === null) {\r\n this._hash = this.computeHash();\r\n }\r\n return this._hash;\r\n }\r\n }\r\n protected abstract computeHash(): string;\r\n}\r\n\r\nexport class WebGPUColorState extends WebGPURenderState implements ColorState {\r\n protected static _defaultState: WebGPURenderState = new WebGPUColorState();\r\n private _redMask: boolean;\r\n private _greenMask: boolean;\r\n private _blueMask: boolean;\r\n private _alphaMask: boolean;\r\n constructor() {\r\n super();\r\n this._redMask = this._greenMask = this._blueMask = this._alphaMask = true;\r\n }\r\n clone() {\r\n return new WebGPUColorState().setColorMask(\r\n this._redMask,\r\n this._greenMask,\r\n this._blueMask,\r\n this._alphaMask\r\n );\r\n }\r\n get redMask() {\r\n return this._redMask;\r\n }\r\n set redMask(val) {\r\n if (this._redMask !== !!val) {\r\n this._redMask = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get greenMask() {\r\n return this._greenMask;\r\n }\r\n set greenMask(val) {\r\n if (this._greenMask !== !!val) {\r\n this._greenMask = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get blueMask() {\r\n return this._blueMask;\r\n }\r\n set blueMask(val) {\r\n if (this._blueMask !== !!val) {\r\n this._blueMask = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get alphaMask() {\r\n return this._alphaMask;\r\n }\r\n set alphaMask(val) {\r\n if (this._alphaMask !== !!val) {\r\n this._alphaMask = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n setColorMask(r: boolean, g: boolean, b: boolean, a: boolean) {\r\n this.redMask = r;\r\n this.greenMask = g;\r\n this.blueMask = b;\r\n this.alphaMask = a;\r\n return this;\r\n }\r\n protected computeHash() {\r\n let val = 0;\r\n if (this.redMask) {\r\n val += 1 << 0;\r\n }\r\n if (this.greenMask) {\r\n val += 1 << 1;\r\n }\r\n if (this.blueMask) {\r\n val += 1 << 2;\r\n }\r\n if (this.alphaMask) {\r\n val += 1 << 3;\r\n }\r\n return String(val);\r\n }\r\n}\r\n\r\nexport class WebGPUBlendingState extends WebGPURenderState implements BlendingState {\r\n protected static _defaultState: WebGPURenderState = new WebGPUBlendingState();\r\n private _enabled: boolean;\r\n private _alphaToCoverageEnabled: boolean;\r\n private _srcBlendRGB: BlendFunc;\r\n private _dstBlendRGB: BlendFunc;\r\n private _srcBlendAlpha: BlendFunc;\r\n private _dstBlendAlpha: BlendFunc;\r\n private _rgbEquation: BlendEquation;\r\n private _alphaEquation: BlendEquation;\r\n constructor() {\r\n super();\r\n this._enabled = false;\r\n this._alphaToCoverageEnabled = false;\r\n this._srcBlendRGB = 'one';\r\n this._dstBlendRGB = 'zero';\r\n this._srcBlendAlpha = 'one';\r\n this._dstBlendAlpha = 'zero';\r\n this._rgbEquation = 'add';\r\n this._alphaEquation = 'add';\r\n }\r\n clone() {\r\n const other = new WebGPUBlendingState();\r\n other.enable(this._enabled);\r\n other.enableAlphaToCoverage(this._alphaToCoverageEnabled);\r\n other.setBlendFuncRGB(this._srcBlendRGB, this._dstBlendRGB);\r\n other.setBlendFuncAlpha(this._srcBlendAlpha, this._dstBlendAlpha);\r\n other.setBlendEquation(this._rgbEquation, this._alphaEquation);\r\n return other;\r\n }\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n set enabled(val) {\r\n if (this._enabled !== !!val) {\r\n this._enabled = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get alphaToCoverageEnabled() {\r\n return this._alphaToCoverageEnabled;\r\n }\r\n set alphaToCoverageEnabled(val) {\r\n if (this._alphaToCoverageEnabled !== !!val) {\r\n this._alphaToCoverageEnabled = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get srcBlendRGB() {\r\n return this._srcBlendRGB;\r\n }\r\n set srcBlendRGB(val) {\r\n if (this._srcBlendRGB !== val) {\r\n this._srcBlendRGB = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get srcBlendAlpha() {\r\n return this._srcBlendAlpha;\r\n }\r\n set srcBlendAlpha(val) {\r\n if (this._srcBlendAlpha !== val) {\r\n this._srcBlendAlpha = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get dstBlendRGB() {\r\n return this._dstBlendRGB;\r\n }\r\n set dstBlendRGB(val) {\r\n if (this._dstBlendRGB !== val) {\r\n this._dstBlendRGB = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get dstBlendAlpha() {\r\n return this._dstBlendAlpha;\r\n }\r\n set dstBlendAlpha(val) {\r\n if (this._dstBlendAlpha !== val) {\r\n this._dstBlendAlpha = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get rgbEquation() {\r\n return this._rgbEquation;\r\n }\r\n set rgbEquation(val) {\r\n if (this._rgbEquation !== val) {\r\n this._rgbEquation = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get alphaEquation() {\r\n return this._alphaEquation;\r\n }\r\n set alphaEquation(val) {\r\n if (this._alphaEquation !== val) {\r\n this._alphaEquation = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n enable(b: boolean) {\r\n this.enabled = b;\r\n return this;\r\n }\r\n enableAlphaToCoverage(b: boolean) {\r\n this.alphaToCoverageEnabled = b;\r\n return this;\r\n }\r\n setBlendFunc(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendRGB = src;\r\n this.dstBlendRGB = dest;\r\n this.srcBlendAlpha = src;\r\n this.dstBlendAlpha = dest;\r\n return this;\r\n }\r\n setBlendFuncRGB(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendRGB = src;\r\n this.dstBlendRGB = dest;\r\n return this;\r\n }\r\n setBlendFuncAlpha(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendAlpha = src;\r\n this.dstBlendAlpha = dest;\r\n return this;\r\n }\r\n setBlendEquation(rgb: BlendEquation, alpha: BlendEquation) {\r\n this.rgbEquation = rgb;\r\n this.alphaEquation = alpha;\r\n return this;\r\n }\r\n protected computeHash() {\r\n return this._enabled\r\n ? `${this._srcBlendRGB}-${this._srcBlendAlpha}-${this._dstBlendRGB}-${this._dstBlendAlpha}-${\r\n this._rgbEquation\r\n }-${this._alphaEquation}-${Number(!!this._alphaToCoverageEnabled)}`\r\n : `${Number(!!this._alphaToCoverageEnabled)}`;\r\n }\r\n}\r\n\r\nexport class WebGPURasterizerState extends WebGPURenderState implements RasterizerState {\r\n protected static _defaultState: WebGPURenderState = new WebGPURasterizerState();\r\n private _cullMode: FaceMode;\r\n private _depthClampEnabled: boolean;\r\n constructor() {\r\n super();\r\n this._cullMode = 'back';\r\n this._depthClampEnabled = false;\r\n }\r\n clone() {\r\n return new WebGPURasterizerState().setCullMode(this._cullMode).enableDepthClamp(this._depthClampEnabled);\r\n }\r\n get cullMode() {\r\n return this._cullMode;\r\n }\r\n set cullMode(val) {\r\n if (this._cullMode !== val) {\r\n this._cullMode = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n setCullMode(mode: FaceMode) {\r\n this.cullMode = mode;\r\n return this;\r\n }\r\n get depthClampEnabled() {\r\n return this._depthClampEnabled;\r\n }\r\n set depthClampEnabled(val) {\r\n this.enableDepthClamp(val);\r\n }\r\n enableDepthClamp(enable: boolean) {\r\n if (this._depthClampEnabled !== !!enable) {\r\n this._depthClampEnabled = !!enable;\r\n this.invalidateHash();\r\n }\r\n return this;\r\n }\r\n protected computeHash() {\r\n return `${this._cullMode}-${this._depthClampEnabled ? 1 : 0}`;\r\n }\r\n}\r\n\r\nexport class WebGPUDepthState extends WebGPURenderState implements DepthState {\r\n protected static _defaultState: WebGPURenderState = new WebGPUDepthState();\r\n private _testEnabled: boolean;\r\n private _writeEnabled: boolean;\r\n private _compareFunc: CompareFunc;\r\n private _depthBias: number;\r\n private _depthBiasSlopeScale: number;\r\n constructor() {\r\n super();\r\n this._testEnabled = true;\r\n this._writeEnabled = true;\r\n this._compareFunc = 'le';\r\n this._depthBias = 0;\r\n this._depthBiasSlopeScale = 0;\r\n }\r\n clone() {\r\n const other = new WebGPUDepthState();\r\n other.enableTest(this._testEnabled);\r\n other.enableWrite(this._writeEnabled);\r\n other.setCompareFunc(this._compareFunc);\r\n other.setDepthBias(this._depthBias);\r\n other.setDepthBiasSlopeScale(this._depthBiasSlopeScale);\r\n return other;\r\n }\r\n get testEnabled() {\r\n return this._testEnabled;\r\n }\r\n set testEnabled(val) {\r\n if (this._testEnabled !== !!val) {\r\n this._testEnabled = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get writeEnabled() {\r\n return this._writeEnabled;\r\n }\r\n set writeEnabled(val) {\r\n if (this._writeEnabled !== !!val) {\r\n this._writeEnabled = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get compareFunc() {\r\n return this._compareFunc;\r\n }\r\n set compareFunc(val) {\r\n if (this._compareFunc !== val) {\r\n this._compareFunc = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get depthBias() {\r\n return this._depthBias;\r\n }\r\n set depthBias(value) {\r\n this.setDepthBias(value);\r\n }\r\n setDepthBias(value: number) {\r\n if (this._depthBias !== value) {\r\n this._depthBias = value;\r\n this.invalidateHash();\r\n }\r\n return this;\r\n }\r\n get depthBiasSlopeScale() {\r\n return this._depthBiasSlopeScale;\r\n }\r\n set depthBiasSlopeScale(value) {\r\n this.setDepthBiasSlopeScale(value);\r\n }\r\n setDepthBiasSlopeScale(value: number) {\r\n if (this._depthBiasSlopeScale !== value) {\r\n this._depthBiasSlopeScale = value;\r\n this.invalidateHash();\r\n }\r\n return this;\r\n }\r\n enableTest(b: boolean) {\r\n this.testEnabled = b;\r\n return this;\r\n }\r\n enableWrite(b: boolean) {\r\n this.writeEnabled = b;\r\n return this;\r\n }\r\n setCompareFunc(func: CompareFunc) {\r\n this.compareFunc = func;\r\n return this;\r\n }\r\n protected computeHash() {\r\n return `${Number(this._testEnabled)}-${Number(this._writeEnabled)}-${this._compareFunc}-${\r\n this._depthBias\r\n }-${this._depthBiasSlopeScale}`;\r\n }\r\n}\r\n\r\nexport class WebGPUStencilState extends WebGPURenderState implements StencilState {\r\n protected static _defaultState: WebGPURenderState = new WebGPUStencilState();\r\n private _enabled: boolean;\r\n private _writeMask: number;\r\n private _failOp: StencilOp;\r\n private _failOpBack!: StencilOp;\r\n private _zFailOp: StencilOp;\r\n private _zFailOpBack!: StencilOp;\r\n private _passOp: StencilOp;\r\n private _passOpBack!: StencilOp;\r\n private _func: CompareFunc;\r\n private _funcBack!: CompareFunc;\r\n private _ref: number;\r\n private _readMask: number;\r\n constructor() {\r\n super();\r\n this._enabled = false;\r\n this._failOp = this.failOpBack = 'keep';\r\n this._zFailOp = this.zFailOpBack = 'keep';\r\n this._passOp = this.passOpBack = 'keep';\r\n this._func = this.funcBack = 'always';\r\n this._ref = 0;\r\n this._writeMask = 0xffffffff;\r\n this._readMask = 0xffffffff;\r\n }\r\n clone() {\r\n const other = new WebGPUStencilState();\r\n other.enable(this._enabled);\r\n other.setWriteMask(this._writeMask);\r\n other.setFrontOp(this._failOp, this._zFailOp, this._passOp);\r\n other.setBackOp(this._failOpBack, this._zFailOpBack, this._passOpBack);\r\n other.setFrontCompareFunc(this._func);\r\n other.setBackCompareFunc(this._funcBack);\r\n other.setReference(this._ref);\r\n other.setReadMask(this._readMask);\r\n return other;\r\n }\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n set enabled(val) {\r\n if (this._enabled !== !!val) {\r\n this._enabled = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get writeMask() {\r\n return this._writeMask;\r\n }\r\n set writeMask(val) {\r\n if (this._writeMask !== val) {\r\n this._writeMask = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get failOp() {\r\n return this._failOp;\r\n }\r\n set failOp(val) {\r\n if (this._failOp !== val) {\r\n this._failOp = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get failOpBack() {\r\n return this._failOpBack;\r\n }\r\n set failOpBack(val) {\r\n if (this._failOpBack !== val) {\r\n this._failOpBack = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get zFailOp() {\r\n return this._zFailOp;\r\n }\r\n set zFailOp(val) {\r\n if (this._zFailOp !== val) {\r\n this._zFailOp = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get zFailOpBack() {\r\n return this._zFailOpBack;\r\n }\r\n set zFailOpBack(val) {\r\n if (this._zFailOpBack !== val) {\r\n this._zFailOpBack = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get passOp() {\r\n return this._passOp;\r\n }\r\n set passOp(val) {\r\n if (this._passOp !== val) {\r\n this._passOp = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get passOpBack() {\r\n return this._passOpBack;\r\n }\r\n set passOpBack(val) {\r\n if (this._passOpBack !== val) {\r\n this._passOpBack = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get func() {\r\n return this._func;\r\n }\r\n set func(val) {\r\n if (this._func !== val) {\r\n this._func = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get funcBack() {\r\n return this._funcBack;\r\n }\r\n set funcBack(val) {\r\n if (this._funcBack !== val) {\r\n this._funcBack = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get ref() {\r\n return this._ref;\r\n }\r\n set ref(val) {\r\n if (this._ref !== val) {\r\n this._ref = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get readMask() {\r\n return this._readMask;\r\n }\r\n set readMask(val) {\r\n if (this._readMask !== val) {\r\n this._readMask = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n enable(b: boolean) {\r\n this.enabled = b;\r\n return this;\r\n }\r\n setWriteMask(mask: number) {\r\n this.writeMask = mask;\r\n return this;\r\n }\r\n setFrontOp(fail: StencilOp, zfail: StencilOp, pass: StencilOp) {\r\n this.failOp = fail;\r\n this.zFailOp = zfail;\r\n this.passOp = pass;\r\n return this;\r\n }\r\n setBackOp(fail: StencilOp, zfail: StencilOp, pass: StencilOp) {\r\n this.failOpBack = fail;\r\n this.zFailOpBack = zfail;\r\n this.passOpBack = pass;\r\n return this;\r\n }\r\n setFrontCompareFunc(func: CompareFunc) {\r\n this.func = func;\r\n return this;\r\n }\r\n setBackCompareFunc(func: CompareFunc) {\r\n this.funcBack = func;\r\n return this;\r\n }\r\n setReference(ref: number) {\r\n this.ref = ref;\r\n return this;\r\n }\r\n setReadMask(mask: number) {\r\n this.readMask = mask;\r\n return this;\r\n }\r\n protected computeHash() {\r\n return this._enabled\r\n ? `${this.sideHash(false)}-${this.sideHash(true)}-${this.readMask.toString(\r\n 16\r\n )}-${this.writeMask.toString(16)}-${this.ref.toString(16)}`\r\n : '';\r\n }\r\n private sideHash(back: boolean): string {\r\n return back\r\n ? `${this._failOpBack}-${this._zFailOpBack}-${this._passOpBack}-${this._funcBack}`\r\n : `${this._failOp}-${this._zFailOp}-${this._passOp}-${this._func}`;\r\n }\r\n}\r\n\r\nexport class WebGPURenderStateSet implements RenderStateSet {\r\n private readonly _device: WebGPUDevice;\r\n colorState: Nullable<WebGPUColorState>;\r\n blendingState: Nullable<WebGPUBlendingState>;\r\n rasterizerState: Nullable<WebGPURasterizerState>;\r\n depthState: Nullable<WebGPUDepthState>;\r\n stencilState: Nullable<WebGPUStencilState>;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this.colorState = null;\r\n this.blendingState = null;\r\n this.rasterizerState = null;\r\n this.depthState = null;\r\n this.stencilState = null;\r\n }\r\n clone() {\r\n const newStateSet = new WebGPURenderStateSet(this._device);\r\n newStateSet.colorState = (this.colorState?.clone() as WebGPUColorState) ?? null;\r\n newStateSet.blendingState = (this.blendingState?.clone() as WebGPUBlendingState) ?? null;\r\n newStateSet.rasterizerState = (this.rasterizerState?.clone() as WebGPURasterizerState) ?? null;\r\n newStateSet.depthState = (this.depthState?.clone() as WebGPUDepthState) ?? null;\r\n newStateSet.stencilState = (this.stencilState?.clone() as WebGPUStencilState) ?? null;\r\n return newStateSet;\r\n }\r\n copyFrom(stateSet: RenderStateSet) {\r\n this.colorState = stateSet.colorState as WebGPUColorState;\r\n this.blendingState = stateSet.blendingState as WebGPUBlendingState;\r\n this.rasterizerState = stateSet.rasterizerState as WebGPURasterizerState;\r\n this.depthState = stateSet.depthState as WebGPUDepthState;\r\n this.stencilState = stateSet.stencilState as WebGPUStencilState;\r\n }\r\n get hash() {\r\n return `${this.colorState?.hash || ''}:${this.blendingState?.hash || ''}:${\r\n this.rasterizerState?.hash || ''\r\n }:${this.depthState?.hash || ''}:${this.stencilState?.hash || ''}`;\r\n }\r\n useColorState(state?: ColorState) {\r\n return (this.colorState = (state as WebGPUColorState) ?? this.colorState ?? new WebGPUColorState());\r\n }\r\n defaultColorState() {\r\n this.colorState = null;\r\n }\r\n useBlendingState(state?: BlendingState) {\r\n return (this.blendingState =\r\n (state as WebGPUBlendingState) ?? this.blendingState ?? new WebGPUBlendingState());\r\n }\r\n defaultBlendingState() {\r\n this.blendingState = null;\r\n }\r\n useRasterizerState(state?: RasterizerState) {\r\n return (this.rasterizerState =\r\n (state as WebGPURasterizerState) ?? this.rasterizerState ?? new WebGPURasterizerState());\r\n }\r\n defaultRasterizerState() {\r\n this.rasterizerState = null;\r\n }\r\n useDepthState(state?: DepthState) {\r\n return (this.depthState = (state as WebGPUDepthState) ?? this.depthState ?? new WebGPUDepthState());\r\n }\r\n defaultDepthState() {\r\n this.depthState = null;\r\n }\r\n useStencilState(state?: StencilState) {\r\n return (this.stencilState =\r\n (state as WebGPUStencilState) ?? this.stencilState ?? new WebGPUStencilState());\r\n }\r\n defaultStencilState() {\r\n this.stencilState = null;\r\n }\r\n apply(_force?: boolean) {\r\n this._device.setRenderStates(this);\r\n }\r\n}\r\n","import {\r\n compareFuncMap,\r\n stencilOpMap,\r\n primitiveTypeMap,\r\n faceModeMap,\r\n blendEquationMap,\r\n blendFuncMap\r\n} from './constants_webgpu';\r\nimport type { StencilOp, PrimitiveType, CompareFunc, BlendEquation, BlendFunc } from '@zephyr3d/device';\r\nimport { PBPrimitiveTypeInfo, PBPrimitiveType } from '@zephyr3d/device';\r\nimport * as rs from './renderstates_webgpu';\r\nimport type { WebGPUVertexLayout } from './vertexlayout_webgpu';\r\nimport type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPURenderStateSet } from './renderstates_webgpu';\r\nimport type { WebGPUFrameBuffer } from './framebuffer_webgpu';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\nconst stencilFormats = ['stencil8', 'depth24plus-stencil8', 'depth24unorm-stencil8', 'depth32float-stencil8'];\r\nconst depthFormats = [\r\n 'depth16unorm',\r\n 'depth24plus',\r\n 'depth24plus-stencil8',\r\n 'depth32float',\r\n 'depth24unorm-stencil8',\r\n 'depth32float-stencil8'\r\n];\r\nexport type FrameBufferInfo = {\r\n frameBuffer: Nullable<WebGPUFrameBuffer>;\r\n colorFormats: GPUTextureFormat[];\r\n depthFormat?: GPUTextureFormat;\r\n sampleCount: number;\r\n hash: Nullable<string>;\r\n clearHash: string;\r\n};\r\n\r\nexport class PipelineCache {\r\n private readonly _device: WebGPUDevice;\r\n private _renderPipelines: Record<string, GPURenderPipeline>;\r\n private _computePipelines: Record<string, GPUComputePipeline>;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._renderPipelines = {};\r\n this._computePipelines = {};\r\n }\r\n wipeCache() {\r\n this._renderPipelines = {};\r\n this._computePipelines = {};\r\n }\r\n fetchComputePipeline(program: WebGPUProgram) {\r\n const hash = this.getComputePipelineHash(program);\r\n let pipeline = this._computePipelines[hash];\r\n if (pipeline === undefined) {\r\n const shaderModule = program.getShaderModule();\r\n const desc: GPUComputePipelineDescriptor = {\r\n layout: shaderModule.pipelineLayout,\r\n compute: {\r\n module: shaderModule.csModule,\r\n entryPoint: 'main'\r\n }\r\n };\r\n pipeline = this._device.gpuCreateComputePipeline(desc);\r\n this._computePipelines[hash] = pipeline;\r\n }\r\n return pipeline;\r\n }\r\n fetchRenderPipeline(\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n primitiveType: PrimitiveType,\r\n frameBufferInfo: FrameBufferInfo\r\n ) {\r\n if (!frameBufferInfo.hash) {\r\n return null;\r\n }\r\n const vertexLayout = program.vertexAttributes ? vertexData : null;\r\n const hash = this.getRenderPipelineHash(\r\n frameBufferInfo.hash,\r\n program,\r\n vertexLayout,\r\n stateSet,\r\n primitiveType\r\n );\r\n let pipeline = this._renderPipelines[hash];\r\n if (pipeline === undefined) {\r\n const bufferLayouts = vertexLayout\r\n ? this._device.fetchVertexLayout(vertexLayout.getLayouts(program.vertexAttributes)!.layoutHash)\r\n : null;\r\n const shaderModule = program.getShaderModule();\r\n const vertex: GPUVertexState = {\r\n module: shaderModule.vsModule,\r\n entryPoint: 'main'\r\n };\r\n if (bufferLayouts) {\r\n vertex.buffers = bufferLayouts;\r\n }\r\n const primitiveState = this.createPrimitiveState(vertexLayout, stateSet, primitiveType);\r\n const depthStencilState = this.createDepthStencilState(frameBufferInfo.depthFormat, stateSet);\r\n const colorTargetStates = frameBufferInfo.colorFormats.map((val) =>\r\n this.createColorTargetState(stateSet, val)\r\n );\r\n const desc: GPURenderPipelineDescriptor = {\r\n label: hash,\r\n layout: shaderModule.pipelineLayout,\r\n vertex,\r\n primitive: primitiveState,\r\n depthStencil: depthStencilState,\r\n multisample: this.createMultisampleState(frameBufferInfo.sampleCount, stateSet),\r\n fragment: {\r\n module: shaderModule.fsModule,\r\n entryPoint: 'main',\r\n targets: colorTargetStates\r\n }\r\n };\r\n pipeline = this._device.gpuCreateRenderPipeline(desc);\r\n this._renderPipelines[hash] = pipeline;\r\n }\r\n return pipeline;\r\n }\r\n private createPrimitiveState(\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n primitiveType: PrimitiveType\r\n ) {\r\n const topology = primitiveTypeMap[primitiveType];\r\n if (!topology) {\r\n throw new Error(`createPrimitiveState() failed: invalid primitive type: ${primitiveType}`);\r\n }\r\n const rasterizerState =\r\n stateSet?.rasterizerState || (rs.WebGPURasterizerState.defaultState as rs.WebGPURasterizerState);\r\n const cullMode = faceModeMap[rasterizerState.cullMode];\r\n if (!cullMode) {\r\n throw new Error(`createPrimitiveState() failed: invalid cull mode: ${rasterizerState.cullMode}`);\r\n }\r\n const frontFace = this._device.isWindingOrderReversed() ? 'cw' : 'ccw';\r\n const state: GPUPrimitiveState = {\r\n topology,\r\n frontFace,\r\n cullMode\r\n };\r\n if (this._device.device.features.has('depth-clip-control')) {\r\n state.unclippedDepth = rasterizerState.depthClampEnabled;\r\n }\r\n if (topology === 'triangle-strip' || topology === 'line-strip') {\r\n state.stripIndexFormat = vertexData?.getIndexBuffer()?.indexType === typeU16 ? 'uint16' : 'uint32';\r\n }\r\n return state;\r\n }\r\n private createMultisampleState(sampleCount: number, stateSet: WebGPURenderStateSet) {\r\n return {\r\n count: sampleCount,\r\n alphaToCoverageEnabled:\r\n sampleCount > 1 &&\r\n (stateSet?.blendingState ?? (rs.WebGPUBlendingState.defaultState as rs.WebGPUBlendingState))\r\n .alphaToCoverageEnabled\r\n };\r\n }\r\n private createDepthStencilState(depthFormat: GPUTextureFormat | undefined, stateSet: WebGPURenderStateSet) {\r\n if (!depthFormat) {\r\n return undefined;\r\n }\r\n const depthState = stateSet?.depthState || (rs.WebGPUDepthState.defaultState as rs.WebGPUDepthState);\r\n const stencilState =\r\n stateSet?.stencilState || (rs.WebGPUStencilState.defaultState as rs.WebGPUStencilState);\r\n const hasStencil = stencilFormats.indexOf(depthFormat) >= 0;\r\n const hasDepth = depthFormats.indexOf(depthFormat) >= 0;\r\n const depthWriteEnabled = hasDepth ? depthState.writeEnabled : false;\r\n const depthCompare: GPUCompareFunction =\r\n hasDepth && depthState.testEnabled ? compareFuncMap[depthState.compareFunc] : 'always';\r\n const state: GPUDepthStencilState = {\r\n format: depthFormat,\r\n depthWriteEnabled,\r\n depthCompare\r\n };\r\n if (depthState.depthBias !== 0 || depthState.depthBiasSlopeScale !== 0) {\r\n state.depthBias = depthState.depthBias;\r\n state.depthBiasSlopeScale = depthState.depthBiasSlopeScale;\r\n }\r\n if (hasStencil) {\r\n const stencilFront = stencilState.enabled\r\n ? this.createStencilFaceState(\r\n stencilState.func,\r\n stencilState.failOp,\r\n stencilState.zFailOp,\r\n stencilState.passOp\r\n )\r\n : undefined;\r\n const stencilBack = stencilState.enabled\r\n ? this.createStencilFaceState(\r\n stencilState.funcBack,\r\n stencilState.failOpBack,\r\n stencilState.zFailOpBack,\r\n stencilState.passOpBack\r\n )\r\n : undefined;\r\n const stencilReadMask = stencilState.enabled ? stencilState.readMask : undefined;\r\n const stencilWriteMask = stencilState.enabled ? stencilState.writeMask : undefined;\r\n state.stencilFront = stencilFront;\r\n state.stencilBack = stencilBack;\r\n state.stencilReadMask = stencilReadMask;\r\n state.stencilWriteMask = stencilWriteMask;\r\n }\r\n return state;\r\n }\r\n private createStencilFaceState(\r\n func: CompareFunc,\r\n failOp: StencilOp,\r\n zFailOp: StencilOp,\r\n passOp: StencilOp\r\n ) {\r\n return {\r\n compare: compareFuncMap[func],\r\n failOp: stencilOpMap[failOp],\r\n depthFailOp: stencilOpMap[zFailOp],\r\n passOp: stencilOpMap[passOp]\r\n };\r\n }\r\n private createColorTargetState(stateSet: WebGPURenderStateSet, format: GPUTextureFormat) {\r\n const blendingState =\r\n stateSet?.blendingState || (rs.WebGPUBlendingState.defaultState as rs.WebGPUBlendingState);\r\n const colorState = stateSet?.colorState || (rs.WebGPUColorState.defaultState as rs.WebGPUColorState);\r\n const r = colorState.redMask ? GPUColorWrite.RED : 0;\r\n const g = colorState.greenMask ? GPUColorWrite.GREEN : 0;\r\n const b = colorState.blueMask ? GPUColorWrite.BLUE : 0;\r\n const a = colorState.alphaMask ? GPUColorWrite.ALPHA : 0;\r\n const state: GPUColorTargetState = {\r\n format: format,\r\n writeMask: r | g | b | a\r\n };\r\n if (blendingState.enabled) {\r\n state.blend = this.createBlendState(blendingState as rs.WebGPUBlendingState);\r\n }\r\n return state;\r\n }\r\n private createBlendState(blendingState: rs.WebGPUBlendingState) {\r\n return {\r\n color: this.createBlendComponent(\r\n blendingState.rgbEquation,\r\n blendingState.srcBlendRGB,\r\n blendingState.dstBlendRGB\r\n ),\r\n alpha: this.createBlendComponent(\r\n blendingState.alphaEquation,\r\n blendingState.srcBlendAlpha,\r\n blendingState.dstBlendAlpha\r\n )\r\n };\r\n }\r\n private createBlendComponent(op: BlendEquation, srcFunc: BlendFunc, dstFunc: BlendFunc) {\r\n const operation = blendEquationMap[op];\r\n if (!operation) {\r\n throw new Error(`createBlendComponent() failed: invalid blend op: ${op}`);\r\n }\r\n const srcFactor = blendFuncMap[srcFunc];\r\n if (!srcFactor) {\r\n throw new Error(`createBlendComponent() failed: invalid source blend func ${srcFunc}`);\r\n }\r\n const dstFactor = blendFuncMap[dstFunc];\r\n if (!dstFactor) {\r\n throw new Error(`createBlendComponent() failed: invalid dest blend func ${dstFunc}`);\r\n }\r\n return {\r\n operation,\r\n srcFactor,\r\n dstFactor\r\n };\r\n }\r\n private getRenderPipelineHash(\r\n fbHash: string,\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n primitiveType: PrimitiveType\r\n ) {\r\n const programHash = program.hash;\r\n const vertexHash = vertexData?.getLayouts(program.vertexAttributes)?.layoutHash || '';\r\n const stateHash = stateSet?.hash || '';\r\n return `${programHash}:${vertexHash}:${fbHash}:${primitiveType}:${stateHash}:${Number(\r\n this._device.isWindingOrderReversed()\r\n )}`;\r\n }\r\n private getComputePipelineHash(program: WebGPUProgram) {\r\n return program.hash;\r\n }\r\n}\r\n","import type { Immutable, Nullable } from '@zephyr3d/base';\r\nimport { CubeFace } from '@zephyr3d/base';\r\nimport type { FrameBuffer, FrameBufferOptions, BaseTexture } from '@zephyr3d/device';\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\n\r\ntype FrameBufferTextureAttachment = {\r\n texture: BaseTexture;\r\n face?: number;\r\n layer?: number;\r\n level?: number;\r\n generateMipmaps?: boolean;\r\n};\r\n\r\ntype WebGPUFrameBufferOptions = {\r\n colorAttachments?: Nullable<FrameBufferTextureAttachment[]>;\r\n depthAttachment?: Nullable<FrameBufferTextureAttachment>;\r\n sampleCount?: number;\r\n ignoreDepthStencil?: boolean;\r\n};\r\n\r\nexport class WebGPUFrameBuffer extends WebGPUObject<unknown> implements FrameBuffer<unknown> {\r\n private readonly _options: WebGPUFrameBufferOptions;\r\n private readonly _width: number;\r\n private readonly _height: number;\r\n private _bindFlag: number;\r\n private readonly _hash: string;\r\n private _msaaColorTextures: Nullable<GPUTexture[]>;\r\n private _msaaDepthTexture: Nullable<GPUTexture>;\r\n constructor(\r\n device: WebGPUDevice,\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: BaseTexture,\r\n opt?: FrameBufferOptions\r\n ) {\r\n super(device);\r\n if (colorAttachments.length > 0 && colorAttachments.findIndex((val) => !val) >= 0) {\r\n throw new Error('WebGPUFramebuffer(): invalid color attachments');\r\n }\r\n this._object = null;\r\n this._options = {\r\n colorAttachments:\r\n colorAttachments?.length > 0\r\n ? colorAttachments.map((value) => ({\r\n texture: value,\r\n face: 0,\r\n layer: 0,\r\n level: 0,\r\n generateMipmaps: true\r\n }))\r\n : null,\r\n depthAttachment: depthAttachment\r\n ? {\r\n texture: depthAttachment,\r\n face: 0,\r\n layer: 0,\r\n level: 0,\r\n generateMipmaps: false\r\n }\r\n : null,\r\n sampleCount: opt?.sampleCount ?? 1,\r\n ignoreDepthStencil: opt?.ignoreDepthStencil ?? false\r\n };\r\n if (!this._options.colorAttachments && !this._options.depthAttachment) {\r\n throw new Error('WebGPUFramebuffer(): colorAttachments or depthAttachment must be specified');\r\n }\r\n this._width = this._options.colorAttachments\r\n ? this._options.colorAttachments[0].texture.width\r\n : this._options.depthAttachment!.texture.width;\r\n this._height = this._options.colorAttachments\r\n ? this._options.colorAttachments[0].texture.height\r\n : this._options.depthAttachment!.texture.height;\r\n if (\r\n (this._options.colorAttachments &&\r\n this._options.colorAttachments.findIndex(\r\n (val) => val.texture.width !== this._width || val.texture.height !== this._height\r\n ) >= 0) ||\r\n (this._options.depthAttachment &&\r\n (this._options.depthAttachment.texture.width !== this._width ||\r\n this._options.depthAttachment.texture.height !== this._height))\r\n ) {\r\n throw new Error('WebGPUFramebuffer(): attachment textures must have same width and height');\r\n }\r\n this._bindFlag = 0;\r\n this._msaaColorTextures = null;\r\n this._msaaDepthTexture = null;\r\n const colorAttachmentHash =\r\n this._options.colorAttachments?.map((tex) => tex.texture.format).join(':') ?? '';\r\n const depthAttachmentHash = this._options.depthAttachment?.texture.format ?? '';\r\n this._hash = `${colorAttachmentHash}-${depthAttachmentHash}-${this._options.sampleCount ?? 1}`;\r\n this._init();\r\n }\r\n getOptions(): Immutable<WebGPUFrameBufferOptions> {\r\n return this._options;\r\n }\r\n get bindFlag() {\r\n return this._bindFlag;\r\n }\r\n getHash() {\r\n return this._hash;\r\n }\r\n getWidth() {\r\n const attachment = this._options.colorAttachments?.[0] ?? this._options.depthAttachment;\r\n return attachment ? Math.max(attachment.texture.width >> attachment.level!, 1) : 0;\r\n }\r\n getHeight() {\r\n const attachment = this._options.colorAttachments?.[0] ?? this._options.depthAttachment;\r\n return attachment ? Math.max(attachment.texture.height >> attachment.level!, 1) : 0;\r\n }\r\n restore() {\r\n if (this._options?.depthAttachment?.texture?.disposed) {\r\n this._options.depthAttachment.texture.reload();\r\n }\r\n if (this._options?.colorAttachments) {\r\n for (const k of this._options.colorAttachments) {\r\n if (k?.texture?.disposed) {\r\n k.texture.reload();\r\n }\r\n }\r\n }\r\n if (!this._device.isContextLost()) {\r\n this._init();\r\n }\r\n }\r\n destroy() {\r\n this._object = null;\r\n if (this._msaaColorTextures) {\r\n for (const tex of this._msaaColorTextures) {\r\n tex.destroy();\r\n }\r\n this._msaaColorTextures = null;\r\n }\r\n if (this._msaaDepthTexture) {\r\n this._msaaDepthTexture.destroy();\r\n this._msaaDepthTexture = null;\r\n }\r\n }\r\n setColorAttachmentGenerateMipmaps(index: number, generateMipmaps: boolean) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k) {\r\n k.generateMipmaps = !!generateMipmaps;\r\n }\r\n }\r\n getColorAttachmentGenerateMipmaps(index: number) {\r\n return this._options.colorAttachments?.[index]?.generateMipmaps ?? false;\r\n }\r\n setColorAttachmentCubeFace(index: number, face: CubeFace) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.face !== face) {\r\n k.face = face;\r\n this._bindFlag++;\r\n }\r\n }\r\n getColorAttachmentCubeFace(index: number) {\r\n return (this._options.colorAttachments?.[index].face as CubeFace) ?? CubeFace.PX;\r\n }\r\n setColorAttachmentMipLevel(index: number, level: number) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.level !== level) {\r\n k.level = level;\r\n this._bindFlag++;\r\n }\r\n }\r\n getColorAttachmentMipLevel(index: number) {\r\n return this._options.colorAttachments?.[index].level ?? 0;\r\n }\r\n setColorAttachmentLayer(index: number, layer: number) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.layer !== layer) {\r\n k.layer = layer;\r\n this._bindFlag++;\r\n }\r\n }\r\n getColorAttachmentLayer(index: number) {\r\n return this._options.colorAttachments?.[index].layer ?? 0;\r\n }\r\n setDepthAttachmentCubeFace(face: CubeFace) {\r\n const k = this._options.depthAttachment;\r\n if (k && k.face !== face) {\r\n k.face = face;\r\n this._bindFlag++;\r\n }\r\n }\r\n getDepthAttachmentCubeFace() {\r\n return (this._options.depthAttachment?.face as CubeFace) ?? CubeFace.PX;\r\n }\r\n setDepthAttachmentLayer(layer: number) {\r\n const k = this._options.depthAttachment;\r\n if (k && k.layer !== layer) {\r\n k.layer = layer;\r\n this._bindFlag++;\r\n }\r\n }\r\n getDepthAttachmentLayer() {\r\n return this._options.depthAttachment?.layer ?? 0;\r\n }\r\n getDepthAttachment() {\r\n return this._options?.depthAttachment?.texture || null;\r\n }\r\n getColorAttachments() {\r\n return this._options?.colorAttachments?.map((val) => val?.texture || null) || [];\r\n }\r\n getColorAttachment<T extends BaseTexture>(index: number): T {\r\n return (this.getColorAttachments()[index] as unknown as T) ?? null;\r\n }\r\n getMSAADepthAttachment() {\r\n return this._msaaDepthTexture;\r\n }\r\n getMSAAColorAttacments() {\r\n return this._msaaColorTextures;\r\n }\r\n getColorFormats() {\r\n return (\r\n this._options?.colorAttachments?.map((val) => (val.texture as WebGPUBaseTexture).gpuFormat!) ?? null\r\n );\r\n }\r\n getDepthFormat() {\r\n return (this._options.depthAttachment?.texture as WebGPUBaseTexture)?.gpuFormat ?? null;\r\n }\r\n bind() {\r\n return true;\r\n }\r\n unbind() {}\r\n private _init() {\r\n if (this._options.sampleCount! > 1) {\r\n this._msaaColorTextures = [];\r\n for (const colorAttachment of this._options.colorAttachments!) {\r\n const msaaTexture = (this.device as WebGPUDevice).gpuCreateTexture({\r\n size: {\r\n width: this._width,\r\n height: this._height,\r\n depthOrArrayLayers: 1\r\n },\r\n format: (colorAttachment.texture as WebGPUBaseTexture).gpuFormat!,\r\n mipLevelCount: 1,\r\n sampleCount: this._options.sampleCount,\r\n dimension: '2d',\r\n usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT\r\n });\r\n this._msaaColorTextures.push(msaaTexture);\r\n }\r\n if (this._options.depthAttachment) {\r\n const msaaDepthTexture = (this.device as WebGPUDevice).gpuCreateTexture({\r\n size: {\r\n width: this._width,\r\n height: this._height,\r\n depthOrArrayLayers: 1\r\n },\r\n format: (this._options.depthAttachment.texture as WebGPUBaseTexture).gpuFormat!,\r\n mipLevelCount: 1,\r\n sampleCount: this._options.sampleCount,\r\n dimension: '2d',\r\n usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT\r\n });\r\n this._msaaDepthTexture = msaaDepthTexture;\r\n }\r\n }\r\n this._object = {};\r\n }\r\n isFramebuffer(): this is FrameBuffer {\r\n return true;\r\n }\r\n getSampleCount() {\r\n return this._options.sampleCount!;\r\n }\r\n}\r\n","import type { IndexBuffer } from '@zephyr3d/device';\r\nimport { PBPrimitiveTypeInfo, PBPrimitiveType, GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUBuffer } from './buffer_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\nconst typeU32 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32);\r\n\r\nexport class WebGPUIndexBuffer extends WebGPUBuffer implements IndexBuffer {\r\n readonly indexType: PBPrimitiveTypeInfo;\r\n readonly length: number;\r\n constructor(\r\n device: WebGPUDevice,\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n usage?: number\r\n ) {\r\n if (!(data instanceof Uint16Array) && !(data instanceof Uint32Array)) {\r\n throw new Error('invalid index data');\r\n }\r\n super(device, GPUResourceUsageFlags.BF_INDEX | (usage ?? 0), data);\r\n this.indexType = data instanceof Uint16Array ? typeU16 : typeU32;\r\n this.length = data.length;\r\n }\r\n}\r\n","import type { BindGroupLayout } from '@zephyr3d/device';\r\nimport { ShaderType } from '@zephyr3d/device';\r\nimport { textureFormatMap } from './constants_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Immutable } from '@zephyr3d/base';\r\n\r\nexport class BindGroupCache {\r\n private readonly _device: WebGPUDevice;\r\n private _bindGroupLayoutCache: Record<string, [GPUBindGroupLayoutDescriptor, GPUBindGroupLayout]>;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._bindGroupLayoutCache = {};\r\n }\r\n fetchBindGroupLayout(desc: Immutable<BindGroupLayout>): [GPUBindGroupLayoutDescriptor, GPUBindGroupLayout] {\r\n const hash = desc ? this.getLayoutHash(desc) : '';\r\n let bgl = this._bindGroupLayoutCache[hash];\r\n if (!bgl) {\r\n bgl = this.createBindGroupLayout(desc);\r\n if (bgl) {\r\n this._bindGroupLayoutCache[hash] = bgl;\r\n } else {\r\n throw new Error(`fetchBindGroupLayout() failed: hash: ${hash}`);\r\n }\r\n }\r\n return bgl;\r\n }\r\n private getLayoutHash(desc: Immutable<BindGroupLayout>) {\r\n let hash = '';\r\n for (const entry of desc.entries) {\r\n let s = `${entry.binding}:${entry.visibility}:`;\r\n if (entry.buffer) {\r\n s += `b:${entry.buffer.type}:${entry.buffer.hasDynamicOffset}:${entry.buffer.minBindingSize}`;\r\n } else if (entry.sampler) {\r\n s += `s${entry.sampler.type}:`;\r\n } else if (entry.texture) {\r\n s += `t${entry.texture.sampleType}-${entry.texture.viewDimension}-${Number(\r\n !!entry.texture.multisampled\r\n )}:`;\r\n } else if (entry.storageTexture) {\r\n s += `k${entry.storageTexture.access}-${entry.storageTexture.format}-${entry.storageTexture.viewDimension}:`;\r\n } else if (entry.externalTexture) {\r\n s += `v:`;\r\n }\r\n hash = `${hash} ${s}`;\r\n }\r\n return hash;\r\n }\r\n private createBindGroupLayout(\r\n desc: Immutable<BindGroupLayout>\r\n ): [GPUBindGroupLayoutDescriptor, GPUBindGroupLayout] {\r\n const layoutDescriptor: GPUBindGroupLayoutDescriptor = {\r\n entries:\r\n desc?.entries.map((entry) => {\r\n const binding = entry.binding;\r\n const visibility =\r\n (entry.visibility & ShaderType.Vertex ? GPUShaderStage.VERTEX : 0) |\r\n (entry.visibility & ShaderType.Fragment ? GPUShaderStage.FRAGMENT : 0) |\r\n (entry.visibility & ShaderType.Compute ? GPUShaderStage.COMPUTE : 0);\r\n const buffer: GPUBufferBindingLayout | undefined = entry.buffer\r\n ? {\r\n type: entry.buffer.type,\r\n hasDynamicOffset: entry.buffer.hasDynamicOffset,\r\n // minBindingSize: entry.buffer.uniformLayout.byteSize\r\n minBindingSize: Number(entry.buffer.minBindingSize) || 0\r\n }\r\n : undefined;\r\n const sampler: GPUSamplerBindingLayout | undefined = entry.sampler\r\n ? {\r\n type: entry.sampler.type\r\n }\r\n : undefined;\r\n const texture: GPUTextureBindingLayout | undefined = entry.texture\r\n ? {\r\n sampleType: entry.texture.sampleType,\r\n viewDimension: entry.texture.viewDimension\r\n }\r\n : undefined;\r\n const storageTexture: GPUStorageTextureBindingLayout | undefined = entry.storageTexture\r\n ? {\r\n access: entry.storageTexture.access,\r\n viewDimension: entry.storageTexture.viewDimension,\r\n format: textureFormatMap[entry.storageTexture.format]\r\n }\r\n : undefined;\r\n const externalTexture: GPUExternalTextureBindingLayout | undefined = entry.externalTexture\r\n ? {}\r\n : undefined;\r\n const t: GPUBindGroupLayoutEntry = {\r\n binding,\r\n visibility\r\n };\r\n if (buffer) {\r\n t.buffer = buffer;\r\n } else if (sampler) {\r\n t.sampler = sampler;\r\n } else if (texture) {\r\n t.texture = texture;\r\n } else if (storageTexture) {\r\n t.storageTexture = storageTexture;\r\n } else if (externalTexture) {\r\n t.externalTexture = externalTexture;\r\n }\r\n return t;\r\n }) || []\r\n };\r\n if (desc?.label) {\r\n layoutDescriptor.label = desc.label;\r\n }\r\n return [layoutDescriptor, this._device.device.createBindGroupLayout(layoutDescriptor)];\r\n }\r\n}\r\n","import { hashToVertexFormat } from './constants_webgpu';\r\n\r\nexport class VertexLayoutCache {\r\n private _layouts: Record<string, GPUVertexBufferLayout[]>;\r\n constructor() {\r\n this._layouts = {};\r\n }\r\n fetchVertexLayout(hash: string) {\r\n let layouts: GPUVertexBufferLayout[] = this._layouts[hash];\r\n if (!layouts) {\r\n layouts = [];\r\n hash.split(':').forEach((l) => {\r\n const parts = l.split('-');\r\n const layout = {\r\n arrayStride: Number(parts[0]),\r\n stepMode: (Number(parts[1]) ? 'instance' : 'vertex') as GPUVertexStepMode,\r\n attributes: [] as GPUVertexAttribute[]\r\n };\r\n for (let i = 2; i < parts.length; i += 3) {\r\n layout.attributes.push({\r\n format: hashToVertexFormat[parts[i]] as GPUVertexFormat,\r\n offset: Number(parts[i + 1]),\r\n shaderLocation: Number(parts[i + 2])\r\n });\r\n }\r\n layouts.push(layout);\r\n });\r\n this._layouts[hash] = layouts;\r\n }\r\n return layouts;\r\n }\r\n}\r\n","import { WebGPUObject } from './gpuobject_webgpu';\r\nimport { textureWrappingMap, textureFilterMap, compareFuncMap } from './constants_webgpu';\r\nimport type { SamplerOptions, TextureSampler } from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { RequireOptionals } from '@zephyr3d/base';\r\n\r\nexport class WebGPUTextureSampler extends WebGPUObject<GPUSampler> implements TextureSampler<GPUSampler> {\r\n private readonly _options: RequireOptionals<SamplerOptions>;\r\n constructor(device: WebGPUDevice, options: SamplerOptions) {\r\n super(device);\r\n this._options = Object.assign(\r\n {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n addressW: 'clamp',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'none',\r\n lodMin: 0,\r\n lodMax: 32,\r\n compare: null,\r\n maxAnisotropy: 1\r\n },\r\n options || {}\r\n );\r\n this._load();\r\n }\r\n get hash() {\r\n return this._object ? this._device.gpuGetObjectHash(this._object) : 0;\r\n }\r\n get addressModeU() {\r\n return this._options.addressU;\r\n }\r\n get addressModeV() {\r\n return this._options.addressV;\r\n }\r\n get addressModeW() {\r\n return this._options.addressW;\r\n }\r\n get magFilter() {\r\n return this._options.magFilter;\r\n }\r\n get minFilter() {\r\n return this._options.minFilter;\r\n }\r\n get mipFilter() {\r\n return this._options.mipFilter;\r\n }\r\n get lodMin() {\r\n return this._options.lodMin;\r\n }\r\n get lodMax() {\r\n return this._options.lodMax;\r\n }\r\n get compare() {\r\n return this._options.compare;\r\n }\r\n get maxAnisotropy() {\r\n return this._options.maxAnisotropy;\r\n }\r\n destroy() {\r\n this._object = null;\r\n }\r\n restore() {\r\n if (!this._device.isContextLost()) {\r\n this._load();\r\n }\r\n }\r\n private _load() {\r\n this._object = this._device.gpuCreateSampler({\r\n addressModeU: textureWrappingMap[this._options.addressU],\r\n addressModeV: textureWrappingMap[this._options.addressV],\r\n addressModeW: textureWrappingMap[this._options.addressW],\r\n magFilter: textureFilterMap[this._options.magFilter],\r\n minFilter: textureFilterMap[this._options.minFilter],\r\n mipmapFilter: textureFilterMap[this._options.mipFilter],\r\n lodMinClamp: this._options.lodMin,\r\n lodMaxClamp: this._options.lodMax,\r\n compare: this._options.compare ? compareFuncMap[this._options.compare] : undefined,\r\n maxAnisotropy: this._options.maxAnisotropy\r\n });\r\n return !!this._object;\r\n }\r\n isSampler(): this is TextureSampler {\r\n return true;\r\n }\r\n}\r\n","import { WebGPUTextureSampler } from './sampler_webgpu';\r\nimport type { SamplerOptions } from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nexport class SamplerCache {\r\n private readonly _device: WebGPUDevice;\r\n private _samplers: Record<string, WebGPUTextureSampler>;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._samplers = {};\r\n }\r\n fetchSampler(options: SamplerOptions) {\r\n const hash = this.hash(options);\r\n let sampler = this._samplers[hash];\r\n if (!sampler) {\r\n sampler = this.createSampler(options);\r\n this._samplers[hash] = sampler;\r\n }\r\n return sampler;\r\n }\r\n private hash(options: SamplerOptions) {\r\n const addressU = options.addressU ? String(options.addressU) : '';\r\n const addressV = options.addressV ? String(options.addressV) : '';\r\n const addressW = options.addressW ? String(options.addressW) : '';\r\n const magFilter = options.magFilter ? String(options.magFilter) : '';\r\n const minFilter = options.minFilter ? String(options.minFilter) : '';\r\n const mipFilter = options.mipFilter ? String(options.mipFilter) : '';\r\n const lodMin = options.lodMin ? String(options.lodMin) : '';\r\n const lodMax = options.lodMax ? String(options.lodMax) : '';\r\n const compare = options.compare ? String(options.compare) : '';\r\n const maxAnisotropy = options.maxAnisotropy ? String(options.maxAnisotropy) : '';\r\n return `${addressU}:${addressV}:${addressW}:${magFilter}:${minFilter}:${mipFilter}:${lodMin}:${lodMax}:${compare}:${maxAnisotropy}`;\r\n }\r\n private createSampler(options: SamplerOptions) {\r\n return new WebGPUTextureSampler(this._device, options);\r\n }\r\n}\r\n","import type { Immutable, Nullable, TypedArray, Vector4 } from '@zephyr3d/base';\r\nimport type { PrimitiveType, DeviceViewport } from '@zephyr3d/device';\r\nimport {\r\n hasStencilChannel,\r\n PBPrimitiveTypeInfo,\r\n PBPrimitiveType,\r\n isIntegerTextureFormat,\r\n isSignedTextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPURenderStateSet } from './renderstates_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUFrameBuffer } from './framebuffer_webgpu';\r\nimport type { WebGPUVertexLayout } from './vertexlayout_webgpu';\r\nimport type { WebGPUIndexBuffer } from './indexbuffer_webgpu';\r\nimport type { FrameBufferInfo } from './pipeline_cache';\r\nimport { textureFormatInvMap } from './constants_webgpu';\r\nimport { WebGPUClearQuad } from './utils_webgpu';\r\n\r\nconst VALIDATION_NEED_NEW_PASS = 1 << 0;\r\nconst VALIDATION_FAILED = 1 << 1;\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\n\r\nexport class WebGPURenderPass {\r\n private readonly _device: WebGPUDevice;\r\n private _renderCommandEncoder: Nullable<GPUCommandEncoder>;\r\n private _renderPassEncoder: Nullable<GPURenderPassEncoder>;\r\n private _fbBindFlag: Nullable<number>;\r\n private _currentViewport: Nullable<DeviceViewport>;\r\n private _currentScissor: Nullable<DeviceViewport>;\r\n private _frameBufferInfo: FrameBufferInfo;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._renderCommandEncoder = null;\r\n this._renderPassEncoder = null;\r\n this._fbBindFlag = null;\r\n this._currentViewport = null;\r\n this._currentScissor = null;\r\n this._frameBufferInfo = this.createFrameBufferInfo(null);\r\n }\r\n get active() {\r\n return !!this._renderPassEncoder;\r\n }\r\n private createFrameBufferInfo(fb: Nullable<WebGPUFrameBuffer>) {\r\n const info: FrameBufferInfo = !fb\r\n ? {\r\n frameBuffer: null,\r\n colorFormats: [this._device.backbufferFormat],\r\n depthFormat: this._device.backbufferDepthFormat,\r\n sampleCount: this._device.sampleCount,\r\n hash: null,\r\n clearHash: 'f'\r\n }\r\n : {\r\n frameBuffer: fb,\r\n colorFormats: fb.getColorAttachments().map((val) => (val as WebGPUBaseTexture).gpuFormat!),\r\n depthFormat: (fb.getDepthAttachment() as WebGPUBaseTexture)?.gpuFormat!,\r\n sampleCount: fb.getOptions().sampleCount ?? 1,\r\n hash: null,\r\n clearHash: fb\r\n .getColorAttachments()\r\n .map((val) => {\r\n const fmt = textureFormatInvMap[(val as WebGPUBaseTexture).gpuFormat!];\r\n return isIntegerTextureFormat(fmt) ? (isSignedTextureFormat(fmt) ? 'i' : 'u') : 'f';\r\n })\r\n .join('')\r\n };\r\n info.hash = `${info.colorFormats.join('-')}:${info.depthFormat}:${info.sampleCount}`;\r\n return info;\r\n }\r\n setFramebuffer(fb: WebGPUFrameBuffer) {\r\n if (this._frameBufferInfo.frameBuffer !== fb) {\r\n this.end();\r\n this._frameBufferInfo = this.createFrameBufferInfo(fb);\r\n this.setViewport(null);\r\n this.setScissor(null);\r\n }\r\n }\r\n getFramebuffer() {\r\n return this._frameBufferInfo.frameBuffer;\r\n }\r\n setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n if (!vp || (!Array.isArray(vp) && (vp as DeviceViewport).default)) {\r\n this._currentViewport = {\r\n x: 0,\r\n y: 0,\r\n width: this._device.deviceXToScreen(this._device.drawingBufferWidth),\r\n height: this._device.deviceYToScreen(this._device.drawingBufferHeight),\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(vp)) {\r\n this._currentViewport = {\r\n x: vp[0],\r\n y: vp[1],\r\n width: vp[2],\r\n height: vp[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentViewport = Object.assign({ default: false }, vp as DeviceViewport);\r\n }\r\n }\r\n const vx = this._device.screenXToDevice(this._currentViewport.x);\r\n const vy = this._device.screenYToDevice(this._currentViewport.y);\r\n const vw = this._device.screenXToDevice(this._currentViewport.width);\r\n const vh = this._device.screenYToDevice(this._currentViewport.height);\r\n /*\r\n if (vx < 0 || vy < 0 || vw > this._device.drawingBufferWidth || vh > this._device.drawingBufferHeight) {\r\n console.error(\r\n `** VIEWPORT ERROR **: (${vx}, ${vy}, ${vw}, ${vh}) => (0, 0, ${this._device.drawingBufferWidth}, ${this._device.drawingBufferHeight})`\r\n );\r\n }\r\n */\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.setViewport(vx, this._device.drawingBufferHeight - vy - vh, vw, vh, 0, 1);\r\n }\r\n }\r\n getViewport() {\r\n return Object.assign({}, this._currentViewport);\r\n }\r\n setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n const backBufferWidth = this._device.deviceXToScreen(this._device.drawingBufferWidth);\r\n const backBufferHeight = this._device.deviceYToScreen(this._device.drawingBufferHeight);\r\n if (\r\n scissor === null ||\r\n scissor === undefined ||\r\n (!Array.isArray(scissor) && (scissor as DeviceViewport).default)\r\n ) {\r\n this._currentScissor = {\r\n x: 0,\r\n y: 0,\r\n width: backBufferWidth,\r\n height: backBufferHeight,\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(scissor)) {\r\n this._currentScissor = {\r\n x: scissor[0],\r\n y: scissor[1],\r\n width: scissor[2],\r\n height: scissor[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentScissor = Object.assign({ default: false }, scissor as DeviceViewport);\r\n }\r\n }\r\n let vx = this._device.screenXToDevice(this._currentScissor.x);\r\n let vy = this._device.screenYToDevice(this._currentScissor.y);\r\n let vw = this._device.screenXToDevice(this._currentScissor.width);\r\n let vh = this._device.screenYToDevice(this._currentScissor.height);\r\n // Clip scissor region to screen\r\n if (vx < 0) {\r\n vw += vx;\r\n vx = 0;\r\n }\r\n if (vy < 0) {\r\n vh += vy;\r\n vy = 0;\r\n }\r\n vw = Math.min(this._device.screenXToDevice(backBufferWidth) - vx, vw);\r\n vh = Math.min(this._device.screenYToDevice(backBufferHeight) - vy, vh);\r\n if (vw < 0 || vh < 0) {\r\n vx = 0;\r\n vy = 0;\r\n vw = 0;\r\n vh = 0;\r\n }\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.setScissorRect(vx, this._device.drawingBufferHeight - vy - vh, vw, vh);\r\n }\r\n }\r\n getScissor() {\r\n return Object.assign({}, this._currentScissor);\r\n }\r\n executeRenderBundle(renderBundle: GPURenderBundle) {\r\n if (!this.active) {\r\n this.begin();\r\n }\r\n this._renderPassEncoder!.executeBundles([renderBundle]);\r\n }\r\n draw(\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n const validation = this.validateDraw(\r\n program,\r\n bindGroups,\r\n stateSet,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n if (validation & VALIDATION_FAILED) {\r\n return;\r\n }\r\n if (validation & VALIDATION_NEED_NEW_PASS) {\r\n this.end();\r\n }\r\n if (!this.active) {\r\n this.begin();\r\n }\r\n this.drawInternal(\r\n this._renderPassEncoder!,\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n }\r\n clear(color: Nullable<Vector4>, depth: Nullable<number>, stencil: Nullable<number>) {\r\n if (!this._currentScissor) {\r\n this.end();\r\n this.begin(color, depth, stencil);\r\n } else {\r\n if (!this._renderPassEncoder) {\r\n this.begin();\r\n }\r\n this._renderPassEncoder!.insertDebugMarker('clear');\r\n WebGPUClearQuad.drawClearQuad(this, color, depth, stencil);\r\n this._renderPassEncoder!.insertDebugMarker('end clear');\r\n }\r\n }\r\n getDevice() {\r\n return this._device;\r\n }\r\n getFrameBufferInfo() {\r\n return this._frameBufferInfo;\r\n }\r\n begin(color?: Nullable<TypedArray>, depth?: Nullable<number>, stencil?: Nullable<number>) {\r\n if (this.active) {\r\n console.error('WebGPURenderPass.begin() failed: begin() has already been called');\r\n return;\r\n }\r\n this._renderCommandEncoder = this._device.commandQueue.getEncoder();\r\n const frameBuffer = this._frameBufferInfo.frameBuffer;\r\n if (!frameBuffer) {\r\n const mainPassDesc = this._device.defaultRenderPassDesc;\r\n const colorAttachmentDesc = (\r\n this._device.defaultRenderPassDesc.colorAttachments as GPURenderPassColorAttachment[]\r\n )[0];\r\n if (this._frameBufferInfo.sampleCount > 1) {\r\n colorAttachmentDesc.resolveTarget = this._device.context!.getCurrentTexture().createView();\r\n } else {\r\n colorAttachmentDesc.view = this._device.context!.getCurrentTexture().createView();\r\n }\r\n colorAttachmentDesc.loadOp = color ? 'clear' : 'load';\r\n // TODO: GPUColor type in @webgpu/types conficts with lib.dom,use `any` type to make ts-server happy\r\n colorAttachmentDesc.clearValue = (color as any) ?? undefined;\r\n const depthAttachmentDesc = this._device.defaultRenderPassDesc.depthStencilAttachment;\r\n depthAttachmentDesc!.depthLoadOp = typeof depth === 'number' ? 'clear' : 'load';\r\n depthAttachmentDesc!.depthClearValue = depth ?? undefined;\r\n depthAttachmentDesc!.stencilLoadOp = typeof stencil === 'number' ? 'clear' : 'load';\r\n depthAttachmentDesc!.stencilClearValue = stencil ?? undefined;\r\n this._renderPassEncoder = this._renderCommandEncoder.beginRenderPass(mainPassDesc);\r\n } else {\r\n const depthAttachmentTexture = frameBuffer.getDepthAttachment() as WebGPUBaseTexture;\r\n let depthTextureView: GPUTextureView;\r\n if (depthAttachmentTexture) {\r\n depthAttachmentTexture._markAsCurrentFB(true);\r\n const attachment = frameBuffer.getOptions().depthAttachment;\r\n const layer =\r\n depthAttachmentTexture.isTexture2DArray() || depthAttachmentTexture.isTexture3D()\r\n ? attachment!.layer\r\n : depthAttachmentTexture.isTextureCube()\r\n ? attachment!.face\r\n : 0;\r\n depthTextureView = depthAttachmentTexture.getView(0, layer ?? 0, 1);\r\n }\r\n this._fbBindFlag = frameBuffer.bindFlag;\r\n\r\n const passDesc: GPURenderPassDescriptor = {\r\n label: `customRenderPass:${this._frameBufferInfo.hash}`,\r\n colorAttachments:\r\n frameBuffer.getOptions().colorAttachments?.map((attachment, index) => {\r\n const tex = attachment.texture as WebGPUBaseTexture;\r\n if (tex) {\r\n tex._markAsCurrentFB(true);\r\n const layer =\r\n tex.isTexture2DArray() || tex.isTexture3D()\r\n ? attachment.layer\r\n : tex.isTextureCube()\r\n ? attachment.face\r\n : 0;\r\n if (frameBuffer.getOptions().sampleCount === 1) {\r\n return {\r\n view: tex.getView(attachment.level ?? 0, layer ?? 0, 1),\r\n loadOp: color ? 'clear' : 'load',\r\n clearValue: color,\r\n storeOp: 'store'\r\n } as GPURenderPassColorAttachment;\r\n } else {\r\n const msaaTexture = frameBuffer.getMSAAColorAttacments()![index];\r\n const msaaView = this._device.gpuCreateTextureView(msaaTexture, {\r\n dimension: '2d',\r\n baseMipLevel: attachment.level ?? 0,\r\n mipLevelCount: 1,\r\n baseArrayLayer: 0,\r\n arrayLayerCount: 1\r\n });\r\n return {\r\n view: msaaView,\r\n resolveTarget: tex.getView(attachment.level ?? 0, layer ?? 0, 1),\r\n loadOp: color ? 'clear' : 'load',\r\n clearValue: color,\r\n storeOp: 'store'\r\n } as GPURenderPassColorAttachment;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }) ?? [],\r\n depthStencilAttachment: depthAttachmentTexture\r\n ? frameBuffer.getOptions().sampleCount === 1\r\n ? {\r\n view: depthTextureView!,\r\n depthLoadOp: typeof depth === 'number' ? 'clear' : 'load',\r\n depthClearValue: depth ?? undefined,\r\n depthStoreOp: 'store',\r\n stencilLoadOp: hasStencilChannel(depthAttachmentTexture.format)\r\n ? typeof stencil === 'number'\r\n ? 'clear'\r\n : 'load'\r\n : undefined,\r\n stencilClearValue: stencil ?? undefined,\r\n stencilStoreOp: hasStencilChannel(depthAttachmentTexture.format) ? 'store' : undefined\r\n }\r\n : {\r\n view: frameBuffer.getMSAADepthAttachment()!.createView(),\r\n depthLoadOp: typeof depth === 'number' ? 'clear' : 'load',\r\n depthClearValue: depth ?? undefined,\r\n depthStoreOp: 'store',\r\n stencilLoadOp: hasStencilChannel(depthAttachmentTexture.format)\r\n ? typeof stencil === 'number'\r\n ? 'clear'\r\n : 'load'\r\n : undefined,\r\n stencilClearValue: stencil ?? undefined,\r\n stencilStoreOp: hasStencilChannel(depthAttachmentTexture.format) ? 'store' : undefined\r\n }\r\n : undefined\r\n };\r\n this._renderPassEncoder = this._renderCommandEncoder.beginRenderPass(passDesc);\r\n }\r\n this.setViewport(this._currentViewport);\r\n this.setScissor(this._currentScissor);\r\n }\r\n end() {\r\n if (!this.active) {\r\n return;\r\n }\r\n // finish current render pass command\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.end();\r\n this._renderPassEncoder = null;\r\n }\r\n this._renderCommandEncoder = null;\r\n // unmark render target flags and generate render target mipmaps if needed\r\n if (this._frameBufferInfo.frameBuffer) {\r\n const options = this._frameBufferInfo.frameBuffer.getOptions();\r\n if (options.colorAttachments) {\r\n for (const attachment of options.colorAttachments) {\r\n (attachment.texture as WebGPUBaseTexture)._markAsCurrentFB(false);\r\n if (attachment.generateMipmaps && attachment.texture.mipLevelCount > 1) {\r\n attachment.texture.generateMipmaps();\r\n }\r\n }\r\n }\r\n (options.depthAttachment?.texture as WebGPUBaseTexture)?._markAsCurrentFB(false);\r\n }\r\n }\r\n capture(\r\n renderBundleEncoder: GPURenderBundleEncoder,\r\n program: WebGPUProgram,\r\n vertexData: WebGPUVertexLayout,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[],\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n const validation = this.validateDraw(\r\n program,\r\n bindGroups,\r\n stateSet,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n if (validation & VALIDATION_FAILED) {\r\n return;\r\n }\r\n this.drawInternal(\r\n this._renderPassEncoder!,\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances,\r\n renderBundleEncoder\r\n );\r\n }\r\n private drawInternal(\r\n renderPassEncoder: GPURenderPassEncoder,\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number,\r\n renderBundleEncoder?: GPURenderBundleEncoder\r\n ) {\r\n if (\r\n this.setBindGroupsForRender(\r\n renderPassEncoder,\r\n program,\r\n bindGroups,\r\n bindGroupOffsets,\r\n renderBundleEncoder\r\n )\r\n ) {\r\n const pipeline = this._device.pipelineCache.fetchRenderPipeline(\r\n program,\r\n vertexData,\r\n stateSet,\r\n primitiveType,\r\n this._frameBufferInfo\r\n );\r\n if (pipeline) {\r\n renderPassEncoder.setPipeline(pipeline);\r\n renderBundleEncoder?.setPipeline(pipeline);\r\n const stencilState = stateSet?.stencilState;\r\n if (stencilState) {\r\n renderPassEncoder.setStencilReference(stencilState.ref);\r\n }\r\n if (vertexData) {\r\n const vertexBuffers = vertexData.getLayouts(program.vertexAttributes)?.buffers;\r\n vertexBuffers?.forEach((val, index) => {\r\n renderPassEncoder.setVertexBuffer(index, val.buffer.object as GPUBuffer, val.drawOffset);\r\n renderBundleEncoder?.setVertexBuffer(index, val.buffer.object as GPUBuffer, val.drawOffset);\r\n });\r\n const indexBuffer = vertexData.getIndexBuffer() as unknown as WebGPUIndexBuffer;\r\n if (indexBuffer) {\r\n renderPassEncoder.setIndexBuffer(\r\n indexBuffer.object!,\r\n indexBuffer.indexType === typeU16 ? 'uint16' : 'uint32'\r\n );\r\n renderBundleEncoder?.setIndexBuffer(\r\n indexBuffer.object!,\r\n indexBuffer.indexType === typeU16 ? 'uint16' : 'uint32'\r\n );\r\n renderPassEncoder.drawIndexed(count, numInstances, first);\r\n renderBundleEncoder?.drawIndexed(count, numInstances, first);\r\n } else {\r\n renderPassEncoder.draw(count, numInstances, first);\r\n renderBundleEncoder?.draw(count, numInstances, first);\r\n }\r\n } else {\r\n renderPassEncoder.draw(count, numInstances, first);\r\n renderBundleEncoder?.draw(count, numInstances, first);\r\n }\r\n }\r\n }\r\n }\r\n private validateDraw(\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n stateSet: WebGPURenderStateSet,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n let validation = 0;\r\n const colorTargetCount = this._frameBufferInfo.colorFormats.length;\r\n if (colorTargetCount !== 0 && program.fragmentOutputCount !== colorTargetCount) {\r\n if (\r\n !stateSet?.colorState ||\r\n stateSet.colorState.redMask ||\r\n stateSet.colorState.greenMask ||\r\n stateSet.colorState.blueMask ||\r\n stateSet.colorState.alphaMask\r\n ) {\r\n const framebuffer = this._frameBufferInfo.frameBuffer;\r\n const colorAttachments = framebuffer?.getColorAttachments().map((texture, index) => ({\r\n index,\r\n name: texture?.name,\r\n uid: texture?.uid,\r\n format: texture?.format\r\n })) ?? [{ index: 0, name: '<backbuffer>', uid: 0, format: this._frameBufferInfo.colorFormats[0] }];\r\n console.error('WebGPU draw validation failed: fragment color output count mismatch', {\r\n programName: program.name,\r\n programLabel: program.label,\r\n programHash: program.hash,\r\n fragmentOutputCount: program.fragmentOutputCount,\r\n colorTargetCount,\r\n colorFormats: this._frameBufferInfo.colorFormats,\r\n depthFormat: this._frameBufferInfo.depthFormat,\r\n framebufferName: framebuffer?.name ?? '<backbuffer>',\r\n framebufferHash: this._frameBufferInfo.hash,\r\n colorAttachments,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances,\r\n stack: new Error().stack\r\n });\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n if (bindGroups) {\r\n for (let i = 0; i < program.bindGroupLayouts.length; i++) {\r\n const bindGroup = bindGroups[i];\r\n if (bindGroup) {\r\n if (bindGroup.bindGroup) {\r\n for (const ubo of bindGroup.bufferList) {\r\n if (ubo.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n for (const tex of bindGroup.textureList) {\r\n if (tex.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n if (tex._isMarkedAsCurrentFB()) {\r\n console.error('bind resource texture can not be current render target');\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n } else {\r\n console.error(`Missing bind group (${i}) when drawing with program '${program.name}'`);\r\n return VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n if (\r\n this._frameBufferInfo.frameBuffer &&\r\n this._frameBufferInfo.frameBuffer.bindFlag !== this._fbBindFlag\r\n ) {\r\n validation |= VALIDATION_NEED_NEW_PASS;\r\n }\r\n return validation;\r\n }\r\n private setBindGroupsForRender(\r\n renderPassEncoder: GPURenderPassEncoder,\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n renderBundleEncoder?: GPURenderBundleEncoder\r\n ) {\r\n if (bindGroups) {\r\n for (let i = 0; i < 4; i++) {\r\n if (i < program.bindGroupLayouts.length) {\r\n const bindGroup = bindGroups[i].bindGroup;\r\n if (!bindGroup) {\r\n return false;\r\n }\r\n const bindGroupOffset = bindGroups[i].getDynamicOffsets() ?? bindGroupOffsets?.[i];\r\n if (bindGroupOffset) {\r\n renderPassEncoder.setBindGroup(i, bindGroup, bindGroupOffset);\r\n renderBundleEncoder?.setBindGroup(i, bindGroup, bindGroupOffset);\r\n } else {\r\n renderPassEncoder.setBindGroup(i, bindGroup);\r\n renderBundleEncoder?.setBindGroup(i, bindGroup);\r\n }\r\n } else {\r\n renderPassEncoder.setBindGroup(i, this._device.emptyBindGroup);\r\n renderBundleEncoder?.setBindGroup(i, this._device.emptyBindGroup);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nconst VALIDATION_FAILED = 1 << 0;\r\n\r\nexport class WebGPUComputePass {\r\n private readonly _device: WebGPUDevice;\r\n private _computeCommandEncoder: Nullable<GPUCommandEncoder>;\r\n private _computePassEncoder: Nullable<GPUComputePassEncoder>;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._computeCommandEncoder = null;\r\n this._computePassEncoder = null;\r\n }\r\n get active() {\r\n return !!this._computePassEncoder;\r\n }\r\n compute(\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[],\r\n workgroupCountX: number,\r\n workgroupCountY: number,\r\n workgroupCountZ: number\r\n ) {\r\n const validation = this.validateCompute(program, bindGroups);\r\n if (validation & VALIDATION_FAILED) {\r\n return;\r\n }\r\n if (!this.active) {\r\n this.begin();\r\n }\r\n this.setBindGroupsForCompute(this._computePassEncoder!, program, bindGroups, bindGroupOffsets);\r\n const pipeline = this._device.pipelineCache.fetchComputePipeline(program);\r\n if (pipeline) {\r\n this._computePassEncoder!.setPipeline(pipeline);\r\n this._computePassEncoder!.dispatchWorkgroups(workgroupCountX, workgroupCountY, workgroupCountZ);\r\n }\r\n }\r\n private setBindGroupsForCompute(\r\n computePassEncoder: GPUComputePassEncoder,\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[]\r\n ) {\r\n if (bindGroups) {\r\n for (let i = 0; i < 4; i++) {\r\n if (i < program.bindGroupLayouts.length) {\r\n const bindGroup = bindGroups[i].bindGroup;\r\n if (!bindGroup) {\r\n return false;\r\n }\r\n const bindGroupOffset = bindGroupOffsets?.[i];\r\n if (bindGroupOffset) {\r\n computePassEncoder.setBindGroup(i, bindGroup, bindGroupOffset);\r\n } else {\r\n computePassEncoder.setBindGroup(i, bindGroup);\r\n }\r\n } else {\r\n computePassEncoder.setBindGroup(i, this._device.emptyBindGroup);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n begin() {\r\n if (this.active) {\r\n console.error('WebGPUComputePass.begin() failed: WebGPUComputePass.begin() has already been called');\r\n return;\r\n }\r\n this._computeCommandEncoder = this._device.commandQueue.getEncoder();\r\n this._computePassEncoder = this._computeCommandEncoder.beginComputePass();\r\n }\r\n end() {\r\n if (this.active) {\r\n this._computePassEncoder!.end();\r\n this._computePassEncoder = null;\r\n this._computeCommandEncoder = null;\r\n }\r\n }\r\n private validateCompute(program: WebGPUProgram, bindGroups: WebGPUBindGroup[]) {\r\n let validation = 0;\r\n if (bindGroups) {\r\n for (let i = 0; i < program.bindGroupLayouts.length; i++) {\r\n const bindGroup = bindGroups[i];\r\n if (bindGroup) {\r\n if (bindGroup.bindGroup) {\r\n for (const ubo of bindGroup.bufferList) {\r\n if (ubo.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n for (const tex of bindGroup.textureList) {\r\n if (tex.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n } else {\r\n console.error(`Missing bind group (${i}) when compute with program '${program.name}'`);\r\n return VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n return validation;\r\n }\r\n}\r\n","import type { Immutable, Nullable, Vector4 } from '@zephyr3d/base';\r\nimport { WebGPURenderPass } from './renderpass_webgpu';\r\nimport { WebGPUComputePass } from './computepass_webgpu';\r\nimport type { PrimitiveType, DeviceViewport } from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPUVertexLayout } from './vertexlayout_webgpu';\r\nimport type { WebGPURenderStateSet } from './renderstates_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport type { WebGPUFrameBuffer } from './framebuffer_webgpu';\r\nimport type { WebGPUBuffer } from './buffer_webgpu';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport { WebGPUMipmapGenerator } from './utils_webgpu';\r\n\r\ntype LogicalSegment = {\r\n uploadEncoder: Nullable<GPUCommandEncoder>;\r\n bodyEncoder: Nullable<GPUCommandEncoder>;\r\n hasUploadCommands: boolean;\r\n hasBodyCommands: boolean;\r\n buffersWithPendingUploads: WebGPUBuffer[];\r\n texturesWithPendingUploads: WebGPUBaseTexture[];\r\n};\r\n\r\nexport class CommandQueueImmediate {\r\n protected _renderPass: WebGPURenderPass;\r\n protected _computePass: WebGPUComputePass;\r\n private _segments: LogicalSegment[];\r\n private _buffersAwaitingSyncEnd: WebGPUBuffer[];\r\n private _texturesAwaitingSyncEnd: WebGPUBaseTexture[];\r\n private readonly _device: WebGPUDevice;\r\n private _drawcallCounter: number;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._segments = [];\r\n this._buffersAwaitingSyncEnd = [];\r\n this._texturesAwaitingSyncEnd = [];\r\n this._renderPass = new WebGPURenderPass(device);\r\n this._computePass = new WebGPUComputePass(device);\r\n this._drawcallCounter = 0;\r\n }\r\n isBufferUploading(_buffer: WebGPUBuffer) {\r\n return false;\r\n }\r\n isTextureUploading(_tex: WebGPUBaseTexture) {\r\n return false;\r\n }\r\n hasActiveWork() {\r\n return (\r\n this._segments.length > 0 ||\r\n this._renderPass.active ||\r\n this._computePass.active ||\r\n this._drawcallCounter > 0\r\n );\r\n }\r\n getDrawcallCounter() {\r\n return this._drawcallCounter;\r\n }\r\n getEncoder() {\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n if (!segment.bodyEncoder) {\r\n segment.bodyEncoder = this._device.device.createCommandEncoder();\r\n }\r\n return segment.bodyEncoder;\r\n }\r\n flushUploads() {\r\n this.finalizeCurrentSegmentUploads();\r\n }\r\n get currentPass(): Nullable<WebGPURenderPass | WebGPUComputePass> {\r\n return this._renderPass.active ? this._renderPass : this._computePass.active ? this._computePass : null;\r\n }\r\n beginFrame() {}\r\n endFrame() {\r\n this.submit();\r\n }\r\n flush() {\r\n this.submit();\r\n }\r\n setFramebuffer(fb: WebGPUFrameBuffer) {\r\n this._renderPass.setFramebuffer(fb);\r\n }\r\n getFramebuffer() {\r\n return this._renderPass.getFramebuffer();\r\n }\r\n getFramebufferInfo() {\r\n return this._renderPass.getFrameBufferInfo();\r\n }\r\n executeRenderBundle(renderBundle: GPURenderBundle) {\r\n this.ensureRenderBodyReady();\r\n this._drawcallCounter++;\r\n this._renderPass.executeRenderBundle(renderBundle);\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n }\r\n bufferUpload(buffer: WebGPUBuffer, _offset: number, _size: number) {\r\n const segment = this.getSegmentForUpload();\r\n if (segment.buffersWithPendingUploads.indexOf(buffer) < 0) {\r\n segment.buffersWithPendingUploads.push(buffer);\r\n }\r\n }\r\n textureUpload(tex: WebGPUBaseTexture) {\r\n const segment = this.getSegmentForUpload();\r\n if (segment.texturesWithPendingUploads.indexOf(tex) < 0) {\r\n segment.texturesWithPendingUploads.push(tex);\r\n }\r\n }\r\n copyBuffer(\r\n srcBuffer: WebGPUBuffer,\r\n dstBuffer: WebGPUBuffer,\r\n srcOffset: number,\r\n dstOffset: number,\r\n bytes: number\r\n ) {\r\n this.endAllBodyPasses();\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n const encoder = this.getEncoder();\r\n encoder.copyBufferToBuffer(srcBuffer.object!, srcOffset, dstBuffer.object!, dstOffset, bytes);\r\n }\r\n copyTexture(\r\n srcTexture: GPUTexture,\r\n dstTexture: GPUTexture,\r\n srcLevel: number,\r\n dstLevel: number,\r\n width: number,\r\n height: number,\r\n depthOrArrayLayers: number\r\n ) {\r\n this.endAllBodyPasses();\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n const encoder = this.getEncoder();\r\n encoder.copyTextureToTexture(\r\n {\r\n texture: srcTexture,\r\n mipLevel: srcLevel,\r\n origin: { x: 0, y: 0, z: 0 }\r\n },\r\n {\r\n texture: dstTexture,\r\n mipLevel: dstLevel,\r\n origin: { x: 0, y: 0, z: 0 }\r\n },\r\n {\r\n width,\r\n height,\r\n depthOrArrayLayers\r\n }\r\n );\r\n }\r\n compute(\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[],\r\n workgroupCountX: number,\r\n workgroupCountY: number,\r\n workgroupCountZ: number\r\n ) {\r\n this._drawcallCounter++;\r\n this.ensureComputeBodyReady();\r\n this._computePass.compute(\r\n program,\r\n bindGroups,\r\n bindGroupOffsets,\r\n workgroupCountX,\r\n workgroupCountY,\r\n workgroupCountZ\r\n );\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n }\r\n draw(\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n this.ensureRenderBodyReady();\r\n this._drawcallCounter++;\r\n this._renderPass.draw(\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n }\r\n capture(\r\n renderBundleEncoder: GPURenderBundleEncoder,\r\n program: WebGPUProgram,\r\n vertexData: WebGPUVertexLayout,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[],\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n this.ensureRenderBodyReady();\r\n this._renderPass.capture(\r\n renderBundleEncoder,\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n }\r\n setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n this._renderPass.setViewport(vp);\r\n }\r\n getViewport() {\r\n return this._renderPass.getViewport();\r\n }\r\n setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n this._renderPass.setScissor(scissor);\r\n }\r\n getScissor() {\r\n return this._renderPass.getScissor();\r\n }\r\n clear(color: Nullable<Vector4>, depth: Nullable<number>, stencil: Nullable<number>) {\r\n this.ensureRenderBodyReady();\r\n this._renderPass.clear(color, depth, stencil);\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n }\r\n finish() {\r\n this.submit();\r\n return this._device.device.queue.onSubmittedWorkDone();\r\n }\r\n private createSegment(): LogicalSegment {\r\n const segment: LogicalSegment = {\r\n uploadEncoder: null,\r\n bodyEncoder: null,\r\n hasUploadCommands: false,\r\n hasBodyCommands: false,\r\n buffersWithPendingUploads: [],\r\n texturesWithPendingUploads: []\r\n };\r\n this._segments.push(segment);\r\n return segment;\r\n }\r\n private getCurrentSegment() {\r\n return this._segments.length > 0 ? this._segments[this._segments.length - 1] : null;\r\n }\r\n private getOrCreateCurrentSegment() {\r\n return this.getCurrentSegment() ?? this.createSegment();\r\n }\r\n private getOrCreateUploadEncoder(segment: LogicalSegment) {\r\n if (!segment.uploadEncoder) {\r\n segment.uploadEncoder = this._device.device.createCommandEncoder();\r\n }\r\n return segment.uploadEncoder;\r\n }\r\n private ensureRenderBodyReady() {\r\n if (this._computePass.active) {\r\n this._computePass.end();\r\n }\r\n }\r\n private ensureComputeBodyReady() {\r\n if (this._renderPass.active) {\r\n this._renderPass.end();\r\n }\r\n }\r\n private endAllBodyPasses() {\r\n if (this._renderPass.active) {\r\n this._renderPass.end();\r\n }\r\n if (this._computePass.active) {\r\n this._computePass.end();\r\n }\r\n }\r\n private submit() {\r\n this.endAllBodyPasses();\r\n this.finalizeCurrentSegmentUploads();\r\n if (this._segments.length > 0) {\r\n const commandBuffers: GPUCommandBuffer[] = [];\r\n for (const segment of this._segments) {\r\n if (segment.uploadEncoder && segment.hasUploadCommands) {\r\n commandBuffers.push(segment.uploadEncoder.finish());\r\n }\r\n if (segment.bodyEncoder && segment.hasBodyCommands) {\r\n commandBuffers.push(segment.bodyEncoder.finish());\r\n }\r\n }\r\n if (commandBuffers.length > 0) {\r\n this._device.device.queue.submit(commandBuffers);\r\n }\r\n }\r\n for (const buffer of this._buffersAwaitingSyncEnd) {\r\n buffer.endSyncChanges();\r\n }\r\n this._buffersAwaitingSyncEnd.length = 0;\r\n for (const texture of this._texturesAwaitingSyncEnd) {\r\n texture.endSyncChanges();\r\n }\r\n this._texturesAwaitingSyncEnd.length = 0;\r\n this._segments.length = 0;\r\n this._drawcallCounter = 0;\r\n }\r\n private markBufferAwaitingSyncEnd(buffer: WebGPUBuffer) {\r\n if (this._buffersAwaitingSyncEnd.indexOf(buffer) < 0) {\r\n this._buffersAwaitingSyncEnd.push(buffer);\r\n }\r\n }\r\n private markTextureAwaitingSyncEnd(texture: WebGPUBaseTexture) {\r\n if (this._texturesAwaitingSyncEnd.indexOf(texture) < 0) {\r\n this._texturesAwaitingSyncEnd.push(texture);\r\n }\r\n }\r\n private getSegmentForUpload() {\r\n let segment = this.getOrCreateCurrentSegment();\r\n if (segment.hasBodyCommands) {\r\n this.endAllBodyPasses();\r\n this.finalizeCurrentSegmentUploads();\r\n segment = this.createSegment();\r\n }\r\n return segment;\r\n }\r\n private finalizeCurrentSegmentUploads() {\r\n const segment = this.getCurrentSegment();\r\n if (!segment) {\r\n return;\r\n }\r\n if (segment.buffersWithPendingUploads.length > 0) {\r\n const encoder = this.getOrCreateUploadEncoder(segment);\r\n for (const buffer of segment.buffersWithPendingUploads) {\r\n buffer.beginSyncChanges(encoder);\r\n segment.hasUploadCommands = true;\r\n this.markBufferAwaitingSyncEnd(buffer);\r\n }\r\n segment.buffersWithPendingUploads.length = 0;\r\n }\r\n if (segment.texturesWithPendingUploads.length > 0) {\r\n const encoder = this.getOrCreateUploadEncoder(segment);\r\n for (const texture of segment.texturesWithPendingUploads) {\r\n texture.beginSyncChanges(encoder);\r\n if (!texture.disposed && texture.isMipmapDirty()) {\r\n WebGPUMipmapGenerator.generateMipmap(this._device, texture, encoder);\r\n }\r\n segment.hasUploadCommands = true;\r\n this.markTextureAwaitingSyncEnd(texture);\r\n }\r\n segment.texturesWithPendingUploads.length = 0;\r\n }\r\n }\r\n}\r\n","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","import { WebGPUDevice } from './device';\r\nimport type { DeviceBackend, DeviceEventMap } from '@zephyr3d/device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { makeObservable } from '@zephyr3d/base';\r\n\r\nlet webGPUStatus: Nullable<Promise<boolean>> = null;\r\n\r\n/**\r\n * The WebGPU backend\r\n * @public\r\n */\r\nexport const backendWebGPU: DeviceBackend = {\r\n typeName() {\r\n return 'webgpu';\r\n },\r\n async supported() {\r\n if (!webGPUStatus) {\r\n webGPUStatus = new Promise<boolean>(async (resolve) => {\r\n let status = true;\r\n try {\r\n if (!('gpu' in navigator)) {\r\n status = false;\r\n }\r\n const adapter = await navigator.gpu.requestAdapter();\r\n if (!adapter) {\r\n status = false;\r\n } else {\r\n const device = await adapter.requestDevice();\r\n if (!device) {\r\n status = false;\r\n } else if (typeof device.destroy === 'function') {\r\n device.destroy();\r\n }\r\n status = true;\r\n }\r\n } catch {\r\n status = false;\r\n }\r\n resolve(status);\r\n });\r\n }\r\n return webGPUStatus;\r\n },\r\n async createDevice(cvs, options?) {\r\n try {\r\n const factory = makeObservable(WebGPUDevice)<DeviceEventMap>();\r\n const device = new factory(this, cvs, options);\r\n await device.initContext();\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n return device;\r\n } catch (err) {\r\n console.error(err);\r\n return null;\r\n }\r\n }\r\n};\r\n"],"names":["_uniqueId","WebGPUObject","Disposable","_device","_object","_uid","_cid","_name","_queueState","_restoreHandler","device","genDefaultName","addGPUObject","object","uid","cid","restoreHandler","handler","name","val","lastName","dispatchEvent","queueState","isVertexLayout","isFramebuffer","isSampler","isTexture","isTexture2D","isTexture2DArray","isTexture3D","isTextureCube","isTextureVideo","isProgram","isBuffer","isBindGroup","reload","disposed","restoreObject","destroy","Error","restore","onDispose","disposeObject","WebGPUProgram","_hashCounter","_type","_vs","_fs","_cs","_label","_hash","_fragmentOutputCount","_error","_bindGroupLayouts","_vertexAttributes","_csModule","_vsModule","_fsModule","_pipelineLayout","params","type","label","bindGroupLayouts","renderParams","vs","fs","fragmentOutputCount","countFragmentOutputs","vertexAttributes","join","computeParams","source","_load","String","getCompileError","getShaderSource","kin","getBindingInfo","group","length","layout","bindName","nameMap","binding","entries","bindingPoint","hash","getPipelineLayout","getShaderModule","vsModule","fsModule","csModule","pipelineLayout","createUniformBuffer","uniform","createStructuredBuffer","usage","createShaderModule","createPipelineLayout","layouts","forEach","push","fetchBindGroupLayout","code","sm","func","compilationInfo","getCompilationInfo","call","then","err","messages","msg","message","lineNum","linePos","slice","offset","console","error","warn","info","outputStruct","exec","count","re","match","Math","max","Number","use","setProgram","UploadRingBuffer","_bufferList","_defaultSize","_unmappedBufferList","defaultSize","uploadBuffer","src","dst","srcOffset","dstOffset","uploadSize","size","mappedBuffer","fetchBufferMapped","mappedRange","Uint8Array","set","upload","uploadOffset","beginUploads","i","buffer","used","unmap","splice","endUploads","mapAsync","GPUMapMode","WRITE","getMappedRange","purge","bufferSize","buf","createBuffer","GPUBufferUsage","MAP_WRITE","COPY_SRC","mappedAtCreation","WebGPUBuffer","_size","_usage","_gpuUsage","_memCost","_ringBuffer","_pendingUploads","_pendingUploadBuffer","data","byteLength","load","gpuGetObjectHash","gpuUsage","mergePendingUpload","start","end","insertIndex","pending","pendingEnd","min","bufferSubData","dstByteOffset","srcLength","BYTES_PER_ELEMENT","byteOffset","bufferUpload","getBufferSubData","dstBuffer","offsetInBytes","sizeInBytes","sourceBuffer","readOffsetInBytes","GPUResourceUsageFlags","BF_READ","BF_PACK_PIXEL","copyOffsetInBytes","copySizeInBytes","copyBuffer","flush","sync","READ","range","dispose","isContextLost","beginSyncChanges","encoder","cmdEncoder","createCommandEncoder","copyBufferToBuffer","queue","submit","finish","endSyncChanges","DYNAMIC","BF_VERTEX","VERTEX","COPY_DST","BF_INDEX","INDEX","BF_UNIFORM","UNIFORM","BF_STORAGE","STORAGE","MAP_READ","BF_WRITE","BF_UNPACK_PIXEL","gpuCreateBuffer","memCost","updateVideoMemoryCost","typeU8Vec2_Norm","PBPrimitiveTypeInfo","getCachedTypeInfo","PBPrimitiveType","U8VEC2_NORM","typeU8Vec4_Norm","U8VEC4_NORM","typeI8Vec2_Norm","I8VEC2_NORM","typeI8Vec4_Norm","I8VEC4_NORM","typeU16Vec2","U16VEC2","typeU16Vec4","U16VEC4","typeI16Vec2","I16VEC2","typeI16Vec4","I16VEC4","typeU16Vec2_Norm","U16VEC2_NORM","typeU16Vec4_Norm","U16VEC4_NORM","typeI16Vec2_Norm","I16VEC2_NORM","typeI16Vec4_Norm","I16VEC4_NORM","typeF16Vec2","F16VEC2","typeF16Vec4","F16VEC4","typeF32","F32","typeF32Vec2","F32VEC2","typeF32Vec3","F32VEC3","typeF32Vec4","F32VEC4","typeU32","U32","typeU32Vec2","U32VEC2","typeU32Vec3","U32VEC3","typeU32Vec4","U32VEC4","typeI32","I32","typeI32Vec2","I32VEC2","typeI32Vec3","I32VEC3","typeI32Vec4","I32VEC4","vertexFormatTable","typeId","WebGPUStructuredBuffer","_structure","_data","structure","isStructType","structMembers","isArrayType","toBufferLayout","byteSize","StructuredBufferData","value","st","isCompatibleType","getGPUVertexFormat","WebGPUBindGroup","_layout","_layoutDesc","_entries","_bindGroup","_buffers","_textures","_createdBuffers","_gpuId","_videoTextures","_dynamicOffsets","_resources","entry","hasDynamicOffset","dynamicOffsetIndex","bindGroup","_create","layoutDescriptor","getGPUId","bufferList","textureList","invalidate","getLayout","getDynamicOffsets","getBuffer","nocreate","_getBuffer","setBuffer","bindOffset","bindSize","bufferUsage","setValue","mappedName","k","setRawData","srcPos","getTexture","_findTextureLayout","t","setTextureView","level","face","mipCount","sampler","externalTexture","view","getView","texture","autoBindSampler","samplerEntry","_findSamplerLayout","s","compare","getDefaultSampler","autoBindSamplerComparison","setTexture","removeBindGroupReference","addBindGroupReference","tex","indexOf","getDefaultView","setSampler","updateVideoTextures","updateVideoFrame","storageTexture","_getBufferInfo","options","undefined","storage","dynamic","gpuBuffer","resourceOk","ge","resource","desc","descriptor","gpuCreateBindGroup","textureWrappingMap","repeat","clamp","textureFilterMap","nearest","linear","none","compareFuncMap","always","le","lt","gt","eq","ne","never","stencilOpMap","keep","replace","zero","invert","incr","decr","primitiveTypeMap","faceModeMap","back","front","blendEquationMap","add","subtract","blendFuncMap","one","vertexFormatToHash","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","uint16x2","uint16x4","unorm16x2","unorm16x4","sint16x2","sint16x4","snorm16x2","snorm16x4","uint8x2","uint8x4","unorm8x2","unorm8x4","sint8x2","sint8x4","snorm8x2","snorm8x4","textureFormatMap","zip","keys","values","ret","len","textureFormatInvMap","Object","hashToVertexFormat","WebGPUClearQuad","_clearPrograms","_clearStateSet","_defaultClearColor","Vector4","drawClearQuad","renderPass","clearColor","clearDepth","clearStencil","initClearQuad","getFrameBufferInfo","clearHash","program","getClearProgram","getDevice","bClearColor","bClearDepth","bClearStencil","useDepthState","enableWrite","useColorState","setColorMask","useStencilState","enable","setReference","commandQueue","draw","programInfo","colorAttachments","split","buildRenderProgram","vertex","pb","float","coords","vec2","main","$builtins","position","vec4","at","vertexIndex","fragment","$outputs","outColor","ivec4","uvec4","createBindGroup","createRenderStateSet","enableTest","useRasterizerState","setCullMode","setFrontOp","setBackOp","setFrontCompareFunc","setBackCompareFunc","WebGPUMipmapGenerator","_frameBufferInfo","_mipmapGenerationProgram","_mipmapGenerationStateSet","getMipmapGenerationBindGroupLayout","initMipmapGeneration","generateMipmap","isRenderable","miplevels","mipLevelCount","numLayers","depth","setMipmapDirty","generateMiplevel","gpuFormat","generateMipmapsForBindGroups","bindGroups","isMipmapDirty","commandEncoder","srcTex","dstTex","format","dstLevel","srcLevel","renderPassEncoder","beginMipmapGenerationPass","setBindGroup","getMipmapGenerationBindGroup","pipeline","pipelineCache","fetchRenderPipeline","setPipeline","passDesc","createView","dimension","baseMipLevel","baseArrayLayer","arrayLayerCount","loadOp","clearValue","storeOp","frameBuffer","colorFormats","depthFormat","sampleCount","beginRenderPass","insertDebugMarker","outUV","uv","color","tex2D","textureSampleLevel","$inputs","WebGPUBaseTexture","_target","_views","_defaultView","_mipmapDirty","_flags","_width","_height","_depth","_format","_renderable","_fb","_gpuFormat","_mipLevelCount","_samplerOptions","_mipBindGroups","target","width","height","samplerOptions","getTextureCaps","getTextureFormatInfo","assign","_getSamplerOptions","isFilterable","filterable","clearPendingUploads","b","init","getDeviceCaps","textureCaps","isSRGBFormat","isSRGBTextureFormat","isFloatFormat","isFloatTextureFormat","isIntegerFormat","isIntegerTextureFormat","isSignedFormat","isSignedTextureFormat","isCompressedFormat","isCompressedTextureFormat","isDepth","hasDepthChannel","gpuCreateTextureView","aspect","copyPixelDataToBuffer","x","y","w","h","layer","copyTexturePixelsToBuffer","generateMipmaps","textureUpload","u","copyBufferToTexture","bytesPerRow","bufferStride","rowsPerImage","uploadHeight","origin","uploadOffsetX","uploadOffsetY","z","uploadOffsetZ","mipLevel","uploadWidth","depthOrArrayLayers","uploadDepth","image","copyView","offsetX","offsetY","offsetZ","premultipliedAlpha","copyExternalImageToTexture","srcX","srcY","shadow","createSampler","_calcMipLevelCount","TF_NO_MIPMAP","renderable","floor","log2","allocInternal","numMipLevels","autoMipLevelCount","isInteger","obj","runNextFrame","TF_WRITABLE","gpuCreateTexture","GPUTextureUsage","TEXTURE_BINDING","RENDER_ATTACHMENT","STORAGE_BINDING","calcMemoryUsage","calculateBufferSizeForCopy","blockWidth","getTextureFormatBlockWidth","blockHeight","getTextureFormatBlockHeight","blockSize","getTextureFormatBlockSize","blocksPerRow","ceil","blocksPerCol","rowStride","sizeAligned","strideAligned","stride","numRows","tmpBuffer","copyTextureToBuffer","uploadRaw","pixels","miplevel","hasActiveWork","isTextureUploading","destination","dataLayout","writeTexture","d","srcLayerOffset","dstLayerOffset","subarray","destX","destY","srcZ","faceGroups","levelGroups","levelGroup","comparison","magFilter","minFilter","mipFilter","addressU","addressV","addressW","lodMin","lodMax","maxAnisotropy","_markAsCurrentFB","_isMarkedAsCurrentFB","WebGPUTexture2D","loadEmpty","update","xOffset","yOffset","updateFromElement","HTMLCanvasElement","cvs","document","createElement","ctx","getContext","drawImage","imageData","getImageData","uploadImageData","readPixels","faceOrLayer","readPixelsToBuffer","loadFromElement","element","sRGB","creationFlags","loadImage","createEmpty","createWithMipmapData","isCubemap","isVolume","loadLevels","levels","linearTextureFormatToSRGB","swizzle","mipLevels","isCompressed","supportS3TCSRGB","supportS3TC","mipDatas","j","WebGPUTexture2DArray","zOffset","destZ","arraySize","WebGPUTexture3D","_level","_mipCount","WebGPUTextureCube","WebGPUTextureVideo","_source","_refBindGroups","index","loadElement","readyState","videoFrame","window","VideoFrame","close","gpuImportExternalTexture","_face","_x","_y","_w","_h","_faceOrLayer","_mipLevel","_buffer","videoWidth","videoHeight","that","WebGPUFramebufferCaps","maxDrawBuffers","maxColorAttachmentBytesPerSample","supportRenderMipmap","supportMultisampledFramebuffer","supportFloatBlending","supportDepth32float","supportDepth32floatStencil8","limits","maxColorAttachments","features","has","WebGPUMiscCaps","supportOversizedViewport","supportBlendMinMax","support32BitIndex","supportDepthClamp","maxBindGroups","maxTexCoordIndex","WebGPUShaderCaps","supportFragmentDepth","supportStandardDerivatives","supportShaderTextureLod","supportHighPrecisionFloat","maxUniformBufferSize","uniformBufferOffsetAlignment","maxStorageBufferSize","storageBufferOffsetAlignment","maxUniformBufferBindingSize","minUniformBufferOffsetAlignment","maxStorageBufferBindingSize","minStorageBufferOffsetAlignment","WebGPUTextureCaps","_textureFormatInfos","maxTextureSize","maxCubeTextureSize","npo2Mipmapping","npo2Repeating","supportBPTC","supportRGTC","supportASTC","supportDepthTexture","support3DTexture","supportSRGBTexture","supportFloatTexture","supportLinearFloatTexture","supportHalfFloatTexture","supportLinearHalfFloatTexture","supportAnisotropicFiltering","supportFloatColorBuffer","supportHalfFloatColorBuffer","maxTextureDimension2D","float32Filterable","gpuSampleType","compressed","writable","map","numPixels","WebGPUVertexLayout","_defaultBuffers","_vertexData","_layouts","VertexData","vb","vertexBuffers","setVertexBuffer","stepMode","indexBuffer","setIndexBuffer","setDrawOffset","drawOffset","getDrawOffset","getVertexBuffer","semantic","getVertexBufferInfo","getIndexBuffer","getLayouts","attributes","calcHash","getDefaultBuffer","attrib","numVertices","n","createVertexBuffer","getVertexAttribFormat","getVertexAttribName","Float32Array","unshift","attribHash","layoutVertexBuffers","idx","bufferInfo","findIndex","layoutHash","buffers","bind","setVertexLayout","primitiveType","first","drawInstanced","numInstances","WebGPURenderState","_defaultState","defaultState","_getHash","invalidateHash","ctor","computeHash","WebGPUColorState","_redMask","_greenMask","_blueMask","_alphaMask","clone","redMask","greenMask","blueMask","alphaMask","r","g","a","WebGPUBlendingState","_enabled","_alphaToCoverageEnabled","_srcBlendRGB","_dstBlendRGB","_srcBlendAlpha","_dstBlendAlpha","_rgbEquation","_alphaEquation","other","enableAlphaToCoverage","setBlendFuncRGB","setBlendFuncAlpha","setBlendEquation","enabled","alphaToCoverageEnabled","srcBlendRGB","srcBlendAlpha","dstBlendRGB","dstBlendAlpha","rgbEquation","alphaEquation","setBlendFunc","dest","rgb","alpha","WebGPURasterizerState","_cullMode","_depthClampEnabled","enableDepthClamp","cullMode","mode","depthClampEnabled","WebGPUDepthState","_testEnabled","_writeEnabled","_compareFunc","_depthBias","_depthBiasSlopeScale","setCompareFunc","setDepthBias","setDepthBiasSlopeScale","testEnabled","writeEnabled","compareFunc","depthBias","depthBiasSlopeScale","WebGPUStencilState","_writeMask","_failOp","_failOpBack","_zFailOp","_zFailOpBack","_passOp","_passOpBack","_func","_funcBack","_ref","_readMask","failOpBack","zFailOpBack","passOpBack","funcBack","setWriteMask","setReadMask","writeMask","failOp","zFailOp","passOp","ref","readMask","mask","fail","zfail","pass","sideHash","toString","WebGPURenderStateSet","colorState","blendingState","rasterizerState","depthState","stencilState","newStateSet","copyFrom","stateSet","state","defaultColorState","useBlendingState","defaultBlendingState","defaultRasterizerState","defaultDepthState","defaultStencilState","apply","_force","setRenderStates","typeU16","U16","stencilFormats","depthFormats","PipelineCache","_renderPipelines","_computePipelines","wipeCache","fetchComputePipeline","getComputePipelineHash","shaderModule","compute","module","entryPoint","gpuCreateComputePipeline","vertexData","frameBufferInfo","vertexLayout","getRenderPipelineHash","bufferLayouts","fetchVertexLayout","primitiveState","createPrimitiveState","depthStencilState","createDepthStencilState","colorTargetStates","createColorTargetState","primitive","depthStencil","multisample","createMultisampleState","targets","gpuCreateRenderPipeline","topology","rs","frontFace","isWindingOrderReversed","unclippedDepth","stripIndexFormat","indexType","hasStencil","hasDepth","depthWriteEnabled","depthCompare","stencilFront","createStencilFaceState","stencilBack","stencilReadMask","stencilWriteMask","depthFailOp","GPUColorWrite","RED","GREEN","BLUE","ALPHA","blend","createBlendState","createBlendComponent","op","srcFunc","dstFunc","operation","srcFactor","dstFactor","fbHash","programHash","vertexHash","stateHash","WebGPUFrameBuffer","_options","_bindFlag","_msaaColorTextures","_msaaDepthTexture","depthAttachment","opt","ignoreDepthStencil","colorAttachmentHash","depthAttachmentHash","_init","getOptions","bindFlag","getHash","getWidth","attachment","getHeight","setColorAttachmentGenerateMipmaps","getColorAttachmentGenerateMipmaps","setColorAttachmentCubeFace","getColorAttachmentCubeFace","CubeFace","PX","setColorAttachmentMipLevel","getColorAttachmentMipLevel","setColorAttachmentLayer","getColorAttachmentLayer","setDepthAttachmentCubeFace","getDepthAttachmentCubeFace","setDepthAttachmentLayer","getDepthAttachmentLayer","getDepthAttachment","getColorAttachments","getColorAttachment","getMSAADepthAttachment","getMSAAColorAttacments","getColorFormats","getDepthFormat","unbind","colorAttachment","msaaTexture","msaaDepthTexture","getSampleCount","WebGPUIndexBuffer","Uint16Array","Uint32Array","BindGroupCache","_bindGroupLayoutCache","getLayoutHash","bgl","createBindGroupLayout","visibility","minBindingSize","sampleType","viewDimension","multisampled","access","ShaderType","Vertex","GPUShaderStage","Fragment","FRAGMENT","Compute","COMPUTE","VertexLayoutCache","l","parts","arrayStride","shaderLocation","WebGPUTextureSampler","addressModeU","addressModeV","addressModeW","gpuCreateSampler","mipmapFilter","lodMinClamp","lodMaxClamp","SamplerCache","_samplers","fetchSampler","VALIDATION_NEED_NEW_PASS","VALIDATION_FAILED","WebGPURenderPass","_renderCommandEncoder","_renderPassEncoder","_fbBindFlag","_currentViewport","_currentScissor","createFrameBufferInfo","active","fb","backbufferFormat","backbufferDepthFormat","fmt","setFramebuffer","setViewport","setScissor","getFramebuffer","vp","Array","isArray","default","deviceXToScreen","drawingBufferWidth","deviceYToScreen","drawingBufferHeight","vx","screenXToDevice","vy","screenYToDevice","vw","vh","getViewport","scissor","backBufferWidth","backBufferHeight","setScissorRect","getScissor","executeRenderBundle","renderBundle","begin","executeBundles","bindGroupOffsets","validation","validateDraw","drawInternal","clear","stencil","getEncoder","mainPassDesc","defaultRenderPassDesc","colorAttachmentDesc","resolveTarget","context","getCurrentTexture","depthAttachmentDesc","depthStencilAttachment","depthLoadOp","depthClearValue","stencilLoadOp","stencilClearValue","depthAttachmentTexture","depthTextureView","msaaView","depthStoreOp","hasStencilChannel","stencilStoreOp","capture","renderBundleEncoder","setBindGroupsForRender","setStencilReference","drawIndexed","colorTargetCount","framebuffer","programName","programLabel","framebufferName","framebufferHash","stack","ubo","bindGroupOffset","emptyBindGroup","WebGPUComputePass","_computeCommandEncoder","_computePassEncoder","workgroupCountX","workgroupCountY","workgroupCountZ","validateCompute","setBindGroupsForCompute","dispatchWorkgroups","computePassEncoder","beginComputePass","CommandQueueImmediate","_renderPass","_computePass","_segments","_buffersAwaitingSyncEnd","_texturesAwaitingSyncEnd","_drawcallCounter","isBufferUploading","_tex","getDrawcallCounter","segment","getOrCreateCurrentSegment","hasBodyCommands","bodyEncoder","flushUploads","finalizeCurrentSegmentUploads","currentPass","beginFrame","endFrame","getFramebufferInfo","ensureRenderBodyReady","_offset","getSegmentForUpload","buffersWithPendingUploads","texturesWithPendingUploads","srcBuffer","bytes","endAllBodyPasses","copyTexture","srcTexture","dstTexture","copyTextureToTexture","ensureComputeBodyReady","onSubmittedWorkDone","createSegment","uploadEncoder","hasUploadCommands","getCurrentSegment","getOrCreateUploadEncoder","commandBuffers","markBufferAwaitingSyncEnd","markTextureAwaitingSyncEnd","WebGPUDevice","BaseDevice","_context","_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","dpr","msaa","WeakMap","getFrameBufferSampleCount","adapter","getDrawingBufferWidth","getDrawingBufferHeight","clientWidth","canvas","clientHeight","defaultDepthTexture","defaultDepthTextureView","defaultMSAAColorTextureView","getAdapterInfo","getBackBufferWidth","getBackBufferHeight","initContext","navigator","gpu","requestAdapter","requestDevice","requiredFeatures","requiredLimits","feature","lost","framebufferCaps","miscCaps","shaderCaps","configure","initResizer","_handleResize","_cssWidth","_cssHeight","deviceWidth","deviceHeight","lastWidth","lastHeight","style","createDefaultRenderAttachments","nextFrame","callback","cancelNextFrame","_handle","clearFrameBuffer","createGPUTimer","createBlendingState","createColorState","createRasterizerState","createDepthState","createStencilState","createTextureFromMipmapData","parseTextureOptions","createTexture2D","createTexture2DFromImage","createTexture2DArray","createTexture2DArrayFromImages","elements","createTexture3D","createCubeTexture","createTextureVideo","el","copyFramebufferToTexture2D","copyTexture2D","srcWidth","srcHeight","dstWidth","dstHeight","createGPUProgram","parseBufferOptions","destBuffer","createIndexBuffer","structureType","createVertexLayout","createFrameBuffer","depthAttachement","dynamicOffsets","getBindGroup","getProgram","getVertexLayout","getRenderStates","reverseVertexWindingOrder","reverse","get","createTexture","importExternalTexture","createRenderPipeline","createComputePipeline","texFormat","pixelSize","stagingBuffer","looseContext","restoreContext","beginCapture","depthStencilFormat","dc","createRenderBundleEncoder","endCapture","_executeRenderBundle","_setFramebuffer","rt","_drawInstanced","getPreferredCanvasFormat","alphaMode","colorSpace","webGPUStatus","backendWebGPU","typeName","supported","Promise","resolve","status","createDevice","factory","makeObservable"],"mappings":"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"}
1
+ {"version":3,"file":"zephyr3d_backend-webgpu.js","sources":["../../../../libs/backend-webgpu/src/gpuobject_webgpu.ts","../../../../libs/backend-webgpu/src/gpuprogram_webgpu.ts","../../../../libs/backend-webgpu/src/uploadringbuffer.ts","../../../../libs/backend-webgpu/src/buffer_webgpu.ts","../../../../libs/backend-webgpu/src/structuredbuffer_webgpu.ts","../../../../libs/backend-webgpu/src/bindgroup_webgpu.ts","../../../../libs/backend-webgpu/src/constants_webgpu.ts","../../../../libs/backend-webgpu/src/utils_webgpu.ts","../../../../libs/backend-webgpu/src/basetexture_webgpu.ts","../../../../libs/backend-webgpu/src/texture2d_webgpu.ts","../../../../libs/backend-webgpu/src/texture2darray_webgpu.ts","../../../../libs/backend-webgpu/src/texture3d_webgpu.ts","../../../../libs/backend-webgpu/src/texturecube_webgpu.ts","../../../../libs/backend-webgpu/src/texturevideo_webgpu.ts","../../../../libs/backend-webgpu/src/capabilities_webgpu.ts","../../../../libs/backend-webgpu/src/vertexlayout_webgpu.ts","../../../../libs/backend-webgpu/src/renderstates_webgpu.ts","../../../../libs/backend-webgpu/src/pipeline_cache.ts","../../../../libs/backend-webgpu/src/framebuffer_webgpu.ts","../../../../libs/backend-webgpu/src/indexbuffer_webgpu.ts","../../../../libs/backend-webgpu/src/bindgroup_cache.ts","../../../../libs/backend-webgpu/src/vertexlayout_cache.ts","../../../../libs/backend-webgpu/src/sampler_webgpu.ts","../../../../libs/backend-webgpu/src/sampler_cache.ts","../../../../libs/backend-webgpu/src/renderpass_webgpu.ts","../../../../libs/backend-webgpu/src/computepass_webgpu.ts","../../../../libs/backend-webgpu/src/commandqueue.ts","../../../../libs/backend-webgpu/src/device.ts","../../../../libs/backend-webgpu/src/index.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n VertexLayout,\r\n TextureSampler,\r\n BaseTexture,\r\n Texture2D,\r\n Texture2DArray,\r\n Texture3D,\r\n TextureCube,\r\n TextureVideo,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n GPUObject\r\n} from '@zephyr3d/device';\r\nimport { genDefaultName } from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Disposable } from '@zephyr3d/base';\r\n\r\nlet _uniqueId = 0;\r\n\r\nexport abstract class WebGPUObject<T> extends Disposable implements GPUObject<T> {\r\n protected _device: WebGPUDevice;\r\n protected _object: Nullable<T>;\r\n protected _uid: number;\r\n protected _cid: number;\r\n protected _name: string;\r\n protected _queueState: number;\r\n protected _restoreHandler: Nullable<(tex: GPUObject) => void>;\r\n constructor(device: WebGPUDevice) {\r\n super();\r\n this._device = device;\r\n this._object = null;\r\n this._uid = ++_uniqueId;\r\n this._cid = 1;\r\n this._name = genDefaultName(this);\r\n this._queueState = 0;\r\n this._restoreHandler = null;\r\n this._device.addGPUObject(this);\r\n }\r\n get device(): AbstractDevice {\r\n return this._device;\r\n }\r\n get object() {\r\n return this._object;\r\n }\r\n get uid() {\r\n return this._uid;\r\n }\r\n get cid() {\r\n return this._cid;\r\n }\r\n get restoreHandler() {\r\n return this._restoreHandler;\r\n }\r\n set restoreHandler(handler: Nullable<(obj: GPUObject) => void>) {\r\n this._restoreHandler = handler;\r\n }\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val) {\r\n if (val !== this._name) {\r\n const lastName = this._name;\r\n this._name = val;\r\n this._device.dispatchEvent('gpuobject_rename', this, lastName);\r\n }\r\n }\r\n get queueState() {\r\n return this._queueState;\r\n }\r\n set queueState(val) {\r\n this._queueState = val;\r\n }\r\n isVertexLayout(): this is VertexLayout {\r\n return false;\r\n }\r\n isFramebuffer(): this is FrameBuffer {\r\n return false;\r\n }\r\n isSampler(): this is TextureSampler {\r\n return false;\r\n }\r\n isTexture(): this is BaseTexture {\r\n return false;\r\n }\r\n isTexture2D(): this is Texture2D {\r\n return false;\r\n }\r\n isTexture2DArray(): this is Texture2DArray {\r\n return false;\r\n }\r\n isTexture3D(): this is Texture3D {\r\n return false;\r\n }\r\n isTextureCube(): this is TextureCube {\r\n return false;\r\n }\r\n isTextureVideo(): this is TextureVideo {\r\n return false;\r\n }\r\n isProgram(): this is GPUProgram {\r\n return false;\r\n }\r\n isBuffer(): this is GPUDataBuffer {\r\n return false;\r\n }\r\n isBindGroup(): this is BindGroup {\r\n return false;\r\n }\r\n reload() {\r\n if (this.disposed) {\r\n this._device.restoreObject(this);\r\n this._cid++;\r\n }\r\n }\r\n destroy() {\r\n throw new Error('Abstract function call: dispose()');\r\n }\r\n restore() {\r\n throw new Error('Abstract function call: restore()');\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._device.disposeObject(this, true);\r\n }\r\n}\r\n","import type {\r\n GPUProgramConstructParams,\r\n RenderProgramConstructParams,\r\n ComputeProgramConstructParams,\r\n GPUProgram,\r\n BindGroupLayout,\r\n PBStructTypeInfo,\r\n ShaderKind\r\n} from '@zephyr3d/device';\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Immutable, Nullable } from '@zephyr3d/base';\r\n\r\nexport class WebGPUProgram extends WebGPUObject<unknown> implements GPUProgram {\r\n private static _hashCounter = 0;\r\n private readonly _type: 'render' | 'compute';\r\n private readonly _vs!: string;\r\n private readonly _fs!: string;\r\n private readonly _cs!: string;\r\n private readonly _label: string;\r\n private readonly _hash: string;\r\n private readonly _fragmentOutputCount: number;\r\n private _error: string;\r\n private readonly _bindGroupLayouts: BindGroupLayout[];\r\n private readonly _vertexAttributes!: string;\r\n private _csModule!: GPUShaderModule;\r\n private _vsModule!: GPUShaderModule;\r\n private _fsModule!: GPUShaderModule;\r\n private _pipelineLayout!: GPUPipelineLayout;\r\n constructor(device: WebGPUDevice, params: GPUProgramConstructParams) {\r\n super(device);\r\n this._type = params.type;\r\n this._label = params.label ?? `Program ${this.uid}`;\r\n this._bindGroupLayouts = [...params.params.bindGroupLayouts];\r\n this._error = '';\r\n if (params.type === 'render') {\r\n const renderParams = params.params as RenderProgramConstructParams;\r\n this._vs = renderParams.vs;\r\n this._fs = renderParams.fs;\r\n this._fragmentOutputCount =\r\n renderParams.fragmentOutputCount ?? WebGPUProgram.countFragmentOutputs(this._fs);\r\n this._vertexAttributes = renderParams.vertexAttributes ? renderParams.vertexAttributes.join(':') : '';\r\n } else {\r\n const computeParams = params.params as ComputeProgramConstructParams;\r\n this._cs = computeParams.source;\r\n this._fragmentOutputCount = 0;\r\n }\r\n this._load();\r\n this._hash = String(++WebGPUProgram._hashCounter);\r\n }\r\n get type() {\r\n return this._type;\r\n }\r\n get label() {\r\n return this._label;\r\n }\r\n getCompileError() {\r\n return this._error;\r\n }\r\n getShaderSource(kin: ShaderKind) {\r\n switch (kin) {\r\n case 'vertex':\r\n return this._vs;\r\n case 'fragment':\r\n return this._fs;\r\n case 'compute':\r\n return this._cs;\r\n default:\r\n return null;\r\n }\r\n }\r\n getBindingInfo(name: string) {\r\n for (let group = 0; group < this._bindGroupLayouts.length; group++) {\r\n const layout = this._bindGroupLayouts[group];\r\n const bindName = layout.nameMap?.[name] ?? name;\r\n for (let binding = 0; binding < layout.entries.length; binding++) {\r\n const bindingPoint = layout.entries[binding];\r\n if (bindingPoint.name === bindName) {\r\n return {\r\n group: group,\r\n binding: binding,\r\n type: bindingPoint.type\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n get bindGroupLayouts(): Immutable<BindGroupLayout[]> {\r\n return this._bindGroupLayouts;\r\n }\r\n get vertexAttributes() {\r\n return this._vertexAttributes;\r\n }\r\n get fragmentOutputCount() {\r\n return this._fragmentOutputCount;\r\n }\r\n get hash() {\r\n return this._hash;\r\n }\r\n getPipelineLayout() {\r\n return this._pipelineLayout;\r\n }\r\n getShaderModule() {\r\n return {\r\n vsModule: this._vsModule,\r\n fsModule: this._fsModule,\r\n csModule: this._csModule,\r\n pipelineLayout: this._pipelineLayout\r\n };\r\n }\r\n get fsModule() {\r\n return this._fsModule;\r\n }\r\n destroy() {\r\n this._object = null;\r\n }\r\n restore() {\r\n if (!this._object) {\r\n this._load();\r\n }\r\n }\r\n isProgram(): this is GPUProgram {\r\n return true;\r\n }\r\n createUniformBuffer(uniform: string) {\r\n const type = this.getBindingInfo(uniform)?.type as PBStructTypeInfo;\r\n return type ? this.device.createStructuredBuffer(type, { usage: 'uniform' }) : null;\r\n }\r\n private _load() {\r\n if (this._type === 'render') {\r\n this._vsModule = this.createShaderModule(this._vs);\r\n this._fsModule = this.createShaderModule(this._fs);\r\n } else {\r\n this._csModule = this.createShaderModule(this._cs);\r\n }\r\n this._pipelineLayout = this.createPipelineLayout(this._bindGroupLayouts);\r\n this._object = {};\r\n }\r\n private createPipelineLayout(bindGroupLayouts: BindGroupLayout[]) {\r\n const layouts: GPUBindGroupLayout[] = [];\r\n bindGroupLayouts.forEach((val) => {\r\n layouts.push(this._device.fetchBindGroupLayout(val)[1]);\r\n });\r\n return this._device.device.createPipelineLayout({\r\n bindGroupLayouts: layouts\r\n });\r\n }\r\n private createShaderModule(code: string) {\r\n let sm: Nullable<GPUShaderModule> = this._device.device.createShaderModule({ label: this._label, code });\r\n if (sm) {\r\n const func: (this: GPUShaderModule) => Promise<GPUCompilationInfo> =\r\n (sm as any).compilationInfo || (sm as any).getCompilationInfo;\r\n if (!func) {\r\n return sm;\r\n }\r\n func.call(sm).then((compilationInfo) => {\r\n let err = false;\r\n if (compilationInfo?.messages?.length > 0) {\r\n let msg = '';\r\n for (const message of compilationInfo.messages) {\r\n if (message.type === 'error') {\r\n err = true;\r\n }\r\n msg += `Line ${message.lineNum}:${message.linePos} - ${code.slice(\r\n message.offset,\r\n message.offset + message.length\r\n )}\\n`;\r\n msg += `${message.message}\\n`;\r\n if (message.type === 'error') {\r\n err = true;\r\n console.error(msg);\r\n } else if (message.type === 'warning') {\r\n console.warn(msg);\r\n } else {\r\n console.info(msg);\r\n }\r\n this._error += msg;\r\n }\r\n }\r\n if (err) {\r\n sm = null;\r\n }\r\n });\r\n }\r\n return sm;\r\n }\r\n private static countFragmentOutputs(source: string) {\r\n const outputStruct = /struct\\s+zFSOutput\\s*\\{([\\s\\S]*?)\\};/.exec(source);\r\n if (!outputStruct) {\r\n return 0;\r\n }\r\n let count = 0;\r\n const re = /@location\\((\\d+)\\)/g;\r\n let match: Nullable<RegExpExecArray>;\r\n while ((match = re.exec(outputStruct[1]))) {\r\n count = Math.max(count, Number(match[1]) + 1);\r\n }\r\n return count;\r\n }\r\n use() {\r\n this._device.setProgram(this);\r\n }\r\n}\r\n","import type { Nullable } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nexport interface MappedBuffer {\r\n buffer: GPUBuffer;\r\n size: number;\r\n offset: number;\r\n used: boolean;\r\n mappedRange: Nullable<ArrayBuffer>;\r\n}\r\n\r\nexport interface UploadBuffer {\r\n mappedBuffer: MappedBuffer;\r\n uploadSize: number;\r\n uploadBuffer: Nullable<GPUBuffer>;\r\n uploadOffset: number;\r\n}\r\n\r\nexport interface UploadImage {\r\n offsetX: number;\r\n offsetY: number;\r\n offsetZ: number;\r\n srcX: number;\r\n srcY: number;\r\n srcZ: number;\r\n width: number;\r\n height: number;\r\n depth: number;\r\n mipLevel: number;\r\n image: ImageBitmap | HTMLCanvasElement | OffscreenCanvas;\r\n}\r\n\r\nexport interface UploadTexture {\r\n mappedBuffer: MappedBuffer;\r\n uploadOffsetX: number;\r\n uploadOffsetY: number;\r\n uploadOffsetZ: number;\r\n uploadWidth: number;\r\n uploadHeight: number;\r\n uploadDepth: number;\r\n bufferStride: number;\r\n mipLevel: number;\r\n}\r\n\r\nexport class UploadRingBuffer {\r\n private readonly _device: WebGPUDevice;\r\n private _bufferList: MappedBuffer[];\r\n private readonly _defaultSize: number;\r\n private _unmappedBufferList: MappedBuffer[];\r\n constructor(device: WebGPUDevice, defaultSize = 64 * 1024) {\r\n this._device = device;\r\n this._bufferList = [];\r\n this._defaultSize = defaultSize;\r\n this._unmappedBufferList = [];\r\n }\r\n uploadBuffer(\r\n src: Nullable<ArrayBuffer>,\r\n dst: Nullable<GPUBuffer>,\r\n srcOffset: number,\r\n dstOffset: number,\r\n uploadSize: number\r\n ) {\r\n const size = (uploadSize + 3) & ~3;\r\n const mappedBuffer = this.fetchBufferMapped(size);\r\n if (src) {\r\n const mappedRange = mappedBuffer.mappedRange; //mappedBuffer.buffer.getMappedRange(mappedBuffer.offset, size);\r\n new Uint8Array(mappedRange!, mappedBuffer.offset, size).set(new Uint8Array(src, srcOffset, uploadSize));\r\n }\r\n const upload = {\r\n mappedBuffer: { ...mappedBuffer },\r\n uploadSize: size,\r\n uploadBuffer: dst,\r\n uploadOffset: dstOffset\r\n };\r\n mappedBuffer.offset += size;\r\n mappedBuffer.offset = (mappedBuffer.offset + 7) & ~7;\r\n return upload;\r\n }\r\n beginUploads() {\r\n for (let i = this._bufferList.length - 1; i >= 0; i--) {\r\n const buffer = this._bufferList[i];\r\n if (buffer.used) {\r\n buffer.buffer.unmap();\r\n this._unmappedBufferList.push(buffer);\r\n this._bufferList.splice(i, 1);\r\n buffer.mappedRange = null;\r\n }\r\n }\r\n return this._unmappedBufferList.length;\r\n }\r\n endUploads() {\r\n for (const buffer of this._unmappedBufferList) {\r\n buffer.buffer.mapAsync(GPUMapMode.WRITE).then(() => {\r\n buffer.offset = 0;\r\n buffer.used = false;\r\n buffer.mappedRange = buffer.buffer.getMappedRange();\r\n this._bufferList.push(buffer);\r\n });\r\n }\r\n this._unmappedBufferList = [];\r\n }\r\n purge() {\r\n for (let i = this._bufferList.length - 1; i >= 0; i--) {\r\n const buffer = this._bufferList[i];\r\n if (buffer.mappedRange) {\r\n buffer.buffer.unmap();\r\n buffer.buffer.destroy();\r\n }\r\n }\r\n this._bufferList = [];\r\n for (const buffer of this._unmappedBufferList) {\r\n buffer.buffer.destroy();\r\n }\r\n this._unmappedBufferList = [];\r\n }\r\n fetchBufferMapped(size: number) {\r\n for (const buffer of this._bufferList) {\r\n if (buffer.size - buffer.offset >= size) {\r\n buffer.used = true;\r\n return buffer;\r\n }\r\n }\r\n const bufferSize = (Math.max(size, this._defaultSize) + 3) & ~3;\r\n const buf = this._device.device.createBuffer({\r\n label: `StagingRingBuffer${this._bufferList.length}:${bufferSize}`,\r\n size: bufferSize,\r\n usage: GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC,\r\n mappedAtCreation: true\r\n });\r\n this._bufferList.push({\r\n buffer: buf,\r\n size: bufferSize,\r\n offset: 0,\r\n used: true,\r\n mappedRange: buf.getMappedRange()\r\n });\r\n return this._bufferList[this._bufferList.length - 1];\r\n }\r\n}\r\n","import type { GPUDataBuffer } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport { UploadRingBuffer } from './uploadringbuffer';\r\nimport type { Nullable, TypedArray, TypedArrayConstructor } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { MappedBuffer } from './uploadringbuffer';\r\n\r\ntype PendingUploadRange = {\r\n offset: number;\r\n size: number;\r\n};\r\n\r\nexport class WebGPUBuffer extends WebGPUObject<GPUBuffer> implements GPUDataBuffer<GPUBuffer> {\r\n private readonly _size: number;\r\n private readonly _usage: number;\r\n private _gpuUsage: number;\r\n private _memCost: number;\r\n private readonly _ringBuffer: UploadRingBuffer;\r\n protected _pendingUploads: PendingUploadRange[];\r\n private _pendingUploadBuffer: Nullable<MappedBuffer>;\r\n constructor(device: WebGPUDevice, usage: number, data: TypedArray | number) {\r\n super(device);\r\n this._object = null;\r\n this._memCost = 0;\r\n this._usage = usage;\r\n this._gpuUsage = 0;\r\n this._size = typeof data === 'number' ? data : data.byteLength;\r\n if (this._size <= 0) {\r\n throw new Error('can not create buffer with zero size');\r\n }\r\n this._ringBuffer = new UploadRingBuffer(device, (this._size + 15) & ~15);\r\n this._pendingUploads = [];\r\n this._pendingUploadBuffer = null;\r\n this.load(typeof data === 'number' ? null : data);\r\n }\r\n get hash() {\r\n return this._object ? this._device.gpuGetObjectHash(this._object) : 0;\r\n }\r\n get byteLength() {\r\n return this._size;\r\n }\r\n get usage() {\r\n return this._usage;\r\n }\r\n get gpuUsage() {\r\n return this._gpuUsage;\r\n }\r\n private mergePendingUpload(offset: number, size: number) {\r\n let start = offset;\r\n let end = offset + size;\r\n let insertIndex = this._pendingUploads.length;\r\n for (let i = 0; i < this._pendingUploads.length; i++) {\r\n const pending = this._pendingUploads[i];\r\n const pendingEnd = pending.offset + pending.size;\r\n if (pending.offset > end) {\r\n insertIndex = i;\r\n break;\r\n }\r\n if (pendingEnd >= start && pending.offset <= end) {\r\n start = Math.min(start, pending.offset);\r\n end = Math.max(end, pendingEnd);\r\n this._pendingUploads.splice(i, 1);\r\n i--;\r\n insertIndex = i + 1;\r\n }\r\n }\r\n this._pendingUploads.splice(insertIndex, 0, {\r\n offset: start,\r\n size: end - start\r\n });\r\n }\r\n bufferSubData(dstByteOffset: number, data: TypedArray, srcOffset?: number, srcLength?: number) {\r\n srcOffset = Number(srcOffset) || 0;\r\n dstByteOffset = Number(dstByteOffset) || 0;\r\n srcLength = Number(srcLength) || data.length - srcOffset;\r\n if (srcOffset + srcLength > data.length) {\r\n throw new Error('bufferSubData() failed: source buffer is too small');\r\n }\r\n if (dstByteOffset + srcLength * data.BYTES_PER_ELEMENT > this.byteLength) {\r\n throw new Error('bufferSubData() failed: dest buffer is too small');\r\n }\r\n const uploadSize = srcLength * data.BYTES_PER_ELEMENT;\r\n if ((dstByteOffset & 3) !== 0 || (uploadSize & 3) !== 0) {\r\n throw new Error(\r\n 'bufferSubData() failed: destination byte offset or upload size must be 4 bytes aligned'\r\n );\r\n }\r\n const uploadOffset = data.byteOffset + srcOffset * data.BYTES_PER_ELEMENT;\r\n // Resolve segment ownership before mutating the shared staging page. If this\r\n // upload has to start a new segment, the previous segment must snapshot its\r\n // pending uploads against the old staging contents first.\r\n this._device.bufferUpload(this, dstByteOffset, uploadSize);\r\n this._pendingUploadBuffer ??= this._ringBuffer.fetchBufferMapped((this.byteLength + 15) & ~15);\r\n new Uint8Array(this._pendingUploadBuffer.mappedRange!, dstByteOffset, uploadSize).set(\r\n new Uint8Array(data.buffer, uploadOffset, uploadSize)\r\n );\r\n this.mergePendingUpload(dstByteOffset, uploadSize);\r\n }\r\n async getBufferSubData(\r\n dstBuffer?: Nullable<Uint8Array<ArrayBuffer>>,\r\n offsetInBytes?: number,\r\n sizeInBytes?: number\r\n ) {\r\n let sourceBuffer: GPUDataBuffer = this;\r\n offsetInBytes = Number(offsetInBytes) || 0;\r\n sizeInBytes = Number(sizeInBytes) || this.byteLength - offsetInBytes;\r\n if (offsetInBytes < 0 || offsetInBytes + sizeInBytes > this.byteLength) {\r\n throw new Error('data query range out of bounds');\r\n }\r\n if (dstBuffer && dstBuffer.byteLength < sizeInBytes) {\r\n throw new Error('no enough space for querying buffer data');\r\n }\r\n let readOffsetInBytes = offsetInBytes;\r\n if (!(this._usage & (GPUResourceUsageFlags.BF_READ | GPUResourceUsageFlags.BF_PACK_PIXEL))) {\r\n if (this._gpuUsage & GPUBufferUsage.COPY_SRC) {\r\n const copyOffsetInBytes = offsetInBytes & ~3;\r\n readOffsetInBytes = offsetInBytes - copyOffsetInBytes;\r\n const copySizeInBytes = (readOffsetInBytes + sizeInBytes + 3) & ~3;\r\n sourceBuffer = this._device.createBuffer(copySizeInBytes, { usage: 'read' });\r\n this._device.copyBuffer(this, sourceBuffer, copyOffsetInBytes, 0, copySizeInBytes);\r\n this._device.flush();\r\n } else {\r\n throw new Error('getBufferSubData() failed: buffer does not have BF_READ or BF_PACK_PIXEL flag set');\r\n }\r\n } else {\r\n this.sync();\r\n }\r\n const buffer = sourceBuffer.object as GPUBuffer;\r\n await buffer.mapAsync(GPUMapMode.READ);\r\n const range = buffer.getMappedRange();\r\n dstBuffer = dstBuffer || new Uint8Array(sizeInBytes);\r\n dstBuffer.set(new Uint8Array(range, readOffsetInBytes, sizeInBytes));\r\n buffer.unmap();\r\n\r\n if (sourceBuffer !== this) {\r\n sourceBuffer.dispose();\r\n }\r\n\r\n return dstBuffer;\r\n }\r\n restore() {\r\n if (!this._device.isContextLost()) {\r\n this.load();\r\n }\r\n }\r\n destroy() {\r\n if (this._object) {\r\n this._object.destroy();\r\n this._object = null;\r\n this._gpuUsage = 0;\r\n this._memCost = 0;\r\n this._pendingUploadBuffer = null;\r\n this._pendingUploads.length = 0;\r\n }\r\n }\r\n isBuffer(): this is GPUDataBuffer {\r\n return true;\r\n }\r\n beginSyncChanges(encoder: GPUCommandEncoder) {\r\n if (this._pendingUploads.length > 0) {\r\n if (!this._object || !this._pendingUploadBuffer) {\r\n this._pendingUploads.length = 0;\r\n this._pendingUploadBuffer = null;\r\n this._ringBuffer.beginUploads();\r\n return;\r\n }\r\n const cmdEncoder = encoder || this._device.device.createCommandEncoder();\r\n for (const upload of this._pendingUploads) {\r\n cmdEncoder.copyBufferToBuffer(\r\n this._pendingUploadBuffer.buffer,\r\n upload.offset,\r\n this._object!,\r\n upload.offset,\r\n upload.size\r\n );\r\n }\r\n if (!encoder) {\r\n this._device.device.queue.submit([cmdEncoder.finish()]);\r\n }\r\n this._pendingUploads.length = 0;\r\n this._pendingUploadBuffer = null;\r\n this._ringBuffer.beginUploads();\r\n }\r\n }\r\n endSyncChanges() {\r\n if (this._usage & GPUResourceUsageFlags.DYNAMIC) {\r\n this._ringBuffer.endUploads();\r\n } else {\r\n this._ringBuffer.purge();\r\n }\r\n }\r\n private load(data?: Nullable<TypedArray>) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n this._memCost = 0;\r\n if (!this._device.isContextLost()) {\r\n if (!this._object) {\r\n this._gpuUsage = 0;\r\n let label = '';\r\n if (this._usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n this._gpuUsage |= GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\r\n label += '[vertex]';\r\n }\r\n if (this._usage & GPUResourceUsageFlags.BF_INDEX) {\r\n this._gpuUsage |= GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\r\n label += '[index]';\r\n }\r\n if (this._usage & GPUResourceUsageFlags.BF_UNIFORM) {\r\n this._gpuUsage |= GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\r\n label += '[uniform]';\r\n }\r\n if (this._usage & GPUResourceUsageFlags.BF_STORAGE) {\r\n this._gpuUsage |= GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC;\r\n label += '[storage]';\r\n }\r\n if (this._usage & (GPUResourceUsageFlags.BF_READ | GPUResourceUsageFlags.BF_PACK_PIXEL)) {\r\n this._gpuUsage |= GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ;\r\n label += '[mapRead]';\r\n }\r\n if (this._usage & (GPUResourceUsageFlags.BF_WRITE | GPUResourceUsageFlags.BF_UNPACK_PIXEL)) {\r\n this._gpuUsage |= GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE;\r\n label += '[mapWrite]';\r\n }\r\n if (data) {\r\n this._object = this._device.gpuCreateBuffer({\r\n label: label,\r\n size: (data.byteLength + 15) & ~15,\r\n usage: this._gpuUsage,\r\n mappedAtCreation: true\r\n });\r\n const range = this._object.getMappedRange();\r\n new (data.constructor as TypedArrayConstructor)(range).set(data);\r\n this._object.unmap();\r\n } else {\r\n this._object = this._device.gpuCreateBuffer({\r\n label: label,\r\n size: (this.byteLength + 15) & ~15,\r\n usage: this._gpuUsage\r\n });\r\n }\r\n const memCost = this.byteLength;\r\n this._device.updateVideoMemoryCost(memCost - this._memCost);\r\n this._memCost = memCost;\r\n }\r\n }\r\n }\r\n private sync() {\r\n if (this._pendingUploads.length > 0) {\r\n this._device.flush();\r\n }\r\n }\r\n}\r\n","import type { StructuredBuffer, StructuredValue, PBStructTypeInfo, PBTypeInfo } from '@zephyr3d/device';\r\nimport {\r\n StructuredBufferData,\r\n GPUResourceUsageFlags,\r\n PBPrimitiveType,\r\n PBPrimitiveTypeInfo\r\n} from '@zephyr3d/device';\r\nimport { WebGPUBuffer } from './buffer_webgpu';\r\nimport type { Immutable, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nconst typeU8Vec2_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U8VEC2_NORM);\r\nconst typeU8Vec4_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U8VEC4_NORM);\r\nconst typeI8Vec2_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I8VEC2_NORM);\r\nconst typeI8Vec4_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I8VEC4_NORM);\r\nconst typeU16Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16VEC2);\r\nconst typeU16Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16VEC4);\r\nconst typeI16Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I16VEC2);\r\nconst typeI16Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I16VEC4);\r\nconst typeU16Vec2_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16VEC2_NORM);\r\nconst typeU16Vec4_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16VEC4_NORM);\r\nconst typeI16Vec2_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I16VEC2_NORM);\r\nconst typeI16Vec4_Norm = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I16VEC4_NORM);\r\nconst typeF16Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F16VEC2);\r\nconst typeF16Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F16VEC4);\r\nconst typeF32 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F32);\r\nconst typeF32Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F32VEC2);\r\nconst typeF32Vec3 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F32VEC3);\r\nconst typeF32Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.F32VEC4);\r\nconst typeU32 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32);\r\nconst typeU32Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32VEC2);\r\nconst typeU32Vec3 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32VEC3);\r\nconst typeU32Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32VEC4);\r\nconst typeI32 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I32);\r\nconst typeI32Vec2 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I32VEC2);\r\nconst typeI32Vec3 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I32VEC3);\r\nconst typeI32Vec4 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.I32VEC4);\r\n\r\nconst vertexFormatTable: Record<string, GPUVertexFormat> = {\r\n [typeU8Vec2_Norm.typeId]: 'unorm8x2',\r\n [typeU8Vec4_Norm.typeId]: 'unorm8x4',\r\n [typeI8Vec2_Norm.typeId]: 'snorm8x2',\r\n [typeI8Vec4_Norm.typeId]: 'snorm8x4',\r\n [typeU16Vec2.typeId]: 'uint16x2',\r\n [typeU16Vec4.typeId]: 'uint16x4',\r\n [typeI16Vec2.typeId]: 'sint16x2',\r\n [typeI16Vec4.typeId]: 'sint16x4',\r\n [typeU16Vec2_Norm.typeId]: 'unorm16x2',\r\n [typeU16Vec4_Norm.typeId]: 'unorm16x4',\r\n [typeI16Vec2_Norm.typeId]: 'snorm16x2',\r\n [typeI16Vec4_Norm.typeId]: 'snorm16x4',\r\n [typeF16Vec2.typeId]: 'float16x2',\r\n [typeF16Vec4.typeId]: 'float16x4',\r\n [typeF32.typeId]: 'float32',\r\n [typeF32Vec2.typeId]: 'float32x2',\r\n [typeF32Vec3.typeId]: 'float32x3',\r\n [typeF32Vec4.typeId]: 'float32x4',\r\n [typeU32.typeId]: 'uint32',\r\n [typeU32Vec2.typeId]: 'uint32x2',\r\n [typeU32Vec3.typeId]: 'uint32x3',\r\n [typeU32Vec4.typeId]: 'uint32x4',\r\n [typeI32.typeId]: 'sint32',\r\n [typeI32Vec2.typeId]: 'sint32x2',\r\n [typeI32Vec3.typeId]: 'sint32x3',\r\n [typeI32Vec4.typeId]: 'sint32x4'\r\n};\r\n\r\nexport class WebGPUStructuredBuffer extends WebGPUBuffer implements StructuredBuffer {\r\n private _structure: PBStructTypeInfo;\r\n private _data: StructuredBufferData;\r\n constructor(device: WebGPUDevice, structure: PBStructTypeInfo, usage: number, source?: TypedArray) {\r\n if (!structure?.isStructType()) {\r\n throw new Error('invalid structure type');\r\n }\r\n if (usage & GPUResourceUsageFlags.BF_INDEX) {\r\n throw new Error('structured buffer must not have Index usage flag');\r\n }\r\n if (\r\n usage &\r\n (GPUResourceUsageFlags.BF_READ |\r\n GPUResourceUsageFlags.BF_WRITE |\r\n GPUResourceUsageFlags.BF_PACK_PIXEL |\r\n GPUResourceUsageFlags.BF_UNPACK_PIXEL)\r\n ) {\r\n throw new Error('structured buffer must not have Read or Write usage flags');\r\n }\r\n if (usage & GPUResourceUsageFlags.BF_VERTEX) {\r\n if (structure.structMembers.length !== 1 || !structure.structMembers[0].type.isArrayType()) {\r\n throw new Error('structured buffer for vertex usage must have only one array member');\r\n }\r\n }\r\n if (usage & GPUResourceUsageFlags.BF_UNIFORM || usage & GPUResourceUsageFlags.BF_STORAGE) {\r\n usage |= GPUResourceUsageFlags.DYNAMIC;\r\n }\r\n const layout = structure.toBufferLayout(0, structure.layout);\r\n if (source && layout.byteSize !== source.byteLength) {\r\n throw new Error(\r\n `create structured buffer failed: invalid source size: ${source.byteLength}, should be ${layout.byteSize}`\r\n );\r\n }\r\n super(device, usage, source || layout.byteSize);\r\n this._data = new StructuredBufferData(layout, this);\r\n this._structure = structure;\r\n }\r\n set(name: string, value: StructuredValue) {\r\n this._data.set(name, value);\r\n }\r\n get structure(): Immutable<PBStructTypeInfo> {\r\n return this._structure;\r\n }\r\n set structure(st: PBStructTypeInfo) {\r\n if (st && !st.isCompatibleType(this._structure)) {\r\n const layout = st.toBufferLayout(0, st.layout);\r\n if (layout.byteSize > this.byteLength) {\r\n throw new Error(`set structure type failed: new structure type is too large: ${layout.byteSize}`);\r\n }\r\n this._data = new StructuredBufferData(layout, this);\r\n this._structure = st;\r\n }\r\n }\r\n static getGPUVertexFormat(type: PBTypeInfo) {\r\n return vertexFormatTable[type.typeId];\r\n }\r\n}\r\n","import type {\r\n BufferCreationOptions,\r\n StructuredValue,\r\n TextureVideo,\r\n PBStructTypeInfo,\r\n BindGroupLayout,\r\n BaseTexture,\r\n TextureSampler,\r\n BindGroup,\r\n BindGroupLayoutEntry,\r\n GPUDataBuffer\r\n} from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUStructuredBuffer } from './structuredbuffer_webgpu';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUTextureVideo } from './texturevideo_webgpu';\r\nimport type { WebGPUTextureSampler } from './sampler_webgpu';\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport type { Immutable, Nullable, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUBuffer } from './buffer_webgpu';\r\n\r\nexport class WebGPUBindGroup extends WebGPUObject<unknown> implements BindGroup {\r\n private readonly _layout: Immutable<BindGroupLayout>;\r\n private _layoutDesc: Nullable<GPUBindGroupLayoutDescriptor>;\r\n private _entries: Nullable<GPUBindGroupEntry[]>;\r\n private _bindGroup: Nullable<GPUBindGroup>;\r\n private _buffers: WebGPUBuffer[];\r\n private _textures: WebGPUBaseTexture[];\r\n private _createdBuffers: WebGPUBuffer[];\r\n private _gpuId: number;\r\n private _videoTextures: Nullable<WebGPUTextureVideo[]>;\r\n private _dynamicOffsets: Nullable<number[]>;\r\n private _resources: {\r\n [name: string]:\r\n | [WebGPUBuffer, number, number]\r\n | WebGPUTextureVideo\r\n | [WebGPUBaseTexture, Nullable<GPUTextureView>]\r\n | GPUSampler;\r\n };\r\n constructor(device: WebGPUDevice, layout: Immutable<BindGroupLayout>) {\r\n super(device);\r\n this._device = device;\r\n this._layout = layout;\r\n this._layoutDesc = null;\r\n this._entries = null;\r\n this._bindGroup = null;\r\n this._dynamicOffsets = null;\r\n this._gpuId = 0;\r\n this._resources = {};\r\n this._buffers = [];\r\n this._textures = [];\r\n this._createdBuffers = [];\r\n this._videoTextures = null;\r\n for (const entry of this._layout.entries) {\r\n if (entry.buffer && entry.buffer.hasDynamicOffset) {\r\n if (!this._dynamicOffsets) {\r\n this._dynamicOffsets = [];\r\n }\r\n this._dynamicOffsets[entry.buffer.dynamicOffsetIndex] = 0;\r\n }\r\n }\r\n }\r\n get bindGroup() {\r\n if (!this._bindGroup) {\r\n this._bindGroup = this._create();\r\n }\r\n return this._bindGroup;\r\n }\r\n get layoutDescriptor() {\r\n if (!this._bindGroup) {\r\n this._bindGroup = this._create();\r\n }\r\n return this._layoutDesc;\r\n }\r\n get entries() {\r\n if (!this._bindGroup) {\r\n this._bindGroup = this._create();\r\n }\r\n return this._entries;\r\n }\r\n getGPUId() {\r\n return `${this._uid}:${this._gpuId}`;\r\n }\r\n get bufferList() {\r\n return this._buffers;\r\n }\r\n get textureList() {\r\n return this._textures;\r\n }\r\n invalidate() {\r\n this._bindGroup = null;\r\n this._gpuId++;\r\n }\r\n getLayout(): Immutable<BindGroupLayout> {\r\n return this._layout;\r\n }\r\n getDynamicOffsets(): Nullable<Immutable<number[]>> {\r\n return this._dynamicOffsets;\r\n }\r\n getBuffer(name: string, nocreate = true) {\r\n return this._getBuffer(\r\n name,\r\n GPUResourceUsageFlags.BF_UNIFORM | GPUResourceUsageFlags.BF_STORAGE,\r\n nocreate\r\n );\r\n }\r\n setBuffer(name: string, buffer: GPUDataBuffer, offset?: number, bindOffset?: number, bindSize?: number) {\r\n const bindName = this._layout.nameMap?.[name] ?? name;\r\n for (const entry of this._layout.entries) {\r\n if (entry.name === bindName) {\r\n if (!entry.buffer) {\r\n console.error(`setBuffer() failed: resource '${name}' is not buffer`);\r\n } else {\r\n bindOffset = bindOffset ?? 0;\r\n bindSize = bindSize ?? (buffer ? Math.max(0, buffer.byteLength - bindOffset) : 0);\r\n const info = this._resources[entry.name] as [WebGPUBuffer, number, number];\r\n const bufferUsage =\r\n entry.buffer.type === 'uniform'\r\n ? GPUResourceUsageFlags.BF_UNIFORM\r\n : GPUResourceUsageFlags.BF_STORAGE;\r\n if (!buffer || !(buffer.usage & bufferUsage)) {\r\n console.error(\r\n `setBuffer() failed: buffer resource '${name}' must be type '${entry.buffer.type}'`\r\n );\r\n } else if (buffer !== info?.[0] || bindOffset !== info?.[1] || bindSize !== info?.[2]) {\r\n this._resources[entry.name] = [buffer as WebGPUBuffer, bindOffset, bindSize];\r\n this.invalidate();\r\n }\r\n if (entry.buffer.hasDynamicOffset) {\r\n this._dynamicOffsets![entry.buffer.dynamicOffsetIndex] = offset ?? 0;\r\n }\r\n }\r\n return;\r\n }\r\n }\r\n console.error(`setBuffer() failed: no buffer resource named '${name}'`);\r\n }\r\n setValue(name: string, value: StructuredValue) {\r\n const mappedName = this._layout.nameMap?.[name];\r\n if (mappedName) {\r\n this.setValue(mappedName, { [name]: value });\r\n } else {\r\n const buffer = this._getBuffer(\r\n name,\r\n GPUResourceUsageFlags.BF_UNIFORM | GPUResourceUsageFlags.BF_STORAGE,\r\n false\r\n );\r\n if (buffer) {\r\n if (!(buffer instanceof WebGPUStructuredBuffer)) {\r\n throw new Error(`BindGroup.setValue() failed: '${name}' is not structured buffer`);\r\n }\r\n if (typeof value === 'number') {\r\n throw new Error(`BindGroup.setValue() failed: cannot set ${value} to '${name}'`);\r\n }\r\n if ('BYTES_PER_ELEMENT' in value) {\r\n buffer.bufferSubData(0, value as TypedArray);\r\n } else {\r\n for (const k in value) {\r\n buffer.set(k, value[k]);\r\n }\r\n }\r\n } else {\r\n console.error(`setValue() failed: no uniform buffer named '${name}'`);\r\n }\r\n }\r\n }\r\n setRawData(name: string, byteOffset: number, data: TypedArray, srcPos?: number, srcLength?: number) {\r\n const mappedName = this._layout.nameMap?.[name];\r\n if (mappedName) {\r\n this.setRawData(mappedName, byteOffset, data, srcPos, srcLength);\r\n } else {\r\n const buffer = this._getBuffer(\r\n name,\r\n GPUResourceUsageFlags.BF_UNIFORM | GPUResourceUsageFlags.BF_STORAGE,\r\n false\r\n );\r\n if (buffer) {\r\n buffer.bufferSubData(byteOffset, data, srcPos, srcLength);\r\n } else {\r\n console.error(`set(): no uniform buffer named '${name}'`);\r\n }\r\n }\r\n }\r\n getTexture(name: string) {\r\n const entry = this._findTextureLayout(name);\r\n if (entry) {\r\n const t = this._resources[name] as [WebGPUBaseTexture, GPUTextureView];\r\n return t ? t[0] : null;\r\n } else {\r\n throw new Error(`getTexture() failed:${name} is not a texture`);\r\n }\r\n }\r\n setTextureView(\r\n name: string,\r\n value: BaseTexture,\r\n level?: number,\r\n face?: number,\r\n mipCount?: number,\r\n sampler?: Nullable<TextureSampler>\r\n ) {\r\n if (!value) {\r\n throw new Error(`WebGPUBindGroup.setTextureView() failed: invalid texture uniform value: ${value}`);\r\n } else {\r\n const entry = this._findTextureLayout(name);\r\n if (entry) {\r\n if (entry.externalTexture) {\r\n throw new Error(`WebGPUBindGroup.setTextureView() failed: video texture does not have view`);\r\n } else if (value.isTextureVideo()) {\r\n throw new Error(`WebGPUBindGroup.setTextureView() failed: invalid texture type`);\r\n }\r\n const t = this._resources[name] as [WebGPUBaseTexture, GPUTextureView];\r\n const view = (value as WebGPUBaseTexture).getView(level, face, mipCount);\r\n if (!t || t[1] !== view) {\r\n this._resources[name] = [value as WebGPUBaseTexture, view];\r\n this.invalidate();\r\n }\r\n if (entry.texture?.autoBindSampler) {\r\n const samplerEntry = this._findSamplerLayout(entry.texture.autoBindSampler);\r\n if (!samplerEntry || !samplerEntry.sampler) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTextureView() failed: sampler entry not found: ${entry.texture.autoBindSampler}`\r\n );\r\n }\r\n const s = (\r\n !sampler || sampler.compare ? value.getDefaultSampler(false) : sampler\r\n ) as WebGPUTextureSampler;\r\n if (s.object !== this._resources[entry.texture.autoBindSampler]) {\r\n this._resources[entry.texture.autoBindSampler] = s.object!;\r\n this.invalidate();\r\n }\r\n }\r\n if (entry.texture?.autoBindSamplerComparison) {\r\n const samplerEntry = this._findSamplerLayout(entry.texture.autoBindSamplerComparison);\r\n if (!samplerEntry || !samplerEntry.sampler) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTextureView() failed: sampler entry not found: ${entry.texture.autoBindSamplerComparison}`\r\n );\r\n }\r\n const s = (\r\n !sampler || !sampler.compare ? value.getDefaultSampler(true) : sampler\r\n ) as WebGPUTextureSampler;\r\n if (s.object !== this._resources[entry.texture.autoBindSamplerComparison]) {\r\n this._resources[entry.texture.autoBindSamplerComparison] = s.object!;\r\n this.invalidate();\r\n }\r\n }\r\n } else {\r\n throw new Error(`WebGPUBindGroup.setView() failed: no texture uniform named '${name}'`);\r\n }\r\n }\r\n }\r\n setTexture(name: string, value: BaseTexture | TextureVideo, sampler?: Nullable<TextureSampler>) {\r\n if (!value) {\r\n throw new Error(`WebGPUBindGroup.setTexture() failed: invalid texture uniform value: ${value}`);\r\n } else {\r\n const entry = this._findTextureLayout(name);\r\n if (entry) {\r\n const t = this._resources[name];\r\n if (entry.externalTexture) {\r\n if (!value.isTextureVideo()) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTexture() failed: invalid texture type of resource '${name}'`\r\n );\r\n }\r\n if (!t || t !== value) {\r\n if (t) {\r\n (t as WebGPUTextureVideo).removeBindGroupReference(this);\r\n }\r\n if (value) {\r\n (value as WebGPUTextureVideo).addBindGroupReference(this);\r\n }\r\n this._resources[name] = value as WebGPUTextureVideo;\r\n this.invalidate();\r\n this._videoTextures = [];\r\n for (const entry of this._layout.entries) {\r\n if (entry.externalTexture) {\r\n const tex = this._resources[entry.name] as WebGPUTextureVideo;\r\n if (tex && this._videoTextures.indexOf(tex) < 0) {\r\n this._videoTextures.push(tex);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n if (value.isTextureVideo()) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTexture() failed: invalid texture type of resource '${name}'`\r\n );\r\n }\r\n const view = (value as WebGPUBaseTexture).getDefaultView();\r\n if (!entry.externalTexture && !view) {\r\n throw new Error('WebGPUBindGroup.setTexture() failed: create texture view failed');\r\n }\r\n if (!t || (t as [WebGPUBaseTexture, Nullable<GPUTextureView>])[0] !== value) {\r\n this._resources[name] = [value as WebGPUBaseTexture, view];\r\n this.invalidate();\r\n }\r\n }\r\n const autoBindSampler = entry.texture?.autoBindSampler || entry.externalTexture?.autoBindSampler;\r\n if (autoBindSampler) {\r\n const samplerEntry = this._findSamplerLayout(autoBindSampler);\r\n if (!samplerEntry || !samplerEntry.sampler) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTexture() failed: sampler entry not found: ${autoBindSampler}`\r\n );\r\n }\r\n const s = (\r\n !sampler || sampler.compare ? value.getDefaultSampler(false) : sampler\r\n ) as WebGPUTextureSampler;\r\n if (s.object !== this._resources[autoBindSampler]) {\r\n this._resources[autoBindSampler] = s.object!;\r\n this.invalidate();\r\n }\r\n }\r\n const autoBindSamplerComparison = entry.texture?.autoBindSamplerComparison;\r\n if (autoBindSamplerComparison) {\r\n const samplerEntry = this._findSamplerLayout(autoBindSamplerComparison);\r\n if (!samplerEntry || !samplerEntry.sampler) {\r\n throw new Error(\r\n `WebGPUBindGroup.setTexture() failed: sampler entry not found: ${autoBindSamplerComparison}`\r\n );\r\n }\r\n const s = (\r\n !sampler || !sampler.compare ? value.getDefaultSampler(true) : sampler\r\n ) as WebGPUTextureSampler;\r\n if (s.object !== this._resources[autoBindSamplerComparison]) {\r\n this._resources[autoBindSamplerComparison] = s.object!;\r\n this.invalidate();\r\n }\r\n }\r\n } else {\r\n throw new Error(`WebGPUBindGroup.setTexture() failed: no texture uniform named '${name}'`);\r\n }\r\n }\r\n }\r\n setSampler(name: string, value: TextureSampler) {\r\n const sampler = (value as WebGPUTextureSampler)?.object;\r\n if (!sampler) {\r\n console.error(`WebGPUBindGroup.setSampler() failed: invalid sampler uniform value: ${value}`);\r\n } else if (this._resources[name] !== sampler) {\r\n if (!this._findSamplerLayout(name)) {\r\n console.error(`WebGPUBindGroup.setSampler() failed: no sampler uniform named '${name}'`);\r\n } else {\r\n this._resources[name] = sampler;\r\n this.invalidate();\r\n }\r\n }\r\n }\r\n destroy() {\r\n this.invalidate();\r\n this._resources = {};\r\n this._buffers = [];\r\n this._textures = [];\r\n this._videoTextures = null;\r\n this._object = null;\r\n for (const buffer of this._createdBuffers) {\r\n buffer.dispose();\r\n }\r\n this._createdBuffers = [];\r\n }\r\n restore() {\r\n this.invalidate();\r\n this._object = {};\r\n }\r\n isBindGroup(): this is BindGroup {\r\n return true;\r\n }\r\n /** @internal */\r\n updateVideoTextures() {\r\n this._videoTextures?.forEach((t) => {\r\n if (t.updateVideoFrame()) {\r\n this.invalidate();\r\n }\r\n });\r\n }\r\n /** @internal */\r\n private _findTextureLayout(name: string): Nullable<Immutable<BindGroupLayoutEntry>> {\r\n for (const entry of this._layout.entries) {\r\n if ((entry.texture || entry.storageTexture || entry.externalTexture) && entry.name === name) {\r\n return entry;\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private _findSamplerLayout(name: string): Nullable<Immutable<BindGroupLayoutEntry>> {\r\n for (const entry of this._layout.entries) {\r\n if (entry.sampler && entry.name === name) {\r\n return entry;\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private _getBuffer(name: string, usage: number, nocreate = false) {\r\n const info = this._getBufferInfo(name, usage, nocreate);\r\n return info?.[0] ?? null;\r\n }\r\n /** @internal */\r\n private _getBufferInfo(name: string, usage: number, nocreate = false) {\r\n const bindName = this._layout.nameMap?.[name] ?? name;\r\n for (const entry of this._layout.entries) {\r\n if (entry.buffer && entry.name === bindName) {\r\n const bufferUsage =\r\n entry.buffer.type === 'uniform'\r\n ? GPUResourceUsageFlags.BF_UNIFORM\r\n : GPUResourceUsageFlags.BF_STORAGE;\r\n if (!(usage & bufferUsage)) {\r\n return null;\r\n }\r\n let buffer = this._resources[entry.name] as [Nullable<WebGPUBuffer>, number, number];\r\n if (!nocreate && buffer?.[0]?.disposed) {\r\n buffer[0] = null;\r\n this.invalidate();\r\n }\r\n if ((!buffer || !buffer[0]) && !nocreate) {\r\n const options: BufferCreationOptions = {\r\n usage: bufferUsage === GPUResourceUsageFlags.BF_UNIFORM ? 'uniform' : undefined,\r\n storage: bufferUsage === GPUResourceUsageFlags.BF_STORAGE,\r\n dynamic: true\r\n };\r\n const gpuBuffer = this._device.createStructuredBuffer(\r\n entry.type as PBStructTypeInfo,\r\n options\r\n ) as WebGPUStructuredBuffer;\r\n buffer = [gpuBuffer, 0, gpuBuffer.byteLength];\r\n this._resources[entry.name] = buffer as [WebGPUBuffer, number, number];\r\n this._createdBuffers.push(gpuBuffer);\r\n }\r\n return buffer as [WebGPUBuffer, number, number];\r\n }\r\n }\r\n return null;\r\n }\r\n /** @internal */\r\n private _create() {\r\n let bindGroup: Nullable<GPUBindGroup> = null;\r\n this._layoutDesc = null;\r\n this._entries = null;\r\n this._textures = [];\r\n this._buffers = [];\r\n const entries = [] as GPUBindGroupEntry[];\r\n let resourceOk = true;\r\n for (const entry of this._layout.entries) {\r\n const ge = { binding: entry.binding } as GPUBindGroupEntry;\r\n if (entry.buffer) {\r\n const buffer = this._getBufferInfo(\r\n entry.name,\r\n entry.buffer.type === 'uniform'\r\n ? GPUResourceUsageFlags.BF_UNIFORM\r\n : GPUResourceUsageFlags.BF_STORAGE,\r\n true\r\n );\r\n if (!buffer) {\r\n throw new Error(\r\n `Uniform buffer '${entry.name}' not exists, maybe you forgot settings some uniform values`\r\n );\r\n }\r\n if (this._buffers.indexOf(buffer[0]) < 0) {\r\n this._buffers.push(buffer[0]);\r\n }\r\n ge.resource = {\r\n buffer: buffer[0].object!,\r\n offset: buffer[1],\r\n size: buffer[2]\r\n };\r\n resourceOk = resourceOk && !!buffer[0].object;\r\n } else if (entry.texture || entry.storageTexture) {\r\n const t = this._resources[entry.name] as [WebGPUBaseTexture, GPUTextureView];\r\n if (!t) {\r\n console.error(`Missing texture in bind group: ${entry.name}`);\r\n resourceOk = false;\r\n } else {\r\n if (this._textures.indexOf(t[0]) < 0) {\r\n this._textures.push(t[0]);\r\n }\r\n ge.resource = t[1];\r\n resourceOk = resourceOk && !!t[1];\r\n }\r\n } else if (entry.externalTexture) {\r\n const t = this._resources[entry.name] as WebGPUTextureVideo;\r\n ge.resource = t.object!;\r\n resourceOk = resourceOk && !!t.object;\r\n } else if (entry.sampler) {\r\n const sampler = this._resources[entry.name] as GPUSampler;\r\n ge.resource = sampler;\r\n resourceOk = resourceOk && !!sampler;\r\n }\r\n entries.push(ge);\r\n }\r\n if (!resourceOk) {\r\n return null;\r\n }\r\n const [desc, layout] = this._device.fetchBindGroupLayout(this._layout);\r\n const descriptor: GPUBindGroupDescriptor = {\r\n layout: layout,\r\n entries\r\n };\r\n if (layout.label) {\r\n descriptor.label = `${layout.label}.bindgroup`;\r\n }\r\n bindGroup = this._device.gpuCreateBindGroup(descriptor);\r\n if (!bindGroup) {\r\n console.error('Create bindgroup failed');\r\n }\r\n this._layoutDesc = desc;\r\n this._entries = entries;\r\n return bindGroup;\r\n }\r\n}\r\n","import type { Nullable } from '@zephyr3d/base';\r\nimport type {\r\n TextureFormat,\r\n CompareFunc,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n PrimitiveType,\r\n BlendEquation,\r\n BlendFunc,\r\n FaceMode,\r\n FaceWinding,\r\n StencilOp\r\n} from '@zephyr3d/device';\r\n\r\nexport const textureWrappingMap: Record<TextureAddressMode, GPUAddressMode> = {\r\n repeat: 'repeat',\r\n 'mirrored-repeat': 'mirror-repeat',\r\n clamp: 'clamp-to-edge'\r\n};\r\n\r\nexport const textureFilterMap: Record<TextureFilterMode, GPUFilterMode | undefined> = {\r\n nearest: 'nearest',\r\n linear: 'linear',\r\n none: undefined\r\n};\r\n\r\nexport const compareFuncMap: Record<CompareFunc, GPUCompareFunction> = {\r\n always: 'always',\r\n le: 'less-equal',\r\n ge: 'greater-equal',\r\n lt: 'less',\r\n gt: 'greater',\r\n eq: 'equal',\r\n ne: 'not-equal',\r\n never: 'never'\r\n};\r\n\r\nexport const stencilOpMap: Record<StencilOp, GPUStencilOperation> = {\r\n keep: 'keep',\r\n replace: 'replace',\r\n zero: 'zero',\r\n invert: 'invert',\r\n incr: 'increment-clamp',\r\n decr: 'decrement-clamp',\r\n 'incr-wrap': 'increment-wrap',\r\n 'decr-wrap': 'decrement-wrap'\r\n};\r\n\r\nexport const primitiveTypeMap: Record<PrimitiveType, Nullable<GPUPrimitiveTopology>> = {\r\n 'triangle-list': 'triangle-list',\r\n 'triangle-strip': 'triangle-strip',\r\n 'triangle-fan': null,\r\n 'line-list': 'line-list',\r\n 'line-strip': 'line-strip',\r\n 'point-list': 'point-list'\r\n};\r\n\r\nexport const faceWindingMap: Record<FaceWinding, GPUFrontFace> = {\r\n ccw: 'ccw',\r\n cw: 'cw'\r\n};\r\n\r\nexport const faceModeMap: Record<FaceMode, GPUCullMode> = {\r\n back: 'back',\r\n front: 'front',\r\n none: 'none'\r\n};\r\n\r\nexport const blendEquationMap: Record<BlendEquation, GPUBlendOperation> = {\r\n add: 'add',\r\n subtract: 'subtract',\r\n 'reverse-subtract': 'reverse-subtract',\r\n min: 'min',\r\n max: 'max'\r\n};\r\n\r\nexport const blendFuncMap: Record<BlendFunc, GPUBlendFactor> = {\r\n 'const-color': 'constant',\r\n 'const-alpha': 'constant',\r\n 'dst-color': 'dst',\r\n 'dst-alpha': 'dst-alpha',\r\n 'inv-const-color': 'one-minus-constant',\r\n 'inv-const-alpha': 'one-minus-constant',\r\n 'inv-dst-color': 'one-minus-dst',\r\n 'inv-dst-alpha': 'one-minus-dst-alpha',\r\n 'src-color': 'src',\r\n 'src-alpha': 'src-alpha',\r\n 'inv-src-color': 'one-minus-src',\r\n 'inv-src-alpha': 'one-minus-src-alpha',\r\n 'src-alpha-saturate': 'src-alpha-saturated',\r\n one: 'one',\r\n zero: 'zero'\r\n};\r\n\r\nexport const vertexFormatToHash: Record<string, string> = {\r\n float32: '0',\r\n float32x2: '1',\r\n float32x3: '2',\r\n float32x4: '3',\r\n uint32: '4',\r\n uint32x2: '5',\r\n uint32x3: '6',\r\n uint32x4: '7',\r\n sint32: '8',\r\n sint32x2: '9',\r\n sint32x3: 'a',\r\n sint32x4: 'b',\r\n uint16x2: 'c',\r\n uint16x4: 'd',\r\n unorm16x2: 'e',\r\n unorm16x4: 'f',\r\n sint16x2: 'g',\r\n sint16x4: 'h',\r\n snorm16x2: 'i',\r\n snorm16x4: 'j',\r\n uint8x2: 'k',\r\n uint8x4: 'l',\r\n unorm8x2: 'm',\r\n unorm8x4: 'n',\r\n sint8x2: 'o',\r\n sint8x4: 'p',\r\n snorm8x2: 'q',\r\n snorm8x4: 'r'\r\n};\r\n\r\nexport const textureFormatMap: Record<TextureFormat, GPUTextureFormat> = {\r\n ['rgba8unorm']: 'rgba8unorm',\r\n ['rgba8snorm']: 'rgba8snorm',\r\n ['bgra8unorm']: 'bgra8unorm',\r\n ['dxt1']: 'bc1-rgba-unorm',\r\n ['dxt3']: 'bc2-rgba-unorm',\r\n ['dxt5']: 'bc3-rgba-unorm',\r\n ['dxt1-srgb']: 'bc1-rgba-unorm-srgb',\r\n ['dxt3-srgb']: 'bc2-rgba-unorm-srgb',\r\n ['dxt5-srgb']: 'bc3-rgba-unorm-srgb',\r\n ['bc4']: 'bc4-r-unorm',\r\n ['bc4-signed']: 'bc4-r-snorm',\r\n ['bc5']: 'bc5-rg-unorm',\r\n ['bc5-signed']: 'bc5-rg-snorm',\r\n ['bc6h']: 'bc6h-rgb-ufloat',\r\n ['bc6h-signed']: 'bc6h-rgb-float',\r\n ['bc7']: 'bc7-rgba-unorm',\r\n ['bc7-srgb']: 'bc7-rgba-unorm-srgb',\r\n ['astc-4x4']: 'astc-4x4-unorm',\r\n ['astc-4x4-srgb']: 'astc-4x4-unorm-srgb',\r\n ['astc-5x4']: 'astc-5x4-unorm',\r\n ['astc-5x4-srgb']: 'astc-5x4-unorm-srgb',\r\n ['astc-5x5']: 'astc-5x5-unorm',\r\n ['astc-5x5-srgb']: 'astc-5x5-unorm-srgb',\r\n ['astc-6x5']: 'astc-6x5-unorm',\r\n ['astc-6x5-srgb']: 'astc-6x5-unorm-srgb',\r\n ['astc-6x6']: 'astc-6x6-unorm',\r\n ['astc-6x6-srgb']: 'astc-6x6-unorm-srgb',\r\n ['astc-8x5']: 'astc-8x5-unorm',\r\n ['astc-8x5-srgb']: 'astc-8x5-unorm-srgb',\r\n ['astc-8x6']: 'astc-8x6-unorm',\r\n ['astc-8x6-srgb']: 'astc-8x6-unorm-srgb',\r\n ['astc-8x8']: 'astc-8x8-unorm',\r\n ['astc-8x8-srgb']: 'astc-8x8-unorm-srgb',\r\n ['astc-10x5']: 'astc-10x5-unorm',\r\n ['astc-10x5-srgb']: 'astc-10x5-unorm-srgb',\r\n ['astc-10x6']: 'astc-10x6-unorm',\r\n ['astc-10x6-srgb']: 'astc-10x6-unorm-srgb',\r\n ['astc-10x8']: 'astc-10x8-unorm',\r\n ['astc-10x8-srgb']: 'astc-10x8-unorm-srgb',\r\n ['astc-10x10']: 'astc-10x10-unorm',\r\n ['astc-10x10-srgb']: 'astc-10x10-unorm-srgb',\r\n ['astc-12x10']: 'astc-12x10-unorm',\r\n ['astc-12x10-srgb']: 'astc-12x10-unorm-srgb',\r\n ['astc-12x12']: 'astc-12x12-unorm',\r\n ['astc-12x12-srgb']: 'astc-12x12-unorm-srgb',\r\n ['r8unorm']: 'r8unorm',\r\n ['r8snorm']: 'r8snorm',\r\n ['r16f']: 'r16float',\r\n ['r32f']: 'r32float',\r\n ['r8ui']: 'r8uint',\r\n ['r8i']: 'r8sint',\r\n ['r16ui']: 'r16uint',\r\n ['r16i']: 'r16sint',\r\n ['r32ui']: 'r32uint',\r\n ['r32i']: 'r32sint',\r\n ['rg8unorm']: 'rg8unorm',\r\n ['rg8snorm']: 'rg8snorm',\r\n ['rg16f']: 'rg16float',\r\n ['rg32f']: 'rg32float',\r\n ['rg8ui']: 'rg8uint',\r\n ['rg8i']: 'rg8sint',\r\n ['rg16ui']: 'rg16uint',\r\n ['rg16i']: 'rg16sint',\r\n ['rg32ui']: 'rg32uint',\r\n ['rg32i']: 'rg32sint',\r\n ['rgba8unorm-srgb']: 'rgba8unorm-srgb',\r\n ['bgra8unorm-srgb']: 'bgra8unorm-srgb',\r\n ['rgba16f']: 'rgba16float',\r\n ['rgba32f']: 'rgba32float',\r\n ['rgba8ui']: 'rgba8uint',\r\n ['rgba8i']: 'rgba8sint',\r\n ['rgba16ui']: 'rgba16uint',\r\n ['rgba16i']: 'rgba16sint',\r\n ['rgba32ui']: 'rgba32uint',\r\n ['rgba32i']: 'rgba32sint',\r\n ['rg11b10uf']: 'rg11b10ufloat',\r\n ['d16']: 'depth16unorm',\r\n ['d24']: 'depth24plus',\r\n ['d32f']: 'depth32float',\r\n ['d32fs8']: 'depth32float-stencil8',\r\n ['d24s8']: 'depth24plus-stencil8'\r\n};\r\n\r\nfunction zip<K = string>(keys: string[], values: K[]): Record<string, K> {\r\n const ret: Record<string, K> = {};\r\n const len = keys.length;\r\n for (let i = 0; i < len; i++) {\r\n ret[keys[i]] = values[i];\r\n }\r\n return ret;\r\n}\r\n\r\nexport const textureFormatInvMap = zip<TextureFormat>(\r\n Object.values(textureFormatMap),\r\n Object.keys(textureFormatMap) as TextureFormat[]\r\n);\r\n\r\nexport const hashToVertexFormat: Record<string, string> = zip(\r\n Object.values(vertexFormatToHash),\r\n Object.keys(vertexFormatToHash)\r\n);\r\n","import type { Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport type { WebGPURenderStateSet } from './renderstates_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { FrameBufferInfo } from './pipeline_cache';\r\nimport type { WebGPURenderPass } from './renderpass_webgpu';\r\n\r\nexport class WebGPUClearQuad {\r\n private static _clearPrograms: { [hash: string]: { program: WebGPUProgram; bindGroup: WebGPUBindGroup } } =\r\n {};\r\n private static _clearStateSet: Nullable<WebGPURenderStateSet> = null;\r\n private static readonly _defaultClearColor = new Vector4(0, 0, 0, 1);\r\n\r\n static drawClearQuad(\r\n renderPass: WebGPURenderPass,\r\n clearColor: Nullable<Float32Array<ArrayBuffer>>,\r\n clearDepth: Nullable<number>,\r\n clearStencil: Nullable<number>\r\n ) {\r\n if (!this._clearStateSet) {\r\n this.initClearQuad(renderPass);\r\n }\r\n const hash = renderPass.getFrameBufferInfo().clearHash;\r\n const program = this.getClearProgram(renderPass.getDevice(), hash);\r\n const bClearColor = !!clearColor;\r\n const bClearDepth = !(clearDepth === null || clearDepth === undefined);\r\n const bClearStencil = !(clearStencil === null || clearStencil === undefined);\r\n program.bindGroup.setValue('clearDepth', clearDepth ?? 1);\r\n program.bindGroup.setValue('clearColor', clearColor ?? this._defaultClearColor);\r\n this._clearStateSet!.useDepthState().enableWrite(bClearDepth);\r\n this._clearStateSet!.useColorState().setColorMask(bClearColor, bClearColor, bClearColor, bClearColor);\r\n this._clearStateSet!.useStencilState()\r\n .enable(bClearStencil)\r\n .setReference(bClearStencil ? clearStencil : 0);\r\n renderPass\r\n .getDevice()\r\n .commandQueue.draw(\r\n program.program,\r\n null,\r\n this._clearStateSet!,\r\n [program.bindGroup],\r\n null,\r\n 'triangle-strip',\r\n 0,\r\n 4,\r\n 1\r\n );\r\n }\r\n private static getClearProgram(device: WebGPUDevice, hash: string) {\r\n let programInfo = this._clearPrograms[hash];\r\n if (!programInfo) {\r\n const colorAttachments = hash.split('');\r\n const program = device.buildRenderProgram({\r\n label: `ClearQuad-${hash}`,\r\n vertex(pb) {\r\n this.clearDepth = pb.float().uniform(0);\r\n this.coords = [pb.vec2(-1, 1), pb.vec2(1, 1), pb.vec2(-1, -1), pb.vec2(1, -1)];\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.coords.at(this.$builtins.vertexIndex), this.clearDepth, 1);\r\n });\r\n },\r\n fragment(pb) {\r\n this.clearColor = pb.vec4().uniform(0);\r\n if (colorAttachments.length === 0) {\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$outputs.outColor = this.clearColor;\r\n });\r\n } else {\r\n for (let i = 0; i < colorAttachments.length; i++) {\r\n this.$outputs[`outColor${i}`] =\r\n colorAttachments[i] === 'f'\r\n ? pb.vec4()\r\n : colorAttachments[i] === 'i'\r\n ? pb.ivec4()\r\n : pb.uvec4();\r\n }\r\n pb.main(function () {\r\n for (let i = 0; i < colorAttachments.length; i++) {\r\n this.$outputs[`outColor${i}`] =\r\n colorAttachments[i] === 'f'\r\n ? this.clearColor\r\n : colorAttachments[i] === 'i'\r\n ? pb.ivec4(this.clearColor)\r\n : pb.uvec4(this.clearColor);\r\n }\r\n });\r\n }\r\n }\r\n }) as WebGPUProgram;\r\n const bindGroup = device.createBindGroup(program.bindGroupLayouts[0]) as WebGPUBindGroup;\r\n programInfo = {\r\n program,\r\n bindGroup\r\n };\r\n this._clearPrograms[hash] = programInfo;\r\n }\r\n return programInfo;\r\n }\r\n private static initClearQuad(renderPass: WebGPURenderPass) {\r\n this._clearStateSet = renderPass.getDevice().createRenderStateSet() as unknown as WebGPURenderStateSet;\r\n this._clearStateSet.useDepthState().enableTest(false);\r\n this._clearStateSet.useRasterizerState().setCullMode('none');\r\n this._clearStateSet\r\n .useStencilState()\r\n .enable(true)\r\n .setFrontOp('replace', 'replace', 'replace')\r\n .setBackOp('replace', 'replace', 'replace')\r\n .setFrontCompareFunc('always')\r\n .setBackCompareFunc('always');\r\n }\r\n}\r\n\r\nexport class WebGPUMipmapGenerator {\r\n static _frameBufferInfo: Nullable<FrameBufferInfo> = null;\r\n static _mipmapGenerationProgram: Nullable<WebGPUProgram> = null;\r\n static _mipmapGenerationStateSet: Nullable<WebGPURenderStateSet> = null;\r\n static getMipmapGenerationBindGroupLayout(device: WebGPUDevice) {\r\n if (!this._mipmapGenerationProgram) {\r\n this.initMipmapGeneration(device);\r\n }\r\n return this._mipmapGenerationProgram!.bindGroupLayouts[0];\r\n }\r\n static generateMipmap(device: WebGPUDevice, tex: WebGPUBaseTexture, cmdEncoder?: GPUCommandEncoder) {\r\n if (!tex.isRenderable()) {\r\n return;\r\n }\r\n if (!this._mipmapGenerationProgram) {\r\n this.initMipmapGeneration(device);\r\n }\r\n const encoder = cmdEncoder ?? device.device.createCommandEncoder();\r\n const miplevels = tex.mipLevelCount;\r\n const numLayers = tex.isTextureCube() ? 6 : tex.isTexture2DArray() ? tex.depth : 1;\r\n tex.setMipmapDirty(false);\r\n for (let face = 0; face < numLayers; face++) {\r\n for (let level = 1; level < miplevels; level++) {\r\n this.generateMiplevel(device, encoder, tex, tex.object!, tex.gpuFormat!, level, level, face);\r\n }\r\n }\r\n if (!cmdEncoder) {\r\n device.device.queue.submit([encoder.finish()]);\r\n }\r\n }\r\n static generateMipmapsForBindGroups(device: WebGPUDevice, bindGroups: WebGPUBindGroup[]) {\r\n for (const bindGroup of bindGroups) {\r\n if (bindGroup) {\r\n for (const tex of bindGroup.textureList) {\r\n if (!tex.disposed && tex.isMipmapDirty()) {\r\n WebGPUMipmapGenerator.generateMipmap(device, tex);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n private static generateMiplevel(\r\n device: WebGPUDevice,\r\n commandEncoder: GPUCommandEncoder,\r\n srcTex: WebGPUBaseTexture,\r\n dstTex: GPUTexture,\r\n format: GPUTextureFormat,\r\n dstLevel: number,\r\n srcLevel: number,\r\n face: number\r\n ) {\r\n const renderPassEncoder = this.beginMipmapGenerationPass(commandEncoder, dstTex, format, dstLevel, face);\r\n renderPassEncoder.setBindGroup(0, srcTex.getMipmapGenerationBindGroup(srcLevel, face).bindGroup);\r\n const pipeline = device.pipelineCache.fetchRenderPipeline(\r\n this._mipmapGenerationProgram!,\r\n null,\r\n this._mipmapGenerationStateSet!,\r\n 'triangle-strip',\r\n this._frameBufferInfo!\r\n );\r\n if (pipeline) {\r\n renderPassEncoder.setPipeline(pipeline);\r\n renderPassEncoder.draw(4, 1, 0);\r\n }\r\n renderPassEncoder.end();\r\n }\r\n private static beginMipmapGenerationPass(\r\n encoder: GPUCommandEncoder,\r\n texture: GPUTexture,\r\n format: GPUTextureFormat,\r\n level: number,\r\n face: number\r\n ) {\r\n const passDesc: GPURenderPassDescriptor = {\r\n colorAttachments: [\r\n {\r\n view: texture.createView({\r\n dimension: '2d',\r\n baseMipLevel: level || 0,\r\n mipLevelCount: 1,\r\n baseArrayLayer: face || 0,\r\n arrayLayerCount: 1\r\n }),\r\n loadOp: 'clear',\r\n clearValue: [0, 0, 0, 0],\r\n storeOp: 'store'\r\n }\r\n ]\r\n };\r\n this._frameBufferInfo = {\r\n frameBuffer: null,\r\n colorFormats: [format],\r\n depthFormat: null,\r\n sampleCount: 1,\r\n hash: null,\r\n clearHash: null\r\n } as unknown as FrameBufferInfo;\r\n this._frameBufferInfo.hash = `${this._frameBufferInfo.colorFormats.join('-')}:${\r\n this._frameBufferInfo.depthFormat\r\n }:${this._frameBufferInfo.sampleCount}`;\r\n const renderPassEncoder = encoder.beginRenderPass(passDesc);\r\n renderPassEncoder.insertDebugMarker('MipmapGeneration');\r\n return renderPassEncoder;\r\n }\r\n private static initMipmapGeneration(device: WebGPUDevice) {\r\n this._mipmapGenerationProgram = device.buildRenderProgram({\r\n label: 'MipmapGeneration',\r\n vertex(pb) {\r\n this.$outputs.outUV = pb.vec2();\r\n this.coords = [pb.vec2(-1, 1), pb.vec2(1, 1), pb.vec2(-1, -1), pb.vec2(1, -1)];\r\n this.uv = [pb.vec2(0, 0), pb.vec2(1, 0), pb.vec2(0, 1), pb.vec2(1, 1)];\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.coords.at(this.$builtins.vertexIndex), 0, 1);\r\n this.$outputs.outUV = this.uv.at(this.$builtins.vertexIndex);\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n this.tex = pb.tex2D().uniform(0);\r\n pb.main(function () {\r\n this.$outputs.color = pb.textureSampleLevel(this.tex, this.$inputs.outUV, 0);\r\n });\r\n }\r\n }) as WebGPUProgram;\r\n this._mipmapGenerationStateSet = device.createRenderStateSet() as WebGPURenderStateSet;\r\n this._mipmapGenerationStateSet.useDepthState().enableTest(false).enableWrite(false);\r\n this._mipmapGenerationStateSet.useRasterizerState().setCullMode('none');\r\n }\r\n}\r\n","/// <reference types=\"@webgpu/types\" />\r\n\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport type {\r\n SamplerOptions,\r\n BaseTexture,\r\n GPUDataBuffer,\r\n TextureType,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport {\r\n isCompressedTextureFormat,\r\n hasDepthChannel,\r\n isFloatTextureFormat,\r\n isIntegerTextureFormat,\r\n isSignedTextureFormat,\r\n getTextureFormatBlockWidth,\r\n getTextureFormatBlockHeight,\r\n getTextureFormatBlockSize,\r\n GPUResourceUsageFlags,\r\n isSRGBTextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { UploadTexture, UploadImage } from './uploadringbuffer';\r\nimport { UploadRingBuffer } from './uploadringbuffer';\r\nimport { textureFormatMap } from './constants_webgpu';\r\nimport type { Immutable, Nullable, RequireOptionals, TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUBuffer } from './buffer_webgpu';\r\nimport type { WebGPUTextureCaps, TextureFormatInfoWebGPU } from './capabilities_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport { WebGPUMipmapGenerator } from './utils_webgpu';\r\n\r\nexport abstract class WebGPUBaseTexture<\r\n T extends GPUTexture | GPUExternalTexture = GPUTexture\r\n> extends WebGPUObject<T> {\r\n protected _target: TextureType;\r\n protected _memCost: number;\r\n protected _views: GPUTextureView[][][];\r\n protected _defaultView: Nullable<GPUTextureView>;\r\n protected _mipmapDirty: boolean;\r\n protected _flags: number;\r\n protected _width: number;\r\n protected _height: number;\r\n protected _depth: number;\r\n protected _format: Nullable<TextureFormat>;\r\n protected _renderable: boolean;\r\n protected _fb: boolean;\r\n protected _gpuFormat: Nullable<GPUTextureFormat>;\r\n protected _mipLevelCount: number;\r\n protected _samplerOptions: Nullable<RequireOptionals<SamplerOptions>>;\r\n protected _ringBuffer: UploadRingBuffer;\r\n protected _mipBindGroups: WebGPUBindGroup[][];\r\n protected _pendingUploads: (UploadTexture | UploadImage)[];\r\n constructor(device: WebGPUDevice, target: TextureType) {\r\n super(device);\r\n this._target = target;\r\n this._flags = 0;\r\n this._width = 0;\r\n this._height = 0;\r\n this._depth = 0;\r\n this._renderable = false;\r\n this._fb = false;\r\n this._format = null;\r\n this._gpuFormat = null;\r\n this._mipLevelCount = 0;\r\n this._samplerOptions = null;\r\n this._memCost = 0;\r\n this._mipmapDirty = false;\r\n this._mipBindGroups = [];\r\n this._views = [];\r\n this._defaultView = null;\r\n this._ringBuffer = new UploadRingBuffer(device);\r\n this._pendingUploads = [];\r\n }\r\n get hash() {\r\n return this._object ? this._device.gpuGetObjectHash(this._object) : 0;\r\n }\r\n get target() {\r\n return this._target;\r\n }\r\n get width() {\r\n return this._width;\r\n }\r\n get height() {\r\n return this._height;\r\n }\r\n get depth() {\r\n return this._depth;\r\n }\r\n get memCost() {\r\n return this._memCost;\r\n }\r\n get format() {\r\n return this._format!;\r\n }\r\n get mipLevelCount() {\r\n return this._mipLevelCount;\r\n }\r\n get gpuFormat() {\r\n return this._gpuFormat;\r\n }\r\n get samplerOptions(): Nullable<Immutable<SamplerOptions>> {\r\n return this._samplerOptions;\r\n }\r\n set samplerOptions(options: Nullable<Immutable<SamplerOptions>>) {\r\n if (this._format) {\r\n const params = (this.getTextureCaps() as WebGPUTextureCaps).getTextureFormatInfo(this._format);\r\n this._samplerOptions = options\r\n ? Object.assign({}, this._getSamplerOptions(params, !!options.compare), options)\r\n : null;\r\n } else {\r\n console.error('Set sampler options failed: texture not initialized');\r\n }\r\n }\r\n abstract init(): void;\r\n abstract readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ): Promise<void>;\r\n abstract readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ): void;\r\n isTexture(): this is BaseTexture {\r\n return true;\r\n }\r\n isFilterable() {\r\n if (!this._format || !this.getTextureCaps().getTextureFormatInfo(this._format)?.filterable) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n /** @internal */\r\n clearPendingUploads() {\r\n if (this._pendingUploads.length > 0) {\r\n this._pendingUploads = [];\r\n this._ringBuffer.purge();\r\n }\r\n }\r\n isMipmapDirty() {\r\n return this._mipmapDirty;\r\n }\r\n setMipmapDirty(b: boolean) {\r\n this._mipmapDirty = b;\r\n }\r\n destroy() {\r\n if (this._object) {\r\n if (!this.isTextureVideo()) {\r\n (this._object as GPUTexture).destroy();\r\n }\r\n this._object = null;\r\n this._device.updateVideoMemoryCost(-this._memCost);\r\n this._memCost = 0;\r\n this._ringBuffer.purge();\r\n this._views = [];\r\n for (const face of this._mipBindGroups) {\r\n for (const level of face) {\r\n level?.dispose();\r\n }\r\n }\r\n this._mipBindGroups = [];\r\n }\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n this.init();\r\n }\r\n }\r\n getTextureCaps() {\r\n return this._device.getDeviceCaps().textureCaps;\r\n }\r\n isSRGBFormat() {\r\n return !!this._format && isSRGBTextureFormat(this._format);\r\n }\r\n isFloatFormat() {\r\n return !!this._format && isFloatTextureFormat(this._format);\r\n }\r\n isIntegerFormat() {\r\n return !!this._format && isIntegerTextureFormat(this._format);\r\n }\r\n isSignedFormat() {\r\n return !!this._format && isSignedTextureFormat(this._format);\r\n }\r\n isCompressedFormat() {\r\n return !!this._format && isCompressedTextureFormat(this._format);\r\n }\r\n isDepth() {\r\n return !!this._format && hasDepthChannel(this._format);\r\n }\r\n isRenderable() {\r\n return this._renderable;\r\n }\r\n getView(level?: number, face?: number, mipCount?: number) {\r\n level = Number(level) || 0;\r\n face = Number(face) || 0;\r\n mipCount = Number(mipCount) || 0;\r\n if (!this._views[face]) {\r\n this._views[face] = [];\r\n }\r\n if (!this._views[face][level]) {\r\n this._views[face][level] = [];\r\n }\r\n if (!this._views[face][level][mipCount]) {\r\n this._views[face][level][mipCount] = this.createView(level, face, mipCount)!;\r\n }\r\n return this._views[face][level][mipCount];\r\n }\r\n getDefaultView() {\r\n if (!this._defaultView && this._object && !this.isTextureVideo()) {\r\n this._defaultView = this._device.gpuCreateTextureView(this._object as GPUTexture, {\r\n dimension: this.isTextureCube()\r\n ? 'cube'\r\n : this.isTexture3D()\r\n ? '3d'\r\n : this.isTexture2DArray()\r\n ? '2d-array'\r\n : '2d',\r\n arrayLayerCount: this.isTextureCube() ? 6 : this.isTexture2DArray() ? this._depth : 1,\r\n aspect: hasDepthChannel(this.format) ? 'depth-only' : 'all'\r\n });\r\n }\r\n return this._defaultView;\r\n }\r\n copyPixelDataToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n level: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (this.isTextureVideo()) {\r\n throw new Error('copyPixelDataToBuffer() failed: can not copy pixel data of video texture');\r\n }\r\n this.sync();\r\n WebGPUBaseTexture.copyTexturePixelsToBuffer(\r\n this._device.device,\r\n this.object as GPUTexture,\r\n this.format,\r\n x,\r\n y,\r\n w,\r\n h,\r\n layer,\r\n level,\r\n buffer\r\n );\r\n }\r\n generateMipmaps() {\r\n this._mipmapDirty = true;\r\n this._device.textureUpload(this as WebGPUBaseTexture);\r\n }\r\n beginSyncChanges(encoder: Nullable<GPUCommandEncoder>) {\r\n if (!this.isTextureVideo() && this._pendingUploads.length > 0 && this._object) {\r\n const cmdEncoder = encoder || this._device.device.createCommandEncoder();\r\n for (const u of this._pendingUploads) {\r\n if ((u as UploadTexture).mappedBuffer) {\r\n const upload = u as UploadTexture;\r\n cmdEncoder.copyBufferToTexture(\r\n {\r\n buffer: upload.mappedBuffer.buffer,\r\n offset: upload.mappedBuffer.offset,\r\n bytesPerRow: upload.bufferStride,\r\n rowsPerImage: upload.uploadHeight\r\n },\r\n {\r\n texture: this._object as GPUTexture,\r\n origin: {\r\n x: upload.uploadOffsetX,\r\n y: upload.uploadOffsetY,\r\n z: upload.uploadOffsetZ\r\n },\r\n mipLevel: upload.mipLevel\r\n },\r\n {\r\n width: upload.uploadWidth,\r\n height: upload.uploadHeight,\r\n depthOrArrayLayers: upload.uploadDepth\r\n }\r\n );\r\n } else if ((u as UploadImage).image) {\r\n const upload = u as UploadImage;\r\n // FIXME: copy image cannot be queued into the command buffer\r\n const copyView: GPUImageCopyTextureTagged = {\r\n texture: this._object as GPUTexture,\r\n origin: {\r\n x: upload.offsetX,\r\n y: upload.offsetY,\r\n z: upload.offsetZ\r\n },\r\n mipLevel: upload.mipLevel,\r\n premultipliedAlpha: false\r\n };\r\n this._device.device.queue.copyExternalImageToTexture(\r\n {\r\n source: upload.image,\r\n origin: {\r\n x: upload.srcX,\r\n y: upload.srcY\r\n }\r\n },\r\n copyView,\r\n {\r\n width: upload.width,\r\n height: upload.height,\r\n depthOrArrayLayers: upload.depth\r\n }\r\n );\r\n }\r\n }\r\n this._pendingUploads.length = 0;\r\n if (!encoder) {\r\n this._device.device.queue.submit([cmdEncoder.finish()]);\r\n }\r\n this._ringBuffer.beginUploads();\r\n }\r\n }\r\n endSyncChanges() {\r\n if (this._flags & GPUResourceUsageFlags.DYNAMIC) {\r\n this._ringBuffer.endUploads();\r\n } else {\r\n this._ringBuffer.purge();\r\n }\r\n }\r\n getDefaultSampler(shadow: boolean) {\r\n const params = (this.getTextureCaps() as WebGPUTextureCaps).getTextureFormatInfo(this._format!);\r\n return this._device.createSampler(\r\n !this._samplerOptions || !this._samplerOptions.compare !== !shadow\r\n ? this._getSamplerOptions(params, shadow)\r\n : this._samplerOptions\r\n );\r\n }\r\n abstract createView(level?: number, face?: number, mipCount?: number): Nullable<GPUTextureView>;\r\n /** @internal */\r\n private sync() {\r\n this._device.flush();\r\n /*\r\n if (this._pendingUploads) {\r\n if (this._device.isTextureUploading(this as WebGPUBaseTexture)) {\r\n this._device.currentPass.end();\r\n } else {\r\n this.beginSyncChanges(null);\r\n this.endSyncChanges();\r\n }\r\n }\r\n */\r\n }\r\n /** @internal */\r\n protected _calcMipLevelCount(format: TextureFormat, width: number, height: number, _depth: number) {\r\n if (hasDepthChannel(format) || this.isTexture3D() || this.isTextureVideo()) {\r\n return 1;\r\n }\r\n if (this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP) {\r\n return 1;\r\n }\r\n const params = (this.getTextureCaps() as WebGPUTextureCaps).getTextureFormatInfo(format);\r\n if (!params || !params.renderable) {\r\n return 1;\r\n }\r\n return Math.floor(Math.log2(Math.max(width, height))) + 1;\r\n }\r\n /** @internal */\r\n protected allocInternal(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n if (this.isTextureVideo()) {\r\n return;\r\n }\r\n if (numMipLevels === 0) {\r\n numMipLevels = this._calcMipLevelCount(format, width, height, depth);\r\n } else if (numMipLevels !== 1) {\r\n let size = Math.max(width, height);\r\n if (this.isTexture3D()) {\r\n size = Math.max(size, depth);\r\n }\r\n const autoMipLevelCount = Math.floor(Math.log2(size)) + 1; //this._calcMipLevelCount(format, width, height, depth);\r\n //const autoMipLevelCount = this._calcMipLevelCount(format, width, height, depth);\r\n if (!Number.isInteger(numMipLevels) || numMipLevels < 0 || numMipLevels > autoMipLevelCount) {\r\n numMipLevels = autoMipLevelCount;\r\n }\r\n }\r\n if (\r\n this._object &&\r\n (this._format !== format || this._width !== width || this._height !== height || this._depth !== depth,\r\n this._mipLevelCount !== numMipLevels)\r\n ) {\r\n const obj = this._object;\r\n this._device.runNextFrame(() => {\r\n (obj as GPUTexture).destroy();\r\n });\r\n this._object = null;\r\n }\r\n if (!this._object) {\r\n this._format = format;\r\n this._width = width;\r\n this._height = height;\r\n this._depth = depth;\r\n this._mipLevelCount = numMipLevels;\r\n if (!this._device.isContextLost()) {\r\n this._gpuFormat = textureFormatMap[this._format];\r\n const params = (this.getTextureCaps() as WebGPUTextureCaps).getTextureFormatInfo(this._format);\r\n this._renderable = params.renderable && !(this._flags & GPUResourceUsageFlags.TF_WRITABLE);\r\n this._object = this._device.gpuCreateTexture({\r\n size: {\r\n width: this._width,\r\n height: this._height,\r\n depthOrArrayLayers: this.isTextureCube() ? 6 : this._depth\r\n },\r\n format: this._gpuFormat,\r\n mipLevelCount: this._mipLevelCount,\r\n sampleCount: 1,\r\n dimension: this.isTexture3D() ? '3d' : '2d',\r\n usage:\r\n GPUTextureUsage.TEXTURE_BINDING |\r\n GPUTextureUsage.COPY_DST |\r\n GPUTextureUsage.COPY_SRC |\r\n (this._renderable && !this.isTexture3D() ? GPUTextureUsage.RENDER_ATTACHMENT : 0) |\r\n (this._flags & GPUResourceUsageFlags.TF_WRITABLE ? GPUTextureUsage.STORAGE_BINDING : 0)\r\n }) as any;\r\n const memCost = (this.getTextureCaps() as WebGPUTextureCaps).calcMemoryUsage(\r\n this._format,\r\n this._width * this._height * (this.isTextureCube() ? 6 : this._depth)\r\n );\r\n this._device.updateVideoMemoryCost(memCost - this._memCost);\r\n this._memCost = memCost;\r\n }\r\n }\r\n }\r\n static calculateBufferSizeForCopy(width: number, height: number, format: TextureFormat) {\r\n const blockWidth = getTextureFormatBlockWidth(format);\r\n const blockHeight = getTextureFormatBlockHeight(format);\r\n const blockSize = getTextureFormatBlockSize(format);\r\n const blocksPerRow = Math.ceil(width / blockWidth);\r\n const blocksPerCol = Math.ceil(height / blockHeight);\r\n const rowStride = blocksPerRow * blockSize;\r\n const bufferStride = (rowStride + 255) & ~255;\r\n const size = blocksPerCol * rowStride;\r\n const sizeAligned = blocksPerCol * bufferStride;\r\n return { size, sizeAligned, strideAligned: bufferStride, stride: rowStride, numRows: blocksPerCol };\r\n }\r\n /** @internal */\r\n static copyTexturePixelsToBuffer(\r\n device: GPUDevice,\r\n texture: GPUTexture,\r\n format: TextureFormat,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n level: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (!((buffer as WebGPUBuffer).gpuUsage & GPUBufferUsage.COPY_DST)) {\r\n console.error(\r\n 'copyTexturePixelsToBuffer() failed: destination buffer does not have COPY_DST usage set'\r\n );\r\n return;\r\n }\r\n const { size, sizeAligned, stride, strideAligned, numRows } = this.calculateBufferSizeForCopy(\r\n w,\r\n h,\r\n format\r\n );\r\n if (buffer.byteLength < size) {\r\n console.error(\r\n `copyTexturePixelsToBuffer() failed: destination buffer size is ${buffer.byteLength}, should be at least ${size}`\r\n );\r\n return;\r\n }\r\n const tmpBuffer = device.createBuffer({\r\n size: sizeAligned,\r\n usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC\r\n });\r\n const encoder = device.createCommandEncoder();\r\n encoder.copyTextureToBuffer(\r\n {\r\n texture: texture,\r\n mipLevel: level ?? 0,\r\n origin: {\r\n x: x,\r\n y: y,\r\n z: layer ?? 0\r\n }\r\n },\r\n {\r\n buffer: tmpBuffer as GPUBuffer,\r\n offset: 0,\r\n bytesPerRow: strideAligned\r\n },\r\n {\r\n width: w,\r\n height: h,\r\n depthOrArrayLayers: 1\r\n }\r\n );\r\n if (size !== sizeAligned) {\r\n for (let i = 0; i < numRows; i++) {\r\n encoder.copyBufferToBuffer(\r\n tmpBuffer,\r\n i * strideAligned,\r\n buffer.object as GPUBuffer,\r\n i * stride,\r\n stride\r\n );\r\n }\r\n } else {\r\n encoder.copyBufferToBuffer(tmpBuffer, 0, buffer.object as GPUBuffer, 0, size);\r\n }\r\n device.queue.submit([encoder.finish()]);\r\n tmpBuffer.destroy();\r\n }\r\n /** @internal */\r\n protected uploadRaw(\r\n pixels: TypedArray,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n offsetX: number,\r\n offsetY: number,\r\n offsetZ: number,\r\n miplevel: number\r\n ) {\r\n if (this.isTextureVideo()) {\r\n console.error('BaseTexture.uploadRaw(): Cannot upload to video texture');\r\n return;\r\n }\r\n const data = new Uint8Array(pixels.buffer, pixels.byteOffset, pixels.byteLength);\r\n const info = (this.getTextureCaps() as WebGPUTextureCaps).getTextureFormatInfo(this._format!);\r\n const blockWidth = info.blockWidth || 1;\r\n const blockHeight = info.blockHeight || 1;\r\n const blocksPerRow = Math.ceil(width / blockWidth);\r\n const blocksPerCol = Math.ceil(height / blockHeight);\r\n const rowStride = blocksPerRow * info.size;\r\n if (rowStride * blocksPerCol * depth > data.byteLength) {\r\n throw new Error(`WebGPUTexture.update() invalid data size: ${data.byteLength}`);\r\n }\r\n if (!this._device.commandQueue.hasActiveWork() && !this._device.isTextureUploading(this as any)) {\r\n this.clearPendingUploads();\r\n const destination: GPUTexelCopyTextureInfo = {\r\n texture: this._object as GPUTexture,\r\n mipLevel: miplevel,\r\n origin: {\r\n x: offsetX,\r\n y: offsetY,\r\n z: offsetZ\r\n }\r\n };\r\n const dataLayout: GPUTexelCopyBufferLayout = {\r\n bytesPerRow: rowStride,\r\n rowsPerImage: blockHeight * blocksPerCol\r\n };\r\n const size: GPUExtent3D = {\r\n width: blockWidth * blocksPerRow,\r\n height: blockHeight * blocksPerCol,\r\n depthOrArrayLayers: depth\r\n };\r\n this._device.device.queue.writeTexture(destination, data, dataLayout, size);\r\n } else {\r\n this._device.textureUpload(this as WebGPUBaseTexture);\r\n const bufferStride = (rowStride + 255) & ~255; // align to 256 bytes\r\n const uploadSize = bufferStride * blocksPerCol * depth;\r\n const upload = this._ringBuffer.uploadBuffer(null, null, 0, 0, uploadSize);\r\n const mappedRange = upload.mappedBuffer.mappedRange!;\r\n const src = new Uint8Array(data);\r\n const dst = new Uint8Array(mappedRange, upload.mappedBuffer.offset, uploadSize);\r\n if (uploadSize === data.byteLength) {\r\n dst.set(new Uint8Array(data));\r\n } else {\r\n for (let d = 0; d < depth; d++) {\r\n const srcLayerOffset = d * rowStride * blocksPerRow;\r\n const dstLayerOffset = d * bufferStride * blocksPerCol;\r\n for (let i = 0; i < blocksPerCol; i++) {\r\n dst.set(\r\n src.subarray(srcLayerOffset + i * rowStride, srcLayerOffset + (i + 1) * rowStride),\r\n dstLayerOffset + i * bufferStride\r\n );\r\n }\r\n }\r\n }\r\n this._pendingUploads.push({\r\n mappedBuffer: upload.mappedBuffer,\r\n uploadOffsetX: offsetX,\r\n uploadOffsetY: offsetY,\r\n uploadOffsetZ: offsetZ,\r\n uploadWidth: blockWidth * blocksPerRow,\r\n uploadHeight: blockHeight * blocksPerCol,\r\n uploadDepth: depth,\r\n bufferStride: bufferStride,\r\n mipLevel: miplevel\r\n });\r\n }\r\n }\r\n /** @internal */\r\n protected uploadImageData(\r\n data: ImageBitmap | HTMLCanvasElement,\r\n srcX: number,\r\n srcY: number,\r\n width: number,\r\n height: number,\r\n destX: number,\r\n destY: number,\r\n miplevel: number,\r\n layer: number\r\n ) {\r\n if (this.isTextureVideo()) {\r\n console.error('BaseTexture.uploadImageData(): Cannot upload to video texture');\r\n return;\r\n }\r\n if (this._device.device.queue.copyExternalImageToTexture) {\r\n if (this._device.commandQueue.hasActiveWork() || this._device.isTextureUploading(this as any)) {\r\n this._device.flush();\r\n }\r\n const copyView: GPUCopyExternalImageDestInfo = {\r\n texture: this._object as GPUTexture,\r\n origin: {\r\n x: destX,\r\n y: destY,\r\n z: layer ?? 0\r\n },\r\n mipLevel: miplevel ?? 0,\r\n premultipliedAlpha: false\r\n };\r\n this._device.device.queue.copyExternalImageToTexture(\r\n {\r\n source: data,\r\n origin: {\r\n x: srcX ?? 0,\r\n y: srcY ?? 0\r\n }\r\n },\r\n copyView,\r\n {\r\n width: width,\r\n height: height,\r\n depthOrArrayLayers: 1\r\n }\r\n );\r\n } else {\r\n this._device.textureUpload(this as WebGPUBaseTexture);\r\n this._pendingUploads.push({\r\n image: data,\r\n offsetX: destX,\r\n offsetY: destY,\r\n offsetZ: layer ?? 0,\r\n srcX: srcX ?? 0,\r\n srcY: srcY ?? 0,\r\n srcZ: 0,\r\n width: width,\r\n height: height,\r\n depth: 1,\r\n mipLevel: miplevel ?? 0\r\n });\r\n }\r\n }\r\n getMipmapGenerationBindGroup(level: number, face: number) {\r\n const faceGroups = this._mipBindGroups;\r\n let levelGroups = faceGroups[face];\r\n if (!levelGroups) {\r\n levelGroups = [];\r\n faceGroups[face] = levelGroups;\r\n }\r\n let levelGroup = levelGroups[level];\r\n if (!levelGroup) {\r\n levelGroup = this._device.createBindGroup(\r\n WebGPUMipmapGenerator.getMipmapGenerationBindGroupLayout(this._device)\r\n ) as WebGPUBindGroup;\r\n levelGroup.setTextureView('tex', this, level - 1, face, 1);\r\n levelGroups[level] = levelGroup;\r\n }\r\n return levelGroup;\r\n }\r\n /** @internal */\r\n protected _getSamplerOptions(params: Partial<TextureFormatInfoWebGPU>, shadow: boolean) {\r\n const comparison = this.isDepth() && shadow;\r\n const filterable = params.filterable || comparison;\r\n const magFilter = filterable ? 'linear' : 'nearest';\r\n const minFilter = params.filterable ? 'linear' : 'nearest';\r\n const mipFilter = this._mipLevelCount > 1 ? (filterable ? 'linear' : 'nearest') : 'none';\r\n return {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n addressW: 'clamp',\r\n magFilter,\r\n minFilter,\r\n mipFilter,\r\n lodMin: 0,\r\n lodMax: 32,\r\n maxAnisotropy: 1,\r\n compare: comparison ? 'lt' : null\r\n } as const;\r\n }\r\n /** @internal */\r\n _markAsCurrentFB(b: boolean) {\r\n this._fb = b;\r\n }\r\n /** @internal */\r\n _isMarkedAsCurrentFB() {\r\n return this._fb;\r\n }\r\n}\r\n","import type {\r\n TextureImageElement,\r\n TextureMipmapData,\r\n Texture2D,\r\n GPUDataBuffer,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { linearTextureFormatToSRGB, GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nexport class WebGPUTexture2D extends WebGPUBaseTexture implements Texture2D<GPUTexture> {\r\n constructor(device: WebGPUDevice) {\r\n super(device, '2d');\r\n }\r\n isTexture2D(): this is Texture2D {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._mipLevelCount);\r\n }\r\n update(data: TypedArray, xOffset: number, yOffset: number, width: number, height: number) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n this.uploadRaw(data, width, height, 1, xOffset, yOffset, 0, 0);\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n destX: number,\r\n destY: number,\r\n srcX: number,\r\n srcY: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n if (data instanceof HTMLCanvasElement || this._device.isTextureUploading(this)) {\r\n // Copy the pixel values out in case the canvas content may be changed later\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, srcX, srcY, width, height, 0, 0, width, height);\r\n const imageData = ctx.getImageData(0, 0, width, height);\r\n this.update(imageData.data, destX, destY, width, height);\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n } else {\r\n this.uploadImageData(data, srcX, srcY, width, height, destX, destY, 0, 0);\r\n }\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (faceOrLayer !== 0) {\r\n throw new Error(`Texture2D.readPixels(): parameter faceOrLayer must be 0`);\r\n }\r\n if (mipLevel >= this.mipLevelCount || mipLevel < 0) {\r\n throw new Error(`Texture2D.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n const { size } = WebGPUBaseTexture.calculateBufferSizeForCopy(w, h, this.format);\r\n if (buffer.byteLength < size) {\r\n throw new Error(\r\n `Texture2D.readPixels() failed: destination buffer size is ${buffer.byteLength}, should be at least ${size}`\r\n );\r\n }\r\n const tmpBuffer = this._device.createBuffer(size, { usage: 'read' });\r\n await this.copyPixelDataToBuffer(x, y, w, h, 0, mipLevel, tmpBuffer);\r\n await tmpBuffer.getBufferSubData(\r\n new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength),\r\n 0,\r\n size\r\n );\r\n tmpBuffer.dispose();\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n faceOrLayer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (faceOrLayer !== 0) {\r\n throw new Error(`Texture2D.readPixels(): parameter faceOrLayer must be 0`);\r\n }\r\n if (mipLevel >= this.mipLevelCount || mipLevel < 0) {\r\n throw new Error(`Texture2D.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n this.copyPixelDataToBuffer(x, y, w, h, 0, mipLevel, buffer);\r\n }\r\n loadFromElement(element: TextureImageElement, sRGB: boolean, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n const format = sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm';\r\n this.loadImage(element, format);\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n this.loadEmpty(format, width, height, 0);\r\n }\r\n createView(level?: number, face?: number, mipCount?: number) {\r\n return this._object\r\n ? this._device.gpuCreateTextureView(this._object, {\r\n dimension: '2d',\r\n baseMipLevel: level ?? 0,\r\n mipLevelCount: mipCount || this._mipLevelCount - (level ?? 0),\r\n baseArrayLayer: 0,\r\n arrayLayerCount: 1\r\n })\r\n : null;\r\n }\r\n createWithMipmapData(data: TextureMipmapData, sRGB: boolean, creationFlags?: number) {\r\n if (data.isCubemap || data.isVolume) {\r\n console.error('loading 2d texture with mipmap data failed: data is not 2d texture');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('webgl device does not support storage texture'));\r\n } else {\r\n this.loadLevels(data, sRGB);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadEmpty(format: TextureFormat, width: number, height: number, numMipLevels: number) {\r\n this.allocInternal(format, width, height, 1, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n /** @internal */\r\n private loadLevels(levels: TextureMipmapData, sRGB: boolean) {\r\n let format = sRGB ? linearTextureFormatToSRGB(levels.format) : levels.format;\r\n let swizzle = false;\r\n if (format === 'bgra8unorm') {\r\n format = 'rgba8unorm';\r\n swizzle = true;\r\n } else if (this._format === 'bgra8unorm-srgb') {\r\n format = 'rgba8unorm-srgb';\r\n swizzle = true;\r\n }\r\n const width = levels.width;\r\n const height = levels.height;\r\n const mipLevelCount = levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, 1, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n for (let i = 0; i < levels.mipDatas[0].length; i++) {\r\n if (swizzle) {\r\n // convert bgra to rgba\r\n for (let j = 0; j < levels.mipDatas[0][i].width * levels.mipDatas[0][i].height; j++) {\r\n const t = levels.mipDatas[0][i].data[j * 4];\r\n levels.mipDatas[0][i].data[j * 4] = levels.mipDatas[0][i].data[j * 4 + 2];\r\n levels.mipDatas[0][i].data[j * 4 + 2] = t;\r\n }\r\n }\r\n this.uploadRaw(\r\n levels.mipDatas[0][i].data,\r\n levels.mipDatas[0][i].width,\r\n levels.mipDatas[0][i].height,\r\n 1,\r\n 0,\r\n 0,\r\n 0,\r\n i\r\n );\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadImage(element: TextureImageElement, format: TextureFormat) {\r\n this.allocInternal(format, Number(element.width), Number(element.height), 1, 0);\r\n if (!this._device.isContextLost()) {\r\n this.updateFromElement(element, 0, 0, 0, 0, this._width, this._height);\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n}\r\n","import type {\r\n TextureImageElement,\r\n Texture2DArray,\r\n GPUDataBuffer,\r\n TextureFormat,\r\n TextureMipmapData\r\n} from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nexport class WebGPUTexture2DArray extends WebGPUBaseTexture implements Texture2DArray<GPUTexture> {\r\n constructor(device: WebGPUDevice) {\r\n super(device, '2darray');\r\n }\r\n isTexture2DArray(): this is Texture2DArray {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n update(\r\n data: TypedArray,\r\n xOffset: number,\r\n yOffset: number,\r\n zOffset: number,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n this.uploadRaw(data, width, height, depth, xOffset, yOffset, zOffset, 0);\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n destX: number,\r\n destY: number,\r\n destZ: number,\r\n srcX: number,\r\n srcY: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n if (data instanceof HTMLCanvasElement || this._device.isTextureUploading(this)) {\r\n // Copy the pixel values out in case the canvas content may be changed later\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, srcX, srcY, width, height, 0, 0, width, height);\r\n const imageData = ctx.getImageData(0, 0, width, height);\r\n this.update(imageData.data, destX, destY, destZ, width, height, 1);\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n } else {\r\n this.uploadImageData(data, srcX, srcY, width, height, destX, destY, 0, destZ);\r\n }\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, depth: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n this.loadEmpty(format, width, height, depth, 0);\r\n }\r\n createWithMipmapData(data: TextureMipmapData, creationFlags?: number) {\r\n if (!data.arraySize) {\r\n console.error('Texture2DArray.createWithMipmapData() failed: Data is not texture array');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(\r\n 'Texture2DArray.createWithMipmapData() failed: Webgl device does not support storage texture'\r\n );\r\n } else {\r\n this.loadLevels(data);\r\n }\r\n }\r\n }\r\n createView(level?: number, face?: number, mipCount?: number) {\r\n return this._object\r\n ? this._device.gpuCreateTextureView(this._object, {\r\n dimension: '2d',\r\n baseMipLevel: level ?? 0,\r\n mipLevelCount: mipCount || this._mipLevelCount - (level ?? 0),\r\n baseArrayLayer: face ?? 0,\r\n arrayLayerCount: 1\r\n })\r\n : null;\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (layer < 0 || layer >= this._depth) {\r\n throw new Error(`Texture2DArray.readPixels(): invalid layer: ${layer}`);\r\n }\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`Texture2DArray.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n const { size } = WebGPUBaseTexture.calculateBufferSizeForCopy(w, h, this.format);\r\n if (buffer.byteLength < size) {\r\n throw new Error(\r\n `Texture2D.readPixels() failed: destination buffer size is ${buffer.byteLength}, should be at least ${size}`\r\n );\r\n }\r\n const tmpBuffer = this._device.createBuffer(size, { usage: 'read' });\r\n await this.copyPixelDataToBuffer(x, y, w, h, layer, mipLevel, tmpBuffer);\r\n await tmpBuffer.getBufferSubData(\r\n new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength),\r\n 0,\r\n size\r\n );\r\n tmpBuffer.dispose();\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (layer < 0 || layer >= this._depth) {\r\n throw new Error(`Texture2DArray.readPixelsToBuffer(): invalid layer: ${layer}`);\r\n }\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`Texture2DArray.readPixelsToBuffer(): invalid miplevel: ${mipLevel}`);\r\n }\r\n this.copyPixelDataToBuffer(x, y, w, h, layer, mipLevel, buffer);\r\n }\r\n private loadEmpty(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n this.allocInternal(format, width, height, depth, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n private loadLevels(levels: TextureMipmapData) {\r\n const format = levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n const depth = levels.arraySize;\r\n const mipLevelCount =\r\n levels.mipLevels === 1 && !(this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP)\r\n ? this._calcMipLevelCount(levels.format, width, height, depth)\r\n : levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('Texture2DArray.loadLevels(): No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, levels.arraySize, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n for (let layer = 0; layer < levels.arraySize; layer++) {\r\n if (levels.mipDatas[layer].length !== levels.mipLevels) {\r\n console.error(`Texture2DArray.loadLevels() failed: Invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < levels.mipLevels; i++) {\r\n this.uploadRaw(\r\n levels.mipDatas[layer][i].data,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n 0,\r\n 0,\r\n layer,\r\n i\r\n );\r\n }\r\n }\r\n if (levels.mipLevels !== this.mipLevelCount) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n}\r\n","import type { Texture3D, GPUDataBuffer, TextureFormat, TextureMipmapData } from '@zephyr3d/device';\r\nimport { GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nexport class WebGPUTexture3D extends WebGPUBaseTexture implements Texture3D<GPUTexture> {\r\n constructor(device: WebGPUDevice) {\r\n super(device, '3d');\r\n }\r\n isTexture3D(): this is Texture3D {\r\n return true;\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n update(\r\n data: TypedArray,\r\n xOffset: number,\r\n yOffset: number,\r\n zOffset: number,\r\n width: number,\r\n height: number,\r\n depth: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, this._depth, this._mipLevelCount);\r\n }\r\n this.uploadRaw(data, width, height, depth, xOffset, yOffset, zOffset, 0);\r\n }\r\n createEmpty(format: TextureFormat, width: number, height: number, depth: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n this.loadEmpty(format, width, height, depth, 0);\r\n }\r\n createView(_level?: number, face?: number, _mipCount?: number) {\r\n return this._object\r\n ? this._device.gpuCreateTextureView(this._object, {\r\n dimension: '2d',\r\n baseMipLevel: 0,\r\n mipLevelCount: 1,\r\n baseArrayLayer: face,\r\n arrayLayerCount: 1\r\n })\r\n : null;\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (mipLevel !== 0) {\r\n throw new Error(`Texture3D.readPixels(): parameter mipLevel must be 0`);\r\n }\r\n const { size } = WebGPUBaseTexture.calculateBufferSizeForCopy(w, h, this.format);\r\n if (buffer.byteLength < size) {\r\n throw new Error(\r\n `Texture2D.readPixels() failed: destination buffer size is ${buffer.byteLength}, should be at least ${size}`\r\n );\r\n }\r\n const tmpBuffer = this._device.createBuffer(size, { usage: 'read' });\r\n await this.copyPixelDataToBuffer(x, y, w, h, layer, 0, tmpBuffer);\r\n await tmpBuffer.getBufferSubData(\r\n new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength),\r\n 0,\r\n size\r\n );\r\n tmpBuffer.dispose();\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n layer: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (mipLevel !== 0) {\r\n throw new Error(`Texture3D.readPixelsToBuffer(): parameter mipLevel must be 0`);\r\n }\r\n this.copyPixelDataToBuffer(x, y, w, h, layer, 0, buffer);\r\n }\r\n createWithMipmapData(data: TextureMipmapData, creationFlags?: number) {\r\n if (!data.arraySize) {\r\n console.error('Texture2DArray.createWithMipmapData() failed: Data is not texture array');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(\r\n 'Texture2DArray.createWithMipmapData() failed: Webgl device does not support storage texture'\r\n );\r\n } else {\r\n this.loadLevels(data);\r\n }\r\n }\r\n }\r\n private loadLevels(levels: TextureMipmapData) {\r\n const format = levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n const depth = levels.depth;\r\n const mipLevelCount =\r\n levels.mipLevels === 1 && !(this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP)\r\n ? this._calcMipLevelCount(levels.format, width, height, depth)\r\n : levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('Texture3D.loadLevels(): No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, depth, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n for (let layer = 0; layer < depth; layer++) {\r\n if (levels.mipDatas[layer].length !== levels.mipLevels) {\r\n console.error(`Texture3D.loadLevels() failed: Invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < levels.mipLevels; i++) {\r\n this.uploadRaw(\r\n levels.mipDatas[layer][i].data,\r\n levels.mipDatas[layer][i].width,\r\n levels.mipDatas[layer][i].height,\r\n 1,\r\n 0,\r\n 0,\r\n layer,\r\n i\r\n );\r\n }\r\n }\r\n if (levels.mipLevels !== this.mipLevelCount) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n private loadEmpty(\r\n format: TextureFormat,\r\n width: number,\r\n height: number,\r\n depth: number,\r\n numMipLevels: number\r\n ) {\r\n this.allocInternal(format, width, height, depth, numMipLevels);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n}\r\n","import type { CubeFace, TypedArray } from '@zephyr3d/base';\r\nimport type {\r\n TextureMipmapData,\r\n TextureCube,\r\n TextureImageElement,\r\n GPUDataBuffer,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { linearTextureFormatToSRGB, GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nexport class WebGPUTextureCube extends WebGPUBaseTexture implements TextureCube<GPUTexture> {\r\n constructor(device: WebGPUDevice) {\r\n super(device, 'cube');\r\n }\r\n init() {\r\n this.loadEmpty(this._format!, this._width, this._mipLevelCount);\r\n }\r\n update(data: TypedArray, xOffset: number, yOffset: number, width: number, height: number, face: CubeFace) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n this.uploadRaw(data, width, height, 1, xOffset, yOffset, face, 0);\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n updateFromElement(\r\n data: TextureImageElement,\r\n destX: number,\r\n destY: number,\r\n face: number,\r\n srcX: number,\r\n srcY: number,\r\n width: number,\r\n height: number\r\n ) {\r\n if (this._device.isContextLost()) {\r\n return;\r\n }\r\n if (!this._object) {\r\n this.allocInternal(this._format!, this._width, this._height, 1, this._mipLevelCount);\r\n }\r\n if (data instanceof HTMLCanvasElement || this._device.isTextureUploading(this)) {\r\n // Copy the pixel values out in case the canvas content may be changed later\r\n const cvs = document.createElement('canvas');\r\n cvs.width = width;\r\n cvs.height = height;\r\n const ctx = cvs.getContext('2d')!;\r\n ctx.drawImage(data, srcX, srcY, width, height, 0, 0, width, height);\r\n const imageData = ctx.getImageData(0, 0, width, height);\r\n this.update(imageData.data, destX, destY, width, height, face);\r\n cvs.width = 0;\r\n cvs.height = 0;\r\n } else {\r\n this.uploadImageData(data, srcX, srcY, width, height, destX, destY, 0, face);\r\n }\r\n }\r\n createEmpty(format: TextureFormat, size: number, creationFlags?: number) {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error(new Error('storage texture can not be cube texture'));\r\n } else {\r\n this.loadEmpty(format, size, 0);\r\n }\r\n }\r\n isTextureCube(): this is TextureCube {\r\n return true;\r\n }\r\n createView(level?: number, face?: number, mipCount?: number) {\r\n return this._object\r\n ? this._device.gpuCreateTextureView(this._object, {\r\n format: this._gpuFormat!,\r\n dimension: '2d',\r\n baseMipLevel: level ?? 0,\r\n mipLevelCount: mipCount || this._mipLevelCount - (level ?? 0),\r\n baseArrayLayer: face ?? 0,\r\n arrayLayerCount: 1,\r\n aspect: 'all'\r\n })\r\n : null;\r\n }\r\n async readPixels(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n face: number,\r\n mipLevel: number,\r\n buffer: TypedArray\r\n ) {\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`TextureCube.readPixels(): invalid miplevel: ${mipLevel}`);\r\n }\r\n const { size } = WebGPUBaseTexture.calculateBufferSizeForCopy(w, h, this.format);\r\n if (buffer.byteLength < size) {\r\n throw new Error(\r\n `Texture2D.readPixels() failed: destination buffer size is ${buffer.byteLength}, should be at least ${size}`\r\n );\r\n }\r\n const tmpBuffer = this._device.createBuffer(size, { usage: 'read' });\r\n await this.copyPixelDataToBuffer(x, y, w, h, face, mipLevel, tmpBuffer);\r\n await tmpBuffer.getBufferSubData(\r\n new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength),\r\n 0,\r\n size\r\n );\r\n tmpBuffer.dispose();\r\n }\r\n readPixelsToBuffer(\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n face: number,\r\n mipLevel: number,\r\n buffer: GPUDataBuffer\r\n ) {\r\n if (mipLevel < 0 || mipLevel >= this.mipLevelCount) {\r\n throw new Error(`TextureCube.readPixelsToBuffer(): invalid miplevel: ${mipLevel}`);\r\n }\r\n this.copyPixelDataToBuffer(x, y, w, h, face, mipLevel, buffer);\r\n }\r\n createWithMipmapData(data: TextureMipmapData, sRGB: boolean, creationFlags?: number) {\r\n if (!data.isCubemap) {\r\n console.error('loading cubmap with mipmap data failed: data is not cubemap');\r\n } else {\r\n this._flags = Number(creationFlags) || 0;\r\n if (this._flags & GPUResourceUsageFlags.TF_WRITABLE) {\r\n console.error('webgl device does not support storage texture');\r\n } else {\r\n this.loadLevels(data, sRGB);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private loadEmpty(format: TextureFormat, size: number, mipLevelCount: number) {\r\n this.allocInternal(format, size, size, 1, mipLevelCount);\r\n if (this._mipLevelCount > 1 && !this._device.isContextLost()) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n /** @internal */\r\n /*\r\n private loadImages(images: HTMLImageElement[], format: TextureFormat): void {\r\n const width = images[0].width;\r\n const height = images[0].height;\r\n if (images.length !== 6) {\r\n console.error(new Error('cubemap face list must have 6 images'));\r\n return;\r\n }\r\n for (let i = 1; i < 6; i++) {\r\n if (images[i].width !== width || images[i].height !== height) {\r\n console.error(new Error('cubemap face images must have identical sizes'));\r\n return;\r\n }\r\n }\r\n if (width === 0 || height === 0) {\r\n return;\r\n }\r\n this.allocInternal(format, width, height, 1, 0);\r\n if (!this._device.isContextLost()) {\r\n const w = this._width;\r\n const h = this._height;\r\n for (let face = 0; face < 6; face++) {\r\n createImageBitmap(images[face], {\r\n premultiplyAlpha: 'none'\r\n }).then((bmData) => {\r\n this.updateFromElement(bmData, 0, 0, face, 0, 0, w, h);\r\n });\r\n }\r\n if (this._mipLevelCount > 1) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n }\r\n */\r\n /** @internal */\r\n private loadLevels(levels: TextureMipmapData, sRGB: boolean) {\r\n const format = sRGB ? linearTextureFormatToSRGB(levels.format) : levels.format;\r\n const width = levels.width;\r\n const height = levels.height;\r\n //const mipLevelCount = levels.mipLevels;\r\n const mipLevelCount =\r\n levels.mipLevels === 1 && !(this._flags & GPUResourceUsageFlags.TF_NO_MIPMAP)\r\n ? this._calcMipLevelCount(levels.format, width, height, 1)\r\n : levels.mipLevels;\r\n if (levels.isCompressed) {\r\n if (!this.getTextureCaps().supportS3TCSRGB || !this.getTextureCaps().supportS3TC) {\r\n console.error('TextureCube.loadLevels(): No s3tc compression format support');\r\n return;\r\n }\r\n }\r\n this.allocInternal(format, width, height, 1, mipLevelCount);\r\n if (!this._device.isContextLost()) {\r\n for (let face = 0; face < 6; face++) {\r\n if (levels.mipDatas[face].length !== levels.mipLevels) {\r\n console.error(`TextureCube.loadLevels() failed: Invalid texture data`);\r\n return;\r\n }\r\n for (let i = 0; i < levels.mipLevels; i++) {\r\n this.uploadRaw(\r\n levels.mipDatas[face][i].data,\r\n levels.mipDatas[face][i].width,\r\n levels.mipDatas[face][i].height,\r\n 1,\r\n 0,\r\n 0,\r\n face,\r\n i\r\n );\r\n }\r\n }\r\n }\r\n if (levels.mipLevels !== this.mipLevelCount) {\r\n this.generateMipmaps();\r\n }\r\n }\r\n}\r\n","import type { TypedArray } from '@zephyr3d/base';\r\nimport type { GPUDataBuffer, TextureVideo } from '@zephyr3d/device';\r\nimport { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\n\r\nexport class WebGPUTextureVideo\r\n extends WebGPUBaseTexture<GPUExternalTexture>\r\n implements TextureVideo<GPUExternalTexture>\r\n{\r\n private readonly _source: HTMLVideoElement;\r\n private readonly _refBindGroups: WebGPUBindGroup[];\r\n constructor(device: WebGPUDevice, element: HTMLVideoElement) {\r\n super(device, '2d');\r\n this._source = element;\r\n this._width = 0;\r\n this._height = 0;\r\n this._refBindGroups = [];\r\n this.loadFromElement();\r\n }\r\n isTextureVideo(): this is TextureVideo {\r\n return true;\r\n }\r\n addBindGroupReference(bindGroup: WebGPUBindGroup) {\r\n this._refBindGroups.push(bindGroup);\r\n }\r\n removeBindGroupReference(bindGroup: WebGPUBindGroup) {\r\n const index = this._refBindGroups.indexOf(bindGroup);\r\n if (index >= 0) {\r\n this._refBindGroups.splice(index, 1);\r\n }\r\n }\r\n get width() {\r\n return this._width;\r\n }\r\n get height() {\r\n return this._height;\r\n }\r\n get source() {\r\n return this._source;\r\n }\r\n restore() {\r\n if (!this._object && !this._device.isContextLost()) {\r\n this.loadElement(this._source);\r\n }\r\n }\r\n updateVideoFrame() {\r\n if (this._source.readyState > 2) {\r\n const videoFrame = new (window as any).VideoFrame(this._source);\r\n videoFrame.close();\r\n this._object = this._device.gpuImportExternalTexture(this._source);\r\n return true;\r\n }\r\n return false;\r\n }\r\n createView(_level?: number, _face?: number, _mipCount?: number) {\r\n return null;\r\n }\r\n init() {\r\n this.loadFromElement();\r\n }\r\n async readPixels(\r\n _x: number,\r\n _y: number,\r\n _w: number,\r\n _h: number,\r\n _faceOrLayer: number,\r\n _mipLevel: number,\r\n _buffer: TypedArray\r\n ) {\r\n throw new Error(`Video texture does not support readPixels()`);\r\n }\r\n readPixelsToBuffer(\r\n _x: number,\r\n _y: number,\r\n _w: number,\r\n _h: number,\r\n _faceOrLayer: number,\r\n _mipLevel: number,\r\n _buffer: GPUDataBuffer<unknown>\r\n ) {\r\n throw new Error(`Video texture does not support readPixelsToBuffer()`);\r\n }\r\n /** @internal */\r\n loadFromElement() {\r\n this.loadElement(this._source);\r\n }\r\n /** @internal */\r\n private loadElement(element: HTMLVideoElement) {\r\n this._format = 'rgba8unorm';\r\n this._width = element.videoWidth;\r\n this._height = element.videoHeight;\r\n this._depth = 1;\r\n this._mipLevelCount = 1;\r\n if (!this._device.isContextLost()) {\r\n if (element.readyState > 2) {\r\n this._object = this._device.gpuImportExternalTexture(element);\r\n const that = this;\r\n this._device.runNextFrame(function updateVideoFrame() {\r\n if (!that.disposed) {\r\n if (that._source.readyState > 2) {\r\n const videoFrame = new (window as any).VideoFrame(that._source);\r\n videoFrame.close();\r\n that._object = that._device.gpuImportExternalTexture(that._source);\r\n for (const bindGroup of that._refBindGroups) {\r\n bindGroup.invalidate();\r\n }\r\n }\r\n that._device.runNextFrame(updateVideoFrame);\r\n }\r\n });\r\n }\r\n }\r\n return !!this._object;\r\n }\r\n}\r\n","import type {\r\n TextureFormat,\r\n FramebufferCaps,\r\n TextureFormatInfo,\r\n MiscCaps,\r\n ShaderCaps,\r\n TextureCaps\r\n} from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Immutable } from '@zephyr3d/base';\r\n\r\nexport interface TextureParams {\r\n gpuFormat: GPUTextureFormat;\r\n stride: number;\r\n filterable: boolean;\r\n renderable: boolean;\r\n repeatable: boolean;\r\n compressed: boolean;\r\n writable: boolean;\r\n generateMipmap: boolean;\r\n}\r\n\r\nexport interface TextureFormatInfoWebGPU extends TextureFormatInfo {\r\n gpuSampleType: GPUTextureSampleType;\r\n filterable: boolean;\r\n renderable: boolean;\r\n compressed: boolean;\r\n writable: boolean;\r\n}\r\n\r\nexport class WebGPUFramebufferCaps implements FramebufferCaps {\r\n maxDrawBuffers: number;\r\n maxColorAttachmentBytesPerSample: number;\r\n supportRenderMipmap: boolean;\r\n supportMultisampledFramebuffer: boolean;\r\n supportFloatBlending: boolean;\r\n supportDepth32float: boolean;\r\n supportDepth32floatStencil8: boolean;\r\n constructor(device: WebGPUDevice) {\r\n this.maxDrawBuffers = device.device.limits.maxColorAttachments;\r\n this.maxColorAttachmentBytesPerSample = device.device.limits.maxColorAttachmentBytesPerSample;\r\n this.supportRenderMipmap = true;\r\n this.supportMultisampledFramebuffer = true;\r\n this.supportFloatBlending = device.device.features.has('float32-blendable');\r\n this.supportDepth32float = true;\r\n this.supportDepth32floatStencil8 = device.device.features.has('depth32float-stencil8');\r\n }\r\n}\r\n\r\nexport class WebGPUMiscCaps implements MiscCaps {\r\n supportOversizedViewport: boolean;\r\n supportBlendMinMax: boolean;\r\n support32BitIndex: boolean;\r\n supportDepthClamp: boolean;\r\n maxBindGroups: number;\r\n maxTexCoordIndex: number;\r\n constructor(device: WebGPUDevice) {\r\n this.supportOversizedViewport = false;\r\n this.supportBlendMinMax = true;\r\n this.support32BitIndex = true;\r\n this.supportDepthClamp = device.device.features.has('depth-clip-control');\r\n this.maxBindGroups = 4;\r\n this.maxTexCoordIndex = 8;\r\n }\r\n}\r\nexport class WebGPUShaderCaps implements ShaderCaps {\r\n supportFragmentDepth: boolean;\r\n supportStandardDerivatives: boolean;\r\n supportShaderTextureLod: boolean;\r\n supportHighPrecisionFloat: boolean;\r\n maxUniformBufferSize: number;\r\n uniformBufferOffsetAlignment: number;\r\n maxStorageBufferSize: number;\r\n storageBufferOffsetAlignment: number;\r\n constructor(device: WebGPUDevice) {\r\n this.supportFragmentDepth = true;\r\n this.supportStandardDerivatives = true;\r\n this.supportShaderTextureLod = true;\r\n this.supportHighPrecisionFloat = true;\r\n this.maxUniformBufferSize = device.device.limits.maxUniformBufferBindingSize || 65536;\r\n this.uniformBufferOffsetAlignment = device.device.limits.minUniformBufferOffsetAlignment || 256;\r\n this.maxStorageBufferSize = device.device.limits.maxStorageBufferBindingSize || 128 * 1024 * 1024;\r\n this.storageBufferOffsetAlignment = device.device.limits.minStorageBufferOffsetAlignment || 256;\r\n }\r\n}\r\nexport class WebGPUTextureCaps implements TextureCaps {\r\n private readonly _textureFormatInfos: Record<TextureFormat, TextureFormatInfoWebGPU>;\r\n maxTextureSize: number;\r\n maxCubeTextureSize: number;\r\n npo2Mipmapping: boolean;\r\n npo2Repeating: boolean;\r\n supportS3TC: boolean;\r\n supportS3TCSRGB: boolean;\r\n supportBPTC: boolean;\r\n supportRGTC: boolean;\r\n supportASTC: boolean;\r\n supportDepthTexture: boolean;\r\n support3DTexture: boolean;\r\n supportSRGBTexture: boolean;\r\n supportFloatTexture: boolean;\r\n supportLinearFloatTexture: boolean;\r\n supportHalfFloatTexture: boolean;\r\n supportLinearHalfFloatTexture: boolean;\r\n supportAnisotropicFiltering: boolean;\r\n supportFloatColorBuffer: boolean;\r\n supportHalfFloatColorBuffer: boolean;\r\n supportFloatBlending: boolean;\r\n constructor(device: WebGPUDevice) {\r\n this.supportAnisotropicFiltering = true;\r\n this.supportDepthTexture = true;\r\n this.support3DTexture = true;\r\n this.supportSRGBTexture = true;\r\n this.supportFloatTexture = true;\r\n this.supportFloatColorBuffer = true;\r\n this.supportHalfFloatColorBuffer = true;\r\n this.supportFloatBlending = true;\r\n this.supportS3TC = device.device.features.has('texture-compression-bc');\r\n this.supportS3TCSRGB = this.supportS3TC;\r\n this.supportBPTC = this.supportS3TC;\r\n this.supportRGTC = this.supportS3TC;\r\n this.supportASTC = device.device.features.has('texture-compression-astc');\r\n this.supportHalfFloatTexture = true;\r\n this.maxTextureSize = device.device.limits.maxTextureDimension2D;\r\n this.maxCubeTextureSize = device.device.limits.maxTextureDimension2D;\r\n this.npo2Mipmapping = true;\r\n this.npo2Repeating = true;\r\n const float32Filterable = device.device.features.has('float32-filterable');\r\n this._textureFormatInfos = {\r\n ['rgba8unorm']: {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n },\r\n ['rgba8snorm']: {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n },\r\n ['bgra8unorm']: {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false, // TODO: require \"bgra8unorm-storage\" feature\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n }\r\n } as Record<TextureFormat, TextureFormatInfoWebGPU>;\r\n if (this.supportASTC) {\r\n for (const k of [\r\n '4x4',\r\n '5x4',\r\n '5x5',\r\n '6x5',\r\n '6x6',\r\n '8x5',\r\n '8x6',\r\n '8x8',\r\n '10x5',\r\n '10x6',\r\n '10x8',\r\n '10x10',\r\n '12x10',\r\n '12x12'\r\n ]) {\r\n const [w, h] = k.split('x').map((val) => Number(val));\r\n this._textureFormatInfos[`astc-${k}` as keyof typeof this._textureFormatInfos] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: w,\r\n blockHeight: h\r\n };\r\n this._textureFormatInfos[`astc-${k}-srgb` as keyof typeof this._textureFormatInfos] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n size: 16,\r\n writable: false,\r\n blockWidth: w,\r\n blockHeight: h\r\n };\r\n }\r\n }\r\n if (this.supportS3TC) {\r\n this._textureFormatInfos['dxt1'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt3'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt5'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (this.supportRGTC) {\r\n this._textureFormatInfos['bc4'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc4-signed'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n this._textureFormatInfos['bc5'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc5-signed'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n if (this.supportBPTC) {\r\n this._textureFormatInfos['bc6h'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc6h-signed'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc7'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['bc7-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n if (this.supportS3TCSRGB) {\r\n this._textureFormatInfos['dxt1-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 8,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt3-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n this._textureFormatInfos['dxt5-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: true,\r\n writable: false,\r\n size: 16,\r\n blockWidth: 4,\r\n blockHeight: 4\r\n };\r\n }\r\n this._textureFormatInfos['r8unorm'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r8snorm'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r16f'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r32f'] = {\r\n gpuSampleType: float32Filterable ? 'float' : 'unfilterable-float',\r\n filterable: float32Filterable,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['r8ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r8i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 1\r\n };\r\n this._textureFormatInfos['r16ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r16i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['r32ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['r32i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg8unorm'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg8snorm'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: false,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg16f'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg32f'] = {\r\n gpuSampleType: float32Filterable ? 'float' : 'unfilterable-float',\r\n filterable: float32Filterable,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rg8ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg8i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['rg16ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg16i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rg32ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rg32i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba8unorm-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['bgra8unorm-srgb'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba16f'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba32f'] = {\r\n gpuSampleType: float32Filterable ? 'float' : 'unfilterable-float',\r\n filterable: float32Filterable,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rgba8ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba8i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['rgba16ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba16i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['rgba32ui'] = {\r\n gpuSampleType: 'uint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rgba32i'] = {\r\n gpuSampleType: 'sint',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: true,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 16\r\n };\r\n this._textureFormatInfos['rg11b10uf'] = {\r\n gpuSampleType: 'float',\r\n filterable: true,\r\n renderable: device.device.features.has('rg11b10ufloat-renderable'),\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d16'] = {\r\n gpuSampleType: 'depth',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 2\r\n };\r\n this._textureFormatInfos['d24'] = {\r\n gpuSampleType: 'depth',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d32f'] = {\r\n gpuSampleType: 'depth',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this._textureFormatInfos['d32fs8'] = {\r\n gpuSampleType: 'depth',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 8\r\n };\r\n this._textureFormatInfos['d24s8'] = {\r\n gpuSampleType: 'depth',\r\n filterable: false,\r\n renderable: true,\r\n compressed: false,\r\n writable: false,\r\n blockWidth: 1,\r\n blockHeight: 1,\r\n size: 4\r\n };\r\n this.supportLinearFloatTexture =\r\n this._textureFormatInfos['r32f'].filterable &&\r\n this._textureFormatInfos['rg32f'].filterable &&\r\n this._textureFormatInfos['rgba32f'].filterable;\r\n this.supportLinearHalfFloatTexture =\r\n this._textureFormatInfos['r16f'].filterable &&\r\n this._textureFormatInfos['rg16f'].filterable &&\r\n this._textureFormatInfos['rgba16f'].filterable;\r\n }\r\n calcMemoryUsage(format: TextureFormat, numPixels: number) {\r\n return this._textureFormatInfos[format] ? this._textureFormatInfos[format].size * numPixels : 0;\r\n }\r\n getTextureFormatInfo(format: TextureFormat): Immutable<TextureFormatInfoWebGPU> {\r\n return this._textureFormatInfos[format];\r\n }\r\n}\r\n","import type {\r\n PrimitiveType,\r\n StructuredBuffer,\r\n VertexLayout,\r\n VertexSemantic,\r\n VertexLayoutOptions,\r\n VertexBufferInfo\r\n} from '@zephyr3d/device';\r\nimport {\r\n getVertexAttribFormat,\r\n getVertexAttribName,\r\n PBPrimitiveType,\r\n PBPrimitiveTypeInfo,\r\n VertexData\r\n} from '@zephyr3d/device';\r\nimport { vertexFormatToHash } from './constants_webgpu';\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport { WebGPUStructuredBuffer } from './structuredbuffer_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nexport class WebGPUVertexLayout extends WebGPUObject<unknown> implements VertexLayout<unknown> {\r\n private static _hashCounter = 0;\r\n private static _defaultBuffers: StructuredBuffer[] = [];\r\n private readonly _vertexData: VertexData;\r\n private readonly _hash: string;\r\n private _layouts: {\r\n [hash: string]: { layoutHash: string; buffers: VertexBufferInfo[] };\r\n };\r\n constructor(device: WebGPUDevice, options: VertexLayoutOptions) {\r\n super(device);\r\n this._vertexData = new VertexData();\r\n for (const vb of options.vertexBuffers) {\r\n this._vertexData.setVertexBuffer(vb.buffer, vb.stepMode);\r\n }\r\n if (options.indexBuffer) {\r\n this._vertexData.setIndexBuffer(options.indexBuffer);\r\n }\r\n this._hash = String(++WebGPUVertexLayout._hashCounter);\r\n this._layouts = {};\r\n }\r\n destroy() {\r\n this._object = null;\r\n }\r\n restore() {\r\n this._object = {};\r\n }\r\n setDrawOffset(buffer: StructuredBuffer, byteOffset: number) {\r\n for (const info of this._vertexData.vertexBuffers) {\r\n if (info?.buffer === buffer) {\r\n info.drawOffset = byteOffset;\r\n }\r\n }\r\n }\r\n get hash() {\r\n return this._hash;\r\n }\r\n get vertexBuffers() {\r\n return this._vertexData.vertexBuffers;\r\n }\r\n get indexBuffer() {\r\n return this._vertexData.indexBuffer;\r\n }\r\n getDrawOffset() {\r\n return this._vertexData.getDrawOffset();\r\n }\r\n getVertexBuffer(semantic: VertexSemantic) {\r\n return this._vertexData.getVertexBuffer(semantic);\r\n }\r\n getVertexBufferInfo(semantic: VertexSemantic) {\r\n return this._vertexData.getVertexBufferInfo(semantic);\r\n }\r\n getIndexBuffer() {\r\n return this._vertexData.getIndexBuffer();\r\n }\r\n getLayouts(attributes: string) {\r\n if (!attributes) {\r\n return null;\r\n }\r\n let layout = this._layouts[attributes];\r\n if (!layout) {\r\n layout = this.calcHash(attributes);\r\n this._layouts[attributes] = layout;\r\n }\r\n return layout;\r\n }\r\n private getDefaultBuffer(attrib: number, numVertices: number) {\r\n let buffer: Nullable<StructuredBuffer> = WebGPUVertexLayout._defaultBuffers[0];\r\n if (buffer) {\r\n const n = Math.floor((buffer.byteLength / 4) * 4);\r\n if (n < numVertices) {\r\n buffer = null;\r\n }\r\n }\r\n if (!buffer) {\r\n buffer = this._device.createVertexBuffer(\r\n getVertexAttribFormat(getVertexAttribName(attrib), 'f32', 4)!,\r\n new Float32Array(numVertices * 4)\r\n );\r\n WebGPUVertexLayout._defaultBuffers.unshift(buffer!);\r\n }\r\n return buffer;\r\n }\r\n private calcHash(attribHash: string) {\r\n const layouts: string[] = [];\r\n const layoutVertexBuffers: VertexBufferInfo[] = [];\r\n const vertexBuffers = this._vertexData.vertexBuffers;\r\n const attributes = attribHash.split(':').map((val) => Number(val));\r\n for (let idx = 0; idx < attributes.length; idx++) {\r\n const attrib = attributes[idx];\r\n let bufferInfo = vertexBuffers[attrib];\r\n let buffer: Nullable<StructuredBuffer> = bufferInfo?.buffer ?? null;\r\n if (!buffer) {\r\n console.warn(`No vertex buffer set for location <${getVertexAttribName(attrib)}>`);\r\n buffer = this.getDefaultBuffer(attrib, this._vertexData.numVertices)!;\r\n bufferInfo = {\r\n buffer,\r\n offset: 0,\r\n drawOffset: 0,\r\n type: new PBPrimitiveTypeInfo(PBPrimitiveType.F32VEC4),\r\n stride: 4 * 4,\r\n stepMode: 'vertex'\r\n };\r\n }\r\n const gpuFormat = WebGPUStructuredBuffer.getGPUVertexFormat(bufferInfo!.type);\r\n if (!gpuFormat) {\r\n throw new Error('Invalid vertex buffer format');\r\n }\r\n const index = layoutVertexBuffers.findIndex((val) => val.buffer === buffer);\r\n const stride = bufferInfo!.stride;\r\n let layout = index >= 0 ? layouts[index] : `${stride}-${Number(bufferInfo!.stepMode === 'instance')}`;\r\n layout += `-${vertexFormatToHash[gpuFormat]}-${bufferInfo!.offset}-${idx}`;\r\n if (index >= 0) {\r\n layouts[index] = layout;\r\n } else {\r\n layouts.push(layout);\r\n layoutVertexBuffers.push(bufferInfo!);\r\n }\r\n }\r\n return {\r\n layoutHash: layouts.join(':'),\r\n buffers: layoutVertexBuffers\r\n };\r\n }\r\n bind() {\r\n this._device.setVertexLayout(this);\r\n }\r\n draw(primitiveType: PrimitiveType, first: number, count: number) {\r\n this.bind();\r\n this._device.draw(primitiveType, first, count);\r\n }\r\n drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number) {\r\n this.bind();\r\n this._device.drawInstanced(primitiveType, first, count, numInstances);\r\n }\r\n}\r\n","import type {\r\n CompareFunc,\r\n ColorState,\r\n BlendingState,\r\n RasterizerState,\r\n DepthState,\r\n StencilState,\r\n RenderStateSet,\r\n BlendEquation,\r\n BlendFunc,\r\n FaceMode,\r\n StencilOp\r\n} from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nexport abstract class WebGPURenderState {\r\n protected static _defaultState: WebGPURenderState;\r\n protected _hash: Nullable<string>;\r\n static get defaultState() {\r\n return this._defaultState;\r\n }\r\n constructor() {\r\n this._hash = null;\r\n }\r\n get hash() {\r\n return this._getHash(this.constructor);\r\n }\r\n invalidateHash() {\r\n this._hash = null;\r\n }\r\n protected _getHash(ctor: any) {\r\n if (this === ctor.defaultState) {\r\n return '';\r\n } else {\r\n if (this._hash === null) {\r\n this._hash = this.computeHash();\r\n }\r\n return this._hash;\r\n }\r\n }\r\n protected abstract computeHash(): string;\r\n}\r\n\r\nexport class WebGPUColorState extends WebGPURenderState implements ColorState {\r\n protected static _defaultState: WebGPURenderState = new WebGPUColorState();\r\n private _redMask: boolean;\r\n private _greenMask: boolean;\r\n private _blueMask: boolean;\r\n private _alphaMask: boolean;\r\n constructor() {\r\n super();\r\n this._redMask = this._greenMask = this._blueMask = this._alphaMask = true;\r\n }\r\n clone() {\r\n return new WebGPUColorState().setColorMask(\r\n this._redMask,\r\n this._greenMask,\r\n this._blueMask,\r\n this._alphaMask\r\n );\r\n }\r\n get redMask() {\r\n return this._redMask;\r\n }\r\n set redMask(val) {\r\n if (this._redMask !== !!val) {\r\n this._redMask = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get greenMask() {\r\n return this._greenMask;\r\n }\r\n set greenMask(val) {\r\n if (this._greenMask !== !!val) {\r\n this._greenMask = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get blueMask() {\r\n return this._blueMask;\r\n }\r\n set blueMask(val) {\r\n if (this._blueMask !== !!val) {\r\n this._blueMask = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get alphaMask() {\r\n return this._alphaMask;\r\n }\r\n set alphaMask(val) {\r\n if (this._alphaMask !== !!val) {\r\n this._alphaMask = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n setColorMask(r: boolean, g: boolean, b: boolean, a: boolean) {\r\n this.redMask = r;\r\n this.greenMask = g;\r\n this.blueMask = b;\r\n this.alphaMask = a;\r\n return this;\r\n }\r\n protected computeHash() {\r\n let val = 0;\r\n if (this.redMask) {\r\n val += 1 << 0;\r\n }\r\n if (this.greenMask) {\r\n val += 1 << 1;\r\n }\r\n if (this.blueMask) {\r\n val += 1 << 2;\r\n }\r\n if (this.alphaMask) {\r\n val += 1 << 3;\r\n }\r\n return String(val);\r\n }\r\n}\r\n\r\nexport class WebGPUBlendingState extends WebGPURenderState implements BlendingState {\r\n protected static _defaultState: WebGPURenderState = new WebGPUBlendingState();\r\n private _enabled: boolean;\r\n private _alphaToCoverageEnabled: boolean;\r\n private _srcBlendRGB: BlendFunc;\r\n private _dstBlendRGB: BlendFunc;\r\n private _srcBlendAlpha: BlendFunc;\r\n private _dstBlendAlpha: BlendFunc;\r\n private _rgbEquation: BlendEquation;\r\n private _alphaEquation: BlendEquation;\r\n constructor() {\r\n super();\r\n this._enabled = false;\r\n this._alphaToCoverageEnabled = false;\r\n this._srcBlendRGB = 'one';\r\n this._dstBlendRGB = 'zero';\r\n this._srcBlendAlpha = 'one';\r\n this._dstBlendAlpha = 'zero';\r\n this._rgbEquation = 'add';\r\n this._alphaEquation = 'add';\r\n }\r\n clone() {\r\n const other = new WebGPUBlendingState();\r\n other.enable(this._enabled);\r\n other.enableAlphaToCoverage(this._alphaToCoverageEnabled);\r\n other.setBlendFuncRGB(this._srcBlendRGB, this._dstBlendRGB);\r\n other.setBlendFuncAlpha(this._srcBlendAlpha, this._dstBlendAlpha);\r\n other.setBlendEquation(this._rgbEquation, this._alphaEquation);\r\n return other;\r\n }\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n set enabled(val) {\r\n if (this._enabled !== !!val) {\r\n this._enabled = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get alphaToCoverageEnabled() {\r\n return this._alphaToCoverageEnabled;\r\n }\r\n set alphaToCoverageEnabled(val) {\r\n if (this._alphaToCoverageEnabled !== !!val) {\r\n this._alphaToCoverageEnabled = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get srcBlendRGB() {\r\n return this._srcBlendRGB;\r\n }\r\n set srcBlendRGB(val) {\r\n if (this._srcBlendRGB !== val) {\r\n this._srcBlendRGB = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get srcBlendAlpha() {\r\n return this._srcBlendAlpha;\r\n }\r\n set srcBlendAlpha(val) {\r\n if (this._srcBlendAlpha !== val) {\r\n this._srcBlendAlpha = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get dstBlendRGB() {\r\n return this._dstBlendRGB;\r\n }\r\n set dstBlendRGB(val) {\r\n if (this._dstBlendRGB !== val) {\r\n this._dstBlendRGB = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get dstBlendAlpha() {\r\n return this._dstBlendAlpha;\r\n }\r\n set dstBlendAlpha(val) {\r\n if (this._dstBlendAlpha !== val) {\r\n this._dstBlendAlpha = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get rgbEquation() {\r\n return this._rgbEquation;\r\n }\r\n set rgbEquation(val) {\r\n if (this._rgbEquation !== val) {\r\n this._rgbEquation = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get alphaEquation() {\r\n return this._alphaEquation;\r\n }\r\n set alphaEquation(val) {\r\n if (this._alphaEquation !== val) {\r\n this._alphaEquation = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n enable(b: boolean) {\r\n this.enabled = b;\r\n return this;\r\n }\r\n enableAlphaToCoverage(b: boolean) {\r\n this.alphaToCoverageEnabled = b;\r\n return this;\r\n }\r\n setBlendFunc(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendRGB = src;\r\n this.dstBlendRGB = dest;\r\n this.srcBlendAlpha = src;\r\n this.dstBlendAlpha = dest;\r\n return this;\r\n }\r\n setBlendFuncRGB(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendRGB = src;\r\n this.dstBlendRGB = dest;\r\n return this;\r\n }\r\n setBlendFuncAlpha(src: BlendFunc, dest: BlendFunc) {\r\n this.srcBlendAlpha = src;\r\n this.dstBlendAlpha = dest;\r\n return this;\r\n }\r\n setBlendEquation(rgb: BlendEquation, alpha: BlendEquation) {\r\n this.rgbEquation = rgb;\r\n this.alphaEquation = alpha;\r\n return this;\r\n }\r\n protected computeHash() {\r\n return this._enabled\r\n ? `${this._srcBlendRGB}-${this._srcBlendAlpha}-${this._dstBlendRGB}-${this._dstBlendAlpha}-${\r\n this._rgbEquation\r\n }-${this._alphaEquation}-${Number(!!this._alphaToCoverageEnabled)}`\r\n : `${Number(!!this._alphaToCoverageEnabled)}`;\r\n }\r\n}\r\n\r\nexport class WebGPURasterizerState extends WebGPURenderState implements RasterizerState {\r\n protected static _defaultState: WebGPURenderState = new WebGPURasterizerState();\r\n private _cullMode: FaceMode;\r\n private _depthClampEnabled: boolean;\r\n constructor() {\r\n super();\r\n this._cullMode = 'back';\r\n this._depthClampEnabled = false;\r\n }\r\n clone() {\r\n return new WebGPURasterizerState().setCullMode(this._cullMode).enableDepthClamp(this._depthClampEnabled);\r\n }\r\n get cullMode() {\r\n return this._cullMode;\r\n }\r\n set cullMode(val) {\r\n if (this._cullMode !== val) {\r\n this._cullMode = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n setCullMode(mode: FaceMode) {\r\n this.cullMode = mode;\r\n return this;\r\n }\r\n get depthClampEnabled() {\r\n return this._depthClampEnabled;\r\n }\r\n set depthClampEnabled(val) {\r\n this.enableDepthClamp(val);\r\n }\r\n enableDepthClamp(enable: boolean) {\r\n if (this._depthClampEnabled !== !!enable) {\r\n this._depthClampEnabled = !!enable;\r\n this.invalidateHash();\r\n }\r\n return this;\r\n }\r\n protected computeHash() {\r\n return `${this._cullMode}-${this._depthClampEnabled ? 1 : 0}`;\r\n }\r\n}\r\n\r\nexport class WebGPUDepthState extends WebGPURenderState implements DepthState {\r\n protected static _defaultState: WebGPURenderState = new WebGPUDepthState();\r\n private _testEnabled: boolean;\r\n private _writeEnabled: boolean;\r\n private _compareFunc: CompareFunc;\r\n private _depthBias: number;\r\n private _depthBiasSlopeScale: number;\r\n constructor() {\r\n super();\r\n this._testEnabled = true;\r\n this._writeEnabled = true;\r\n this._compareFunc = 'le';\r\n this._depthBias = 0;\r\n this._depthBiasSlopeScale = 0;\r\n }\r\n clone() {\r\n const other = new WebGPUDepthState();\r\n other.enableTest(this._testEnabled);\r\n other.enableWrite(this._writeEnabled);\r\n other.setCompareFunc(this._compareFunc);\r\n other.setDepthBias(this._depthBias);\r\n other.setDepthBiasSlopeScale(this._depthBiasSlopeScale);\r\n return other;\r\n }\r\n get testEnabled() {\r\n return this._testEnabled;\r\n }\r\n set testEnabled(val) {\r\n if (this._testEnabled !== !!val) {\r\n this._testEnabled = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get writeEnabled() {\r\n return this._writeEnabled;\r\n }\r\n set writeEnabled(val) {\r\n if (this._writeEnabled !== !!val) {\r\n this._writeEnabled = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get compareFunc() {\r\n return this._compareFunc;\r\n }\r\n set compareFunc(val) {\r\n if (this._compareFunc !== val) {\r\n this._compareFunc = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get depthBias() {\r\n return this._depthBias;\r\n }\r\n set depthBias(value) {\r\n this.setDepthBias(value);\r\n }\r\n setDepthBias(value: number) {\r\n if (this._depthBias !== value) {\r\n this._depthBias = value;\r\n this.invalidateHash();\r\n }\r\n return this;\r\n }\r\n get depthBiasSlopeScale() {\r\n return this._depthBiasSlopeScale;\r\n }\r\n set depthBiasSlopeScale(value) {\r\n this.setDepthBiasSlopeScale(value);\r\n }\r\n setDepthBiasSlopeScale(value: number) {\r\n if (this._depthBiasSlopeScale !== value) {\r\n this._depthBiasSlopeScale = value;\r\n this.invalidateHash();\r\n }\r\n return this;\r\n }\r\n enableTest(b: boolean) {\r\n this.testEnabled = b;\r\n return this;\r\n }\r\n enableWrite(b: boolean) {\r\n this.writeEnabled = b;\r\n return this;\r\n }\r\n setCompareFunc(func: CompareFunc) {\r\n this.compareFunc = func;\r\n return this;\r\n }\r\n protected computeHash() {\r\n return `${Number(this._testEnabled)}-${Number(this._writeEnabled)}-${this._compareFunc}-${\r\n this._depthBias\r\n }-${this._depthBiasSlopeScale}`;\r\n }\r\n}\r\n\r\nexport class WebGPUStencilState extends WebGPURenderState implements StencilState {\r\n protected static _defaultState: WebGPURenderState = new WebGPUStencilState();\r\n private _enabled: boolean;\r\n private _writeMask: number;\r\n private _failOp: StencilOp;\r\n private _failOpBack!: StencilOp;\r\n private _zFailOp: StencilOp;\r\n private _zFailOpBack!: StencilOp;\r\n private _passOp: StencilOp;\r\n private _passOpBack!: StencilOp;\r\n private _func: CompareFunc;\r\n private _funcBack!: CompareFunc;\r\n private _ref: number;\r\n private _readMask: number;\r\n constructor() {\r\n super();\r\n this._enabled = false;\r\n this._failOp = this.failOpBack = 'keep';\r\n this._zFailOp = this.zFailOpBack = 'keep';\r\n this._passOp = this.passOpBack = 'keep';\r\n this._func = this.funcBack = 'always';\r\n this._ref = 0;\r\n this._writeMask = 0xffffffff;\r\n this._readMask = 0xffffffff;\r\n }\r\n clone() {\r\n const other = new WebGPUStencilState();\r\n other.enable(this._enabled);\r\n other.setWriteMask(this._writeMask);\r\n other.setFrontOp(this._failOp, this._zFailOp, this._passOp);\r\n other.setBackOp(this._failOpBack, this._zFailOpBack, this._passOpBack);\r\n other.setFrontCompareFunc(this._func);\r\n other.setBackCompareFunc(this._funcBack);\r\n other.setReference(this._ref);\r\n other.setReadMask(this._readMask);\r\n return other;\r\n }\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n set enabled(val) {\r\n if (this._enabled !== !!val) {\r\n this._enabled = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get writeMask() {\r\n return this._writeMask;\r\n }\r\n set writeMask(val) {\r\n if (this._writeMask !== val) {\r\n this._writeMask = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get failOp() {\r\n return this._failOp;\r\n }\r\n set failOp(val) {\r\n if (this._failOp !== val) {\r\n this._failOp = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get failOpBack() {\r\n return this._failOpBack;\r\n }\r\n set failOpBack(val) {\r\n if (this._failOpBack !== val) {\r\n this._failOpBack = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get zFailOp() {\r\n return this._zFailOp;\r\n }\r\n set zFailOp(val) {\r\n if (this._zFailOp !== val) {\r\n this._zFailOp = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get zFailOpBack() {\r\n return this._zFailOpBack;\r\n }\r\n set zFailOpBack(val) {\r\n if (this._zFailOpBack !== val) {\r\n this._zFailOpBack = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get passOp() {\r\n return this._passOp;\r\n }\r\n set passOp(val) {\r\n if (this._passOp !== val) {\r\n this._passOp = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get passOpBack() {\r\n return this._passOpBack;\r\n }\r\n set passOpBack(val) {\r\n if (this._passOpBack !== val) {\r\n this._passOpBack = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get func() {\r\n return this._func;\r\n }\r\n set func(val) {\r\n if (this._func !== val) {\r\n this._func = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get funcBack() {\r\n return this._funcBack;\r\n }\r\n set funcBack(val) {\r\n if (this._funcBack !== val) {\r\n this._funcBack = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get ref() {\r\n return this._ref;\r\n }\r\n set ref(val) {\r\n if (this._ref !== val) {\r\n this._ref = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n get readMask() {\r\n return this._readMask;\r\n }\r\n set readMask(val) {\r\n if (this._readMask !== val) {\r\n this._readMask = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n enable(b: boolean) {\r\n this.enabled = b;\r\n return this;\r\n }\r\n setWriteMask(mask: number) {\r\n this.writeMask = mask;\r\n return this;\r\n }\r\n setFrontOp(fail: StencilOp, zfail: StencilOp, pass: StencilOp) {\r\n this.failOp = fail;\r\n this.zFailOp = zfail;\r\n this.passOp = pass;\r\n return this;\r\n }\r\n setBackOp(fail: StencilOp, zfail: StencilOp, pass: StencilOp) {\r\n this.failOpBack = fail;\r\n this.zFailOpBack = zfail;\r\n this.passOpBack = pass;\r\n return this;\r\n }\r\n setFrontCompareFunc(func: CompareFunc) {\r\n this.func = func;\r\n return this;\r\n }\r\n setBackCompareFunc(func: CompareFunc) {\r\n this.funcBack = func;\r\n return this;\r\n }\r\n setReference(ref: number) {\r\n this.ref = ref;\r\n return this;\r\n }\r\n setReadMask(mask: number) {\r\n this.readMask = mask;\r\n return this;\r\n }\r\n protected computeHash() {\r\n return this._enabled\r\n ? `${this.sideHash(false)}-${this.sideHash(true)}-${this.readMask.toString(\r\n 16\r\n )}-${this.writeMask.toString(16)}-${this.ref.toString(16)}`\r\n : '';\r\n }\r\n private sideHash(back: boolean): string {\r\n return back\r\n ? `${this._failOpBack}-${this._zFailOpBack}-${this._passOpBack}-${this._funcBack}`\r\n : `${this._failOp}-${this._zFailOp}-${this._passOp}-${this._func}`;\r\n }\r\n}\r\n\r\nexport class WebGPURenderStateSet implements RenderStateSet {\r\n private readonly _device: WebGPUDevice;\r\n colorState: Nullable<WebGPUColorState>;\r\n blendingState: Nullable<WebGPUBlendingState>;\r\n rasterizerState: Nullable<WebGPURasterizerState>;\r\n depthState: Nullable<WebGPUDepthState>;\r\n stencilState: Nullable<WebGPUStencilState>;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this.colorState = null;\r\n this.blendingState = null;\r\n this.rasterizerState = null;\r\n this.depthState = null;\r\n this.stencilState = null;\r\n }\r\n clone() {\r\n const newStateSet = new WebGPURenderStateSet(this._device);\r\n newStateSet.colorState = (this.colorState?.clone() as WebGPUColorState) ?? null;\r\n newStateSet.blendingState = (this.blendingState?.clone() as WebGPUBlendingState) ?? null;\r\n newStateSet.rasterizerState = (this.rasterizerState?.clone() as WebGPURasterizerState) ?? null;\r\n newStateSet.depthState = (this.depthState?.clone() as WebGPUDepthState) ?? null;\r\n newStateSet.stencilState = (this.stencilState?.clone() as WebGPUStencilState) ?? null;\r\n return newStateSet;\r\n }\r\n copyFrom(stateSet: RenderStateSet) {\r\n this.colorState = stateSet.colorState as WebGPUColorState;\r\n this.blendingState = stateSet.blendingState as WebGPUBlendingState;\r\n this.rasterizerState = stateSet.rasterizerState as WebGPURasterizerState;\r\n this.depthState = stateSet.depthState as WebGPUDepthState;\r\n this.stencilState = stateSet.stencilState as WebGPUStencilState;\r\n }\r\n get hash() {\r\n return `${this.colorState?.hash || ''}:${this.blendingState?.hash || ''}:${\r\n this.rasterizerState?.hash || ''\r\n }:${this.depthState?.hash || ''}:${this.stencilState?.hash || ''}`;\r\n }\r\n useColorState(state?: ColorState) {\r\n return (this.colorState = (state as WebGPUColorState) ?? this.colorState ?? new WebGPUColorState());\r\n }\r\n defaultColorState() {\r\n this.colorState = null;\r\n }\r\n useBlendingState(state?: BlendingState) {\r\n return (this.blendingState =\r\n (state as WebGPUBlendingState) ?? this.blendingState ?? new WebGPUBlendingState());\r\n }\r\n defaultBlendingState() {\r\n this.blendingState = null;\r\n }\r\n useRasterizerState(state?: RasterizerState) {\r\n return (this.rasterizerState =\r\n (state as WebGPURasterizerState) ?? this.rasterizerState ?? new WebGPURasterizerState());\r\n }\r\n defaultRasterizerState() {\r\n this.rasterizerState = null;\r\n }\r\n useDepthState(state?: DepthState) {\r\n return (this.depthState = (state as WebGPUDepthState) ?? this.depthState ?? new WebGPUDepthState());\r\n }\r\n defaultDepthState() {\r\n this.depthState = null;\r\n }\r\n useStencilState(state?: StencilState) {\r\n return (this.stencilState =\r\n (state as WebGPUStencilState) ?? this.stencilState ?? new WebGPUStencilState());\r\n }\r\n defaultStencilState() {\r\n this.stencilState = null;\r\n }\r\n apply(_force?: boolean) {\r\n this._device.setRenderStates(this);\r\n }\r\n}\r\n","import {\r\n compareFuncMap,\r\n stencilOpMap,\r\n primitiveTypeMap,\r\n faceModeMap,\r\n blendEquationMap,\r\n blendFuncMap\r\n} from './constants_webgpu';\r\nimport type { StencilOp, PrimitiveType, CompareFunc, BlendEquation, BlendFunc } from '@zephyr3d/device';\r\nimport { PBPrimitiveTypeInfo, PBPrimitiveType } from '@zephyr3d/device';\r\nimport * as rs from './renderstates_webgpu';\r\nimport type { WebGPUVertexLayout } from './vertexlayout_webgpu';\r\nimport type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPURenderStateSet } from './renderstates_webgpu';\r\nimport type { WebGPUFrameBuffer } from './framebuffer_webgpu';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\nconst stencilFormats = ['stencil8', 'depth24plus-stencil8', 'depth24unorm-stencil8', 'depth32float-stencil8'];\r\nconst depthFormats = [\r\n 'depth16unorm',\r\n 'depth24plus',\r\n 'depth24plus-stencil8',\r\n 'depth32float',\r\n 'depth24unorm-stencil8',\r\n 'depth32float-stencil8'\r\n];\r\nexport type FrameBufferInfo = {\r\n frameBuffer: Nullable<WebGPUFrameBuffer>;\r\n colorFormats: GPUTextureFormat[];\r\n depthFormat?: GPUTextureFormat;\r\n sampleCount: number;\r\n hash: Nullable<string>;\r\n clearHash: string;\r\n};\r\n\r\nexport class PipelineCache {\r\n private readonly _device: WebGPUDevice;\r\n private _renderPipelines: Record<string, GPURenderPipeline>;\r\n private _computePipelines: Record<string, GPUComputePipeline>;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._renderPipelines = {};\r\n this._computePipelines = {};\r\n }\r\n wipeCache() {\r\n this._renderPipelines = {};\r\n this._computePipelines = {};\r\n }\r\n fetchComputePipeline(program: WebGPUProgram) {\r\n const hash = this.getComputePipelineHash(program);\r\n let pipeline = this._computePipelines[hash];\r\n if (pipeline === undefined) {\r\n const shaderModule = program.getShaderModule();\r\n const desc: GPUComputePipelineDescriptor = {\r\n layout: shaderModule.pipelineLayout,\r\n compute: {\r\n module: shaderModule.csModule,\r\n entryPoint: 'main'\r\n }\r\n };\r\n pipeline = this._device.gpuCreateComputePipeline(desc);\r\n this._computePipelines[hash] = pipeline;\r\n }\r\n return pipeline;\r\n }\r\n fetchRenderPipeline(\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n primitiveType: PrimitiveType,\r\n frameBufferInfo: FrameBufferInfo\r\n ) {\r\n if (!frameBufferInfo.hash) {\r\n return null;\r\n }\r\n const vertexLayout = program.vertexAttributes ? vertexData : null;\r\n const hash = this.getRenderPipelineHash(\r\n frameBufferInfo.hash,\r\n program,\r\n vertexLayout,\r\n stateSet,\r\n primitiveType\r\n );\r\n let pipeline = this._renderPipelines[hash];\r\n if (pipeline === undefined) {\r\n const bufferLayouts = vertexLayout\r\n ? this._device.fetchVertexLayout(vertexLayout.getLayouts(program.vertexAttributes)!.layoutHash)\r\n : null;\r\n const shaderModule = program.getShaderModule();\r\n const vertex: GPUVertexState = {\r\n module: shaderModule.vsModule,\r\n entryPoint: 'main'\r\n };\r\n if (bufferLayouts) {\r\n vertex.buffers = bufferLayouts;\r\n }\r\n const primitiveState = this.createPrimitiveState(vertexLayout, stateSet, primitiveType);\r\n const depthStencilState = this.createDepthStencilState(frameBufferInfo.depthFormat, stateSet);\r\n const colorTargetStates = frameBufferInfo.colorFormats.map((val) =>\r\n this.createColorTargetState(stateSet, val)\r\n );\r\n const desc: GPURenderPipelineDescriptor = {\r\n label: hash,\r\n layout: shaderModule.pipelineLayout,\r\n vertex,\r\n primitive: primitiveState,\r\n depthStencil: depthStencilState,\r\n multisample: this.createMultisampleState(frameBufferInfo.sampleCount, stateSet),\r\n fragment: {\r\n module: shaderModule.fsModule,\r\n entryPoint: 'main',\r\n targets: colorTargetStates\r\n }\r\n };\r\n pipeline = this._device.gpuCreateRenderPipeline(desc);\r\n this._renderPipelines[hash] = pipeline;\r\n }\r\n return pipeline;\r\n }\r\n private createPrimitiveState(\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n primitiveType: PrimitiveType\r\n ) {\r\n const topology = primitiveTypeMap[primitiveType];\r\n if (!topology) {\r\n throw new Error(`createPrimitiveState() failed: invalid primitive type: ${primitiveType}`);\r\n }\r\n const rasterizerState =\r\n stateSet?.rasterizerState || (rs.WebGPURasterizerState.defaultState as rs.WebGPURasterizerState);\r\n const cullMode = faceModeMap[rasterizerState.cullMode];\r\n if (!cullMode) {\r\n throw new Error(`createPrimitiveState() failed: invalid cull mode: ${rasterizerState.cullMode}`);\r\n }\r\n const frontFace = this._device.isWindingOrderReversed() ? 'cw' : 'ccw';\r\n const state: GPUPrimitiveState = {\r\n topology,\r\n frontFace,\r\n cullMode\r\n };\r\n if (this._device.device.features.has('depth-clip-control')) {\r\n state.unclippedDepth = rasterizerState.depthClampEnabled;\r\n }\r\n if (topology === 'triangle-strip' || topology === 'line-strip') {\r\n state.stripIndexFormat = vertexData?.getIndexBuffer()?.indexType === typeU16 ? 'uint16' : 'uint32';\r\n }\r\n return state;\r\n }\r\n private createMultisampleState(sampleCount: number, stateSet: WebGPURenderStateSet) {\r\n return {\r\n count: sampleCount,\r\n alphaToCoverageEnabled:\r\n sampleCount > 1 &&\r\n (stateSet?.blendingState ?? (rs.WebGPUBlendingState.defaultState as rs.WebGPUBlendingState))\r\n .alphaToCoverageEnabled\r\n };\r\n }\r\n private createDepthStencilState(depthFormat: GPUTextureFormat | undefined, stateSet: WebGPURenderStateSet) {\r\n if (!depthFormat) {\r\n return undefined;\r\n }\r\n const depthState = stateSet?.depthState || (rs.WebGPUDepthState.defaultState as rs.WebGPUDepthState);\r\n const stencilState =\r\n stateSet?.stencilState || (rs.WebGPUStencilState.defaultState as rs.WebGPUStencilState);\r\n const hasStencil = stencilFormats.indexOf(depthFormat) >= 0;\r\n const hasDepth = depthFormats.indexOf(depthFormat) >= 0;\r\n const depthWriteEnabled = hasDepth ? depthState.writeEnabled : false;\r\n const depthCompare: GPUCompareFunction =\r\n hasDepth && depthState.testEnabled ? compareFuncMap[depthState.compareFunc] : 'always';\r\n const state: GPUDepthStencilState = {\r\n format: depthFormat,\r\n depthWriteEnabled,\r\n depthCompare\r\n };\r\n if (depthState.depthBias !== 0 || depthState.depthBiasSlopeScale !== 0) {\r\n state.depthBias = depthState.depthBias;\r\n state.depthBiasSlopeScale = depthState.depthBiasSlopeScale;\r\n }\r\n if (hasStencil) {\r\n const stencilFront = stencilState.enabled\r\n ? this.createStencilFaceState(\r\n stencilState.func,\r\n stencilState.failOp,\r\n stencilState.zFailOp,\r\n stencilState.passOp\r\n )\r\n : undefined;\r\n const stencilBack = stencilState.enabled\r\n ? this.createStencilFaceState(\r\n stencilState.funcBack,\r\n stencilState.failOpBack,\r\n stencilState.zFailOpBack,\r\n stencilState.passOpBack\r\n )\r\n : undefined;\r\n const stencilReadMask = stencilState.enabled ? stencilState.readMask : undefined;\r\n const stencilWriteMask = stencilState.enabled ? stencilState.writeMask : undefined;\r\n state.stencilFront = stencilFront;\r\n state.stencilBack = stencilBack;\r\n state.stencilReadMask = stencilReadMask;\r\n state.stencilWriteMask = stencilWriteMask;\r\n }\r\n return state;\r\n }\r\n private createStencilFaceState(\r\n func: CompareFunc,\r\n failOp: StencilOp,\r\n zFailOp: StencilOp,\r\n passOp: StencilOp\r\n ) {\r\n return {\r\n compare: compareFuncMap[func],\r\n failOp: stencilOpMap[failOp],\r\n depthFailOp: stencilOpMap[zFailOp],\r\n passOp: stencilOpMap[passOp]\r\n };\r\n }\r\n private createColorTargetState(stateSet: WebGPURenderStateSet, format: GPUTextureFormat) {\r\n const blendingState =\r\n stateSet?.blendingState || (rs.WebGPUBlendingState.defaultState as rs.WebGPUBlendingState);\r\n const colorState = stateSet?.colorState || (rs.WebGPUColorState.defaultState as rs.WebGPUColorState);\r\n const r = colorState.redMask ? GPUColorWrite.RED : 0;\r\n const g = colorState.greenMask ? GPUColorWrite.GREEN : 0;\r\n const b = colorState.blueMask ? GPUColorWrite.BLUE : 0;\r\n const a = colorState.alphaMask ? GPUColorWrite.ALPHA : 0;\r\n const state: GPUColorTargetState = {\r\n format: format,\r\n writeMask: r | g | b | a\r\n };\r\n if (blendingState.enabled) {\r\n state.blend = this.createBlendState(blendingState as rs.WebGPUBlendingState);\r\n }\r\n return state;\r\n }\r\n private createBlendState(blendingState: rs.WebGPUBlendingState) {\r\n return {\r\n color: this.createBlendComponent(\r\n blendingState.rgbEquation,\r\n blendingState.srcBlendRGB,\r\n blendingState.dstBlendRGB\r\n ),\r\n alpha: this.createBlendComponent(\r\n blendingState.alphaEquation,\r\n blendingState.srcBlendAlpha,\r\n blendingState.dstBlendAlpha\r\n )\r\n };\r\n }\r\n private createBlendComponent(op: BlendEquation, srcFunc: BlendFunc, dstFunc: BlendFunc) {\r\n const operation = blendEquationMap[op];\r\n if (!operation) {\r\n throw new Error(`createBlendComponent() failed: invalid blend op: ${op}`);\r\n }\r\n const srcFactor = blendFuncMap[srcFunc];\r\n if (!srcFactor) {\r\n throw new Error(`createBlendComponent() failed: invalid source blend func ${srcFunc}`);\r\n }\r\n const dstFactor = blendFuncMap[dstFunc];\r\n if (!dstFactor) {\r\n throw new Error(`createBlendComponent() failed: invalid dest blend func ${dstFunc}`);\r\n }\r\n return {\r\n operation,\r\n srcFactor,\r\n dstFactor\r\n };\r\n }\r\n private getRenderPipelineHash(\r\n fbHash: string,\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n primitiveType: PrimitiveType\r\n ) {\r\n const programHash = program.hash;\r\n const vertexHash = vertexData?.getLayouts(program.vertexAttributes)?.layoutHash || '';\r\n const stateHash = stateSet?.hash || '';\r\n return `${programHash}:${vertexHash}:${fbHash}:${primitiveType}:${stateHash}:${Number(\r\n this._device.isWindingOrderReversed()\r\n )}`;\r\n }\r\n private getComputePipelineHash(program: WebGPUProgram) {\r\n return program.hash;\r\n }\r\n}\r\n","import type { Immutable, Nullable } from '@zephyr3d/base';\r\nimport { CubeFace } from '@zephyr3d/base';\r\nimport type { FrameBuffer, FrameBufferOptions, BaseTexture } from '@zephyr3d/device';\r\nimport { WebGPUObject } from './gpuobject_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\n\r\ntype FrameBufferTextureAttachment = {\r\n texture: BaseTexture;\r\n face?: number;\r\n layer?: number;\r\n level?: number;\r\n generateMipmaps?: boolean;\r\n};\r\n\r\ntype WebGPUFrameBufferOptions = {\r\n colorAttachments?: Nullable<FrameBufferTextureAttachment[]>;\r\n depthAttachment?: Nullable<FrameBufferTextureAttachment>;\r\n sampleCount?: number;\r\n ignoreDepthStencil?: boolean;\r\n};\r\n\r\nexport class WebGPUFrameBuffer extends WebGPUObject<unknown> implements FrameBuffer<unknown> {\r\n private readonly _options: WebGPUFrameBufferOptions;\r\n private readonly _width: number;\r\n private readonly _height: number;\r\n private _bindFlag: number;\r\n private readonly _hash: string;\r\n private _msaaColorTextures: Nullable<GPUTexture[]>;\r\n private _msaaDepthTexture: Nullable<GPUTexture>;\r\n constructor(\r\n device: WebGPUDevice,\r\n colorAttachments: BaseTexture[],\r\n depthAttachment: BaseTexture,\r\n opt?: FrameBufferOptions\r\n ) {\r\n super(device);\r\n if (colorAttachments.length > 0 && colorAttachments.findIndex((val) => !val) >= 0) {\r\n throw new Error('WebGPUFramebuffer(): invalid color attachments');\r\n }\r\n this._object = null;\r\n this._options = {\r\n colorAttachments:\r\n colorAttachments?.length > 0\r\n ? colorAttachments.map((value) => ({\r\n texture: value,\r\n face: 0,\r\n layer: 0,\r\n level: 0,\r\n generateMipmaps: true\r\n }))\r\n : null,\r\n depthAttachment: depthAttachment\r\n ? {\r\n texture: depthAttachment,\r\n face: 0,\r\n layer: 0,\r\n level: 0,\r\n generateMipmaps: false\r\n }\r\n : null,\r\n sampleCount: opt?.sampleCount ?? 1,\r\n ignoreDepthStencil: opt?.ignoreDepthStencil ?? false\r\n };\r\n if (!this._options.colorAttachments && !this._options.depthAttachment) {\r\n throw new Error('WebGPUFramebuffer(): colorAttachments or depthAttachment must be specified');\r\n }\r\n this._width = this._options.colorAttachments\r\n ? this._options.colorAttachments[0].texture.width\r\n : this._options.depthAttachment!.texture.width;\r\n this._height = this._options.colorAttachments\r\n ? this._options.colorAttachments[0].texture.height\r\n : this._options.depthAttachment!.texture.height;\r\n if (\r\n (this._options.colorAttachments &&\r\n this._options.colorAttachments.findIndex(\r\n (val) => val.texture.width !== this._width || val.texture.height !== this._height\r\n ) >= 0) ||\r\n (this._options.depthAttachment &&\r\n (this._options.depthAttachment.texture.width !== this._width ||\r\n this._options.depthAttachment.texture.height !== this._height))\r\n ) {\r\n throw new Error('WebGPUFramebuffer(): attachment textures must have same width and height');\r\n }\r\n this._bindFlag = 0;\r\n this._msaaColorTextures = null;\r\n this._msaaDepthTexture = null;\r\n const colorAttachmentHash =\r\n this._options.colorAttachments?.map((tex) => tex.texture.format).join(':') ?? '';\r\n const depthAttachmentHash = this._options.depthAttachment?.texture.format ?? '';\r\n this._hash = `${colorAttachmentHash}-${depthAttachmentHash}-${this._options.sampleCount ?? 1}`;\r\n this._init();\r\n }\r\n getOptions(): Immutable<WebGPUFrameBufferOptions> {\r\n return this._options;\r\n }\r\n get bindFlag() {\r\n return this._bindFlag;\r\n }\r\n getHash() {\r\n return this._hash;\r\n }\r\n getWidth() {\r\n const attachment = this._options.colorAttachments?.[0] ?? this._options.depthAttachment;\r\n return attachment ? Math.max(attachment.texture.width >> attachment.level!, 1) : 0;\r\n }\r\n getHeight() {\r\n const attachment = this._options.colorAttachments?.[0] ?? this._options.depthAttachment;\r\n return attachment ? Math.max(attachment.texture.height >> attachment.level!, 1) : 0;\r\n }\r\n restore() {\r\n if (this._options?.depthAttachment?.texture?.disposed) {\r\n this._options.depthAttachment.texture.reload();\r\n }\r\n if (this._options?.colorAttachments) {\r\n for (const k of this._options.colorAttachments) {\r\n if (k?.texture?.disposed) {\r\n k.texture.reload();\r\n }\r\n }\r\n }\r\n if (!this._device.isContextLost()) {\r\n this._init();\r\n }\r\n }\r\n destroy() {\r\n this._object = null;\r\n if (this._msaaColorTextures) {\r\n for (const tex of this._msaaColorTextures) {\r\n tex.destroy();\r\n }\r\n this._msaaColorTextures = null;\r\n }\r\n if (this._msaaDepthTexture) {\r\n this._msaaDepthTexture.destroy();\r\n this._msaaDepthTexture = null;\r\n }\r\n }\r\n setColorAttachmentGenerateMipmaps(index: number, generateMipmaps: boolean) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k) {\r\n k.generateMipmaps = !!generateMipmaps;\r\n }\r\n }\r\n getColorAttachmentGenerateMipmaps(index: number) {\r\n return this._options.colorAttachments?.[index]?.generateMipmaps ?? false;\r\n }\r\n setColorAttachmentCubeFace(index: number, face: CubeFace) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.face !== face) {\r\n k.face = face;\r\n this._bindFlag++;\r\n }\r\n }\r\n getColorAttachmentCubeFace(index: number) {\r\n return (this._options.colorAttachments?.[index].face as CubeFace) ?? CubeFace.PX;\r\n }\r\n setColorAttachmentMipLevel(index: number, level: number) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.level !== level) {\r\n k.level = level;\r\n this._bindFlag++;\r\n }\r\n }\r\n getColorAttachmentMipLevel(index: number) {\r\n return this._options.colorAttachments?.[index].level ?? 0;\r\n }\r\n setColorAttachmentLayer(index: number, layer: number) {\r\n const k = this._options.colorAttachments?.[index];\r\n if (k && k.layer !== layer) {\r\n k.layer = layer;\r\n this._bindFlag++;\r\n }\r\n }\r\n getColorAttachmentLayer(index: number) {\r\n return this._options.colorAttachments?.[index].layer ?? 0;\r\n }\r\n setDepthAttachmentCubeFace(face: CubeFace) {\r\n const k = this._options.depthAttachment;\r\n if (k && k.face !== face) {\r\n k.face = face;\r\n this._bindFlag++;\r\n }\r\n }\r\n getDepthAttachmentCubeFace() {\r\n return (this._options.depthAttachment?.face as CubeFace) ?? CubeFace.PX;\r\n }\r\n setDepthAttachmentLayer(layer: number) {\r\n const k = this._options.depthAttachment;\r\n if (k && k.layer !== layer) {\r\n k.layer = layer;\r\n this._bindFlag++;\r\n }\r\n }\r\n getDepthAttachmentLayer() {\r\n return this._options.depthAttachment?.layer ?? 0;\r\n }\r\n getDepthAttachment() {\r\n return this._options?.depthAttachment?.texture || null;\r\n }\r\n getColorAttachments() {\r\n return this._options?.colorAttachments?.map((val) => val?.texture || null) || [];\r\n }\r\n getColorAttachment<T extends BaseTexture>(index: number): T {\r\n return (this.getColorAttachments()[index] as unknown as T) ?? null;\r\n }\r\n getMSAADepthAttachment() {\r\n return this._msaaDepthTexture;\r\n }\r\n getMSAAColorAttacments() {\r\n return this._msaaColorTextures;\r\n }\r\n getColorFormats() {\r\n return (\r\n this._options?.colorAttachments?.map((val) => (val.texture as WebGPUBaseTexture).gpuFormat!) ?? null\r\n );\r\n }\r\n getDepthFormat() {\r\n return (this._options.depthAttachment?.texture as WebGPUBaseTexture)?.gpuFormat ?? null;\r\n }\r\n bind() {\r\n return true;\r\n }\r\n unbind() {}\r\n private _init() {\r\n if (this._options.sampleCount! > 1) {\r\n this._msaaColorTextures = [];\r\n for (const colorAttachment of this._options.colorAttachments!) {\r\n const msaaTexture = (this.device as WebGPUDevice).gpuCreateTexture({\r\n size: {\r\n width: this._width,\r\n height: this._height,\r\n depthOrArrayLayers: 1\r\n },\r\n format: (colorAttachment.texture as WebGPUBaseTexture).gpuFormat!,\r\n mipLevelCount: 1,\r\n sampleCount: this._options.sampleCount,\r\n dimension: '2d',\r\n usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT\r\n });\r\n this._msaaColorTextures.push(msaaTexture);\r\n }\r\n if (this._options.depthAttachment) {\r\n const msaaDepthTexture = (this.device as WebGPUDevice).gpuCreateTexture({\r\n size: {\r\n width: this._width,\r\n height: this._height,\r\n depthOrArrayLayers: 1\r\n },\r\n format: (this._options.depthAttachment.texture as WebGPUBaseTexture).gpuFormat!,\r\n mipLevelCount: 1,\r\n sampleCount: this._options.sampleCount,\r\n dimension: '2d',\r\n usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT\r\n });\r\n this._msaaDepthTexture = msaaDepthTexture;\r\n }\r\n }\r\n this._object = {};\r\n }\r\n isFramebuffer(): this is FrameBuffer {\r\n return true;\r\n }\r\n getSampleCount() {\r\n return this._options.sampleCount!;\r\n }\r\n}\r\n","import type { IndexBuffer } from '@zephyr3d/device';\r\nimport { PBPrimitiveTypeInfo, PBPrimitiveType, GPUResourceUsageFlags } from '@zephyr3d/device';\r\nimport { WebGPUBuffer } from './buffer_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\nconst typeU32 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U32);\r\n\r\nexport class WebGPUIndexBuffer extends WebGPUBuffer implements IndexBuffer {\r\n readonly indexType: PBPrimitiveTypeInfo;\r\n readonly length: number;\r\n constructor(\r\n device: WebGPUDevice,\r\n data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>,\r\n usage?: number\r\n ) {\r\n if (!(data instanceof Uint16Array) && !(data instanceof Uint32Array)) {\r\n throw new Error('invalid index data');\r\n }\r\n super(device, GPUResourceUsageFlags.BF_INDEX | (usage ?? 0), data);\r\n this.indexType = data instanceof Uint16Array ? typeU16 : typeU32;\r\n this.length = data.length;\r\n }\r\n}\r\n","import type { BindGroupLayout } from '@zephyr3d/device';\r\nimport { ShaderType } from '@zephyr3d/device';\r\nimport { textureFormatMap } from './constants_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Immutable } from '@zephyr3d/base';\r\n\r\nexport class BindGroupCache {\r\n private readonly _device: WebGPUDevice;\r\n private _bindGroupLayoutCache: Record<string, [GPUBindGroupLayoutDescriptor, GPUBindGroupLayout]>;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._bindGroupLayoutCache = {};\r\n }\r\n fetchBindGroupLayout(desc: Immutable<BindGroupLayout>): [GPUBindGroupLayoutDescriptor, GPUBindGroupLayout] {\r\n const hash = desc ? this.getLayoutHash(desc) : '';\r\n let bgl = this._bindGroupLayoutCache[hash];\r\n if (!bgl) {\r\n bgl = this.createBindGroupLayout(desc);\r\n if (bgl) {\r\n this._bindGroupLayoutCache[hash] = bgl;\r\n } else {\r\n throw new Error(`fetchBindGroupLayout() failed: hash: ${hash}`);\r\n }\r\n }\r\n return bgl;\r\n }\r\n private getLayoutHash(desc: Immutable<BindGroupLayout>) {\r\n let hash = '';\r\n for (const entry of desc.entries) {\r\n let s = `${entry.binding}:${entry.visibility}:`;\r\n if (entry.buffer) {\r\n s += `b:${entry.buffer.type}:${entry.buffer.hasDynamicOffset}:${entry.buffer.minBindingSize}`;\r\n } else if (entry.sampler) {\r\n s += `s${entry.sampler.type}:`;\r\n } else if (entry.texture) {\r\n s += `t${entry.texture.sampleType}-${entry.texture.viewDimension}-${Number(\r\n !!entry.texture.multisampled\r\n )}:`;\r\n } else if (entry.storageTexture) {\r\n s += `k${entry.storageTexture.access}-${entry.storageTexture.format}-${entry.storageTexture.viewDimension}:`;\r\n } else if (entry.externalTexture) {\r\n s += `v:`;\r\n }\r\n hash = `${hash} ${s}`;\r\n }\r\n return hash;\r\n }\r\n private createBindGroupLayout(\r\n desc: Immutable<BindGroupLayout>\r\n ): [GPUBindGroupLayoutDescriptor, GPUBindGroupLayout] {\r\n const layoutDescriptor: GPUBindGroupLayoutDescriptor = {\r\n entries:\r\n desc?.entries.map((entry) => {\r\n const binding = entry.binding;\r\n const visibility =\r\n (entry.visibility & ShaderType.Vertex ? GPUShaderStage.VERTEX : 0) |\r\n (entry.visibility & ShaderType.Fragment ? GPUShaderStage.FRAGMENT : 0) |\r\n (entry.visibility & ShaderType.Compute ? GPUShaderStage.COMPUTE : 0);\r\n const buffer: GPUBufferBindingLayout | undefined = entry.buffer\r\n ? {\r\n type: entry.buffer.type,\r\n hasDynamicOffset: entry.buffer.hasDynamicOffset,\r\n // minBindingSize: entry.buffer.uniformLayout.byteSize\r\n minBindingSize: Number(entry.buffer.minBindingSize) || 0\r\n }\r\n : undefined;\r\n const sampler: GPUSamplerBindingLayout | undefined = entry.sampler\r\n ? {\r\n type: entry.sampler.type\r\n }\r\n : undefined;\r\n const texture: GPUTextureBindingLayout | undefined = entry.texture\r\n ? {\r\n sampleType: entry.texture.sampleType,\r\n viewDimension: entry.texture.viewDimension\r\n }\r\n : undefined;\r\n const storageTexture: GPUStorageTextureBindingLayout | undefined = entry.storageTexture\r\n ? {\r\n access: entry.storageTexture.access,\r\n viewDimension: entry.storageTexture.viewDimension,\r\n format: textureFormatMap[entry.storageTexture.format]\r\n }\r\n : undefined;\r\n const externalTexture: GPUExternalTextureBindingLayout | undefined = entry.externalTexture\r\n ? {}\r\n : undefined;\r\n const t: GPUBindGroupLayoutEntry = {\r\n binding,\r\n visibility\r\n };\r\n if (buffer) {\r\n t.buffer = buffer;\r\n } else if (sampler) {\r\n t.sampler = sampler;\r\n } else if (texture) {\r\n t.texture = texture;\r\n } else if (storageTexture) {\r\n t.storageTexture = storageTexture;\r\n } else if (externalTexture) {\r\n t.externalTexture = externalTexture;\r\n }\r\n return t;\r\n }) || []\r\n };\r\n if (desc?.label) {\r\n layoutDescriptor.label = desc.label;\r\n }\r\n return [layoutDescriptor, this._device.device.createBindGroupLayout(layoutDescriptor)];\r\n }\r\n}\r\n","import { hashToVertexFormat } from './constants_webgpu';\r\n\r\nexport class VertexLayoutCache {\r\n private _layouts: Record<string, GPUVertexBufferLayout[]>;\r\n constructor() {\r\n this._layouts = {};\r\n }\r\n fetchVertexLayout(hash: string) {\r\n let layouts: GPUVertexBufferLayout[] = this._layouts[hash];\r\n if (!layouts) {\r\n layouts = [];\r\n hash.split(':').forEach((l) => {\r\n const parts = l.split('-');\r\n const layout = {\r\n arrayStride: Number(parts[0]),\r\n stepMode: (Number(parts[1]) ? 'instance' : 'vertex') as GPUVertexStepMode,\r\n attributes: [] as GPUVertexAttribute[]\r\n };\r\n for (let i = 2; i < parts.length; i += 3) {\r\n layout.attributes.push({\r\n format: hashToVertexFormat[parts[i]] as GPUVertexFormat,\r\n offset: Number(parts[i + 1]),\r\n shaderLocation: Number(parts[i + 2])\r\n });\r\n }\r\n layouts.push(layout);\r\n });\r\n this._layouts[hash] = layouts;\r\n }\r\n return layouts;\r\n }\r\n}\r\n","import { WebGPUObject } from './gpuobject_webgpu';\r\nimport { textureWrappingMap, textureFilterMap, compareFuncMap } from './constants_webgpu';\r\nimport type { SamplerOptions, TextureSampler } from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { RequireOptionals } from '@zephyr3d/base';\r\n\r\nexport class WebGPUTextureSampler extends WebGPUObject<GPUSampler> implements TextureSampler<GPUSampler> {\r\n private readonly _options: RequireOptionals<SamplerOptions>;\r\n constructor(device: WebGPUDevice, options: SamplerOptions) {\r\n super(device);\r\n this._options = Object.assign(\r\n {\r\n addressU: 'clamp',\r\n addressV: 'clamp',\r\n addressW: 'clamp',\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'none',\r\n lodMin: 0,\r\n lodMax: 32,\r\n compare: null,\r\n maxAnisotropy: 1\r\n },\r\n options || {}\r\n );\r\n this._load();\r\n }\r\n get hash() {\r\n return this._object ? this._device.gpuGetObjectHash(this._object) : 0;\r\n }\r\n get addressModeU() {\r\n return this._options.addressU;\r\n }\r\n get addressModeV() {\r\n return this._options.addressV;\r\n }\r\n get addressModeW() {\r\n return this._options.addressW;\r\n }\r\n get magFilter() {\r\n return this._options.magFilter;\r\n }\r\n get minFilter() {\r\n return this._options.minFilter;\r\n }\r\n get mipFilter() {\r\n return this._options.mipFilter;\r\n }\r\n get lodMin() {\r\n return this._options.lodMin;\r\n }\r\n get lodMax() {\r\n return this._options.lodMax;\r\n }\r\n get compare() {\r\n return this._options.compare;\r\n }\r\n get maxAnisotropy() {\r\n return this._options.maxAnisotropy;\r\n }\r\n destroy() {\r\n this._object = null;\r\n }\r\n restore() {\r\n if (!this._device.isContextLost()) {\r\n this._load();\r\n }\r\n }\r\n private _load() {\r\n this._object = this._device.gpuCreateSampler({\r\n addressModeU: textureWrappingMap[this._options.addressU],\r\n addressModeV: textureWrappingMap[this._options.addressV],\r\n addressModeW: textureWrappingMap[this._options.addressW],\r\n magFilter: textureFilterMap[this._options.magFilter],\r\n minFilter: textureFilterMap[this._options.minFilter],\r\n mipmapFilter: textureFilterMap[this._options.mipFilter],\r\n lodMinClamp: this._options.lodMin,\r\n lodMaxClamp: this._options.lodMax,\r\n compare: this._options.compare ? compareFuncMap[this._options.compare] : undefined,\r\n maxAnisotropy: this._options.maxAnisotropy\r\n });\r\n return !!this._object;\r\n }\r\n isSampler(): this is TextureSampler {\r\n return true;\r\n }\r\n}\r\n","import { WebGPUTextureSampler } from './sampler_webgpu';\r\nimport type { SamplerOptions } from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nexport class SamplerCache {\r\n private readonly _device: WebGPUDevice;\r\n private _samplers: Record<string, WebGPUTextureSampler>;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._samplers = {};\r\n }\r\n fetchSampler(options: SamplerOptions) {\r\n const hash = this.hash(options);\r\n let sampler = this._samplers[hash];\r\n if (!sampler) {\r\n sampler = this.createSampler(options);\r\n this._samplers[hash] = sampler;\r\n }\r\n return sampler;\r\n }\r\n private hash(options: SamplerOptions) {\r\n const addressU = options.addressU ? String(options.addressU) : '';\r\n const addressV = options.addressV ? String(options.addressV) : '';\r\n const addressW = options.addressW ? String(options.addressW) : '';\r\n const magFilter = options.magFilter ? String(options.magFilter) : '';\r\n const minFilter = options.minFilter ? String(options.minFilter) : '';\r\n const mipFilter = options.mipFilter ? String(options.mipFilter) : '';\r\n const lodMin = options.lodMin ? String(options.lodMin) : '';\r\n const lodMax = options.lodMax ? String(options.lodMax) : '';\r\n const compare = options.compare ? String(options.compare) : '';\r\n const maxAnisotropy = options.maxAnisotropy ? String(options.maxAnisotropy) : '';\r\n return `${addressU}:${addressV}:${addressW}:${magFilter}:${minFilter}:${mipFilter}:${lodMin}:${lodMax}:${compare}:${maxAnisotropy}`;\r\n }\r\n private createSampler(options: SamplerOptions) {\r\n return new WebGPUTextureSampler(this._device, options);\r\n }\r\n}\r\n","import type { Immutable, Nullable, TypedArray, Vector4 } from '@zephyr3d/base';\r\nimport type { PrimitiveType, DeviceViewport } from '@zephyr3d/device';\r\nimport {\r\n hasStencilChannel,\r\n PBPrimitiveTypeInfo,\r\n PBPrimitiveType,\r\n isIntegerTextureFormat,\r\n isSignedTextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPURenderStateSet } from './renderstates_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUFrameBuffer } from './framebuffer_webgpu';\r\nimport type { WebGPUVertexLayout } from './vertexlayout_webgpu';\r\nimport type { WebGPUIndexBuffer } from './indexbuffer_webgpu';\r\nimport type { FrameBufferInfo } from './pipeline_cache';\r\nimport { textureFormatInvMap } from './constants_webgpu';\r\nimport { WebGPUClearQuad } from './utils_webgpu';\r\n\r\nconst VALIDATION_NEED_NEW_PASS = 1 << 0;\r\nconst VALIDATION_FAILED = 1 << 1;\r\n\r\nconst typeU16 = PBPrimitiveTypeInfo.getCachedTypeInfo(PBPrimitiveType.U16);\r\n\r\nexport class WebGPURenderPass {\r\n private readonly _device: WebGPUDevice;\r\n private _renderCommandEncoder: Nullable<GPUCommandEncoder>;\r\n private _renderPassEncoder: Nullable<GPURenderPassEncoder>;\r\n private _fbBindFlag: Nullable<number>;\r\n private _currentViewport: Nullable<DeviceViewport>;\r\n private _currentScissor: Nullable<DeviceViewport>;\r\n private _frameBufferInfo: FrameBufferInfo;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._renderCommandEncoder = null;\r\n this._renderPassEncoder = null;\r\n this._fbBindFlag = null;\r\n this._currentViewport = null;\r\n this._currentScissor = null;\r\n this._frameBufferInfo = this.createFrameBufferInfo(null);\r\n }\r\n get active() {\r\n return !!this._renderPassEncoder;\r\n }\r\n private createFrameBufferInfo(fb: Nullable<WebGPUFrameBuffer>) {\r\n const info: FrameBufferInfo = !fb\r\n ? {\r\n frameBuffer: null,\r\n colorFormats: [this._device.backbufferFormat],\r\n depthFormat: this._device.backbufferDepthFormat,\r\n sampleCount: this._device.sampleCount,\r\n hash: null,\r\n clearHash: 'f'\r\n }\r\n : {\r\n frameBuffer: fb,\r\n colorFormats: fb.getColorAttachments().map((val) => (val as WebGPUBaseTexture).gpuFormat!),\r\n depthFormat: (fb.getDepthAttachment() as WebGPUBaseTexture)?.gpuFormat!,\r\n sampleCount: fb.getOptions().sampleCount ?? 1,\r\n hash: null,\r\n clearHash: fb\r\n .getColorAttachments()\r\n .map((val) => {\r\n const fmt = textureFormatInvMap[(val as WebGPUBaseTexture).gpuFormat!];\r\n return isIntegerTextureFormat(fmt) ? (isSignedTextureFormat(fmt) ? 'i' : 'u') : 'f';\r\n })\r\n .join('')\r\n };\r\n info.hash = `${info.colorFormats.join('-')}:${info.depthFormat}:${info.sampleCount}`;\r\n return info;\r\n }\r\n setFramebuffer(fb: WebGPUFrameBuffer) {\r\n if (this._frameBufferInfo.frameBuffer !== fb) {\r\n this.end();\r\n this._frameBufferInfo = this.createFrameBufferInfo(fb);\r\n this.setViewport(null);\r\n this.setScissor(null);\r\n }\r\n }\r\n getFramebuffer() {\r\n return this._frameBufferInfo.frameBuffer;\r\n }\r\n setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n if (!vp || (!Array.isArray(vp) && (vp as DeviceViewport).default)) {\r\n this._currentViewport = {\r\n x: 0,\r\n y: 0,\r\n width: this._device.deviceXToScreen(this._device.drawingBufferWidth),\r\n height: this._device.deviceYToScreen(this._device.drawingBufferHeight),\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(vp)) {\r\n this._currentViewport = {\r\n x: vp[0],\r\n y: vp[1],\r\n width: vp[2],\r\n height: vp[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentViewport = Object.assign({ default: false }, vp as DeviceViewport);\r\n }\r\n }\r\n const vx = this._device.screenXToDevice(this._currentViewport.x);\r\n const vy = this._device.screenYToDevice(this._currentViewport.y);\r\n const vw = this._device.screenXToDevice(this._currentViewport.width);\r\n const vh = this._device.screenYToDevice(this._currentViewport.height);\r\n /*\r\n if (vx < 0 || vy < 0 || vw > this._device.drawingBufferWidth || vh > this._device.drawingBufferHeight) {\r\n console.error(\r\n `** VIEWPORT ERROR **: (${vx}, ${vy}, ${vw}, ${vh}) => (0, 0, ${this._device.drawingBufferWidth}, ${this._device.drawingBufferHeight})`\r\n );\r\n }\r\n */\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.setViewport(vx, this._device.drawingBufferHeight - vy - vh, vw, vh, 0, 1);\r\n }\r\n }\r\n getViewport() {\r\n return Object.assign({}, this._currentViewport);\r\n }\r\n setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n const backBufferWidth = this._device.deviceXToScreen(this._device.drawingBufferWidth);\r\n const backBufferHeight = this._device.deviceYToScreen(this._device.drawingBufferHeight);\r\n if (\r\n scissor === null ||\r\n scissor === undefined ||\r\n (!Array.isArray(scissor) && (scissor as DeviceViewport).default)\r\n ) {\r\n this._currentScissor = {\r\n x: 0,\r\n y: 0,\r\n width: backBufferWidth,\r\n height: backBufferHeight,\r\n default: true\r\n };\r\n } else {\r\n if (Array.isArray(scissor)) {\r\n this._currentScissor = {\r\n x: scissor[0],\r\n y: scissor[1],\r\n width: scissor[2],\r\n height: scissor[3],\r\n default: false\r\n };\r\n } else {\r\n this._currentScissor = Object.assign({ default: false }, scissor as DeviceViewport);\r\n }\r\n }\r\n let vx = this._device.screenXToDevice(this._currentScissor.x);\r\n let vy = this._device.screenYToDevice(this._currentScissor.y);\r\n let vw = this._device.screenXToDevice(this._currentScissor.width);\r\n let vh = this._device.screenYToDevice(this._currentScissor.height);\r\n // Clip scissor region to screen\r\n if (vx < 0) {\r\n vw += vx;\r\n vx = 0;\r\n }\r\n if (vy < 0) {\r\n vh += vy;\r\n vy = 0;\r\n }\r\n vw = Math.min(this._device.screenXToDevice(backBufferWidth) - vx, vw);\r\n vh = Math.min(this._device.screenYToDevice(backBufferHeight) - vy, vh);\r\n if (vw < 0 || vh < 0) {\r\n vx = 0;\r\n vy = 0;\r\n vw = 0;\r\n vh = 0;\r\n }\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.setScissorRect(vx, this._device.drawingBufferHeight - vy - vh, vw, vh);\r\n }\r\n }\r\n getScissor() {\r\n return Object.assign({}, this._currentScissor);\r\n }\r\n executeRenderBundle(renderBundle: GPURenderBundle) {\r\n if (!this.active) {\r\n this.begin();\r\n }\r\n this._renderPassEncoder!.executeBundles([renderBundle]);\r\n }\r\n draw(\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n const validation = this.validateDraw(\r\n program,\r\n bindGroups,\r\n stateSet,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n if (validation & VALIDATION_FAILED) {\r\n return;\r\n }\r\n if (validation & VALIDATION_NEED_NEW_PASS) {\r\n this.end();\r\n }\r\n if (!this.active) {\r\n this.begin();\r\n }\r\n this.drawInternal(\r\n this._renderPassEncoder!,\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n }\r\n clear(color: Nullable<Vector4>, depth: Nullable<number>, stencil: Nullable<number>) {\r\n if (!this._currentScissor) {\r\n this.end();\r\n this.begin(color, depth, stencil);\r\n } else {\r\n if (!this._renderPassEncoder) {\r\n this.begin();\r\n }\r\n this._renderPassEncoder!.insertDebugMarker('clear');\r\n WebGPUClearQuad.drawClearQuad(this, color, depth, stencil);\r\n this._renderPassEncoder!.insertDebugMarker('end clear');\r\n }\r\n }\r\n getDevice() {\r\n return this._device;\r\n }\r\n getFrameBufferInfo() {\r\n return this._frameBufferInfo;\r\n }\r\n begin(color?: Nullable<TypedArray>, depth?: Nullable<number>, stencil?: Nullable<number>) {\r\n if (this.active) {\r\n console.error('WebGPURenderPass.begin() failed: begin() has already been called');\r\n return;\r\n }\r\n this._renderCommandEncoder = this._device.commandQueue.getEncoder();\r\n const frameBuffer = this._frameBufferInfo.frameBuffer;\r\n if (!frameBuffer) {\r\n const mainPassDesc = this._device.defaultRenderPassDesc;\r\n const colorAttachmentDesc = (\r\n this._device.defaultRenderPassDesc.colorAttachments as GPURenderPassColorAttachment[]\r\n )[0];\r\n if (this._frameBufferInfo.sampleCount > 1) {\r\n colorAttachmentDesc.resolveTarget = this._device.context!.getCurrentTexture().createView();\r\n } else {\r\n colorAttachmentDesc.view = this._device.context!.getCurrentTexture().createView();\r\n }\r\n colorAttachmentDesc.loadOp = color ? 'clear' : 'load';\r\n // TODO: GPUColor type in @webgpu/types conficts with lib.dom,use `any` type to make ts-server happy\r\n colorAttachmentDesc.clearValue = (color as any) ?? undefined;\r\n const depthAttachmentDesc = this._device.defaultRenderPassDesc.depthStencilAttachment;\r\n depthAttachmentDesc!.depthLoadOp = typeof depth === 'number' ? 'clear' : 'load';\r\n depthAttachmentDesc!.depthClearValue = depth ?? undefined;\r\n depthAttachmentDesc!.stencilLoadOp = typeof stencil === 'number' ? 'clear' : 'load';\r\n depthAttachmentDesc!.stencilClearValue = stencil ?? undefined;\r\n this._renderPassEncoder = this._renderCommandEncoder.beginRenderPass(mainPassDesc);\r\n } else {\r\n const depthAttachmentTexture = frameBuffer.getDepthAttachment() as WebGPUBaseTexture;\r\n let depthTextureView: GPUTextureView;\r\n if (depthAttachmentTexture) {\r\n depthAttachmentTexture._markAsCurrentFB(true);\r\n const attachment = frameBuffer.getOptions().depthAttachment;\r\n const layer =\r\n depthAttachmentTexture.isTexture2DArray() || depthAttachmentTexture.isTexture3D()\r\n ? attachment!.layer\r\n : depthAttachmentTexture.isTextureCube()\r\n ? attachment!.face\r\n : 0;\r\n depthTextureView = depthAttachmentTexture.getView(0, layer ?? 0, 1);\r\n }\r\n this._fbBindFlag = frameBuffer.bindFlag;\r\n\r\n const passDesc: GPURenderPassDescriptor = {\r\n label: `customRenderPass:${this._frameBufferInfo.hash}`,\r\n colorAttachments:\r\n frameBuffer.getOptions().colorAttachments?.map((attachment, index) => {\r\n const tex = attachment.texture as WebGPUBaseTexture;\r\n if (tex) {\r\n tex._markAsCurrentFB(true);\r\n const layer =\r\n tex.isTexture2DArray() || tex.isTexture3D()\r\n ? attachment.layer\r\n : tex.isTextureCube()\r\n ? attachment.face\r\n : 0;\r\n if (frameBuffer.getOptions().sampleCount === 1) {\r\n return {\r\n view: tex.getView(attachment.level ?? 0, layer ?? 0, 1),\r\n loadOp: color ? 'clear' : 'load',\r\n clearValue: color,\r\n storeOp: 'store'\r\n } as GPURenderPassColorAttachment;\r\n } else {\r\n const msaaTexture = frameBuffer.getMSAAColorAttacments()![index];\r\n const msaaView = this._device.gpuCreateTextureView(msaaTexture, {\r\n dimension: '2d',\r\n baseMipLevel: attachment.level ?? 0,\r\n mipLevelCount: 1,\r\n baseArrayLayer: 0,\r\n arrayLayerCount: 1\r\n });\r\n return {\r\n view: msaaView,\r\n resolveTarget: tex.getView(attachment.level ?? 0, layer ?? 0, 1),\r\n loadOp: color ? 'clear' : 'load',\r\n clearValue: color,\r\n storeOp: 'store'\r\n } as GPURenderPassColorAttachment;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }) ?? [],\r\n depthStencilAttachment: depthAttachmentTexture\r\n ? frameBuffer.getOptions().sampleCount === 1\r\n ? {\r\n view: depthTextureView!,\r\n depthLoadOp: typeof depth === 'number' ? 'clear' : 'load',\r\n depthClearValue: depth ?? undefined,\r\n depthStoreOp: 'store',\r\n stencilLoadOp: hasStencilChannel(depthAttachmentTexture.format)\r\n ? typeof stencil === 'number'\r\n ? 'clear'\r\n : 'load'\r\n : undefined,\r\n stencilClearValue: stencil ?? undefined,\r\n stencilStoreOp: hasStencilChannel(depthAttachmentTexture.format) ? 'store' : undefined\r\n }\r\n : {\r\n view: frameBuffer.getMSAADepthAttachment()!.createView(),\r\n depthLoadOp: typeof depth === 'number' ? 'clear' : 'load',\r\n depthClearValue: depth ?? undefined,\r\n depthStoreOp: 'store',\r\n stencilLoadOp: hasStencilChannel(depthAttachmentTexture.format)\r\n ? typeof stencil === 'number'\r\n ? 'clear'\r\n : 'load'\r\n : undefined,\r\n stencilClearValue: stencil ?? undefined,\r\n stencilStoreOp: hasStencilChannel(depthAttachmentTexture.format) ? 'store' : undefined\r\n }\r\n : undefined\r\n };\r\n this._renderPassEncoder = this._renderCommandEncoder.beginRenderPass(passDesc);\r\n }\r\n this.setViewport(this._currentViewport);\r\n this.setScissor(this._currentScissor);\r\n }\r\n end() {\r\n if (!this.active) {\r\n return;\r\n }\r\n // finish current render pass command\r\n if (this._renderPassEncoder) {\r\n this._renderPassEncoder.end();\r\n this._renderPassEncoder = null;\r\n }\r\n this._renderCommandEncoder = null;\r\n // unmark render target flags and generate render target mipmaps if needed\r\n if (this._frameBufferInfo.frameBuffer) {\r\n const options = this._frameBufferInfo.frameBuffer.getOptions();\r\n if (options.colorAttachments) {\r\n for (const attachment of options.colorAttachments) {\r\n (attachment.texture as WebGPUBaseTexture)._markAsCurrentFB(false);\r\n if (attachment.generateMipmaps && attachment.texture.mipLevelCount > 1) {\r\n attachment.texture.generateMipmaps();\r\n }\r\n }\r\n }\r\n (options.depthAttachment?.texture as WebGPUBaseTexture)?._markAsCurrentFB(false);\r\n }\r\n }\r\n capture(\r\n renderBundleEncoder: GPURenderBundleEncoder,\r\n program: WebGPUProgram,\r\n vertexData: WebGPUVertexLayout,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[],\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n const validation = this.validateDraw(\r\n program,\r\n bindGroups,\r\n stateSet,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n if (validation & VALIDATION_FAILED) {\r\n return;\r\n }\r\n this.drawInternal(\r\n this._renderPassEncoder!,\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances,\r\n renderBundleEncoder\r\n );\r\n }\r\n private drawInternal(\r\n renderPassEncoder: GPURenderPassEncoder,\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number,\r\n renderBundleEncoder?: GPURenderBundleEncoder\r\n ) {\r\n if (\r\n this.setBindGroupsForRender(\r\n renderPassEncoder,\r\n program,\r\n bindGroups,\r\n bindGroupOffsets,\r\n renderBundleEncoder\r\n )\r\n ) {\r\n const pipeline = this._device.pipelineCache.fetchRenderPipeline(\r\n program,\r\n vertexData,\r\n stateSet,\r\n primitiveType,\r\n this._frameBufferInfo\r\n );\r\n if (pipeline) {\r\n renderPassEncoder.setPipeline(pipeline);\r\n renderBundleEncoder?.setPipeline(pipeline);\r\n const stencilState = stateSet?.stencilState;\r\n if (stencilState) {\r\n renderPassEncoder.setStencilReference(stencilState.ref);\r\n }\r\n if (vertexData) {\r\n const vertexBuffers = vertexData.getLayouts(program.vertexAttributes)?.buffers;\r\n vertexBuffers?.forEach((val, index) => {\r\n renderPassEncoder.setVertexBuffer(index, val.buffer.object as GPUBuffer, val.drawOffset);\r\n renderBundleEncoder?.setVertexBuffer(index, val.buffer.object as GPUBuffer, val.drawOffset);\r\n });\r\n const indexBuffer = vertexData.getIndexBuffer() as unknown as WebGPUIndexBuffer;\r\n if (indexBuffer) {\r\n renderPassEncoder.setIndexBuffer(\r\n indexBuffer.object!,\r\n indexBuffer.indexType === typeU16 ? 'uint16' : 'uint32'\r\n );\r\n renderBundleEncoder?.setIndexBuffer(\r\n indexBuffer.object!,\r\n indexBuffer.indexType === typeU16 ? 'uint16' : 'uint32'\r\n );\r\n renderPassEncoder.drawIndexed(count, numInstances, first);\r\n renderBundleEncoder?.drawIndexed(count, numInstances, first);\r\n } else {\r\n renderPassEncoder.draw(count, numInstances, first);\r\n renderBundleEncoder?.draw(count, numInstances, first);\r\n }\r\n } else {\r\n renderPassEncoder.draw(count, numInstances, first);\r\n renderBundleEncoder?.draw(count, numInstances, first);\r\n }\r\n }\r\n }\r\n }\r\n private validateDraw(\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n stateSet: WebGPURenderStateSet,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n let validation = 0;\r\n const colorTargetCount = this._frameBufferInfo.colorFormats.length;\r\n if (colorTargetCount !== 0 && program.fragmentOutputCount !== colorTargetCount) {\r\n if (\r\n !stateSet?.colorState ||\r\n stateSet.colorState.redMask ||\r\n stateSet.colorState.greenMask ||\r\n stateSet.colorState.blueMask ||\r\n stateSet.colorState.alphaMask\r\n ) {\r\n const framebuffer = this._frameBufferInfo.frameBuffer;\r\n const colorAttachments = framebuffer?.getColorAttachments().map((texture, index) => ({\r\n index,\r\n name: texture?.name,\r\n uid: texture?.uid,\r\n format: texture?.format\r\n })) ?? [{ index: 0, name: '<backbuffer>', uid: 0, format: this._frameBufferInfo.colorFormats[0] }];\r\n console.error('WebGPU draw validation failed: fragment color output count mismatch', {\r\n programName: program.name,\r\n programLabel: program.label,\r\n programHash: program.hash,\r\n fragmentOutputCount: program.fragmentOutputCount,\r\n colorTargetCount,\r\n colorFormats: this._frameBufferInfo.colorFormats,\r\n depthFormat: this._frameBufferInfo.depthFormat,\r\n framebufferName: framebuffer?.name ?? '<backbuffer>',\r\n framebufferHash: this._frameBufferInfo.hash,\r\n colorAttachments,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances,\r\n stack: new Error().stack\r\n });\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n if (bindGroups) {\r\n for (let i = 0; i < program.bindGroupLayouts.length; i++) {\r\n const bindGroup = bindGroups[i];\r\n if (bindGroup) {\r\n if (bindGroup.bindGroup) {\r\n for (const ubo of bindGroup.bufferList) {\r\n if (ubo.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n for (const tex of bindGroup.textureList) {\r\n if (tex.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n if (tex._isMarkedAsCurrentFB()) {\r\n console.error('bind resource texture can not be current render target');\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n } else {\r\n console.error(`Missing bind group (${i}) when drawing with program '${program.name}'`);\r\n return VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n if (\r\n this._frameBufferInfo.frameBuffer &&\r\n this._frameBufferInfo.frameBuffer.bindFlag !== this._fbBindFlag\r\n ) {\r\n validation |= VALIDATION_NEED_NEW_PASS;\r\n }\r\n return validation;\r\n }\r\n private setBindGroupsForRender(\r\n renderPassEncoder: GPURenderPassEncoder,\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n renderBundleEncoder?: GPURenderBundleEncoder\r\n ) {\r\n if (bindGroups) {\r\n for (let i = 0; i < 4; i++) {\r\n if (i < program.bindGroupLayouts.length) {\r\n const bindGroup = bindGroups[i].bindGroup;\r\n if (!bindGroup) {\r\n return false;\r\n }\r\n const bindGroupOffset = bindGroups[i].getDynamicOffsets() ?? bindGroupOffsets?.[i];\r\n if (bindGroupOffset) {\r\n renderPassEncoder.setBindGroup(i, bindGroup, bindGroupOffset);\r\n renderBundleEncoder?.setBindGroup(i, bindGroup, bindGroupOffset);\r\n } else {\r\n renderPassEncoder.setBindGroup(i, bindGroup);\r\n renderBundleEncoder?.setBindGroup(i, bindGroup);\r\n }\r\n } else {\r\n renderPassEncoder.setBindGroup(i, this._device.emptyBindGroup);\r\n renderBundleEncoder?.setBindGroup(i, this._device.emptyBindGroup);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n","import type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nconst VALIDATION_FAILED = 1 << 0;\r\n\r\nexport class WebGPUComputePass {\r\n private readonly _device: WebGPUDevice;\r\n private _computeCommandEncoder: Nullable<GPUCommandEncoder>;\r\n private _computePassEncoder: Nullable<GPUComputePassEncoder>;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._computeCommandEncoder = null;\r\n this._computePassEncoder = null;\r\n }\r\n get active() {\r\n return !!this._computePassEncoder;\r\n }\r\n compute(\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[],\r\n workgroupCountX: number,\r\n workgroupCountY: number,\r\n workgroupCountZ: number\r\n ) {\r\n const validation = this.validateCompute(program, bindGroups);\r\n if (validation & VALIDATION_FAILED) {\r\n return;\r\n }\r\n if (!this.active) {\r\n this.begin();\r\n }\r\n this.setBindGroupsForCompute(this._computePassEncoder!, program, bindGroups, bindGroupOffsets);\r\n const pipeline = this._device.pipelineCache.fetchComputePipeline(program);\r\n if (pipeline) {\r\n this._computePassEncoder!.setPipeline(pipeline);\r\n this._computePassEncoder!.dispatchWorkgroups(workgroupCountX, workgroupCountY, workgroupCountZ);\r\n }\r\n }\r\n private setBindGroupsForCompute(\r\n computePassEncoder: GPUComputePassEncoder,\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[]\r\n ) {\r\n if (bindGroups) {\r\n for (let i = 0; i < 4; i++) {\r\n if (i < program.bindGroupLayouts.length) {\r\n const bindGroup = bindGroups[i].bindGroup;\r\n if (!bindGroup) {\r\n return false;\r\n }\r\n const bindGroupOffset = bindGroupOffsets?.[i];\r\n if (bindGroupOffset) {\r\n computePassEncoder.setBindGroup(i, bindGroup, bindGroupOffset);\r\n } else {\r\n computePassEncoder.setBindGroup(i, bindGroup);\r\n }\r\n } else {\r\n computePassEncoder.setBindGroup(i, this._device.emptyBindGroup);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n begin() {\r\n if (this.active) {\r\n console.error('WebGPUComputePass.begin() failed: WebGPUComputePass.begin() has already been called');\r\n return;\r\n }\r\n this._computeCommandEncoder = this._device.commandQueue.getEncoder();\r\n this._computePassEncoder = this._computeCommandEncoder.beginComputePass();\r\n }\r\n end() {\r\n if (this.active) {\r\n this._computePassEncoder!.end();\r\n this._computePassEncoder = null;\r\n this._computeCommandEncoder = null;\r\n }\r\n }\r\n private validateCompute(program: WebGPUProgram, bindGroups: WebGPUBindGroup[]) {\r\n let validation = 0;\r\n if (bindGroups) {\r\n for (let i = 0; i < program.bindGroupLayouts.length; i++) {\r\n const bindGroup = bindGroups[i];\r\n if (bindGroup) {\r\n if (bindGroup.bindGroup) {\r\n for (const ubo of bindGroup.bufferList) {\r\n if (ubo.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n for (const tex of bindGroup.textureList) {\r\n if (tex.disposed) {\r\n validation |= VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n } else {\r\n console.error(`Missing bind group (${i}) when compute with program '${program.name}'`);\r\n return VALIDATION_FAILED;\r\n }\r\n }\r\n }\r\n return validation;\r\n }\r\n}\r\n","import type { Immutable, Nullable, Vector4 } from '@zephyr3d/base';\r\nimport { WebGPURenderPass } from './renderpass_webgpu';\r\nimport { WebGPUComputePass } from './computepass_webgpu';\r\nimport type { PrimitiveType, DeviceViewport } from '@zephyr3d/device';\r\nimport type { WebGPUDevice } from './device';\r\nimport type { WebGPUProgram } from './gpuprogram_webgpu';\r\nimport type { WebGPUVertexLayout } from './vertexlayout_webgpu';\r\nimport type { WebGPURenderStateSet } from './renderstates_webgpu';\r\nimport type { WebGPUBindGroup } from './bindgroup_webgpu';\r\nimport type { WebGPUFrameBuffer } from './framebuffer_webgpu';\r\nimport type { WebGPUBuffer } from './buffer_webgpu';\r\nimport type { WebGPUBaseTexture } from './basetexture_webgpu';\r\nimport { WebGPUMipmapGenerator } from './utils_webgpu';\r\n\r\ntype LogicalSegment = {\r\n uploadEncoder: Nullable<GPUCommandEncoder>;\r\n bodyEncoder: Nullable<GPUCommandEncoder>;\r\n hasUploadCommands: boolean;\r\n hasBodyCommands: boolean;\r\n buffersWithPendingUploads: WebGPUBuffer[];\r\n texturesWithPendingUploads: WebGPUBaseTexture[];\r\n};\r\n\r\nexport class CommandQueueImmediate {\r\n protected _renderPass: WebGPURenderPass;\r\n protected _computePass: WebGPUComputePass;\r\n private _segments: LogicalSegment[];\r\n private _buffersAwaitingSyncEnd: WebGPUBuffer[];\r\n private _texturesAwaitingSyncEnd: WebGPUBaseTexture[];\r\n private readonly _device: WebGPUDevice;\r\n private _drawcallCounter: number;\r\n constructor(device: WebGPUDevice) {\r\n this._device = device;\r\n this._segments = [];\r\n this._buffersAwaitingSyncEnd = [];\r\n this._texturesAwaitingSyncEnd = [];\r\n this._renderPass = new WebGPURenderPass(device);\r\n this._computePass = new WebGPUComputePass(device);\r\n this._drawcallCounter = 0;\r\n }\r\n isBufferUploading(_buffer: WebGPUBuffer) {\r\n return false;\r\n }\r\n isTextureUploading(_tex: WebGPUBaseTexture) {\r\n return false;\r\n }\r\n hasActiveWork() {\r\n return (\r\n this._segments.length > 0 ||\r\n this._renderPass.active ||\r\n this._computePass.active ||\r\n this._drawcallCounter > 0\r\n );\r\n }\r\n getDrawcallCounter() {\r\n return this._drawcallCounter;\r\n }\r\n getEncoder() {\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n if (!segment.bodyEncoder) {\r\n segment.bodyEncoder = this._device.device.createCommandEncoder();\r\n }\r\n return segment.bodyEncoder;\r\n }\r\n flushUploads() {\r\n this.finalizeCurrentSegmentUploads();\r\n }\r\n get currentPass(): Nullable<WebGPURenderPass | WebGPUComputePass> {\r\n return this._renderPass.active ? this._renderPass : this._computePass.active ? this._computePass : null;\r\n }\r\n beginFrame() {}\r\n endFrame() {\r\n this.submit();\r\n }\r\n flush() {\r\n this.submit();\r\n }\r\n setFramebuffer(fb: WebGPUFrameBuffer) {\r\n this._renderPass.setFramebuffer(fb);\r\n }\r\n getFramebuffer() {\r\n return this._renderPass.getFramebuffer();\r\n }\r\n getFramebufferInfo() {\r\n return this._renderPass.getFrameBufferInfo();\r\n }\r\n executeRenderBundle(renderBundle: GPURenderBundle) {\r\n this.ensureRenderBodyReady();\r\n this._drawcallCounter++;\r\n this._renderPass.executeRenderBundle(renderBundle);\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n }\r\n bufferUpload(buffer: WebGPUBuffer, _offset: number, _size: number) {\r\n const segment = this.getSegmentForUpload();\r\n if (segment.buffersWithPendingUploads.indexOf(buffer) < 0) {\r\n segment.buffersWithPendingUploads.push(buffer);\r\n }\r\n }\r\n textureUpload(tex: WebGPUBaseTexture) {\r\n const segment = this.getSegmentForUpload();\r\n if (segment.texturesWithPendingUploads.indexOf(tex) < 0) {\r\n segment.texturesWithPendingUploads.push(tex);\r\n }\r\n }\r\n copyBuffer(\r\n srcBuffer: WebGPUBuffer,\r\n dstBuffer: WebGPUBuffer,\r\n srcOffset: number,\r\n dstOffset: number,\r\n bytes: number\r\n ) {\r\n this.endAllBodyPasses();\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n const encoder = this.getEncoder();\r\n encoder.copyBufferToBuffer(srcBuffer.object!, srcOffset, dstBuffer.object!, dstOffset, bytes);\r\n }\r\n copyTexture(\r\n srcTexture: GPUTexture,\r\n dstTexture: GPUTexture,\r\n srcLevel: number,\r\n dstLevel: number,\r\n width: number,\r\n height: number,\r\n depthOrArrayLayers: number\r\n ) {\r\n this.endAllBodyPasses();\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n const encoder = this.getEncoder();\r\n encoder.copyTextureToTexture(\r\n {\r\n texture: srcTexture,\r\n mipLevel: srcLevel,\r\n origin: { x: 0, y: 0, z: 0 }\r\n },\r\n {\r\n texture: dstTexture,\r\n mipLevel: dstLevel,\r\n origin: { x: 0, y: 0, z: 0 }\r\n },\r\n {\r\n width,\r\n height,\r\n depthOrArrayLayers\r\n }\r\n );\r\n }\r\n compute(\r\n program: WebGPUProgram,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[],\r\n workgroupCountX: number,\r\n workgroupCountY: number,\r\n workgroupCountZ: number\r\n ) {\r\n this._drawcallCounter++;\r\n this.ensureComputeBodyReady();\r\n this._computePass.compute(\r\n program,\r\n bindGroups,\r\n bindGroupOffsets,\r\n workgroupCountX,\r\n workgroupCountY,\r\n workgroupCountZ\r\n );\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n }\r\n draw(\r\n program: WebGPUProgram,\r\n vertexData: Nullable<WebGPUVertexLayout>,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Nullable<Iterable<number>>[]>,\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n this.ensureRenderBodyReady();\r\n this._drawcallCounter++;\r\n this._renderPass.draw(\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n }\r\n capture(\r\n renderBundleEncoder: GPURenderBundleEncoder,\r\n program: WebGPUProgram,\r\n vertexData: WebGPUVertexLayout,\r\n stateSet: WebGPURenderStateSet,\r\n bindGroups: WebGPUBindGroup[],\r\n bindGroupOffsets: Nullable<Iterable<number>>[],\r\n primitiveType: PrimitiveType,\r\n first: number,\r\n count: number,\r\n numInstances: number\r\n ) {\r\n this.ensureRenderBodyReady();\r\n this._renderPass.capture(\r\n renderBundleEncoder,\r\n program,\r\n vertexData,\r\n stateSet,\r\n bindGroups,\r\n bindGroupOffsets,\r\n primitiveType,\r\n first,\r\n count,\r\n numInstances\r\n );\r\n }\r\n setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n this._renderPass.setViewport(vp);\r\n }\r\n getViewport() {\r\n return this._renderPass.getViewport();\r\n }\r\n setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>) {\r\n this._renderPass.setScissor(scissor);\r\n }\r\n getScissor() {\r\n return this._renderPass.getScissor();\r\n }\r\n clear(color: Nullable<Vector4>, depth: Nullable<number>, stencil: Nullable<number>) {\r\n this.ensureRenderBodyReady();\r\n this._renderPass.clear(color, depth, stencil);\r\n const segment = this.getOrCreateCurrentSegment();\r\n segment.hasBodyCommands = true;\r\n }\r\n finish() {\r\n this.submit();\r\n return this._device.device.queue.onSubmittedWorkDone();\r\n }\r\n private createSegment(): LogicalSegment {\r\n const segment: LogicalSegment = {\r\n uploadEncoder: null,\r\n bodyEncoder: null,\r\n hasUploadCommands: false,\r\n hasBodyCommands: false,\r\n buffersWithPendingUploads: [],\r\n texturesWithPendingUploads: []\r\n };\r\n this._segments.push(segment);\r\n return segment;\r\n }\r\n private getCurrentSegment() {\r\n return this._segments.length > 0 ? this._segments[this._segments.length - 1] : null;\r\n }\r\n private getOrCreateCurrentSegment() {\r\n return this.getCurrentSegment() ?? this.createSegment();\r\n }\r\n private getOrCreateUploadEncoder(segment: LogicalSegment) {\r\n if (!segment.uploadEncoder) {\r\n segment.uploadEncoder = this._device.device.createCommandEncoder();\r\n }\r\n return segment.uploadEncoder;\r\n }\r\n private ensureRenderBodyReady() {\r\n if (this._computePass.active) {\r\n this._computePass.end();\r\n }\r\n }\r\n private ensureComputeBodyReady() {\r\n if (this._renderPass.active) {\r\n this._renderPass.end();\r\n }\r\n }\r\n private endAllBodyPasses() {\r\n if (this._renderPass.active) {\r\n this._renderPass.end();\r\n }\r\n if (this._computePass.active) {\r\n this._computePass.end();\r\n }\r\n }\r\n private submit() {\r\n this.endAllBodyPasses();\r\n this.finalizeCurrentSegmentUploads();\r\n if (this._segments.length > 0) {\r\n const commandBuffers: GPUCommandBuffer[] = [];\r\n for (const segment of this._segments) {\r\n if (segment.uploadEncoder && segment.hasUploadCommands) {\r\n commandBuffers.push(segment.uploadEncoder.finish());\r\n }\r\n if (segment.bodyEncoder && segment.hasBodyCommands) {\r\n commandBuffers.push(segment.bodyEncoder.finish());\r\n }\r\n }\r\n if (commandBuffers.length > 0) {\r\n this._device.device.queue.submit(commandBuffers);\r\n }\r\n }\r\n for (const buffer of this._buffersAwaitingSyncEnd) {\r\n buffer.endSyncChanges();\r\n }\r\n this._buffersAwaitingSyncEnd.length = 0;\r\n for (const texture of this._texturesAwaitingSyncEnd) {\r\n texture.endSyncChanges();\r\n }\r\n this._texturesAwaitingSyncEnd.length = 0;\r\n this._segments.length = 0;\r\n this._drawcallCounter = 0;\r\n }\r\n private markBufferAwaitingSyncEnd(buffer: WebGPUBuffer) {\r\n if (this._buffersAwaitingSyncEnd.indexOf(buffer) < 0) {\r\n this._buffersAwaitingSyncEnd.push(buffer);\r\n }\r\n }\r\n private markTextureAwaitingSyncEnd(texture: WebGPUBaseTexture) {\r\n if (this._texturesAwaitingSyncEnd.indexOf(texture) < 0) {\r\n this._texturesAwaitingSyncEnd.push(texture);\r\n }\r\n }\r\n private getSegmentForUpload() {\r\n let segment = this.getOrCreateCurrentSegment();\r\n if (segment.hasBodyCommands) {\r\n this.endAllBodyPasses();\r\n this.finalizeCurrentSegmentUploads();\r\n segment = this.createSegment();\r\n }\r\n return segment;\r\n }\r\n private finalizeCurrentSegmentUploads() {\r\n const segment = this.getCurrentSegment();\r\n if (!segment) {\r\n return;\r\n }\r\n if (segment.buffersWithPendingUploads.length > 0) {\r\n const encoder = this.getOrCreateUploadEncoder(segment);\r\n for (const buffer of segment.buffersWithPendingUploads) {\r\n buffer.beginSyncChanges(encoder);\r\n segment.hasUploadCommands = true;\r\n this.markBufferAwaitingSyncEnd(buffer);\r\n }\r\n segment.buffersWithPendingUploads.length = 0;\r\n }\r\n if (segment.texturesWithPendingUploads.length > 0) {\r\n const encoder = this.getOrCreateUploadEncoder(segment);\r\n for (const texture of segment.texturesWithPendingUploads) {\r\n texture.beginSyncChanges(encoder);\r\n if (!texture.disposed && texture.isMipmapDirty()) {\r\n WebGPUMipmapGenerator.generateMipmap(this._device, texture, encoder);\r\n }\r\n segment.hasUploadCommands = true;\r\n this.markTextureAwaitingSyncEnd(texture);\r\n }\r\n segment.texturesWithPendingUploads.length = 0;\r\n }\r\n }\r\n}\r\n","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","/**\r\n * The WebGPU device backend for zephyr3d project\r\n *\r\n * @module backend-webgpu\r\n * @packageDocumentation\r\n */\r\nimport { WebGPUDevice } from './device';\r\nimport type { DeviceBackend, DeviceEventMap } from '@zephyr3d/device';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { makeObservable } from '@zephyr3d/base';\r\n\r\nlet webGPUStatus: Nullable<Promise<boolean>> = null;\r\n\r\n/**\r\n * The WebGPU backend\r\n * @public\r\n */\r\nexport const backendWebGPU: DeviceBackend = {\r\n typeName() {\r\n return 'webgpu';\r\n },\r\n async supported() {\r\n if (!webGPUStatus) {\r\n webGPUStatus = new Promise<boolean>(async (resolve) => {\r\n let status = true;\r\n try {\r\n if (!('gpu' in navigator)) {\r\n status = false;\r\n }\r\n const adapter = await navigator.gpu.requestAdapter();\r\n if (!adapter) {\r\n status = false;\r\n } else {\r\n const device = await adapter.requestDevice();\r\n if (!device) {\r\n status = false;\r\n } else if (typeof device.destroy === 'function') {\r\n device.destroy();\r\n }\r\n status = true;\r\n }\r\n } catch {\r\n status = false;\r\n }\r\n resolve(status);\r\n });\r\n }\r\n return webGPUStatus;\r\n },\r\n async createDevice(cvs, options?) {\r\n try {\r\n const factory = makeObservable(WebGPUDevice)<DeviceEventMap>();\r\n const device = new factory(this, cvs, options);\r\n await device.initContext();\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n return device;\r\n } catch (err) {\r\n console.error(err);\r\n return null;\r\n }\r\n }\r\n};\r\n"],"names":["_uniqueId","WebGPUObject","Disposable","_device","_object","_uid","_cid","_name","_queueState","_restoreHandler","device","genDefaultName","addGPUObject","object","uid","cid","restoreHandler","handler","name","val","lastName","dispatchEvent","queueState","isVertexLayout","isFramebuffer","isSampler","isTexture","isTexture2D","isTexture2DArray","isTexture3D","isTextureCube","isTextureVideo","isProgram","isBuffer","isBindGroup","reload","disposed","restoreObject","destroy","Error","restore","onDispose","disposeObject","WebGPUProgram","_hashCounter","_type","_vs","_fs","_cs","_label","_hash","_fragmentOutputCount","_error","_bindGroupLayouts","_vertexAttributes","_csModule","_vsModule","_fsModule","_pipelineLayout","params","type","label","bindGroupLayouts","renderParams","vs","fs","fragmentOutputCount","countFragmentOutputs","vertexAttributes","join","computeParams","source","_load","String","getCompileError","getShaderSource","kin","getBindingInfo","group","length","layout","bindName","nameMap","binding","entries","bindingPoint","hash","getPipelineLayout","getShaderModule","vsModule","fsModule","csModule","pipelineLayout","createUniformBuffer","uniform","createStructuredBuffer","usage","createShaderModule","createPipelineLayout","layouts","forEach","push","fetchBindGroupLayout","code","sm","func","compilationInfo","getCompilationInfo","call","then","err","messages","msg","message","lineNum","linePos","slice","offset","console","error","warn","info","outputStruct","exec","count","re","match","Math","max","Number","use","setProgram","UploadRingBuffer","_bufferList","_defaultSize","_unmappedBufferList","defaultSize","uploadBuffer","src","dst","srcOffset","dstOffset","uploadSize","size","mappedBuffer","fetchBufferMapped","mappedRange","Uint8Array","set","upload","uploadOffset","beginUploads","i","buffer","used","unmap","splice","endUploads","mapAsync","GPUMapMode","WRITE","getMappedRange","purge","bufferSize","buf","createBuffer","GPUBufferUsage","MAP_WRITE","COPY_SRC","mappedAtCreation","WebGPUBuffer","_size","_usage","_gpuUsage","_memCost","_ringBuffer","_pendingUploads","_pendingUploadBuffer","data","byteLength","load","gpuGetObjectHash","gpuUsage","mergePendingUpload","start","end","insertIndex","pending","pendingEnd","min","bufferSubData","dstByteOffset","srcLength","BYTES_PER_ELEMENT","byteOffset","bufferUpload","getBufferSubData","dstBuffer","offsetInBytes","sizeInBytes","sourceBuffer","readOffsetInBytes","GPUResourceUsageFlags","BF_READ","BF_PACK_PIXEL","copyOffsetInBytes","copySizeInBytes","copyBuffer","flush","sync","READ","range","dispose","isContextLost","beginSyncChanges","encoder","cmdEncoder","createCommandEncoder","copyBufferToBuffer","queue","submit","finish","endSyncChanges","DYNAMIC","BF_VERTEX","VERTEX","COPY_DST","BF_INDEX","INDEX","BF_UNIFORM","UNIFORM","BF_STORAGE","STORAGE","MAP_READ","BF_WRITE","BF_UNPACK_PIXEL","gpuCreateBuffer","memCost","updateVideoMemoryCost","typeU8Vec2_Norm","PBPrimitiveTypeInfo","getCachedTypeInfo","PBPrimitiveType","U8VEC2_NORM","typeU8Vec4_Norm","U8VEC4_NORM","typeI8Vec2_Norm","I8VEC2_NORM","typeI8Vec4_Norm","I8VEC4_NORM","typeU16Vec2","U16VEC2","typeU16Vec4","U16VEC4","typeI16Vec2","I16VEC2","typeI16Vec4","I16VEC4","typeU16Vec2_Norm","U16VEC2_NORM","typeU16Vec4_Norm","U16VEC4_NORM","typeI16Vec2_Norm","I16VEC2_NORM","typeI16Vec4_Norm","I16VEC4_NORM","typeF16Vec2","F16VEC2","typeF16Vec4","F16VEC4","typeF32","F32","typeF32Vec2","F32VEC2","typeF32Vec3","F32VEC3","typeF32Vec4","F32VEC4","typeU32","U32","typeU32Vec2","U32VEC2","typeU32Vec3","U32VEC3","typeU32Vec4","U32VEC4","typeI32","I32","typeI32Vec2","I32VEC2","typeI32Vec3","I32VEC3","typeI32Vec4","I32VEC4","vertexFormatTable","typeId","WebGPUStructuredBuffer","_structure","_data","structure","isStructType","structMembers","isArrayType","toBufferLayout","byteSize","StructuredBufferData","value","st","isCompatibleType","getGPUVertexFormat","WebGPUBindGroup","_layout","_layoutDesc","_entries","_bindGroup","_buffers","_textures","_createdBuffers","_gpuId","_videoTextures","_dynamicOffsets","_resources","entry","hasDynamicOffset","dynamicOffsetIndex","bindGroup","_create","layoutDescriptor","getGPUId","bufferList","textureList","invalidate","getLayout","getDynamicOffsets","getBuffer","nocreate","_getBuffer","setBuffer","bindOffset","bindSize","bufferUsage","setValue","mappedName","k","setRawData","srcPos","getTexture","_findTextureLayout","t","setTextureView","level","face","mipCount","sampler","externalTexture","view","getView","texture","autoBindSampler","samplerEntry","_findSamplerLayout","s","compare","getDefaultSampler","autoBindSamplerComparison","setTexture","removeBindGroupReference","addBindGroupReference","tex","indexOf","getDefaultView","setSampler","updateVideoTextures","updateVideoFrame","storageTexture","_getBufferInfo","options","undefined","storage","dynamic","gpuBuffer","resourceOk","ge","resource","desc","descriptor","gpuCreateBindGroup","textureWrappingMap","repeat","clamp","textureFilterMap","nearest","linear","none","compareFuncMap","always","le","lt","gt","eq","ne","never","stencilOpMap","keep","replace","zero","invert","incr","decr","primitiveTypeMap","faceModeMap","back","front","blendEquationMap","add","subtract","blendFuncMap","one","vertexFormatToHash","float32","float32x2","float32x3","float32x4","uint32","uint32x2","uint32x3","uint32x4","sint32","sint32x2","sint32x3","sint32x4","uint16x2","uint16x4","unorm16x2","unorm16x4","sint16x2","sint16x4","snorm16x2","snorm16x4","uint8x2","uint8x4","unorm8x2","unorm8x4","sint8x2","sint8x4","snorm8x2","snorm8x4","textureFormatMap","zip","keys","values","ret","len","textureFormatInvMap","Object","hashToVertexFormat","WebGPUClearQuad","_clearPrograms","_clearStateSet","_defaultClearColor","Vector4","drawClearQuad","renderPass","clearColor","clearDepth","clearStencil","initClearQuad","getFrameBufferInfo","clearHash","program","getClearProgram","getDevice","bClearColor","bClearDepth","bClearStencil","useDepthState","enableWrite","useColorState","setColorMask","useStencilState","enable","setReference","commandQueue","draw","programInfo","colorAttachments","split","buildRenderProgram","vertex","pb","float","coords","vec2","main","$builtins","position","vec4","at","vertexIndex","fragment","$outputs","outColor","ivec4","uvec4","createBindGroup","createRenderStateSet","enableTest","useRasterizerState","setCullMode","setFrontOp","setBackOp","setFrontCompareFunc","setBackCompareFunc","WebGPUMipmapGenerator","_frameBufferInfo","_mipmapGenerationProgram","_mipmapGenerationStateSet","getMipmapGenerationBindGroupLayout","initMipmapGeneration","generateMipmap","isRenderable","miplevels","mipLevelCount","numLayers","depth","setMipmapDirty","generateMiplevel","gpuFormat","generateMipmapsForBindGroups","bindGroups","isMipmapDirty","commandEncoder","srcTex","dstTex","format","dstLevel","srcLevel","renderPassEncoder","beginMipmapGenerationPass","setBindGroup","getMipmapGenerationBindGroup","pipeline","pipelineCache","fetchRenderPipeline","setPipeline","passDesc","createView","dimension","baseMipLevel","baseArrayLayer","arrayLayerCount","loadOp","clearValue","storeOp","frameBuffer","colorFormats","depthFormat","sampleCount","beginRenderPass","insertDebugMarker","outUV","uv","color","tex2D","textureSampleLevel","$inputs","WebGPUBaseTexture","_target","_views","_defaultView","_mipmapDirty","_flags","_width","_height","_depth","_format","_renderable","_fb","_gpuFormat","_mipLevelCount","_samplerOptions","_mipBindGroups","target","width","height","samplerOptions","getTextureCaps","getTextureFormatInfo","assign","_getSamplerOptions","isFilterable","filterable","clearPendingUploads","b","init","getDeviceCaps","textureCaps","isSRGBFormat","isSRGBTextureFormat","isFloatFormat","isFloatTextureFormat","isIntegerFormat","isIntegerTextureFormat","isSignedFormat","isSignedTextureFormat","isCompressedFormat","isCompressedTextureFormat","isDepth","hasDepthChannel","gpuCreateTextureView","aspect","copyPixelDataToBuffer","x","y","w","h","layer","copyTexturePixelsToBuffer","generateMipmaps","textureUpload","u","copyBufferToTexture","bytesPerRow","bufferStride","rowsPerImage","uploadHeight","origin","uploadOffsetX","uploadOffsetY","z","uploadOffsetZ","mipLevel","uploadWidth","depthOrArrayLayers","uploadDepth","image","copyView","offsetX","offsetY","offsetZ","premultipliedAlpha","copyExternalImageToTexture","srcX","srcY","shadow","createSampler","_calcMipLevelCount","TF_NO_MIPMAP","renderable","floor","log2","allocInternal","numMipLevels","autoMipLevelCount","isInteger","obj","runNextFrame","TF_WRITABLE","gpuCreateTexture","GPUTextureUsage","TEXTURE_BINDING","RENDER_ATTACHMENT","STORAGE_BINDING","calcMemoryUsage","calculateBufferSizeForCopy","blockWidth","getTextureFormatBlockWidth","blockHeight","getTextureFormatBlockHeight","blockSize","getTextureFormatBlockSize","blocksPerRow","ceil","blocksPerCol","rowStride","sizeAligned","strideAligned","stride","numRows","tmpBuffer","copyTextureToBuffer","uploadRaw","pixels","miplevel","hasActiveWork","isTextureUploading","destination","dataLayout","writeTexture","d","srcLayerOffset","dstLayerOffset","subarray","destX","destY","srcZ","faceGroups","levelGroups","levelGroup","comparison","magFilter","minFilter","mipFilter","addressU","addressV","addressW","lodMin","lodMax","maxAnisotropy","_markAsCurrentFB","_isMarkedAsCurrentFB","WebGPUTexture2D","loadEmpty","update","xOffset","yOffset","updateFromElement","HTMLCanvasElement","cvs","document","createElement","ctx","getContext","drawImage","imageData","getImageData","uploadImageData","readPixels","faceOrLayer","readPixelsToBuffer","loadFromElement","element","sRGB","creationFlags","loadImage","createEmpty","createWithMipmapData","isCubemap","isVolume","loadLevels","levels","linearTextureFormatToSRGB","swizzle","mipLevels","isCompressed","supportS3TCSRGB","supportS3TC","mipDatas","j","WebGPUTexture2DArray","zOffset","destZ","arraySize","WebGPUTexture3D","_level","_mipCount","WebGPUTextureCube","WebGPUTextureVideo","_source","_refBindGroups","index","loadElement","readyState","videoFrame","window","VideoFrame","close","gpuImportExternalTexture","_face","_x","_y","_w","_h","_faceOrLayer","_mipLevel","_buffer","videoWidth","videoHeight","that","WebGPUFramebufferCaps","maxDrawBuffers","maxColorAttachmentBytesPerSample","supportRenderMipmap","supportMultisampledFramebuffer","supportFloatBlending","supportDepth32float","supportDepth32floatStencil8","limits","maxColorAttachments","features","has","WebGPUMiscCaps","supportOversizedViewport","supportBlendMinMax","support32BitIndex","supportDepthClamp","maxBindGroups","maxTexCoordIndex","WebGPUShaderCaps","supportFragmentDepth","supportStandardDerivatives","supportShaderTextureLod","supportHighPrecisionFloat","maxUniformBufferSize","uniformBufferOffsetAlignment","maxStorageBufferSize","storageBufferOffsetAlignment","maxUniformBufferBindingSize","minUniformBufferOffsetAlignment","maxStorageBufferBindingSize","minStorageBufferOffsetAlignment","WebGPUTextureCaps","_textureFormatInfos","maxTextureSize","maxCubeTextureSize","npo2Mipmapping","npo2Repeating","supportBPTC","supportRGTC","supportASTC","supportDepthTexture","support3DTexture","supportSRGBTexture","supportFloatTexture","supportLinearFloatTexture","supportHalfFloatTexture","supportLinearHalfFloatTexture","supportAnisotropicFiltering","supportFloatColorBuffer","supportHalfFloatColorBuffer","maxTextureDimension2D","float32Filterable","gpuSampleType","compressed","writable","map","numPixels","WebGPUVertexLayout","_defaultBuffers","_vertexData","_layouts","VertexData","vb","vertexBuffers","setVertexBuffer","stepMode","indexBuffer","setIndexBuffer","setDrawOffset","drawOffset","getDrawOffset","getVertexBuffer","semantic","getVertexBufferInfo","getIndexBuffer","getLayouts","attributes","calcHash","getDefaultBuffer","attrib","numVertices","n","createVertexBuffer","getVertexAttribFormat","getVertexAttribName","Float32Array","unshift","attribHash","layoutVertexBuffers","idx","bufferInfo","findIndex","layoutHash","buffers","bind","setVertexLayout","primitiveType","first","drawInstanced","numInstances","WebGPURenderState","_defaultState","defaultState","_getHash","invalidateHash","ctor","computeHash","WebGPUColorState","_redMask","_greenMask","_blueMask","_alphaMask","clone","redMask","greenMask","blueMask","alphaMask","r","g","a","WebGPUBlendingState","_enabled","_alphaToCoverageEnabled","_srcBlendRGB","_dstBlendRGB","_srcBlendAlpha","_dstBlendAlpha","_rgbEquation","_alphaEquation","other","enableAlphaToCoverage","setBlendFuncRGB","setBlendFuncAlpha","setBlendEquation","enabled","alphaToCoverageEnabled","srcBlendRGB","srcBlendAlpha","dstBlendRGB","dstBlendAlpha","rgbEquation","alphaEquation","setBlendFunc","dest","rgb","alpha","WebGPURasterizerState","_cullMode","_depthClampEnabled","enableDepthClamp","cullMode","mode","depthClampEnabled","WebGPUDepthState","_testEnabled","_writeEnabled","_compareFunc","_depthBias","_depthBiasSlopeScale","setCompareFunc","setDepthBias","setDepthBiasSlopeScale","testEnabled","writeEnabled","compareFunc","depthBias","depthBiasSlopeScale","WebGPUStencilState","_writeMask","_failOp","_failOpBack","_zFailOp","_zFailOpBack","_passOp","_passOpBack","_func","_funcBack","_ref","_readMask","failOpBack","zFailOpBack","passOpBack","funcBack","setWriteMask","setReadMask","writeMask","failOp","zFailOp","passOp","ref","readMask","mask","fail","zfail","pass","sideHash","toString","WebGPURenderStateSet","colorState","blendingState","rasterizerState","depthState","stencilState","newStateSet","copyFrom","stateSet","state","defaultColorState","useBlendingState","defaultBlendingState","defaultRasterizerState","defaultDepthState","defaultStencilState","apply","_force","setRenderStates","typeU16","U16","stencilFormats","depthFormats","PipelineCache","_renderPipelines","_computePipelines","wipeCache","fetchComputePipeline","getComputePipelineHash","shaderModule","compute","module","entryPoint","gpuCreateComputePipeline","vertexData","frameBufferInfo","vertexLayout","getRenderPipelineHash","bufferLayouts","fetchVertexLayout","primitiveState","createPrimitiveState","depthStencilState","createDepthStencilState","colorTargetStates","createColorTargetState","primitive","depthStencil","multisample","createMultisampleState","targets","gpuCreateRenderPipeline","topology","rs","frontFace","isWindingOrderReversed","unclippedDepth","stripIndexFormat","indexType","hasStencil","hasDepth","depthWriteEnabled","depthCompare","stencilFront","createStencilFaceState","stencilBack","stencilReadMask","stencilWriteMask","depthFailOp","GPUColorWrite","RED","GREEN","BLUE","ALPHA","blend","createBlendState","createBlendComponent","op","srcFunc","dstFunc","operation","srcFactor","dstFactor","fbHash","programHash","vertexHash","stateHash","WebGPUFrameBuffer","_options","_bindFlag","_msaaColorTextures","_msaaDepthTexture","depthAttachment","opt","ignoreDepthStencil","colorAttachmentHash","depthAttachmentHash","_init","getOptions","bindFlag","getHash","getWidth","attachment","getHeight","setColorAttachmentGenerateMipmaps","getColorAttachmentGenerateMipmaps","setColorAttachmentCubeFace","getColorAttachmentCubeFace","CubeFace","PX","setColorAttachmentMipLevel","getColorAttachmentMipLevel","setColorAttachmentLayer","getColorAttachmentLayer","setDepthAttachmentCubeFace","getDepthAttachmentCubeFace","setDepthAttachmentLayer","getDepthAttachmentLayer","getDepthAttachment","getColorAttachments","getColorAttachment","getMSAADepthAttachment","getMSAAColorAttacments","getColorFormats","getDepthFormat","unbind","colorAttachment","msaaTexture","msaaDepthTexture","getSampleCount","WebGPUIndexBuffer","Uint16Array","Uint32Array","BindGroupCache","_bindGroupLayoutCache","getLayoutHash","bgl","createBindGroupLayout","visibility","minBindingSize","sampleType","viewDimension","multisampled","access","ShaderType","Vertex","GPUShaderStage","Fragment","FRAGMENT","Compute","COMPUTE","VertexLayoutCache","l","parts","arrayStride","shaderLocation","WebGPUTextureSampler","addressModeU","addressModeV","addressModeW","gpuCreateSampler","mipmapFilter","lodMinClamp","lodMaxClamp","SamplerCache","_samplers","fetchSampler","VALIDATION_NEED_NEW_PASS","VALIDATION_FAILED","WebGPURenderPass","_renderCommandEncoder","_renderPassEncoder","_fbBindFlag","_currentViewport","_currentScissor","createFrameBufferInfo","active","fb","backbufferFormat","backbufferDepthFormat","fmt","setFramebuffer","setViewport","setScissor","getFramebuffer","vp","Array","isArray","default","deviceXToScreen","drawingBufferWidth","deviceYToScreen","drawingBufferHeight","vx","screenXToDevice","vy","screenYToDevice","vw","vh","getViewport","scissor","backBufferWidth","backBufferHeight","setScissorRect","getScissor","executeRenderBundle","renderBundle","begin","executeBundles","bindGroupOffsets","validation","validateDraw","drawInternal","clear","stencil","getEncoder","mainPassDesc","defaultRenderPassDesc","colorAttachmentDesc","resolveTarget","context","getCurrentTexture","depthAttachmentDesc","depthStencilAttachment","depthLoadOp","depthClearValue","stencilLoadOp","stencilClearValue","depthAttachmentTexture","depthTextureView","msaaView","depthStoreOp","hasStencilChannel","stencilStoreOp","capture","renderBundleEncoder","setBindGroupsForRender","setStencilReference","drawIndexed","colorTargetCount","framebuffer","programName","programLabel","framebufferName","framebufferHash","stack","ubo","bindGroupOffset","emptyBindGroup","WebGPUComputePass","_computeCommandEncoder","_computePassEncoder","workgroupCountX","workgroupCountY","workgroupCountZ","validateCompute","setBindGroupsForCompute","dispatchWorkgroups","computePassEncoder","beginComputePass","CommandQueueImmediate","_renderPass","_computePass","_segments","_buffersAwaitingSyncEnd","_texturesAwaitingSyncEnd","_drawcallCounter","isBufferUploading","_tex","getDrawcallCounter","segment","getOrCreateCurrentSegment","hasBodyCommands","bodyEncoder","flushUploads","finalizeCurrentSegmentUploads","currentPass","beginFrame","endFrame","getFramebufferInfo","ensureRenderBodyReady","_offset","getSegmentForUpload","buffersWithPendingUploads","texturesWithPendingUploads","srcBuffer","bytes","endAllBodyPasses","copyTexture","srcTexture","dstTexture","copyTextureToTexture","ensureComputeBodyReady","onSubmittedWorkDone","createSegment","uploadEncoder","hasUploadCommands","getCurrentSegment","getOrCreateUploadEncoder","commandBuffers","markBufferAwaitingSyncEnd","markTextureAwaitingSyncEnd","WebGPUDevice","BaseDevice","_context","_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","dpr","msaa","WeakMap","getFrameBufferSampleCount","adapter","getDrawingBufferWidth","getDrawingBufferHeight","clientWidth","canvas","clientHeight","defaultDepthTexture","defaultDepthTextureView","defaultMSAAColorTextureView","getAdapterInfo","getBackBufferWidth","getBackBufferHeight","initContext","navigator","gpu","requestAdapter","requestDevice","requiredFeatures","requiredLimits","feature","lost","framebufferCaps","miscCaps","shaderCaps","configure","initResizer","_handleResize","_cssWidth","_cssHeight","deviceWidth","deviceHeight","lastWidth","lastHeight","style","createDefaultRenderAttachments","nextFrame","callback","cancelNextFrame","_handle","clearFrameBuffer","createGPUTimer","createBlendingState","createColorState","createRasterizerState","createDepthState","createStencilState","createTextureFromMipmapData","parseTextureOptions","createTexture2D","createTexture2DFromImage","createTexture2DArray","createTexture2DArrayFromImages","elements","createTexture3D","createCubeTexture","createTextureVideo","el","copyFramebufferToTexture2D","copyTexture2D","srcWidth","srcHeight","dstWidth","dstHeight","createGPUProgram","parseBufferOptions","destBuffer","createIndexBuffer","structureType","createVertexLayout","createFrameBuffer","depthAttachement","dynamicOffsets","getBindGroup","getProgram","getVertexLayout","getRenderStates","reverseVertexWindingOrder","reverse","get","createTexture","importExternalTexture","createRenderPipeline","createComputePipeline","texFormat","pixelSize","stagingBuffer","looseContext","restoreContext","beginCapture","depthStencilFormat","dc","createRenderBundleEncoder","endCapture","_executeRenderBundle","_setFramebuffer","rt","_drawInstanced","getPreferredCanvasFormat","alphaMode","colorSpace","webGPUStatus","backendWebGPU","typeName","supported","Promise","resolve","status","createDevice","factory","makeObservable"],"mappings":"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"}