@zephyr3d/editor 0.3.7 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/assets/{index-ySiLtSxz.js → index-BZ1L8ggE.js} +43 -3
  2. package/dist/assistant/zephyr-types-index.json +13230 -9488
  3. package/dist/images/icon1024.png +0 -0
  4. package/dist/index.html +1 -1
  5. package/dist/modules/zephyr3d_backend-webgl.js +2 -0
  6. package/dist/modules/zephyr3d_backend-webgl.js.map +1 -1
  7. package/dist/modules/zephyr3d_backend-webgpu.js +457 -16
  8. package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
  9. package/dist/modules/zephyr3d_device.js +27 -0
  10. package/dist/modules/zephyr3d_device.js.map +1 -1
  11. package/dist/modules/zephyr3d_loaders.js +208 -1
  12. package/dist/modules/zephyr3d_loaders.js.map +1 -1
  13. package/dist/modules/zephyr3d_scene.js +774 -80
  14. package/dist/modules/zephyr3d_scene.js.map +1 -1
  15. package/dist/vendor/zephyr3d/backend-webgl/dist/capabilities_webgl.js +2 -0
  16. package/dist/vendor/zephyr3d/backend-webgl/dist/capabilities_webgl.js.map +1 -1
  17. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js +2 -0
  18. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js.map +1 -1
  19. package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js +55 -10
  20. package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js.map +1 -1
  21. package/dist/vendor/zephyr3d/backend-webgpu/dist/computepass_webgpu.js +4 -0
  22. package/dist/vendor/zephyr3d/backend-webgpu/dist/computepass_webgpu.js.map +1 -1
  23. package/dist/vendor/zephyr3d/backend-webgpu/dist/device.js +44 -1
  24. package/dist/vendor/zephyr3d/backend-webgpu/dist/device.js.map +1 -1
  25. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +58 -5
  26. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
  27. package/dist/vendor/zephyr3d/backend-webgpu/dist/timestamp_query.js +297 -0
  28. package/dist/vendor/zephyr3d/backend-webgpu/dist/timestamp_query.js.map +1 -0
  29. package/dist/vendor/zephyr3d/device/dist/base_types.js.map +1 -1
  30. package/dist/vendor/zephyr3d/device/dist/device.js +27 -0
  31. package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
  32. package/dist/vendor/zephyr3d/device/dist/index.d.ts +81 -1
  33. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js +208 -1
  34. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js.map +1 -1
  35. package/dist/vendor/zephyr3d/loaders/dist/index.d.ts +8 -0
  36. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +334 -63
  37. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
  38. package/dist/vendor/zephyr3d/scene/dist/animation/morphtargetgrouptrack.js +66 -0
  39. package/dist/vendor/zephyr3d/scene/dist/animation/morphtargetgrouptrack.js.map +1 -0
  40. package/dist/vendor/zephyr3d/scene/dist/asset/model.js +9 -0
  41. package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
  42. package/dist/vendor/zephyr3d/scene/dist/index.d.ts +260 -4
  43. package/dist/vendor/zephyr3d/scene/dist/index.js +7 -0
  44. package/dist/vendor/zephyr3d/scene/dist/index.js.map +1 -1
  45. package/dist/vendor/zephyr3d/scene/dist/posteffect/sao.js +1 -1
  46. package/dist/vendor/zephyr3d/scene/dist/posteffect/sao.js.map +1 -1
  47. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/executor.js +270 -1
  48. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/executor.js.map +1 -1
  49. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js +19 -1
  50. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  51. package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/types.js.map +1 -1
  52. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js +1 -0
  53. package/dist/vendor/zephyr3d/scene/dist/scene/scene.js.map +1 -1
  54. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +2 -1
  55. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
  56. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js +70 -1
  57. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
  58. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
  59. package/package.json +6 -6
  60. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js +0 -320
  61. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities_webgpu.js","sources":["../src/capabilities_webgpu.ts"],"sourcesContent":["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"],"names":["WebGPUFramebufferCaps","maxDrawBuffers","maxColorAttachmentBytesPerSample","supportRenderMipmap","supportMultisampledFramebuffer","supportFloatBlending","supportDepth32float","supportDepth32floatStencil8","device","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","supportS3TC","supportS3TCSRGB","supportBPTC","supportRGTC","supportASTC","supportDepthTexture","support3DTexture","supportSRGBTexture","supportFloatTexture","supportLinearFloatTexture","supportHalfFloatTexture","supportLinearHalfFloatTexture","supportAnisotropicFiltering","supportFloatColorBuffer","supportHalfFloatColorBuffer","maxTextureDimension2D","float32Filterable","gpuSampleType","filterable","renderable","compressed","writable","blockWidth","blockHeight","size","k","w","h","split","map","val","Number","calcMemoryUsage","format","numPixels","getTextureFormatInfo"],"mappings":"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"}
1
+ {"version":3,"file":"capabilities_webgpu.js","sources":["../src/capabilities_webgpu.ts"],"sourcesContent":["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 supportTimestampQuery: boolean;\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 this.supportTimestampQuery = device.device.features.has('timestamp-query');\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"],"names":["WebGPUFramebufferCaps","maxDrawBuffers","maxColorAttachmentBytesPerSample","supportRenderMipmap","supportMultisampledFramebuffer","supportFloatBlending","supportDepth32float","supportDepth32floatStencil8","device","limits","maxColorAttachments","features","has","WebGPUMiscCaps","supportOversizedViewport","supportBlendMinMax","support32BitIndex","supportDepthClamp","maxBindGroups","maxTexCoordIndex","supportTimestampQuery","WebGPUShaderCaps","supportFragmentDepth","supportStandardDerivatives","supportShaderTextureLod","supportHighPrecisionFloat","maxUniformBufferSize","uniformBufferOffsetAlignment","maxStorageBufferSize","storageBufferOffsetAlignment","maxUniformBufferBindingSize","minUniformBufferOffsetAlignment","maxStorageBufferBindingSize","minStorageBufferOffsetAlignment","WebGPUTextureCaps","_textureFormatInfos","maxTextureSize","maxCubeTextureSize","npo2Mipmapping","npo2Repeating","supportS3TC","supportS3TCSRGB","supportBPTC","supportRGTC","supportASTC","supportDepthTexture","support3DTexture","supportSRGBTexture","supportFloatTexture","supportLinearFloatTexture","supportHalfFloatTexture","supportLinearHalfFloatTexture","supportAnisotropicFiltering","supportFloatColorBuffer","supportHalfFloatColorBuffer","maxTextureDimension2D","float32Filterable","gpuSampleType","filterable","renderable","compressed","writable","blockWidth","blockHeight","size","k","w","h","split","map","val","Number","calcMemoryUsage","format","numPixels","getTextureFormatInfo"],"mappings":"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"}
@@ -34,10 +34,7 @@ class CommandQueueImmediate {
34
34
  getEncoder() {
35
35
  const segment = this.getOrCreateCurrentSegment();
36
36
  segment.hasBodyCommands = true;
37
- if (!segment.bodyEncoder) {
38
- segment.bodyEncoder = this._device.device.createCommandEncoder();
39
- }
40
- return segment.bodyEncoder;
37
+ return this.getOrCreateBodyEncoder(segment);
41
38
  }
42
39
  flushUploads() {
43
40
  this.finalizeCurrentSegmentUploads();
@@ -154,6 +151,26 @@ class CommandQueueImmediate {
154
151
  this.submit();
155
152
  return this._device.device.queue.onSubmittedWorkDone();
156
153
  }
154
+ insertTimestampMarker(querySet, queryIndex, includePendingUploads) {
155
+ this.endAllBodyPasses(false);
156
+ if (includePendingUploads) {
157
+ this.finalizeCurrentSegmentUploads();
158
+ const encoder = this.getEncoder();
159
+ this.encodeTimestampMarker(encoder, querySet, queryIndex);
160
+ } else {
161
+ const segment = this.getOrCreateCurrentSegment();
162
+ const pendingBuffers = segment.buffersWithPendingUploads.splice(0);
163
+ const pendingTextures = segment.texturesWithPendingUploads.splice(0);
164
+ segment.hasBodyCommands = true;
165
+ const encoder = this.getOrCreateBodyEncoder(segment);
166
+ this.encodeTimestampMarker(encoder, querySet, queryIndex);
167
+ if (pendingBuffers.length > 0 || pendingTextures.length > 0) {
168
+ const nextSegment = this.createSegment();
169
+ nextSegment.buffersWithPendingUploads.push(...pendingBuffers);
170
+ nextSegment.texturesWithPendingUploads.push(...pendingTextures);
171
+ }
172
+ }
173
+ }
157
174
  createSegment() {
158
175
  const segment = {
159
176
  uploadEncoder: null,
@@ -178,6 +195,12 @@ class CommandQueueImmediate {
178
195
  }
179
196
  return segment.uploadEncoder;
180
197
  }
198
+ getOrCreateBodyEncoder(segment) {
199
+ if (!segment.bodyEncoder) {
200
+ segment.bodyEncoder = this._device.device.createCommandEncoder();
201
+ }
202
+ return segment.bodyEncoder;
203
+ }
181
204
  ensureRenderBodyReady() {
182
205
  if (this._computePass.active) {
183
206
  this._computePass.end();
@@ -188,9 +211,15 @@ class CommandQueueImmediate {
188
211
  this._renderPass.end();
189
212
  }
190
213
  }
191
- endAllBodyPasses() {
214
+ flushDeferredMipmapsForBindGroups(bindGroups) {
215
+ this._renderPass.flushDeferredMipmapsForBindGroups(bindGroups);
216
+ }
217
+ hasDeferredMipmapsForBindGroups(bindGroups) {
218
+ return this._renderPass.hasDeferredMipmapsForBindGroups(bindGroups);
219
+ }
220
+ endAllBodyPasses(generateMipmaps = true) {
192
221
  if (this._renderPass.active) {
193
- this._renderPass.end();
222
+ this._renderPass.end(generateMipmaps);
194
223
  }
195
224
  if (this._computePass.active) {
196
225
  this._computePass.end();
@@ -198,9 +227,10 @@ class CommandQueueImmediate {
198
227
  }
199
228
  submit() {
200
229
  this.endAllBodyPasses();
230
+ this._renderPass.flushDeferredMipmaps();
201
231
  this.finalizeCurrentSegmentUploads();
232
+ const commandBuffers = [];
202
233
  if (this._segments.length > 0) {
203
- const commandBuffers = [];
204
234
  for (const segment of this._segments){
205
235
  if (segment.uploadEncoder && segment.hasUploadCommands) {
206
236
  commandBuffers.push(segment.uploadEncoder.finish());
@@ -209,9 +239,14 @@ class CommandQueueImmediate {
209
239
  commandBuffers.push(segment.bodyEncoder.finish());
210
240
  }
211
241
  }
212
- if (commandBuffers.length > 0) {
213
- this._device.device.queue.submit(commandBuffers);
214
- }
242
+ }
243
+ const timestampResolveCommandBuffer = this._device.createTimestampResolveCommandBuffer();
244
+ if (timestampResolveCommandBuffer) {
245
+ commandBuffers.push(timestampResolveCommandBuffer);
246
+ }
247
+ if (commandBuffers.length > 0) {
248
+ this._device.device.queue.submit(commandBuffers);
249
+ this._device.onTimestampCommandBuffersSubmitted();
215
250
  }
216
251
  for (const buffer of this._buffersAwaitingSyncEnd){
217
252
  buffer.endSyncChanges();
@@ -224,6 +259,16 @@ class CommandQueueImmediate {
224
259
  this._segments.length = 0;
225
260
  this._drawcallCounter = 0;
226
261
  }
262
+ encodeTimestampMarker(encoder, querySet, queryIndex) {
263
+ const pass = encoder.beginComputePass({
264
+ label: `timestamp-marker:${queryIndex}`,
265
+ timestampWrites: {
266
+ querySet,
267
+ beginningOfPassWriteIndex: queryIndex
268
+ }
269
+ });
270
+ pass.end();
271
+ }
227
272
  markBufferAwaitingSyncEnd(buffer) {
228
273
  if (this._buffersAwaitingSyncEnd.indexOf(buffer) < 0) {
229
274
  this._buffersAwaitingSyncEnd.push(buffer);
@@ -1 +1 @@
1
- {"version":3,"file":"commandqueue.js","sources":["../src/commandqueue.ts"],"sourcesContent":["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"],"names":["CommandQueueImmediate","_renderPass","_computePass","_segments","_buffersAwaitingSyncEnd","_texturesAwaitingSyncEnd","_device","_drawcallCounter","device","WebGPURenderPass","WebGPUComputePass","isBufferUploading","_buffer","isTextureUploading","_tex","hasActiveWork","length","active","getDrawcallCounter","getEncoder","segment","getOrCreateCurrentSegment","hasBodyCommands","bodyEncoder","createCommandEncoder","flushUploads","finalizeCurrentSegmentUploads","currentPass","beginFrame","endFrame","submit","flush","setFramebuffer","fb","getFramebuffer","getFramebufferInfo","getFrameBufferInfo","executeRenderBundle","renderBundle","ensureRenderBodyReady","bufferUpload","buffer","_offset","_size","getSegmentForUpload","buffersWithPendingUploads","indexOf","push","textureUpload","tex","texturesWithPendingUploads","copyBuffer","srcBuffer","dstBuffer","srcOffset","dstOffset","bytes","endAllBodyPasses","encoder","copyBufferToBuffer","object","copyTexture","srcTexture","dstTexture","srcLevel","dstLevel","width","height","depthOrArrayLayers","copyTextureToTexture","texture","mipLevel","origin","x","y","z","compute","program","bindGroups","bindGroupOffsets","workgroupCountX","workgroupCountY","workgroupCountZ","ensureComputeBodyReady","draw","vertexData","stateSet","primitiveType","first","count","numInstances","capture","renderBundleEncoder","setViewport","vp","getViewport","setScissor","scissor","getScissor","clear","color","depth","stencil","finish","queue","onSubmittedWorkDone","createSegment","uploadEncoder","hasUploadCommands","getCurrentSegment","getOrCreateUploadEncoder","end","commandBuffers","endSyncChanges","markBufferAwaitingSyncEnd","markTextureAwaitingSyncEnd","beginSyncChanges","disposed","isMipmapDirty","WebGPUMipmapGenerator","generateMipmap"],"mappings":"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"}
1
+ {"version":3,"file":"commandqueue.js","sources":["../src/commandqueue.ts"],"sourcesContent":["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 return this.getOrCreateBodyEncoder(segment);\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 insertTimestampMarker(querySet: GPUQuerySet, queryIndex: number, includePendingUploads: boolean): void {\r\n this.endAllBodyPasses(false);\r\n if (includePendingUploads) {\r\n this.finalizeCurrentSegmentUploads();\r\n const encoder = this.getEncoder();\r\n this.encodeTimestampMarker(encoder, querySet, queryIndex);\r\n } else {\r\n const segment = this.getOrCreateCurrentSegment();\r\n const pendingBuffers = segment.buffersWithPendingUploads.splice(0);\r\n const pendingTextures = segment.texturesWithPendingUploads.splice(0);\r\n segment.hasBodyCommands = true;\r\n const encoder = this.getOrCreateBodyEncoder(segment);\r\n this.encodeTimestampMarker(encoder, querySet, queryIndex);\r\n if (pendingBuffers.length > 0 || pendingTextures.length > 0) {\r\n const nextSegment = this.createSegment();\r\n nextSegment.buffersWithPendingUploads.push(...pendingBuffers);\r\n nextSegment.texturesWithPendingUploads.push(...pendingTextures);\r\n }\r\n }\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 getOrCreateBodyEncoder(segment: LogicalSegment) {\r\n if (!segment.bodyEncoder) {\r\n segment.bodyEncoder = this._device.device.createCommandEncoder();\r\n }\r\n return segment.bodyEncoder;\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 flushDeferredMipmapsForBindGroups(bindGroups: WebGPUBindGroup[]): void {\r\n this._renderPass.flushDeferredMipmapsForBindGroups(bindGroups);\r\n }\r\n hasDeferredMipmapsForBindGroups(bindGroups: WebGPUBindGroup[]): boolean {\r\n return this._renderPass.hasDeferredMipmapsForBindGroups(bindGroups);\r\n }\r\n private endAllBodyPasses(generateMipmaps = true) {\r\n if (this._renderPass.active) {\r\n this._renderPass.end(generateMipmaps);\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._renderPass.flushDeferredMipmaps();\r\n this.finalizeCurrentSegmentUploads();\r\n const commandBuffers: GPUCommandBuffer[] = [];\r\n if (this._segments.length > 0) {\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 }\r\n const timestampResolveCommandBuffer = this._device.createTimestampResolveCommandBuffer();\r\n if (timestampResolveCommandBuffer) {\r\n commandBuffers.push(timestampResolveCommandBuffer);\r\n }\r\n if (commandBuffers.length > 0) {\r\n this._device.device.queue.submit(commandBuffers);\r\n this._device.onTimestampCommandBuffersSubmitted();\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 encodeTimestampMarker(encoder: GPUCommandEncoder, querySet: GPUQuerySet, queryIndex: number): void {\r\n const pass = encoder.beginComputePass({\r\n label: `timestamp-marker:${queryIndex}`,\r\n timestampWrites: {\r\n querySet,\r\n beginningOfPassWriteIndex: queryIndex\r\n }\r\n } as GPUComputePassDescriptor);\r\n pass.end();\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"],"names":["CommandQueueImmediate","_renderPass","_computePass","_segments","_buffersAwaitingSyncEnd","_texturesAwaitingSyncEnd","_device","_drawcallCounter","device","WebGPURenderPass","WebGPUComputePass","isBufferUploading","_buffer","isTextureUploading","_tex","hasActiveWork","length","active","getDrawcallCounter","getEncoder","segment","getOrCreateCurrentSegment","hasBodyCommands","getOrCreateBodyEncoder","flushUploads","finalizeCurrentSegmentUploads","currentPass","beginFrame","endFrame","submit","flush","setFramebuffer","fb","getFramebuffer","getFramebufferInfo","getFrameBufferInfo","executeRenderBundle","renderBundle","ensureRenderBodyReady","bufferUpload","buffer","_offset","_size","getSegmentForUpload","buffersWithPendingUploads","indexOf","push","textureUpload","tex","texturesWithPendingUploads","copyBuffer","srcBuffer","dstBuffer","srcOffset","dstOffset","bytes","endAllBodyPasses","encoder","copyBufferToBuffer","object","copyTexture","srcTexture","dstTexture","srcLevel","dstLevel","width","height","depthOrArrayLayers","copyTextureToTexture","texture","mipLevel","origin","x","y","z","compute","program","bindGroups","bindGroupOffsets","workgroupCountX","workgroupCountY","workgroupCountZ","ensureComputeBodyReady","draw","vertexData","stateSet","primitiveType","first","count","numInstances","capture","renderBundleEncoder","setViewport","vp","getViewport","setScissor","scissor","getScissor","clear","color","depth","stencil","finish","queue","onSubmittedWorkDone","insertTimestampMarker","querySet","queryIndex","includePendingUploads","encodeTimestampMarker","pendingBuffers","splice","pendingTextures","nextSegment","createSegment","uploadEncoder","bodyEncoder","hasUploadCommands","getCurrentSegment","getOrCreateUploadEncoder","createCommandEncoder","end","flushDeferredMipmapsForBindGroups","hasDeferredMipmapsForBindGroups","generateMipmaps","flushDeferredMipmaps","commandBuffers","timestampResolveCommandBuffer","createTimestampResolveCommandBuffer","onTimestampCommandBuffersSubmitted","endSyncChanges","pass","beginComputePass","label","timestampWrites","beginningOfPassWriteIndex","markBufferAwaitingSyncEnd","markTextureAwaitingSyncEnd","beginSyncChanges","disposed","isMipmapDirty","WebGPUMipmapGenerator","generateMipmap"],"mappings":"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"}
@@ -16,6 +16,10 @@ class WebGPUComputePass {
16
16
  if (validation & VALIDATION_FAILED) {
17
17
  return;
18
18
  }
19
+ if (this._device.commandQueue.hasDeferredMipmapsForBindGroups(bindGroups)) {
20
+ this.end();
21
+ this._device.commandQueue.flushDeferredMipmapsForBindGroups(bindGroups);
22
+ }
19
23
  if (!this.active) {
20
24
  this.begin();
21
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"computepass_webgpu.js","sources":["../src/computepass_webgpu.ts"],"sourcesContent":["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"],"names":["VALIDATION_FAILED","WebGPUComputePass","_device","_computeCommandEncoder","_computePassEncoder","device","active","compute","program","bindGroups","bindGroupOffsets","workgroupCountX","workgroupCountY","workgroupCountZ","validation","validateCompute","begin","setBindGroupsForCompute","pipeline","pipelineCache","fetchComputePipeline","setPipeline","dispatchWorkgroups","computePassEncoder","i","bindGroupLayouts","length","bindGroup","bindGroupOffset","setBindGroup","emptyBindGroup","console","error","commandQueue","getEncoder","beginComputePass","end","ubo","bufferList","disposed","tex","textureList","name"],"mappings":"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"}
1
+ {"version":3,"file":"computepass_webgpu.js","sources":["../src/computepass_webgpu.ts"],"sourcesContent":["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._device.commandQueue.hasDeferredMipmapsForBindGroups(bindGroups)) {\r\n this.end();\r\n this._device.commandQueue.flushDeferredMipmapsForBindGroups(bindGroups);\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"],"names":["VALIDATION_FAILED","WebGPUComputePass","_device","_computeCommandEncoder","_computePassEncoder","device","active","compute","program","bindGroups","bindGroupOffsets","workgroupCountX","workgroupCountY","workgroupCountZ","validation","validateCompute","commandQueue","hasDeferredMipmapsForBindGroups","end","flushDeferredMipmapsForBindGroups","begin","setBindGroupsForCompute","pipeline","pipelineCache","fetchComputePipeline","setPipeline","dispatchWorkgroups","computePassEncoder","i","bindGroupLayouts","length","bindGroup","bindGroupOffset","setBindGroup","emptyBindGroup","console","error","getEncoder","beginComputePass","ubo","bufferList","disposed","tex","textureList","name"],"mappings":"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"}
@@ -20,6 +20,7 @@ import { CommandQueueImmediate } from './commandqueue.js';
20
20
  import { WebGPUStructuredBuffer } from './structuredbuffer_webgpu.js';
21
21
  import { textureFormatInvMap } from './constants_webgpu.js';
22
22
  import { WebGPUBaseTexture } from './basetexture_webgpu.js';
23
+ import { WebGPUTimestampQueryManager } from './timestamp_query.js';
23
24
 
24
25
  class WebGPUDevice extends BaseDevice {
25
26
  _context;
@@ -51,6 +52,7 @@ class WebGPUDevice extends BaseDevice {
51
52
  _emptyBindGroup;
52
53
  _captureRenderBundle;
53
54
  _adapterInfo;
55
+ _timestampQueries;
54
56
  constructor(backend, cvs, options){
55
57
  super(cvs, backend, options?.dpr);
56
58
  this._reverseWindingOrder = false;
@@ -161,7 +163,25 @@ class WebGPUDevice extends BaseDevice {
161
163
  ...this._adapter.features
162
164
  ],
163
165
  requiredLimits: {
164
- ...this._adapter.limits
166
+ maxBufferSize: this._adapter.limits.maxBufferSize,
167
+ maxBindingsPerBindGroup: this._adapter.limits.maxBindingsPerBindGroup,
168
+ maxTextureDimension2D: this._adapter.limits.maxTextureDimension2D,
169
+ maxComputeWorkgroupSizeX: this._adapter.limits.maxComputeWorkgroupSizeX,
170
+ maxComputeWorkgroupSizeY: this._adapter.limits.maxComputeWorkgroupSizeY,
171
+ maxComputeWorkgroupSizeZ: this._adapter.limits.maxComputeWorkgroupSizeZ,
172
+ maxSampledTexturesPerShaderStage: this._adapter.limits.maxSampledTexturesPerShaderStage,
173
+ maxSamplersPerShaderStage: this._adapter.limits.maxSamplersPerShaderStage,
174
+ maxStorageBuffersPerShaderStage: this._adapter.limits.maxStorageBuffersPerShaderStage,
175
+ maxStorageTexturesPerShaderStage: this._adapter.limits.maxStorageTexturesPerShaderStage,
176
+ maxUniformBuffersPerShaderStage: this._adapter.limits.maxUniformBuffersPerShaderStage,
177
+ maxUniformBufferBindingSize: this._adapter.limits.maxUniformBufferBindingSize,
178
+ maxStorageBufferBindingSize: this._adapter.limits.maxStorageBufferBindingSize,
179
+ maxInterStageShaderVariables: this._adapter.limits.maxInterStageShaderVariables,
180
+ maxColorAttachments: this._adapter.limits.maxColorAttachments,
181
+ maxColorAttachmentBytesPerSample: this._adapter.limits.maxColorAttachmentBytesPerSample,
182
+ maxComputeWorkgroupStorageSize: this._adapter.limits.maxComputeWorkgroupStorageSize,
183
+ maxComputeInvocationsPerWorkgroup: this._adapter.limits.maxComputeInvocationsPerWorkgroup,
184
+ maxComputeWorkgroupsPerDimension: this._adapter.limits.maxComputeWorkgroupsPerDimension
165
185
  }
166
186
  });
167
187
  console.info('WebGPU device features:');
@@ -197,6 +217,7 @@ class WebGPUDevice extends BaseDevice {
197
217
  this._bindGroupCache = new BindGroupCache(this);
198
218
  this._vertexLayoutCache = new VertexLayoutCache();
199
219
  this._commandQueue = new CommandQueueImmediate(this);
220
+ this._timestampQueries = new WebGPUTimestampQueryManager(this);
200
221
  this._canRender = true;
201
222
  this.setViewport(null);
202
223
  this.setScissor(null);
@@ -231,6 +252,21 @@ class WebGPUDevice extends BaseDevice {
231
252
  // throw new Error('not implemented');
232
253
  return null;
233
254
  }
255
+ beginTimestampQuery(label, options) {
256
+ return this._timestampQueries.begin(label, options);
257
+ }
258
+ endTimestampQuery(id) {
259
+ this._timestampQueries.end(id);
260
+ }
261
+ pollTimestampQuery(query) {
262
+ return this._timestampQueries.poll(query);
263
+ }
264
+ resolveTimestampQuery(query) {
265
+ return this._timestampQueries.resolve(query);
266
+ }
267
+ collectTimestampQueries(filter) {
268
+ return this._timestampQueries.collect(filter);
269
+ }
234
270
  createRenderStateSet() {
235
271
  return new WebGPURenderStateSet(this);
236
272
  }
@@ -646,6 +682,12 @@ class WebGPUDevice extends BaseDevice {
646
682
  flushUploads() {
647
683
  this._commandQueue.flushUploads();
648
684
  }
685
+ /** @internal */ createTimestampResolveCommandBuffer() {
686
+ return this._timestampQueries.createResolveCommandBuffer();
687
+ }
688
+ /** @internal */ onTimestampCommandBuffersSubmitted() {
689
+ this._timestampQueries.onSubmitted();
690
+ }
649
691
  /** @internal */ _setFramebuffer(rt) {
650
692
  this._commandQueue.setFramebuffer(rt);
651
693
  }
@@ -658,6 +700,7 @@ class WebGPUDevice extends BaseDevice {
658
700
  }
659
701
  }
660
702
  /** @internal */ onEndFrame() {
703
+ this._timestampQueries.autoCloseOpenScopes();
661
704
  this._commandQueue.endFrame();
662
705
  }
663
706
  /** @internal */ _draw(primitiveType, first, count) {