@babylonjs/core 5.0.0-alpha.61 → 5.0.0-alpha.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Audio/sound.js +1 -1
- package/Audio/sound.js.map +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.d.ts +5 -0
- package/Behaviors/Cameras/autoRotationBehavior.js +7 -0
- package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
- package/Cameras/camera.js +1 -1
- package/Cameras/camera.js.map +1 -1
- package/DeviceInput/Implementations/webDeviceInputSystem.js +9 -9
- package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.dynamicTexture.d.ts +2 -1
- package/Engines/Extensions/engine.dynamicTexture.js +2 -1
- package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +3 -11
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +0 -4
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +0 -4
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +42 -61
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +6 -4
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuConstants.d.ts +57 -13
- package/Engines/WebGPU/webgpuConstants.js +62 -13
- package/Engines/WebGPU/webgpuConstants.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.d.ts +22 -3
- package/Engines/WebGPU/webgpuHardwareTexture.js +2 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +2 -2
- package/Engines/WebGPU/webgpuTextureHelper.js +233 -63
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/engine.d.ts +82 -39
- package/Engines/engine.js +10 -1
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +30 -10
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +2 -4
- package/Engines/webgpuEngine.js.map +1 -1
- package/Lights/pointLight.js +1 -1
- package/Lights/pointLight.js.map +1 -1
- package/Lights/spotLight.js +1 -1
- package/Lights/spotLight.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/index.d.ts +1 -0
- package/Materials/Node/Blocks/Fragment/index.js +1 -0
- package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +1 -3
- package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/twirlBlock.d.ts +49 -0
- package/Materials/Node/Blocks/Fragment/twirlBlock.js +145 -0
- package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -0
- package/Materials/Node/Blocks/customBlock.d.ts +31 -0
- package/Materials/Node/Blocks/customBlock.js +144 -0
- package/Materials/Node/Blocks/customBlock.js.map +1 -0
- package/Materials/Node/Blocks/index.d.ts +1 -0
- package/Materials/Node/Blocks/index.js +1 -0
- package/Materials/Node/Blocks/index.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/dynamicTexture.d.ts +2 -1
- package/Materials/Textures/dynamicTexture.js +4 -2
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinTexture.d.ts +1 -2
- package/Materials/Textures/thinTexture.js +2 -4
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/shaderMaterial.js +12 -0
- package/Materials/shaderMaterial.js.map +1 -1
- package/Maths/math.vector.d.ts +12 -8
- package/Maths/math.vector.js +22 -14
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/abstractMesh.js +23 -22
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.js +2 -2
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/mesh.d.ts +12 -0
- package/Meshes/mesh.js +182 -113
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +6 -1
- package/Meshes/mesh.vertexData.js +295 -114
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +1 -0
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +13 -8
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/coroutine.d.ts +45 -0
- package/Misc/coroutine.js +123 -0
- package/Misc/coroutine.js.map +1 -0
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/observableCoroutine.d.ts +9 -10
- package/Misc/observableCoroutine.js +31 -39
- package/Misc/observableCoroutine.js.map +1 -1
- package/Particles/subEmitter.js +1 -0
- package/Particles/subEmitter.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.d.ts +14 -0
- package/XR/features/WebXRControllerPointerSelection.js +38 -10
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/package.json +10 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpuTextureHelper.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuTextureHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// License for the mipmap generation code:\r\n//\r\n// Copyright 2020 Brandon Jones\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a copy\r\n// of this software and associated documentation files (the \"Software\"), to deal\r\n// in the Software without restriction, including without limitation the rights\r\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n// copies of the Software, and to permit persons to whom the Software is\r\n// furnished to do so, subject to the following conditions:\r\n\r\n// The above copyright notice and this permission notice shall be included in\r\n// all copies or substantial portions of the Software.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n// SOFTWARE.\r\nimport * as WebGPUConstants from './webgpuConstants';\r\nimport { Scalar } from '../../Maths/math.scalar';\r\nimport { WebGPUBufferManager } from './webgpuBufferManager';\r\n\r\nimport { Nullable } from '../../types';\r\nimport { InternalTexture, InternalTextureSource } from '../../Materials/Textures/internalTexture';\r\nimport { HardwareTextureWrapper } from '../../Materials/Textures/hardwareTextureWrapper';\r\nimport { BaseTexture } from '../../Materials/Textures/baseTexture';\r\nimport { WebGPUHardwareTexture } from './webgpuHardwareTexture';\r\nimport { EngineStore } from \"../engineStore\";\r\nimport { WebGPUTintWASM } from \"./webgpuTintWASM\";\r\n\r\n// TODO WEBGPU improve mipmap generation by using compute shaders\r\n\r\n// TODO WEBGPU optimize, don't recreate things that can be cached (bind groups, descriptors, etc)\r\n\r\n// TODO WEBGPU use WGSL instead of GLSL\r\nconst mipmapVertexSource = `\r\n const vec2 pos[4] = vec2[4](vec2(-1.0f, 1.0f), vec2(1.0f, 1.0f), vec2(-1.0f, -1.0f), vec2(1.0f, -1.0f));\r\n const vec2 tex[4] = vec2[4](vec2(0.0f, 0.0f), vec2(1.0f, 0.0f), vec2(0.0f, 1.0f), vec2(1.0f, 1.0f));\r\n\r\n layout(location = 0) out vec2 vTex;\r\n\r\n void main() {\r\n vTex = tex[gl_VertexIndex];\r\n gl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);\r\n }\r\n `;\r\n\r\nconst mipmapFragmentSource = `\r\n layout(set = 0, binding = 0) uniform sampler imgSampler;\r\n layout(set = 0, binding = 1) uniform texture2D img;\r\n\r\n layout(location = 0) in vec2 vTex;\r\n layout(location = 0) out vec4 outColor;\r\n\r\n void main() {\r\n outColor = texture(sampler2D(img, imgSampler), vTex);\r\n }\r\n `;\r\n\r\nconst invertYPreMultiplyAlphaVertexSource = `\r\n #extension GL_EXT_samplerless_texture_functions : enable\r\n\r\n const vec2 pos[4] = vec2[4](vec2(-1.0f, 1.0f), vec2(1.0f, 1.0f), vec2(-1.0f, -1.0f), vec2(1.0f, -1.0f));\r\n const vec2 tex[4] = vec2[4](vec2(0.0f, 0.0f), vec2(1.0f, 0.0f), vec2(0.0f, 1.0f), vec2(1.0f, 1.0f));\r\n\r\n layout(set = 0, binding = 0) uniform texture2D img;\r\n\r\n #ifdef INVERTY\r\n layout(location = 0) out flat ivec2 vTextureSize;\r\n #endif\r\n\r\n void main() {\r\n #ifdef INVERTY\r\n vTextureSize = textureSize(img, 0);\r\n #endif\r\n gl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);\r\n }\r\n `;\r\n\r\nconst invertYPreMultiplyAlphaFragmentSource = `\r\n #extension GL_EXT_samplerless_texture_functions : enable\r\n\r\n layout(set = 0, binding = 0) uniform texture2D img;\r\n\r\n #ifdef INVERTY\r\n layout(location = 0) in flat ivec2 vTextureSize;\r\n #endif\r\n layout(location = 0) out vec4 outColor;\r\n\r\n void main() {\r\n #ifdef INVERTY\r\n vec4 color = texelFetch(img, ivec2(gl_FragCoord.x, vTextureSize.y - gl_FragCoord.y), 0);\r\n #else\r\n vec4 color = texelFetch(img, ivec2(gl_FragCoord.xy), 0);\r\n #endif\r\n #ifdef PREMULTIPLYALPHA\r\n color.rgb *= color.a;\r\n #endif\r\n outColor = color;\r\n }\r\n `;\r\n\r\nconst clearVertexSource = `\r\n const vec2 pos[4] = vec2[4](vec2(-1.0f, 1.0f), vec2(1.0f, 1.0f), vec2(-1.0f, -1.0f), vec2(1.0f, -1.0f));\r\n\r\n void main() {\r\n gl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);\r\n }\r\n `;\r\n\r\nconst clearFragmentSource = `\r\n layout(set = 0, binding = 0) uniform Uniforms {\r\n uniform vec4 color;\r\n };\r\n\r\n layout(location = 0) out vec4 outColor;\r\n\r\n void main() {\r\n outColor = color;\r\n }\r\n `;\r\n\r\nenum PipelineType {\r\n MipMap = 0,\r\n InvertYPremultiplyAlpha = 1,\r\n Clear = 2,\r\n}\r\n\r\ninterface pipelineParameters {\r\n invertY?: boolean;\r\n premultiplyAlpha?: boolean;\r\n}\r\n\r\nconst shadersForPipelineType = [\r\n { vertex: mipmapVertexSource, fragment: mipmapFragmentSource },\r\n { vertex: invertYPreMultiplyAlphaVertexSource, fragment: invertYPreMultiplyAlphaFragmentSource },\r\n { vertex: clearVertexSource, fragment: clearFragmentSource },\r\n];\r\n\r\n/** @hidden */\r\nexport class WebGPUTextureHelper {\r\n\r\n private _device: GPUDevice;\r\n private _glslang: any;\r\n private _tintWASM: Nullable<WebGPUTintWASM>;\r\n private _bufferManager: WebGPUBufferManager;\r\n private _mipmapSampler: GPUSampler;\r\n private _pipelines: { [format: string]: Array<[GPURenderPipeline, GPUBindGroupLayout]> } = {};\r\n private _compiledShaders: GPUShaderModule[][] = [];\r\n private _deferredReleaseTextures: Array<[Nullable<HardwareTextureWrapper | GPUTexture>, Nullable<BaseTexture>]> = [];\r\n private _commandEncoderForCreation: GPUCommandEncoder;\r\n\r\n public static ComputeNumMipmapLevels(width: number, height: number) {\r\n return Scalar.ILog2(Math.max(width, height)) + 1;\r\n }\r\n\r\n //------------------------------------------------------------------------------\r\n // Initialization / Helpers\r\n //------------------------------------------------------------------------------\r\n\r\n constructor(device: GPUDevice, glslang: any, tintWASM: Nullable<WebGPUTintWASM>, bufferManager: WebGPUBufferManager) {\r\n this._device = device;\r\n this._glslang = glslang;\r\n this._tintWASM = tintWASM;\r\n this._bufferManager = bufferManager;\r\n\r\n this._mipmapSampler = device.createSampler({ minFilter: WebGPUConstants.FilterMode.Linear });\r\n\r\n this._getPipeline(WebGPUConstants.TextureFormat.RGBA8Unorm);\r\n }\r\n\r\n private _getPipeline(format: GPUTextureFormat, type: PipelineType = PipelineType.MipMap, params?: pipelineParameters): [GPURenderPipeline, GPUBindGroupLayout] {\r\n const index =\r\n type === PipelineType.MipMap ? 1 << 0 :\r\n type === PipelineType.InvertYPremultiplyAlpha ? ((params!.invertY ? 1 : 0) << 1) + ((params!.premultiplyAlpha ? 1 : 0) << 2) :\r\n type === PipelineType.Clear ? 1 << 3 : 0;\r\n\r\n if (!this._pipelines[format]) {\r\n this._pipelines[format] = [];\r\n }\r\n\r\n let pipelineAndBGL = this._pipelines[format][index];\r\n if (!pipelineAndBGL) {\r\n let defines = \"#version 450\\r\\n\";\r\n if (type === PipelineType.InvertYPremultiplyAlpha) {\r\n if (params!.invertY) {\r\n defines += \"#define INVERTY\\r\\n\";\r\n }\r\n if (params!.premultiplyAlpha) {\r\n defines += \"#define PREMULTIPLYALPHA\\r\\n\";\r\n }\r\n }\r\n\r\n let modules = this._compiledShaders[index];\r\n if (!modules) {\r\n let vertexCode = this._glslang.compileGLSL(defines + shadersForPipelineType[type].vertex, 'vertex');\r\n let fragmentCode = this._glslang.compileGLSL(defines + shadersForPipelineType[type].fragment, 'fragment');\r\n\r\n if (this._tintWASM) {\r\n vertexCode = this._tintWASM.convertSpirV2WGSL(vertexCode);\r\n fragmentCode = this._tintWASM.convertSpirV2WGSL(fragmentCode);\r\n }\r\n\r\n const vertexModule = this._device.createShaderModule({\r\n code: vertexCode\r\n });\r\n const fragmentModule = this._device.createShaderModule({\r\n code: fragmentCode\r\n });\r\n modules = this._compiledShaders[index] = [vertexModule, fragmentModule];\r\n }\r\n\r\n const pipeline = this._device.createRenderPipeline({\r\n vertex: {\r\n module: modules[0],\r\n entryPoint: 'main',\r\n },\r\n fragment: {\r\n module: modules[1],\r\n entryPoint: 'main',\r\n targets: [{\r\n format,\r\n }],\r\n },\r\n primitive: {\r\n topology: WebGPUConstants.PrimitiveTopology.TriangleStrip,\r\n stripIndexFormat: WebGPUConstants.IndexFormat.Uint16,\r\n },\r\n });\r\n\r\n pipelineAndBGL = this._pipelines[format][index] = [pipeline, pipeline.getBindGroupLayout(0)];\r\n }\r\n\r\n return pipelineAndBGL;\r\n }\r\n\r\n private static _GetTextureTypeFromFormat(format: GPUTextureFormat): number {\r\n switch (format) {\r\n // One Component = 8 bits\r\n case WebGPUConstants.TextureFormat.R8Unorm:\r\n case WebGPUConstants.TextureFormat.R8Snorm:\r\n case WebGPUConstants.TextureFormat.R8Uint:\r\n case WebGPUConstants.TextureFormat.R8Sint:\r\n case WebGPUConstants.TextureFormat.RG8Unorm:\r\n case WebGPUConstants.TextureFormat.RG8Snorm:\r\n case WebGPUConstants.TextureFormat.RG8Uint:\r\n case WebGPUConstants.TextureFormat.RG8Sint:\r\n case WebGPUConstants.TextureFormat.RGBA8Unorm:\r\n case WebGPUConstants.TextureFormat.RGBA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGBA8Snorm:\r\n case WebGPUConstants.TextureFormat.RGBA8Uint:\r\n case WebGPUConstants.TextureFormat.RGBA8Sint:\r\n case WebGPUConstants.TextureFormat.BGRA8Unorm:\r\n case WebGPUConstants.TextureFormat.BGRA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGB10A2Unorm: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.RGB9E5UFloat: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.RG11B10UFloat: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.Depth24UnormStencil8: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.Depth32FloatStencil8: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC6HRGBUFloat:\r\n case WebGPUConstants.TextureFormat.BC6HRGBFloat:\r\n case WebGPUConstants.TextureFormat.BC5RGUnorm:\r\n case WebGPUConstants.TextureFormat.BC5RGSnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC4RUnorm:\r\n case WebGPUConstants.TextureFormat.BC4RSnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnormSRGB:\r\n return 0;\r\n\r\n // One component = 16 bits\r\n case WebGPUConstants.TextureFormat.R16Uint:\r\n case WebGPUConstants.TextureFormat.R16Sint:\r\n case WebGPUConstants.TextureFormat.RG16Uint:\r\n case WebGPUConstants.TextureFormat.RG16Sint:\r\n case WebGPUConstants.TextureFormat.RGBA16Uint:\r\n case WebGPUConstants.TextureFormat.RGBA16Sint:\r\n case WebGPUConstants.TextureFormat.Depth16Unorm:\r\n return 5;\r\n\r\n case WebGPUConstants.TextureFormat.R16Float:\r\n case WebGPUConstants.TextureFormat.RG16Float:\r\n case WebGPUConstants.TextureFormat.RGBA16Float:\r\n return 2;\r\n\r\n // One component = 32 bits\r\n case WebGPUConstants.TextureFormat.R32Uint:\r\n case WebGPUConstants.TextureFormat.R32Sint:\r\n case WebGPUConstants.TextureFormat.RG32Uint:\r\n case WebGPUConstants.TextureFormat.RG32Sint:\r\n case WebGPUConstants.TextureFormat.RGBA32Uint:\r\n case WebGPUConstants.TextureFormat.RGBA32Sint:\r\n return 7;\r\n\r\n case WebGPUConstants.TextureFormat.R32Float:\r\n case WebGPUConstants.TextureFormat.RG32Float:\r\n case WebGPUConstants.TextureFormat.RGBA32Float:\r\n case WebGPUConstants.TextureFormat.Depth32Float:\r\n return 1;\r\n\r\n case WebGPUConstants.TextureFormat.Stencil8:\r\n throw \"No fixed size for Stencil8 format!\";\r\n case WebGPUConstants.TextureFormat.Depth24Plus:\r\n throw \"No fixed size for Depth24Plus format!\";\r\n case WebGPUConstants.TextureFormat.Depth24PlusStencil8:\r\n throw \"No fixed size for Depth24PlusStencil8 format!\";\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n private static _GetBlockInformationFromFormat(format: GPUTextureFormat): { width: number, height: number, length: number } {\r\n switch (format) {\r\n // 8 bits formats\r\n case WebGPUConstants.TextureFormat.R8Unorm:\r\n case WebGPUConstants.TextureFormat.R8Snorm:\r\n case WebGPUConstants.TextureFormat.R8Uint:\r\n case WebGPUConstants.TextureFormat.R8Sint:\r\n return { width: 1, height: 1, length: 1 };\r\n\r\n // 16 bits formats\r\n case WebGPUConstants.TextureFormat.R16Uint:\r\n case WebGPUConstants.TextureFormat.R16Sint:\r\n case WebGPUConstants.TextureFormat.R16Float:\r\n case WebGPUConstants.TextureFormat.RG8Unorm:\r\n case WebGPUConstants.TextureFormat.RG8Snorm:\r\n case WebGPUConstants.TextureFormat.RG8Uint:\r\n case WebGPUConstants.TextureFormat.RG8Sint:\r\n return { width: 1, height: 1, length: 2 };\r\n\r\n // 32 bits formats\r\n case WebGPUConstants.TextureFormat.R32Uint:\r\n case WebGPUConstants.TextureFormat.R32Sint:\r\n case WebGPUConstants.TextureFormat.R32Float:\r\n case WebGPUConstants.TextureFormat.RG16Uint:\r\n case WebGPUConstants.TextureFormat.RG16Sint:\r\n case WebGPUConstants.TextureFormat.RG16Float:\r\n case WebGPUConstants.TextureFormat.RGBA8Unorm:\r\n case WebGPUConstants.TextureFormat.RGBA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGBA8Snorm:\r\n case WebGPUConstants.TextureFormat.RGBA8Uint:\r\n case WebGPUConstants.TextureFormat.RGBA8Sint:\r\n case WebGPUConstants.TextureFormat.BGRA8Unorm:\r\n case WebGPUConstants.TextureFormat.BGRA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGB9E5UFloat:\r\n case WebGPUConstants.TextureFormat.RGB10A2Unorm:\r\n case WebGPUConstants.TextureFormat.RG11B10UFloat:\r\n return { width: 1, height: 1, length: 4 };\r\n\r\n // 64 bits formats\r\n case WebGPUConstants.TextureFormat.RG32Uint:\r\n case WebGPUConstants.TextureFormat.RG32Sint:\r\n case WebGPUConstants.TextureFormat.RG32Float:\r\n case WebGPUConstants.TextureFormat.RGBA16Uint:\r\n case WebGPUConstants.TextureFormat.RGBA16Sint:\r\n case WebGPUConstants.TextureFormat.RGBA16Float:\r\n return { width: 1, height: 1, length: 8 };\r\n\r\n // 128 bits formats\r\n case WebGPUConstants.TextureFormat.RGBA32Uint:\r\n case WebGPUConstants.TextureFormat.RGBA32Sint:\r\n case WebGPUConstants.TextureFormat.RGBA32Float:\r\n return { width: 1, height: 1, length: 16 };\r\n\r\n // Depth and stencil formats\r\n case WebGPUConstants.TextureFormat.Stencil8:\r\n throw \"No fixed size for Stencil8 format!\";\r\n case WebGPUConstants.TextureFormat.Depth16Unorm:\r\n return { width: 1, height: 1, length: 2 };\r\n case WebGPUConstants.TextureFormat.Depth24Plus:\r\n throw \"No fixed size for Depth24Plus format!\";\r\n case WebGPUConstants.TextureFormat.Depth24PlusStencil8:\r\n throw \"No fixed size for Depth24PlusStencil8 format!\";\r\n case WebGPUConstants.TextureFormat.Depth32Float:\r\n return { width: 1, height: 1, length: 4 };\r\n case WebGPUConstants.TextureFormat.Depth24UnormStencil8:\r\n return { width: 1, height: 1, length: 4 };\r\n case WebGPUConstants.TextureFormat.Depth32FloatStencil8:\r\n return { width: 1, height: 1, length: 5 };\r\n\r\n // BC compressed formats usable if \"texture-compression-bc\" is both\r\n // supported by the device/user agent and enabled in requestDevice.\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC6HRGBUFloat:\r\n case WebGPUConstants.TextureFormat.BC6HRGBFloat:\r\n case WebGPUConstants.TextureFormat.BC5RGUnorm:\r\n case WebGPUConstants.TextureFormat.BC5RGSnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnormSRGB:\r\n return { width: 4, height: 4, length: 16 };\r\n\r\n case WebGPUConstants.TextureFormat.BC4RUnorm:\r\n case WebGPUConstants.TextureFormat.BC4RSnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnormSRGB:\r\n return { width: 4, height: 4, length: 8 };\r\n }\r\n\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n\r\n private static _IsHardwareTexture(texture: HardwareTextureWrapper | GPUTexture): texture is HardwareTextureWrapper {\r\n return !!(texture as HardwareTextureWrapper).release;\r\n }\r\n\r\n private static _IsInternalTexture(texture: InternalTexture | GPUTexture): texture is InternalTexture {\r\n return !!(texture as InternalTexture).dispose;\r\n }\r\n\r\n public static GetCompareFunction(compareFunction: Nullable<number>): GPUCompareFunction {\r\n switch (compareFunction) {\r\n case 519:\r\n return WebGPUConstants.CompareFunction.Always;\r\n case 514:\r\n return WebGPUConstants.CompareFunction.Equal;\r\n case 516:\r\n return WebGPUConstants.CompareFunction.Greater;\r\n case 518:\r\n return WebGPUConstants.CompareFunction.GreaterEqual;\r\n case 513:\r\n return WebGPUConstants.CompareFunction.Less;\r\n case 515:\r\n return WebGPUConstants.CompareFunction.LessEqual;\r\n case 512:\r\n return WebGPUConstants.CompareFunction.Never;\r\n case 517:\r\n return WebGPUConstants.CompareFunction.NotEqual;\r\n default:\r\n return WebGPUConstants.CompareFunction.Less;\r\n }\r\n }\r\n\r\n public static IsImageBitmap(imageBitmap: ImageBitmap | { width: number, height: number }): imageBitmap is ImageBitmap {\r\n return (imageBitmap as ImageBitmap).close !== undefined;\r\n }\r\n\r\n public static IsImageBitmapArray(imageBitmap: ImageBitmap[] | { width: number, height: number }): imageBitmap is ImageBitmap[] {\r\n return Array.isArray(imageBitmap as ImageBitmap[]) && (imageBitmap as ImageBitmap[])[0].close !== undefined;\r\n }\r\n\r\n public setCommandEncoder(encoder: GPUCommandEncoder): void {\r\n this._commandEncoderForCreation = encoder;\r\n }\r\n\r\n public static IsCompressedFormat(format: GPUTextureFormat): boolean {\r\n switch (format) {\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC6HRGBFloat:\r\n case WebGPUConstants.TextureFormat.BC6HRGBUFloat:\r\n case WebGPUConstants.TextureFormat.BC5RGSnorm:\r\n case WebGPUConstants.TextureFormat.BC5RGUnorm:\r\n case WebGPUConstants.TextureFormat.BC4RSnorm:\r\n case WebGPUConstants.TextureFormat.BC4RUnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnorm:\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static GetWebGPUTextureFormat(type: number, format: number, useSRGBBuffer = false): GPUTextureFormat {\r\n switch (format) {\r\n case 15:\r\n return WebGPUConstants.TextureFormat.Depth16Unorm;\r\n case 13:\r\n return WebGPUConstants.TextureFormat.Depth24PlusStencil8;\r\n case 14:\r\n return WebGPUConstants.TextureFormat.Depth32Float;\r\n\r\n case 36492:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.BC7RGBAUnormSRGB : WebGPUConstants.TextureFormat.BC7RGBAUnorm;\r\n case 36495:\r\n return WebGPUConstants.TextureFormat.BC6HRGBUFloat;\r\n case 36494:\r\n return WebGPUConstants.TextureFormat.BC6HRGBFloat;\r\n case 33779:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.BC3RGBAUnormSRGB : WebGPUConstants.TextureFormat.BC3RGBAUnorm;\r\n case 33778:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.BC2RGBAUnormSRGB : WebGPUConstants.TextureFormat.BC2RGBAUnorm;\r\n case 33777:\r\n case 33776:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.BC1RGBAUnormSRGB : WebGPUConstants.TextureFormat.BC1RGBAUnorm;\r\n }\r\n\r\n switch (type) {\r\n case 3:\r\n switch (format) {\r\n case 6:\r\n return WebGPUConstants.TextureFormat.R8Snorm;\r\n case 7:\r\n return WebGPUConstants.TextureFormat.RG8Snorm;\r\n case 4:\r\n throw \"RGB format not supported in WebGPU\";\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R8Sint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG8Sint;\r\n case 10:\r\n throw \"RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA8Sint;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA8Snorm;\r\n }\r\n case 0:\r\n switch (format) {\r\n case 6:\r\n return WebGPUConstants.TextureFormat.R8Unorm;\r\n case 7:\r\n return WebGPUConstants.TextureFormat.RG8Unorm;\r\n case 4:\r\n throw \"TEXTUREFORMAT_RGB format not supported in WebGPU\";\r\n case 5:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.RGBA8UnormSRGB : WebGPUConstants.TextureFormat.RGBA8Unorm;\r\n case 12:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.BGRA8UnormSRGB : WebGPUConstants.TextureFormat.BGRA8Unorm;\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R8Uint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG8Uint;\r\n case 10:\r\n throw \"RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA8Uint;\r\n case 0:\r\n throw \"TEXTUREFORMAT_ALPHA format not supported in WebGPU\";\r\n case 1:\r\n throw \"TEXTUREFORMAT_LUMINANCE format not supported in WebGPU\";\r\n case 2:\r\n throw \"TEXTUREFORMAT_LUMINANCE_ALPHA format not supported in WebGPU\";\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA8Unorm;\r\n }\r\n case 4:\r\n switch (format) {\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R16Sint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG16Sint;\r\n case 10:\r\n throw \"TEXTUREFORMAT_RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA16Sint;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA16Sint;\r\n }\r\n case 5:\r\n switch (format) {\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R16Uint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG16Uint;\r\n case 10:\r\n throw \"TEXTUREFORMAT_RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA16Uint;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA16Uint;\r\n }\r\n case 6:\r\n switch (format) {\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R32Sint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG32Sint;\r\n case 10:\r\n throw \"TEXTUREFORMAT_RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA32Sint;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA32Sint;\r\n }\r\n case 7: // Refers to UNSIGNED_INT\r\n switch (format) {\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R32Uint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG32Uint;\r\n case 10:\r\n throw \"TEXTUREFORMAT_RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA32Uint;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA32Uint;\r\n }\r\n case 1:\r\n switch (format) {\r\n case 6:\r\n return WebGPUConstants.TextureFormat.R32Float; // By default. Other possibility is R16Float.\r\n case 7:\r\n return WebGPUConstants.TextureFormat.RG32Float; // By default. Other possibility is RG16Float.\r\n case 4:\r\n throw \"TEXTUREFORMAT_RGB format not supported in WebGPU\";\r\n case 5:\r\n return WebGPUConstants.TextureFormat.RGBA32Float; // By default. Other possibility is RGBA16Float.\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA32Float;\r\n }\r\n case 2:\r\n switch (format) {\r\n case 6:\r\n return WebGPUConstants.TextureFormat.R16Float;\r\n case 7:\r\n return WebGPUConstants.TextureFormat.RG16Float;\r\n case 4:\r\n throw \"TEXTUREFORMAT_RGB format not supported in WebGPU\";\r\n case 5:\r\n return WebGPUConstants.TextureFormat.RGBA16Float;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA16Float;\r\n }\r\n case 10:\r\n throw \"TEXTURETYPE_UNSIGNED_SHORT_5_6_5 format not supported in WebGPU\";\r\n case 13:\r\n throw \"TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV format not supported in WebGPU\";\r\n case 14:\r\n throw \"TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV format not supported in WebGPU\";\r\n case 8:\r\n throw \"TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4 format not supported in WebGPU\";\r\n case 9:\r\n throw \"TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1 format not supported in WebGPU\";\r\n case 11:\r\n switch (format) {\r\n case 5:\r\n return WebGPUConstants.TextureFormat.RGB10A2Unorm;\r\n case 11:\r\n throw \"TEXTUREFORMAT_RGBA_INTEGER format not supported in WebGPU when type is TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV\";\r\n default:\r\n return WebGPUConstants.TextureFormat.RGB10A2Unorm;\r\n }\r\n }\r\n\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.RGBA8UnormSRGB : WebGPUConstants.TextureFormat.RGBA8Unorm;\r\n }\r\n\r\n public static GetNumChannelsFromWebGPUTextureFormat(format: GPUTextureFormat): number {\r\n switch (format) {\r\n case WebGPUConstants.TextureFormat.R8Unorm:\r\n case WebGPUConstants.TextureFormat.R8Snorm:\r\n case WebGPUConstants.TextureFormat.R8Uint:\r\n case WebGPUConstants.TextureFormat.R8Sint:\r\n case WebGPUConstants.TextureFormat.BC4RUnorm:\r\n case WebGPUConstants.TextureFormat.BC4RSnorm:\r\n case WebGPUConstants.TextureFormat.R16Uint:\r\n case WebGPUConstants.TextureFormat.R16Sint:\r\n case WebGPUConstants.TextureFormat.Depth16Unorm:\r\n case WebGPUConstants.TextureFormat.R16Float:\r\n case WebGPUConstants.TextureFormat.R32Uint:\r\n case WebGPUConstants.TextureFormat.R32Sint:\r\n case WebGPUConstants.TextureFormat.R32Float:\r\n case WebGPUConstants.TextureFormat.Depth32Float:\r\n case WebGPUConstants.TextureFormat.Stencil8:\r\n case WebGPUConstants.TextureFormat.Depth24Plus:\r\n return 1;\r\n\r\n case WebGPUConstants.TextureFormat.RG8Unorm:\r\n case WebGPUConstants.TextureFormat.RG8Snorm:\r\n case WebGPUConstants.TextureFormat.RG8Uint:\r\n case WebGPUConstants.TextureFormat.RG8Sint:\r\n case WebGPUConstants.TextureFormat.Depth24UnormStencil8: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.Depth32FloatStencil8: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.BC5RGUnorm:\r\n case WebGPUConstants.TextureFormat.BC5RGSnorm:\r\n case WebGPUConstants.TextureFormat.RG16Uint:\r\n case WebGPUConstants.TextureFormat.RG16Sint:\r\n case WebGPUConstants.TextureFormat.RG16Float:\r\n case WebGPUConstants.TextureFormat.RG32Uint:\r\n case WebGPUConstants.TextureFormat.RG32Sint:\r\n case WebGPUConstants.TextureFormat.RG32Float:\r\n case WebGPUConstants.TextureFormat.Depth24PlusStencil8:\r\n return 2;\r\n\r\n case WebGPUConstants.TextureFormat.RGB9E5UFloat: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.RG11B10UFloat: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.BC6HRGBUFloat:\r\n case WebGPUConstants.TextureFormat.BC6HRGBFloat:\r\n return 3;\r\n\r\n case WebGPUConstants.TextureFormat.RGBA8Unorm:\r\n case WebGPUConstants.TextureFormat.RGBA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGBA8Snorm:\r\n case WebGPUConstants.TextureFormat.RGBA8Uint:\r\n case WebGPUConstants.TextureFormat.RGBA8Sint:\r\n case WebGPUConstants.TextureFormat.BGRA8Unorm:\r\n case WebGPUConstants.TextureFormat.BGRA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGB10A2Unorm: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGBA16Uint:\r\n case WebGPUConstants.TextureFormat.RGBA16Sint:\r\n case WebGPUConstants.TextureFormat.RGBA16Float:\r\n case WebGPUConstants.TextureFormat.RGBA32Uint:\r\n case WebGPUConstants.TextureFormat.RGBA32Sint:\r\n case WebGPUConstants.TextureFormat.RGBA32Float:\r\n return 4;\r\n }\r\n\r\n throw `Unknown format ${format}!`;\r\n }\r\n\r\n public invertYPreMultiplyAlpha(gpuTexture: GPUTexture, width: number, height: number, format: GPUTextureFormat, invertY = false, premultiplyAlpha = false, faceIndex = 0, mipLevel = 0, layers = 1, commandEncoder?: GPUCommandEncoder): void {\r\n const useOwnCommandEncoder = commandEncoder === undefined;\r\n const [pipeline, bindGroupLayout] = this._getPipeline(format, PipelineType.InvertYPremultiplyAlpha, { invertY, premultiplyAlpha });\r\n\r\n if (useOwnCommandEncoder) {\r\n commandEncoder = this._device.createCommandEncoder({});\r\n }\r\n\r\n commandEncoder!.pushDebugGroup?.(`internal process texture - invertY=${invertY} premultiplyAlpha=${premultiplyAlpha}`);\r\n\r\n const outputTexture = this.createTexture({ width, height, layers: 1 }, false, false, false, false, false, format, 1, commandEncoder, WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.RenderAttachment | WebGPUConstants.TextureUsage.TextureBinding);\r\n\r\n const passEncoder = commandEncoder!.beginRenderPass({\r\n colorAttachments: [{\r\n view: outputTexture.createView({\r\n format,\r\n dimension: WebGPUConstants.TextureViewDimension.E2d,\r\n baseMipLevel: 0,\r\n mipLevelCount: 1,\r\n arrayLayerCount: 1,\r\n baseArrayLayer: 0,\r\n }),\r\n loadValue: WebGPUConstants.LoadOp.Load,\r\n storeOp: WebGPUConstants.StoreOp.Store,\r\n }],\r\n });\r\n\r\n const bindGroup = this._device.createBindGroup({\r\n layout: bindGroupLayout,\r\n entries: [{\r\n binding: 0,\r\n resource: gpuTexture.createView({\r\n format,\r\n dimension: WebGPUConstants.TextureViewDimension.E2d,\r\n baseMipLevel: mipLevel,\r\n mipLevelCount: 1,\r\n arrayLayerCount: layers,\r\n baseArrayLayer: Math.max(faceIndex, 0),\r\n }),\r\n }],\r\n });\r\n\r\n passEncoder.setPipeline(pipeline);\r\n passEncoder.setBindGroup(0, bindGroup);\r\n passEncoder.draw(4, 1, 0, 0);\r\n passEncoder.endPass();\r\n\r\n commandEncoder!.copyTextureToTexture({\r\n texture: outputTexture,\r\n }, {\r\n texture: gpuTexture,\r\n mipLevel,\r\n origin: {\r\n x: 0,\r\n y: 0,\r\n z: Math.max(faceIndex, 0),\r\n }\r\n }, {\r\n width,\r\n height,\r\n depthOrArrayLayers: 1,\r\n }\r\n );\r\n\r\n this._deferredReleaseTextures.push([outputTexture, null]);\r\n\r\n commandEncoder!.popDebugGroup?.();\r\n\r\n if (useOwnCommandEncoder) {\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n }\r\n\r\n public copyWithInvertY(srcTextureView: GPUTextureView, format: GPUTextureFormat, renderPassDescriptor: GPURenderPassDescriptor, commandEncoder?: GPUCommandEncoder): void {\r\n const useOwnCommandEncoder = commandEncoder === undefined;\r\n const [pipeline, bindGroupLayout] = this._getPipeline(format, PipelineType.InvertYPremultiplyAlpha, { invertY: true, premultiplyAlpha: false });\r\n\r\n if (useOwnCommandEncoder) {\r\n commandEncoder = this._device.createCommandEncoder({});\r\n }\r\n\r\n commandEncoder!.pushDebugGroup?.(`internal copy texture with invertY`);\r\n\r\n const passEncoder = commandEncoder!.beginRenderPass(renderPassDescriptor);\r\n\r\n const bindGroup = this._device.createBindGroup({\r\n layout: bindGroupLayout,\r\n entries: [{\r\n binding: 0,\r\n resource: srcTextureView,\r\n }],\r\n });\r\n\r\n passEncoder.setPipeline(pipeline);\r\n passEncoder.setBindGroup(0, bindGroup);\r\n passEncoder.draw(4, 1, 0, 0);\r\n passEncoder.endPass();\r\n\r\n commandEncoder!.popDebugGroup?.();\r\n\r\n if (useOwnCommandEncoder) {\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n }\r\n\r\n //------------------------------------------------------------------------------\r\n // Creation\r\n //------------------------------------------------------------------------------\r\n\r\n public createTexture(imageBitmap: ImageBitmap | { width: number, height: number, layers: number }, hasMipmaps = false, generateMipmaps = false, invertY = false, premultiplyAlpha = false, is3D = false, format: GPUTextureFormat = WebGPUConstants.TextureFormat.RGBA8Unorm,\r\n sampleCount = 1, commandEncoder?: GPUCommandEncoder, usage = -1, additionalUsages = 0): GPUTexture {\r\n if (sampleCount > 1) {\r\n // TODO WEBGPU for the time being, Chrome only accepts values of 1 or 4\r\n sampleCount = 4;\r\n }\r\n\r\n const layerCount = (imageBitmap as any).layers || 1;\r\n let textureSize = {\r\n width: imageBitmap.width,\r\n height: imageBitmap.height,\r\n depthOrArrayLayers: layerCount,\r\n };\r\n\r\n const isCompressedFormat = WebGPUTextureHelper.IsCompressedFormat(format);\r\n const mipLevelCount = hasMipmaps ? WebGPUTextureHelper.ComputeNumMipmapLevels(imageBitmap.width, imageBitmap.height) : 1;\r\n const usages = usage >= 0 ? usage : WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.CopyDst | WebGPUConstants.TextureUsage.TextureBinding;\r\n additionalUsages |= hasMipmaps && !isCompressedFormat ? WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.RenderAttachment : 0;\r\n\r\n if (!isCompressedFormat) {\r\n // we don't know in advance if the texture will be updated with copyImageBitmapToTexture (which requires to have those flags), so we need to force the flags all the times\r\n additionalUsages |= WebGPUConstants.TextureUsage.RenderAttachment | WebGPUConstants.TextureUsage.CopyDst;\r\n }\r\n\r\n const gpuTexture = this._device.createTexture({\r\n size: textureSize,\r\n dimension: is3D ? WebGPUConstants.TextureDimension.E3d : WebGPUConstants.TextureDimension.E2d,\r\n format,\r\n usage: usages | additionalUsages,\r\n sampleCount,\r\n mipLevelCount\r\n });\r\n\r\n if (WebGPUTextureHelper.IsImageBitmap(imageBitmap)) {\r\n this.updateTexture(imageBitmap, gpuTexture, imageBitmap.width, imageBitmap.height, layerCount, format, 0, 0, invertY, premultiplyAlpha, 0, 0, commandEncoder);\r\n\r\n if (hasMipmaps && generateMipmaps) {\r\n this.generateMipmaps(gpuTexture, format, mipLevelCount, 0, commandEncoder);\r\n }\r\n }\r\n\r\n return gpuTexture;\r\n }\r\n\r\n public createCubeTexture(imageBitmaps: ImageBitmap[] | { width: number, height: number }, hasMipmaps = false, generateMipmaps = false, invertY = false, premultiplyAlpha = false, format: GPUTextureFormat = WebGPUConstants.TextureFormat.RGBA8Unorm,\r\n sampleCount = 1, commandEncoder?: GPUCommandEncoder, usage = -1, additionalUsages = 0): GPUTexture {\r\n if (sampleCount > 1) {\r\n // TODO WEBGPU for the time being, Chrome only accepts values of 1 or 4\r\n sampleCount = 4;\r\n }\r\n\r\n const width = WebGPUTextureHelper.IsImageBitmapArray(imageBitmaps) ? imageBitmaps[0].width : imageBitmaps.width;\r\n const height = WebGPUTextureHelper.IsImageBitmapArray(imageBitmaps) ? imageBitmaps[0].height : imageBitmaps.height;\r\n\r\n const isCompressedFormat = WebGPUTextureHelper.IsCompressedFormat(format);\r\n const mipLevelCount = hasMipmaps ? WebGPUTextureHelper.ComputeNumMipmapLevels(width, height) : 1;\r\n const usages = usage >= 0 ? usage : WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.CopyDst | WebGPUConstants.TextureUsage.TextureBinding;\r\n additionalUsages |= hasMipmaps && !isCompressedFormat ? WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.RenderAttachment : 0;\r\n\r\n if (!isCompressedFormat) {\r\n // we don't know in advance if the texture will be updated with copyImageBitmapToTexture (which requires to have those flags), so we need to force the flags all the times\r\n additionalUsages |= WebGPUConstants.TextureUsage.RenderAttachment | WebGPUConstants.TextureUsage.CopyDst;\r\n }\r\n\r\n const gpuTexture = this._device.createTexture({\r\n size: {\r\n width,\r\n height,\r\n depthOrArrayLayers: 6,\r\n },\r\n dimension: WebGPUConstants.TextureDimension.E2d,\r\n format,\r\n usage: usages | additionalUsages,\r\n sampleCount,\r\n mipLevelCount\r\n });\r\n\r\n if (WebGPUTextureHelper.IsImageBitmapArray(imageBitmaps)) {\r\n this.updateCubeTextures(imageBitmaps, gpuTexture, width, height, format, invertY, premultiplyAlpha, 0, 0, commandEncoder);\r\n\r\n if (hasMipmaps && generateMipmaps) {\r\n this.generateCubeMipmaps(gpuTexture, format, mipLevelCount, commandEncoder);\r\n }\r\n }\r\n\r\n return gpuTexture;\r\n }\r\n\r\n public generateCubeMipmaps(gpuTexture: GPUTexture | WebGPUHardwareTexture, format: GPUTextureFormat, mipLevelCount: number, commandEncoder?: GPUCommandEncoder): void {\r\n const useOwnCommandEncoder = commandEncoder === undefined;\r\n\r\n if (useOwnCommandEncoder) {\r\n commandEncoder = this._device.createCommandEncoder({});\r\n }\r\n\r\n commandEncoder!.pushDebugGroup?.(`create cube mipmaps - ${mipLevelCount} levels`);\r\n\r\n for (let f = 0; f < 6; ++f) {\r\n this.generateMipmaps(gpuTexture, format, mipLevelCount, f, commandEncoder);\r\n }\r\n\r\n commandEncoder!.popDebugGroup?.();\r\n\r\n if (useOwnCommandEncoder) {\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n }\r\n\r\n public generateMipmaps(gpuOrHdwTexture: GPUTexture | WebGPUHardwareTexture, format: GPUTextureFormat, mipLevelCount: number, faceIndex = 0, commandEncoder?: GPUCommandEncoder): void {\r\n const useOwnCommandEncoder = commandEncoder === undefined;\r\n const [pipeline, bindGroupLayout] = this._getPipeline(format);\r\n\r\n faceIndex = Math.max(faceIndex, 0);\r\n\r\n if (useOwnCommandEncoder) {\r\n commandEncoder = this._device.createCommandEncoder({});\r\n }\r\n\r\n commandEncoder!.pushDebugGroup?.(`create mipmaps for face #${faceIndex} - ${mipLevelCount} levels`);\r\n\r\n let gpuTexture: Nullable<GPUTexture>;\r\n if (WebGPUTextureHelper._IsHardwareTexture(gpuOrHdwTexture)) {\r\n gpuTexture = gpuOrHdwTexture.underlyingResource;\r\n gpuOrHdwTexture._mipmapGenRenderPassDescr = gpuOrHdwTexture._mipmapGenRenderPassDescr || [];\r\n gpuOrHdwTexture._mipmapGenBindGroup = gpuOrHdwTexture._mipmapGenBindGroup || [];\r\n } else {\r\n gpuTexture = gpuOrHdwTexture;\r\n gpuOrHdwTexture = undefined as any;\r\n }\r\n if (!gpuTexture) {\r\n return;\r\n }\r\n\r\n const webgpuHardwareTexture = gpuOrHdwTexture as WebGPUHardwareTexture;\r\n for (let i = 1; i < mipLevelCount; ++i) {\r\n const renderPassDescriptor = webgpuHardwareTexture?._mipmapGenRenderPassDescr[faceIndex]?.[i - 1] ?? {\r\n colorAttachments: [{\r\n view: gpuTexture.createView({\r\n format,\r\n dimension: WebGPUConstants.TextureViewDimension.E2d,\r\n baseMipLevel: i,\r\n mipLevelCount: 1,\r\n arrayLayerCount: 1,\r\n baseArrayLayer: faceIndex,\r\n }),\r\n loadValue: WebGPUConstants.LoadOp.Load,\r\n storeOp: WebGPUConstants.StoreOp.Store,\r\n }],\r\n };\r\n if (webgpuHardwareTexture) {\r\n webgpuHardwareTexture._mipmapGenRenderPassDescr[faceIndex] = webgpuHardwareTexture._mipmapGenRenderPassDescr[faceIndex] || [];\r\n webgpuHardwareTexture._mipmapGenRenderPassDescr[faceIndex][i - 1] = renderPassDescriptor;\r\n }\r\n const passEncoder = commandEncoder!.beginRenderPass(renderPassDescriptor);\r\n\r\n const bindGroup = webgpuHardwareTexture?._mipmapGenBindGroup[faceIndex]?.[i - 1] ?? this._device.createBindGroup({\r\n layout: bindGroupLayout,\r\n entries: [{\r\n binding: 0,\r\n resource: this._mipmapSampler,\r\n }, {\r\n binding: 1,\r\n resource: gpuTexture.createView({\r\n format,\r\n dimension: WebGPUConstants.TextureViewDimension.E2d,\r\n baseMipLevel: i - 1,\r\n mipLevelCount: 1,\r\n arrayLayerCount: 1,\r\n baseArrayLayer: faceIndex,\r\n }),\r\n }],\r\n });\r\n if (webgpuHardwareTexture) {\r\n webgpuHardwareTexture._mipmapGenBindGroup[faceIndex] = webgpuHardwareTexture._mipmapGenBindGroup[faceIndex] || [];\r\n webgpuHardwareTexture._mipmapGenBindGroup[faceIndex][i - 1] = bindGroup;\r\n }\r\n\r\n passEncoder.setPipeline(pipeline);\r\n passEncoder.setBindGroup(0, bindGroup);\r\n passEncoder.draw(4, 1, 0, 0);\r\n passEncoder.endPass();\r\n }\r\n\r\n commandEncoder!.popDebugGroup?.();\r\n\r\n if (useOwnCommandEncoder) {\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n }\r\n\r\n public createGPUTextureForInternalTexture(texture: InternalTexture, width?: number, height?: number, depth?: number, creationFlags?: number): WebGPUHardwareTexture {\r\n if (!texture._hardwareTexture) {\r\n texture._hardwareTexture = new WebGPUHardwareTexture();\r\n }\r\n\r\n if (width === undefined) {\r\n width = texture.width;\r\n }\r\n if (height === undefined) {\r\n height = texture.height;\r\n }\r\n if (depth === undefined) {\r\n depth = texture.depth;\r\n }\r\n\r\n const gpuTextureWrapper = texture._hardwareTexture as WebGPUHardwareTexture;\r\n\r\n gpuTextureWrapper.format = WebGPUTextureHelper.GetWebGPUTextureFormat(texture.type, texture.format, texture._useSRGBBuffer);\r\n\r\n gpuTextureWrapper.textureUsages =\r\n texture._source === InternalTextureSource.RenderTarget || texture.source === InternalTextureSource.MultiRenderTarget ? WebGPUConstants.TextureUsage.TextureBinding | WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.RenderAttachment :\r\n texture._source === InternalTextureSource.DepthStencil ? WebGPUConstants.TextureUsage.TextureBinding | WebGPUConstants.TextureUsage.RenderAttachment : -1;\r\n\r\n gpuTextureWrapper.textureAdditionalUsages = (creationFlags ?? 0) & 1 ? WebGPUConstants.TextureUsage.StorageBinding : 0;\r\n\r\n const hasMipMaps = texture.generateMipMaps;\r\n const layerCount = depth || 1;\r\n\r\n if (texture.isCube) {\r\n const gpuTexture = this.createCubeTexture({ width, height }, texture.generateMipMaps, texture.generateMipMaps, texture.invertY, false, gpuTextureWrapper.format, 1, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages);\r\n\r\n gpuTextureWrapper.set(gpuTexture);\r\n gpuTextureWrapper.createView({\r\n format: gpuTextureWrapper.format,\r\n dimension: WebGPUConstants.TextureViewDimension.Cube,\r\n mipLevelCount: hasMipMaps ? WebGPUTextureHelper.ComputeNumMipmapLevels(width!, height!) : 1,\r\n baseArrayLayer: 0,\r\n baseMipLevel: 0,\r\n arrayLayerCount: 6,\r\n aspect: WebGPUConstants.TextureAspect.All\r\n });\r\n } else {\r\n const gpuTexture = this.createTexture({ width, height, layers: layerCount }, texture.generateMipMaps, texture.generateMipMaps, texture.invertY, false, texture.is3D, gpuTextureWrapper.format, 1, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages);\r\n\r\n gpuTextureWrapper.set(gpuTexture);\r\n gpuTextureWrapper.createView({\r\n format: gpuTextureWrapper.format,\r\n dimension: texture.is2DArray ? WebGPUConstants.TextureViewDimension.E2dArray : texture.is3D ? WebGPUConstants.TextureDimension.E3d : WebGPUConstants.TextureViewDimension.E2d,\r\n mipLevelCount: hasMipMaps ? WebGPUTextureHelper.ComputeNumMipmapLevels(width!, height!) : 1,\r\n baseArrayLayer: 0,\r\n baseMipLevel: 0,\r\n arrayLayerCount: texture.is3D ? 1 : layerCount,\r\n aspect: WebGPUConstants.TextureAspect.All\r\n });\r\n }\r\n\r\n texture.width = texture.baseWidth = width;\r\n texture.height = texture.baseHeight = height;\r\n texture.depth = texture.baseDepth = depth;\r\n\r\n this.createMSAATexture(texture, texture.samples);\r\n\r\n return gpuTextureWrapper;\r\n }\r\n\r\n public createMSAATexture(texture: InternalTexture, samples: number): void {\r\n const gpuTextureWrapper = texture._hardwareTexture as Nullable<WebGPUHardwareTexture>;\r\n\r\n if (gpuTextureWrapper?.msaaTexture) {\r\n this.releaseTexture(gpuTextureWrapper.msaaTexture);\r\n gpuTextureWrapper.msaaTexture = null;\r\n }\r\n\r\n if (!gpuTextureWrapper || (samples ?? 1) <= 1) {\r\n return;\r\n }\r\n\r\n const width = texture.width;\r\n const height = texture.height;\r\n const layerCount = texture.depth || 1;\r\n\r\n if (texture.isCube) {\r\n const gpuMSAATexture = this.createCubeTexture({ width, height }, false, false, texture.invertY, false, gpuTextureWrapper.format, samples, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages);\r\n gpuTextureWrapper.setMSAATexture(gpuMSAATexture);\r\n } else {\r\n const gpuMSAATexture = this.createTexture({ width, height, layers: layerCount }, false, false, texture.invertY, false, texture.is3D, gpuTextureWrapper.format, samples, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages);\r\n gpuTextureWrapper.setMSAATexture(gpuMSAATexture);\r\n }\r\n }\r\n\r\n //------------------------------------------------------------------------------\r\n // Update\r\n //------------------------------------------------------------------------------\r\n\r\n public updateCubeTextures(imageBitmaps: ImageBitmap[] | Uint8Array[], gpuTexture: GPUTexture, width: number, height: number, format: GPUTextureFormat, invertY = false, premultiplyAlpha = false, offsetX = 0, offsetY = 0,\r\n commandEncoder?: GPUCommandEncoder): void {\r\n const faces = [0, 3, 1, 4, 2, 5];\r\n\r\n for (let f = 0; f < faces.length; ++f) {\r\n let imageBitmap = imageBitmaps[faces[f]];\r\n\r\n this.updateTexture(imageBitmap, gpuTexture, width, height, 1, format, f, 0, invertY, premultiplyAlpha, offsetX, offsetY, commandEncoder);\r\n }\r\n }\r\n\r\n // TODO WEBGPU handle data source not being in the same format than the destination texture?\r\n public updateTexture(imageBitmap: ImageBitmap | Uint8Array | HTMLCanvasElement | OffscreenCanvas, texture: GPUTexture | InternalTexture, width: number, height: number, layers: number, format: GPUTextureFormat, faceIndex: number = 0, mipLevel: number = 0, invertY = false, premultiplyAlpha = false, offsetX = 0, offsetY = 0,\r\n commandEncoder?: GPUCommandEncoder): void {\r\n const gpuTexture = WebGPUTextureHelper._IsInternalTexture(texture) ? (texture._hardwareTexture as WebGPUHardwareTexture).underlyingResource! : texture;\r\n const blockInformation = WebGPUTextureHelper._GetBlockInformationFromFormat(format);\r\n\r\n const textureCopyView: GPUImageCopyTexture = {\r\n texture: gpuTexture,\r\n origin: {\r\n x: offsetX,\r\n y: offsetY,\r\n z: Math.max(faceIndex, 0)\r\n },\r\n mipLevel: mipLevel\r\n };\r\n\r\n const textureExtent = {\r\n width: Math.ceil(width / blockInformation.width) * blockInformation.width,\r\n height: Math.ceil(height / blockInformation.height) * blockInformation.height,\r\n depthOrArrayLayers: layers || 1\r\n };\r\n\r\n if ((imageBitmap as Uint8Array).byteLength !== undefined) {\r\n imageBitmap = imageBitmap as Uint8Array;\r\n\r\n const bytesPerRow = Math.ceil(width / blockInformation.width) * blockInformation.length;\r\n const aligned = Math.ceil(bytesPerRow / 256) * 256 === bytesPerRow;\r\n\r\n if (aligned) {\r\n const useOwnCommandEncoder = commandEncoder === undefined;\r\n\r\n if (useOwnCommandEncoder) {\r\n commandEncoder = this._device.createCommandEncoder({});\r\n }\r\n\r\n const buffer = this._bufferManager.createRawBuffer(imageBitmap.byteLength, WebGPUConstants.BufferUsage.MapWrite | WebGPUConstants.BufferUsage.CopySrc, true);\r\n\r\n const arrayBuffer = buffer.getMappedRange();\r\n\r\n new Uint8Array(arrayBuffer).set(imageBitmap);\r\n\r\n buffer.unmap();\r\n\r\n commandEncoder!.copyBufferToTexture({\r\n buffer: buffer,\r\n offset: 0,\r\n bytesPerRow,\r\n rowsPerImage: height,\r\n }, textureCopyView, textureExtent);\r\n\r\n if (useOwnCommandEncoder) {\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n\r\n this._bufferManager.releaseBuffer(buffer);\r\n } else {\r\n this._device.queue.writeTexture(textureCopyView, imageBitmap, {\r\n offset: 0,\r\n bytesPerRow,\r\n rowsPerImage: height,\r\n }, textureExtent);\r\n }\r\n\r\n if (invertY || premultiplyAlpha) {\r\n this.invertYPreMultiplyAlpha(gpuTexture, width, height, format, invertY, premultiplyAlpha, faceIndex, mipLevel, layers || 1, commandEncoder);\r\n }\r\n } else {\r\n imageBitmap = imageBitmap as ImageBitmap;\r\n\r\n if (invertY || premultiplyAlpha) {\r\n const engine = EngineStore.LastCreatedEngine;\r\n engine && engine.createImageBitmap(imageBitmap as ImageBitmapSource, { imageOrientation: invertY ? \"flipY\" : \"none\", premultiplyAlpha: premultiplyAlpha ? \"premultiply\" : \"none\" }).then((imageBitmap) => {\r\n this._device.queue.copyImageBitmapToTexture({ imageBitmap }, textureCopyView, textureExtent);\r\n });\r\n } else {\r\n this._device.queue.copyImageBitmapToTexture({ imageBitmap } as GPUImageBitmapCopyView, textureCopyView, textureExtent);\r\n }\r\n\r\n /*imageBitmap = imageBitmap as (ImageBitmap | HTMLCanvasElement | OffscreenCanvas);\r\n\r\n if (invertY || premultiplyAlpha) {\r\n // we must preprocess the image\r\n if (WebGPUTextureHelper._IsInternalTexture(texture) && offsetX === 0 && offsetY === 0 && width === texture.width && height === texture.height) {\r\n // optimization when the source image is the same size than the destination texture and offsets X/Y == 0:\r\n // we simply copy the source to the destination and we apply the preprocessing on the destination\r\n this._device.queue.copyExternalImageToTexture({ source: imageBitmap }, textureCopyView, textureExtent);\r\n\r\n // note that we have to use a new command encoder and submit it just right away so that the copy (see line above) and the preprocessing render pass happens in the right order!\r\n // if we don't create a new command encoder, we could end up calling copyExternalImageToTexture / invertYPreMultiplyAlpha / copyExternalImageToTexture / invertYPreMultiplyAlpha in the same frame,\r\n // in which case it would be executed as copyExternalImageToTexture / copyExternalImageToTexture / invertYPreMultiplyAlpha / invertYPreMultiplyAlpha because the command encoder we are passed in\r\n // is submitted at the end of the frame\r\n commandEncoder = this._device.createCommandEncoder({});\r\n this.invertYPreMultiplyAlpha(gpuTexture, width, height, format, invertY, premultiplyAlpha, faceIndex, mipLevel, layers || 1, commandEncoder);\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n } else {\r\n // we must apply the preprocessing on the source image before copying it into the destination texture\r\n const useOwnCommandEncoder = commandEncoder === undefined;\r\n\r\n if (useOwnCommandEncoder) {\r\n commandEncoder = this._device.createCommandEncoder({});\r\n }\r\n\r\n // create a temp texture and copy the image to it\r\n const srcTexture = this.createTexture({ width, height, layers: 1 }, false, false, false, false, false, format, 1, commandEncoder, WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.TextureBinding);\r\n\r\n this._deferredReleaseTextures.push([srcTexture, null]);\r\n\r\n textureExtent.depthOrArrayLayers = 1;\r\n this._device.queue.copyExternalImageToTexture({ source: imageBitmap }, { texture: srcTexture }, textureExtent);\r\n textureExtent.depthOrArrayLayers = layers || 1;\r\n\r\n // apply the preprocessing to this temp texture\r\n this.invertYPreMultiplyAlpha(srcTexture, width, height, format, invertY, premultiplyAlpha, faceIndex, mipLevel, layers || 1, commandEncoder);\r\n\r\n // copy the temp texture to the destination texture\r\n commandEncoder!.copyTextureToTexture({ texture: srcTexture }, textureCopyView, textureExtent);\r\n\r\n if (useOwnCommandEncoder) {\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n }\r\n } else {\r\n // no preprocessing: direct copy to destination texture\r\n this._device.queue.copyExternalImageToTexture({ source: imageBitmap }, textureCopyView, textureExtent);\r\n }*/\r\n }\r\n }\r\n\r\n public readPixels(texture: GPUTexture, x: number, y: number, width: number, height: number, format: GPUTextureFormat, faceIndex: number = 0, mipLevel: number = 0, buffer: Nullable<ArrayBufferView> = null, noDataConversion = false): Promise<ArrayBufferView> {\r\n const blockInformation = WebGPUTextureHelper._GetBlockInformationFromFormat(format);\r\n\r\n const bytesPerRow = Math.ceil(width / blockInformation.width) * blockInformation.length;\r\n\r\n const bytesPerRowAligned = Math.ceil(bytesPerRow / 256) * 256;\r\n\r\n const size = bytesPerRowAligned * height;\r\n\r\n const gpuBuffer = this._bufferManager.createRawBuffer(size, WebGPUConstants.BufferUsage.MapRead | WebGPUConstants.BufferUsage.CopyDst);\r\n\r\n const commandEncoder = this._device.createCommandEncoder({});\r\n\r\n commandEncoder.copyTextureToBuffer({\r\n texture,\r\n mipLevel,\r\n origin: {\r\n x,\r\n y,\r\n z: Math.max(faceIndex, 0)\r\n }\r\n }, {\r\n buffer: gpuBuffer,\r\n offset: 0,\r\n bytesPerRow: bytesPerRowAligned\r\n }, {\r\n width,\r\n height,\r\n depthOrArrayLayers: 1\r\n });\r\n\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n\r\n return this._bufferManager.readDataFromBuffer(gpuBuffer, size, width, height, bytesPerRow, bytesPerRowAligned, WebGPUTextureHelper._GetTextureTypeFromFormat(format), 0, buffer, true, noDataConversion);\r\n }\r\n\r\n //------------------------------------------------------------------------------\r\n // Dispose\r\n //------------------------------------------------------------------------------\r\n\r\n public releaseTexture(texture: InternalTexture | GPUTexture): void {\r\n if (WebGPUTextureHelper._IsInternalTexture(texture)) {\r\n const hardwareTexture = texture._hardwareTexture;\r\n const irradianceTexture = texture._irradianceTexture;\r\n\r\n // We can't destroy the objects just now because they could be used in the current frame - we delay the destroying after the end of the frame\r\n this._deferredReleaseTextures.push([hardwareTexture, irradianceTexture]);\r\n } else {\r\n this._deferredReleaseTextures.push([texture, null]);\r\n }\r\n }\r\n\r\n public destroyDeferredTextures(): void {\r\n for (let i = 0; i < this._deferredReleaseTextures.length; ++i) {\r\n const [hardwareTexture, irradianceTexture] = this._deferredReleaseTextures[i];\r\n\r\n if (hardwareTexture) {\r\n if (WebGPUTextureHelper._IsHardwareTexture(hardwareTexture)) {\r\n hardwareTexture.release();\r\n } else {\r\n hardwareTexture.destroy();\r\n }\r\n }\r\n irradianceTexture?.dispose();\r\n }\r\n\r\n this._deferredReleaseTextures.length = 0;\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"file":"webgpuTextureHelper.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuTextureHelper.ts"],"names":[],"mappings":"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","sourcesContent":["// License for the mipmap generation code:\r\n//\r\n// Copyright 2020 Brandon Jones\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a copy\r\n// of this software and associated documentation files (the \"Software\"), to deal\r\n// in the Software without restriction, including without limitation the rights\r\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n// copies of the Software, and to permit persons to whom the Software is\r\n// furnished to do so, subject to the following conditions:\r\n\r\n// The above copyright notice and this permission notice shall be included in\r\n// all copies or substantial portions of the Software.\r\n\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n// SOFTWARE.\r\nimport * as WebGPUConstants from './webgpuConstants';\r\nimport { Scalar } from '../../Maths/math.scalar';\r\nimport { WebGPUBufferManager } from './webgpuBufferManager';\r\n\r\nimport { Nullable } from '../../types';\r\nimport { InternalTexture, InternalTextureSource } from '../../Materials/Textures/internalTexture';\r\nimport { HardwareTextureWrapper } from '../../Materials/Textures/hardwareTextureWrapper';\r\nimport { BaseTexture } from '../../Materials/Textures/baseTexture';\r\nimport { WebGPUHardwareTexture } from './webgpuHardwareTexture';\r\nimport { WebGPUTintWASM } from \"./webgpuTintWASM\";\r\n\r\n// TODO WEBGPU improve mipmap generation by using compute shaders\r\n\r\n// TODO WEBGPU use WGSL instead of GLSL\r\nconst mipmapVertexSource = `\r\n const vec2 pos[4] = vec2[4](vec2(-1.0f, 1.0f), vec2(1.0f, 1.0f), vec2(-1.0f, -1.0f), vec2(1.0f, -1.0f));\r\n const vec2 tex[4] = vec2[4](vec2(0.0f, 0.0f), vec2(1.0f, 0.0f), vec2(0.0f, 1.0f), vec2(1.0f, 1.0f));\r\n\r\n layout(location = 0) out vec2 vTex;\r\n\r\n void main() {\r\n vTex = tex[gl_VertexIndex];\r\n gl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);\r\n }\r\n `;\r\n\r\nconst mipmapFragmentSource = `\r\n layout(set = 0, binding = 0) uniform sampler imgSampler;\r\n layout(set = 0, binding = 1) uniform texture2D img;\r\n\r\n layout(location = 0) in vec2 vTex;\r\n layout(location = 0) out vec4 outColor;\r\n\r\n void main() {\r\n outColor = texture(sampler2D(img, imgSampler), vTex);\r\n }\r\n `;\r\n\r\nconst invertYPreMultiplyAlphaVertexSource = `\r\n #extension GL_EXT_samplerless_texture_functions : enable\r\n\r\n const vec2 pos[4] = vec2[4](vec2(-1.0f, 1.0f), vec2(1.0f, 1.0f), vec2(-1.0f, -1.0f), vec2(1.0f, -1.0f));\r\n const vec2 tex[4] = vec2[4](vec2(0.0f, 0.0f), vec2(1.0f, 0.0f), vec2(0.0f, 1.0f), vec2(1.0f, 1.0f));\r\n\r\n layout(set = 0, binding = 0) uniform texture2D img;\r\n\r\n #ifdef INVERTY\r\n layout(location = 0) out flat ivec2 vTextureSize;\r\n #endif\r\n\r\n void main() {\r\n #ifdef INVERTY\r\n vTextureSize = textureSize(img, 0);\r\n #endif\r\n gl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);\r\n }\r\n `;\r\n\r\nconst invertYPreMultiplyAlphaFragmentSource = `\r\n #extension GL_EXT_samplerless_texture_functions : enable\r\n\r\n layout(set = 0, binding = 0) uniform texture2D img;\r\n\r\n #ifdef INVERTY\r\n layout(location = 0) in flat ivec2 vTextureSize;\r\n #endif\r\n layout(location = 0) out vec4 outColor;\r\n\r\n void main() {\r\n #ifdef INVERTY\r\n vec4 color = texelFetch(img, ivec2(gl_FragCoord.x, vTextureSize.y - gl_FragCoord.y), 0);\r\n #else\r\n vec4 color = texelFetch(img, ivec2(gl_FragCoord.xy), 0);\r\n #endif\r\n #ifdef PREMULTIPLYALPHA\r\n color.rgb *= color.a;\r\n #endif\r\n outColor = color;\r\n }\r\n `;\r\n\r\nconst clearVertexSource = `\r\n const vec2 pos[4] = vec2[4](vec2(-1.0f, 1.0f), vec2(1.0f, 1.0f), vec2(-1.0f, -1.0f), vec2(1.0f, -1.0f));\r\n\r\n void main() {\r\n gl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);\r\n }\r\n `;\r\n\r\nconst clearFragmentSource = `\r\n layout(set = 0, binding = 0) uniform Uniforms {\r\n uniform vec4 color;\r\n };\r\n\r\n layout(location = 0) out vec4 outColor;\r\n\r\n void main() {\r\n outColor = color;\r\n }\r\n `;\r\n\r\nenum PipelineType {\r\n MipMap = 0,\r\n InvertYPremultiplyAlpha = 1,\r\n Clear = 2,\r\n}\r\n\r\ninterface pipelineParameters {\r\n invertY?: boolean;\r\n premultiplyAlpha?: boolean;\r\n}\r\n\r\nconst shadersForPipelineType = [\r\n { vertex: mipmapVertexSource, fragment: mipmapFragmentSource },\r\n { vertex: invertYPreMultiplyAlphaVertexSource, fragment: invertYPreMultiplyAlphaFragmentSource },\r\n { vertex: clearVertexSource, fragment: clearFragmentSource },\r\n];\r\n\r\n/** @hidden */\r\nexport class WebGPUTextureHelper {\r\n\r\n private _device: GPUDevice;\r\n private _glslang: any;\r\n private _tintWASM: Nullable<WebGPUTintWASM>;\r\n private _bufferManager: WebGPUBufferManager;\r\n private _mipmapSampler: GPUSampler;\r\n private _pipelines: { [format: string]: Array<[GPURenderPipeline, GPUBindGroupLayout]> } = {};\r\n private _compiledShaders: GPUShaderModule[][] = [];\r\n private _deferredReleaseTextures: Array<[Nullable<HardwareTextureWrapper | GPUTexture>, Nullable<BaseTexture>]> = [];\r\n private _commandEncoderForCreation: GPUCommandEncoder;\r\n\r\n public static ComputeNumMipmapLevels(width: number, height: number) {\r\n return Scalar.ILog2(Math.max(width, height)) + 1;\r\n }\r\n\r\n //------------------------------------------------------------------------------\r\n // Initialization / Helpers\r\n //------------------------------------------------------------------------------\r\n\r\n constructor(device: GPUDevice, glslang: any, tintWASM: Nullable<WebGPUTintWASM>, bufferManager: WebGPUBufferManager) {\r\n this._device = device;\r\n this._glslang = glslang;\r\n this._tintWASM = tintWASM;\r\n this._bufferManager = bufferManager;\r\n\r\n this._mipmapSampler = device.createSampler({ minFilter: WebGPUConstants.FilterMode.Linear });\r\n\r\n this._getPipeline(WebGPUConstants.TextureFormat.RGBA8Unorm);\r\n }\r\n\r\n private _getPipeline(format: GPUTextureFormat, type: PipelineType = PipelineType.MipMap, params?: pipelineParameters): [GPURenderPipeline, GPUBindGroupLayout] {\r\n const index =\r\n type === PipelineType.MipMap ? 1 << 0 :\r\n type === PipelineType.InvertYPremultiplyAlpha ? ((params!.invertY ? 1 : 0) << 1) + ((params!.premultiplyAlpha ? 1 : 0) << 2) :\r\n type === PipelineType.Clear ? 1 << 3 : 0;\r\n\r\n if (!this._pipelines[format]) {\r\n this._pipelines[format] = [];\r\n }\r\n\r\n let pipelineAndBGL = this._pipelines[format][index];\r\n if (!pipelineAndBGL) {\r\n let defines = \"#version 450\\r\\n\";\r\n if (type === PipelineType.InvertYPremultiplyAlpha) {\r\n if (params!.invertY) {\r\n defines += \"#define INVERTY\\r\\n\";\r\n }\r\n if (params!.premultiplyAlpha) {\r\n defines += \"#define PREMULTIPLYALPHA\\r\\n\";\r\n }\r\n }\r\n\r\n let modules = this._compiledShaders[index];\r\n if (!modules) {\r\n let vertexCode = this._glslang.compileGLSL(defines + shadersForPipelineType[type].vertex, 'vertex');\r\n let fragmentCode = this._glslang.compileGLSL(defines + shadersForPipelineType[type].fragment, 'fragment');\r\n\r\n if (this._tintWASM) {\r\n vertexCode = this._tintWASM.convertSpirV2WGSL(vertexCode);\r\n fragmentCode = this._tintWASM.convertSpirV2WGSL(fragmentCode);\r\n }\r\n\r\n const vertexModule = this._device.createShaderModule({\r\n code: vertexCode\r\n });\r\n const fragmentModule = this._device.createShaderModule({\r\n code: fragmentCode\r\n });\r\n modules = this._compiledShaders[index] = [vertexModule, fragmentModule];\r\n }\r\n\r\n const pipeline = this._device.createRenderPipeline({\r\n vertex: {\r\n module: modules[0],\r\n entryPoint: 'main',\r\n },\r\n fragment: {\r\n module: modules[1],\r\n entryPoint: 'main',\r\n targets: [{\r\n format,\r\n }],\r\n },\r\n primitive: {\r\n topology: WebGPUConstants.PrimitiveTopology.TriangleStrip,\r\n stripIndexFormat: WebGPUConstants.IndexFormat.Uint16,\r\n },\r\n });\r\n\r\n pipelineAndBGL = this._pipelines[format][index] = [pipeline, pipeline.getBindGroupLayout(0)];\r\n }\r\n\r\n return pipelineAndBGL;\r\n }\r\n\r\n private static _GetTextureTypeFromFormat(format: GPUTextureFormat): number {\r\n switch (format) {\r\n // One Component = 8 bits\r\n case WebGPUConstants.TextureFormat.R8Unorm:\r\n case WebGPUConstants.TextureFormat.R8Snorm:\r\n case WebGPUConstants.TextureFormat.R8Uint:\r\n case WebGPUConstants.TextureFormat.R8Sint:\r\n case WebGPUConstants.TextureFormat.RG8Unorm:\r\n case WebGPUConstants.TextureFormat.RG8Snorm:\r\n case WebGPUConstants.TextureFormat.RG8Uint:\r\n case WebGPUConstants.TextureFormat.RG8Sint:\r\n case WebGPUConstants.TextureFormat.RGBA8Unorm:\r\n case WebGPUConstants.TextureFormat.RGBA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGBA8Snorm:\r\n case WebGPUConstants.TextureFormat.RGBA8Uint:\r\n case WebGPUConstants.TextureFormat.RGBA8Sint:\r\n case WebGPUConstants.TextureFormat.BGRA8Unorm:\r\n case WebGPUConstants.TextureFormat.BGRA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGB10A2Unorm: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.RGB9E5UFloat: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.RG11B10UFloat: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.Depth24UnormStencil8: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.Depth32FloatStencil8: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC6HRGBUFloat:\r\n case WebGPUConstants.TextureFormat.BC6HRGBFloat:\r\n case WebGPUConstants.TextureFormat.BC5RGUnorm:\r\n case WebGPUConstants.TextureFormat.BC5RGSnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC4RUnorm:\r\n case WebGPUConstants.TextureFormat.BC4RSnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8A1Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8A1UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ETC2RGBA8Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGBA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.EACR11Unorm:\r\n case WebGPUConstants.TextureFormat.EACR11Snorm:\r\n case WebGPUConstants.TextureFormat.EACRG11Unorm:\r\n case WebGPUConstants.TextureFormat.EACRG11Snorm:\r\n case WebGPUConstants.TextureFormat.ASTC4x4Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC4x4UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC5x4Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC5x4UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC5x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC5x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC6x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC6x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC6x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC6x6UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC8x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC8x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x6UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC8x8Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x6UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x8Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x10Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x10UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC12x10Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC12x10UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC12x12Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC12x12UnormSRGB:\r\n return 0;\r\n\r\n // One component = 16 bits\r\n case WebGPUConstants.TextureFormat.R16Uint:\r\n case WebGPUConstants.TextureFormat.R16Sint:\r\n case WebGPUConstants.TextureFormat.RG16Uint:\r\n case WebGPUConstants.TextureFormat.RG16Sint:\r\n case WebGPUConstants.TextureFormat.RGBA16Uint:\r\n case WebGPUConstants.TextureFormat.RGBA16Sint:\r\n case WebGPUConstants.TextureFormat.Depth16Unorm:\r\n return 5;\r\n\r\n case WebGPUConstants.TextureFormat.R16Float:\r\n case WebGPUConstants.TextureFormat.RG16Float:\r\n case WebGPUConstants.TextureFormat.RGBA16Float:\r\n return 2;\r\n\r\n // One component = 32 bits\r\n case WebGPUConstants.TextureFormat.R32Uint:\r\n case WebGPUConstants.TextureFormat.R32Sint:\r\n case WebGPUConstants.TextureFormat.RG32Uint:\r\n case WebGPUConstants.TextureFormat.RG32Sint:\r\n case WebGPUConstants.TextureFormat.RGBA32Uint:\r\n case WebGPUConstants.TextureFormat.RGBA32Sint:\r\n return 7;\r\n\r\n case WebGPUConstants.TextureFormat.R32Float:\r\n case WebGPUConstants.TextureFormat.RG32Float:\r\n case WebGPUConstants.TextureFormat.RGBA32Float:\r\n case WebGPUConstants.TextureFormat.Depth32Float:\r\n return 1;\r\n\r\n case WebGPUConstants.TextureFormat.Stencil8:\r\n throw \"No fixed size for Stencil8 format!\";\r\n case WebGPUConstants.TextureFormat.Depth24Plus:\r\n throw \"No fixed size for Depth24Plus format!\";\r\n case WebGPUConstants.TextureFormat.Depth24PlusStencil8:\r\n throw \"No fixed size for Depth24PlusStencil8 format!\";\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n private static _GetBlockInformationFromFormat(format: GPUTextureFormat): { width: number, height: number, length: number } {\r\n switch (format) {\r\n // 8 bits formats\r\n case WebGPUConstants.TextureFormat.R8Unorm:\r\n case WebGPUConstants.TextureFormat.R8Snorm:\r\n case WebGPUConstants.TextureFormat.R8Uint:\r\n case WebGPUConstants.TextureFormat.R8Sint:\r\n return { width: 1, height: 1, length: 1 };\r\n\r\n // 16 bits formats\r\n case WebGPUConstants.TextureFormat.R16Uint:\r\n case WebGPUConstants.TextureFormat.R16Sint:\r\n case WebGPUConstants.TextureFormat.R16Float:\r\n case WebGPUConstants.TextureFormat.RG8Unorm:\r\n case WebGPUConstants.TextureFormat.RG8Snorm:\r\n case WebGPUConstants.TextureFormat.RG8Uint:\r\n case WebGPUConstants.TextureFormat.RG8Sint:\r\n return { width: 1, height: 1, length: 2 };\r\n\r\n // 32 bits formats\r\n case WebGPUConstants.TextureFormat.R32Uint:\r\n case WebGPUConstants.TextureFormat.R32Sint:\r\n case WebGPUConstants.TextureFormat.R32Float:\r\n case WebGPUConstants.TextureFormat.RG16Uint:\r\n case WebGPUConstants.TextureFormat.RG16Sint:\r\n case WebGPUConstants.TextureFormat.RG16Float:\r\n case WebGPUConstants.TextureFormat.RGBA8Unorm:\r\n case WebGPUConstants.TextureFormat.RGBA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGBA8Snorm:\r\n case WebGPUConstants.TextureFormat.RGBA8Uint:\r\n case WebGPUConstants.TextureFormat.RGBA8Sint:\r\n case WebGPUConstants.TextureFormat.BGRA8Unorm:\r\n case WebGPUConstants.TextureFormat.BGRA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGB9E5UFloat:\r\n case WebGPUConstants.TextureFormat.RGB10A2Unorm:\r\n case WebGPUConstants.TextureFormat.RG11B10UFloat:\r\n return { width: 1, height: 1, length: 4 };\r\n\r\n // 64 bits formats\r\n case WebGPUConstants.TextureFormat.RG32Uint:\r\n case WebGPUConstants.TextureFormat.RG32Sint:\r\n case WebGPUConstants.TextureFormat.RG32Float:\r\n case WebGPUConstants.TextureFormat.RGBA16Uint:\r\n case WebGPUConstants.TextureFormat.RGBA16Sint:\r\n case WebGPUConstants.TextureFormat.RGBA16Float:\r\n return { width: 1, height: 1, length: 8 };\r\n\r\n // 128 bits formats\r\n case WebGPUConstants.TextureFormat.RGBA32Uint:\r\n case WebGPUConstants.TextureFormat.RGBA32Sint:\r\n case WebGPUConstants.TextureFormat.RGBA32Float:\r\n return { width: 1, height: 1, length: 16 };\r\n\r\n // Depth and stencil formats\r\n case WebGPUConstants.TextureFormat.Stencil8:\r\n throw \"No fixed size for Stencil8 format!\";\r\n case WebGPUConstants.TextureFormat.Depth16Unorm:\r\n return { width: 1, height: 1, length: 2 };\r\n case WebGPUConstants.TextureFormat.Depth24Plus:\r\n throw \"No fixed size for Depth24Plus format!\";\r\n case WebGPUConstants.TextureFormat.Depth24PlusStencil8:\r\n throw \"No fixed size for Depth24PlusStencil8 format!\";\r\n case WebGPUConstants.TextureFormat.Depth32Float:\r\n return { width: 1, height: 1, length: 4 };\r\n case WebGPUConstants.TextureFormat.Depth24UnormStencil8:\r\n return { width: 1, height: 1, length: 4 };\r\n case WebGPUConstants.TextureFormat.Depth32FloatStencil8:\r\n return { width: 1, height: 1, length: 5 };\r\n\r\n // BC compressed formats usable if \"texture-compression-bc\" is both\r\n // supported by the device/user agent and enabled in requestDevice.\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC6HRGBUFloat:\r\n case WebGPUConstants.TextureFormat.BC6HRGBFloat:\r\n case WebGPUConstants.TextureFormat.BC5RGUnorm:\r\n case WebGPUConstants.TextureFormat.BC5RGSnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnormSRGB:\r\n return { width: 4, height: 4, length: 16 };\r\n\r\n case WebGPUConstants.TextureFormat.BC4RUnorm:\r\n case WebGPUConstants.TextureFormat.BC4RSnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnormSRGB:\r\n return { width: 4, height: 4, length: 8 };\r\n\r\n // ETC2 compressed formats usable if \"texture-compression-etc2\" is both\r\n // supported by the device/user agent and enabled in requestDevice.\r\n case WebGPUConstants.TextureFormat.ETC2RGB8Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8A1Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8A1UnormSRGB:\r\n case WebGPUConstants.TextureFormat.EACR11Unorm:\r\n case WebGPUConstants.TextureFormat.EACR11Snorm:\r\n return { width: 4, height: 4, length: 8 };\r\n\r\n case WebGPUConstants.TextureFormat.ETC2RGBA8Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGBA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.EACRG11Unorm:\r\n case WebGPUConstants.TextureFormat.EACRG11Snorm:\r\n return { width: 4, height: 4, length: 16 };\r\n\r\n // ASTC compressed formats usable if \"texture-compression-astc\" is both\r\n // supported by the device/user agent and enabled in requestDevice.\r\n case WebGPUConstants.TextureFormat.ASTC4x4Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC4x4UnormSRGB:\r\n return { width: 4, height: 4, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC5x4Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC5x4UnormSRGB:\r\n return { width: 5, height: 4, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC5x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC5x5UnormSRGB:\r\n return { width: 5, height: 5, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC6x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC6x5UnormSRGB:\r\n return { width: 6, height: 5, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC6x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC6x6UnormSRGB:\r\n return { width: 6, height: 6, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC8x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x5UnormSRGB:\r\n return { width: 8, height: 5, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC8x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x6UnormSRGB:\r\n return { width: 8, height: 6, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC8x8Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x8UnormSRGB:\r\n return { width: 8, height: 8, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC10x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x5UnormSRGB:\r\n return { width: 10, height: 5, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC10x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x6UnormSRGB:\r\n return { width: 10, height: 6, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC10x8Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x8UnormSRGB:\r\n return { width: 10, height: 8, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC10x10Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x10UnormSRGB:\r\n return { width: 10, height: 10, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC12x10Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC12x10UnormSRGB:\r\n return { width: 12, height: 10, length: 16 };\r\n case WebGPUConstants.TextureFormat.ASTC12x12Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC12x12UnormSRGB:\r\n return { width: 12, height: 12, length: 16 };\r\n }\r\n\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n\r\n private static _IsHardwareTexture(texture: HardwareTextureWrapper | GPUTexture): texture is HardwareTextureWrapper {\r\n return !!(texture as HardwareTextureWrapper).release;\r\n }\r\n\r\n private static _IsInternalTexture(texture: InternalTexture | GPUTexture): texture is InternalTexture {\r\n return !!(texture as InternalTexture).dispose;\r\n }\r\n\r\n public static GetCompareFunction(compareFunction: Nullable<number>): GPUCompareFunction {\r\n switch (compareFunction) {\r\n case 519:\r\n return WebGPUConstants.CompareFunction.Always;\r\n case 514:\r\n return WebGPUConstants.CompareFunction.Equal;\r\n case 516:\r\n return WebGPUConstants.CompareFunction.Greater;\r\n case 518:\r\n return WebGPUConstants.CompareFunction.GreaterEqual;\r\n case 513:\r\n return WebGPUConstants.CompareFunction.Less;\r\n case 515:\r\n return WebGPUConstants.CompareFunction.LessEqual;\r\n case 512:\r\n return WebGPUConstants.CompareFunction.Never;\r\n case 517:\r\n return WebGPUConstants.CompareFunction.NotEqual;\r\n default:\r\n return WebGPUConstants.CompareFunction.Less;\r\n }\r\n }\r\n\r\n public static IsImageBitmap(imageBitmap: ImageBitmap | { width: number, height: number }): imageBitmap is ImageBitmap {\r\n return (imageBitmap as ImageBitmap).close !== undefined;\r\n }\r\n\r\n public static IsImageBitmapArray(imageBitmap: ImageBitmap[] | { width: number, height: number }): imageBitmap is ImageBitmap[] {\r\n return Array.isArray(imageBitmap as ImageBitmap[]) && (imageBitmap as ImageBitmap[])[0].close !== undefined;\r\n }\r\n\r\n public setCommandEncoder(encoder: GPUCommandEncoder): void {\r\n this._commandEncoderForCreation = encoder;\r\n }\r\n\r\n public static IsCompressedFormat(format: GPUTextureFormat): boolean {\r\n switch (format) {\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC6HRGBFloat:\r\n case WebGPUConstants.TextureFormat.BC6HRGBUFloat:\r\n case WebGPUConstants.TextureFormat.BC5RGSnorm:\r\n case WebGPUConstants.TextureFormat.BC5RGUnorm:\r\n case WebGPUConstants.TextureFormat.BC4RSnorm:\r\n case WebGPUConstants.TextureFormat.BC4RUnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnorm:\r\n\r\n case WebGPUConstants.TextureFormat.ETC2RGB8Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8A1Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8A1UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ETC2RGBA8Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGBA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.EACR11Unorm:\r\n case WebGPUConstants.TextureFormat.EACR11Snorm:\r\n case WebGPUConstants.TextureFormat.EACRG11Unorm:\r\n case WebGPUConstants.TextureFormat.EACRG11Snorm:\r\n\r\n case WebGPUConstants.TextureFormat.ASTC4x4Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC4x4UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC5x4Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC5x4UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC5x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC5x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC6x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC6x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC6x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC6x6UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC8x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC8x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x6UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC8x8Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x6UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x8Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x10Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x10UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC12x10Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC12x10UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC12x12Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC12x12UnormSRGB:\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public static GetWebGPUTextureFormat(type: number, format: number, useSRGBBuffer = false): GPUTextureFormat {\r\n switch (format) {\r\n case 15:\r\n return WebGPUConstants.TextureFormat.Depth16Unorm;\r\n case 13:\r\n return WebGPUConstants.TextureFormat.Depth24PlusStencil8;\r\n case 14:\r\n return WebGPUConstants.TextureFormat.Depth32Float;\r\n\r\n case 36492:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.BC7RGBAUnormSRGB : WebGPUConstants.TextureFormat.BC7RGBAUnorm;\r\n case 36495:\r\n return WebGPUConstants.TextureFormat.BC6HRGBUFloat;\r\n case 36494:\r\n return WebGPUConstants.TextureFormat.BC6HRGBFloat;\r\n case 33779:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.BC3RGBAUnormSRGB : WebGPUConstants.TextureFormat.BC3RGBAUnorm;\r\n case 33778:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.BC2RGBAUnormSRGB : WebGPUConstants.TextureFormat.BC2RGBAUnorm;\r\n case 33777:\r\n case 33776:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.BC1RGBAUnormSRGB : WebGPUConstants.TextureFormat.BC1RGBAUnorm;\r\n case 37808:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.ASTC4x4UnormSRGB : WebGPUConstants.TextureFormat.ASTC4x4Unorm;\r\n case 36196:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.ETC2RGB8UnormSRGB : WebGPUConstants.TextureFormat.ETC2RGB8Unorm;\r\n }\r\n\r\n switch (type) {\r\n case 3:\r\n switch (format) {\r\n case 6:\r\n return WebGPUConstants.TextureFormat.R8Snorm;\r\n case 7:\r\n return WebGPUConstants.TextureFormat.RG8Snorm;\r\n case 4:\r\n throw \"RGB format not supported in WebGPU\";\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R8Sint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG8Sint;\r\n case 10:\r\n throw \"RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA8Sint;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA8Snorm;\r\n }\r\n case 0:\r\n switch (format) {\r\n case 6:\r\n return WebGPUConstants.TextureFormat.R8Unorm;\r\n case 7:\r\n return WebGPUConstants.TextureFormat.RG8Unorm;\r\n case 4:\r\n throw \"TEXTUREFORMAT_RGB format not supported in WebGPU\";\r\n case 5:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.RGBA8UnormSRGB : WebGPUConstants.TextureFormat.RGBA8Unorm;\r\n case 12:\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.BGRA8UnormSRGB : WebGPUConstants.TextureFormat.BGRA8Unorm;\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R8Uint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG8Uint;\r\n case 10:\r\n throw \"RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA8Uint;\r\n case 0:\r\n throw \"TEXTUREFORMAT_ALPHA format not supported in WebGPU\";\r\n case 1:\r\n throw \"TEXTUREFORMAT_LUMINANCE format not supported in WebGPU\";\r\n case 2:\r\n throw \"TEXTUREFORMAT_LUMINANCE_ALPHA format not supported in WebGPU\";\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA8Unorm;\r\n }\r\n case 4:\r\n switch (format) {\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R16Sint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG16Sint;\r\n case 10:\r\n throw \"TEXTUREFORMAT_RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA16Sint;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA16Sint;\r\n }\r\n case 5:\r\n switch (format) {\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R16Uint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG16Uint;\r\n case 10:\r\n throw \"TEXTUREFORMAT_RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA16Uint;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA16Uint;\r\n }\r\n case 6:\r\n switch (format) {\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R32Sint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG32Sint;\r\n case 10:\r\n throw \"TEXTUREFORMAT_RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA32Sint;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA32Sint;\r\n }\r\n case 7: // Refers to UNSIGNED_INT\r\n switch (format) {\r\n case 8:\r\n return WebGPUConstants.TextureFormat.R32Uint;\r\n case 9:\r\n return WebGPUConstants.TextureFormat.RG32Uint;\r\n case 10:\r\n throw \"TEXTUREFORMAT_RGB_INTEGER format not supported in WebGPU\";\r\n case 11:\r\n return WebGPUConstants.TextureFormat.RGBA32Uint;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA32Uint;\r\n }\r\n case 1:\r\n switch (format) {\r\n case 6:\r\n return WebGPUConstants.TextureFormat.R32Float; // By default. Other possibility is R16Float.\r\n case 7:\r\n return WebGPUConstants.TextureFormat.RG32Float; // By default. Other possibility is RG16Float.\r\n case 4:\r\n throw \"TEXTUREFORMAT_RGB format not supported in WebGPU\";\r\n case 5:\r\n return WebGPUConstants.TextureFormat.RGBA32Float; // By default. Other possibility is RGBA16Float.\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA32Float;\r\n }\r\n case 2:\r\n switch (format) {\r\n case 6:\r\n return WebGPUConstants.TextureFormat.R16Float;\r\n case 7:\r\n return WebGPUConstants.TextureFormat.RG16Float;\r\n case 4:\r\n throw \"TEXTUREFORMAT_RGB format not supported in WebGPU\";\r\n case 5:\r\n return WebGPUConstants.TextureFormat.RGBA16Float;\r\n default:\r\n return WebGPUConstants.TextureFormat.RGBA16Float;\r\n }\r\n case 10:\r\n throw \"TEXTURETYPE_UNSIGNED_SHORT_5_6_5 format not supported in WebGPU\";\r\n case 13:\r\n throw \"TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV format not supported in WebGPU\";\r\n case 14:\r\n throw \"TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV format not supported in WebGPU\";\r\n case 8:\r\n throw \"TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4 format not supported in WebGPU\";\r\n case 9:\r\n throw \"TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1 format not supported in WebGPU\";\r\n case 11:\r\n switch (format) {\r\n case 5:\r\n return WebGPUConstants.TextureFormat.RGB10A2Unorm;\r\n case 11:\r\n throw \"TEXTUREFORMAT_RGBA_INTEGER format not supported in WebGPU when type is TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV\";\r\n default:\r\n return WebGPUConstants.TextureFormat.RGB10A2Unorm;\r\n }\r\n }\r\n\r\n return useSRGBBuffer ? WebGPUConstants.TextureFormat.RGBA8UnormSRGB : WebGPUConstants.TextureFormat.RGBA8Unorm;\r\n }\r\n\r\n public static GetNumChannelsFromWebGPUTextureFormat(format: GPUTextureFormat): number {\r\n switch (format) {\r\n case WebGPUConstants.TextureFormat.R8Unorm:\r\n case WebGPUConstants.TextureFormat.R8Snorm:\r\n case WebGPUConstants.TextureFormat.R8Uint:\r\n case WebGPUConstants.TextureFormat.R8Sint:\r\n case WebGPUConstants.TextureFormat.BC4RUnorm:\r\n case WebGPUConstants.TextureFormat.BC4RSnorm:\r\n case WebGPUConstants.TextureFormat.R16Uint:\r\n case WebGPUConstants.TextureFormat.R16Sint:\r\n case WebGPUConstants.TextureFormat.Depth16Unorm:\r\n case WebGPUConstants.TextureFormat.R16Float:\r\n case WebGPUConstants.TextureFormat.R32Uint:\r\n case WebGPUConstants.TextureFormat.R32Sint:\r\n case WebGPUConstants.TextureFormat.R32Float:\r\n case WebGPUConstants.TextureFormat.Depth32Float:\r\n case WebGPUConstants.TextureFormat.Stencil8:\r\n case WebGPUConstants.TextureFormat.Depth24Plus:\r\n case WebGPUConstants.TextureFormat.EACR11Unorm:\r\n case WebGPUConstants.TextureFormat.EACR11Snorm:\r\n return 1;\r\n\r\n case WebGPUConstants.TextureFormat.RG8Unorm:\r\n case WebGPUConstants.TextureFormat.RG8Snorm:\r\n case WebGPUConstants.TextureFormat.RG8Uint:\r\n case WebGPUConstants.TextureFormat.RG8Sint:\r\n case WebGPUConstants.TextureFormat.Depth24UnormStencil8: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.Depth32FloatStencil8: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.BC5RGUnorm:\r\n case WebGPUConstants.TextureFormat.BC5RGSnorm:\r\n case WebGPUConstants.TextureFormat.RG16Uint:\r\n case WebGPUConstants.TextureFormat.RG16Sint:\r\n case WebGPUConstants.TextureFormat.RG16Float:\r\n case WebGPUConstants.TextureFormat.RG32Uint:\r\n case WebGPUConstants.TextureFormat.RG32Sint:\r\n case WebGPUConstants.TextureFormat.RG32Float:\r\n case WebGPUConstants.TextureFormat.Depth24PlusStencil8:\r\n case WebGPUConstants.TextureFormat.EACRG11Unorm:\r\n case WebGPUConstants.TextureFormat.EACRG11Snorm:\r\n return 2;\r\n\r\n case WebGPUConstants.TextureFormat.RGB9E5UFloat: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.RG11B10UFloat: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.BC6HRGBUFloat:\r\n case WebGPUConstants.TextureFormat.BC6HRGBFloat:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8UnormSRGB:\r\n return 3;\r\n\r\n case WebGPUConstants.TextureFormat.RGBA8Unorm:\r\n case WebGPUConstants.TextureFormat.RGBA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGBA8Snorm:\r\n case WebGPUConstants.TextureFormat.RGBA8Uint:\r\n case WebGPUConstants.TextureFormat.RGBA8Sint:\r\n case WebGPUConstants.TextureFormat.BGRA8Unorm:\r\n case WebGPUConstants.TextureFormat.BGRA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGB10A2Unorm: // composite format - let's say it's byte...\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC7RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC3RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC2RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnorm:\r\n case WebGPUConstants.TextureFormat.BC1RGBAUnormSRGB:\r\n case WebGPUConstants.TextureFormat.RGBA16Uint:\r\n case WebGPUConstants.TextureFormat.RGBA16Sint:\r\n case WebGPUConstants.TextureFormat.RGBA16Float:\r\n case WebGPUConstants.TextureFormat.RGBA32Uint:\r\n case WebGPUConstants.TextureFormat.RGBA32Sint:\r\n case WebGPUConstants.TextureFormat.RGBA32Float:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8A1Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGB8A1UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ETC2RGBA8Unorm:\r\n case WebGPUConstants.TextureFormat.ETC2RGBA8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC4x4Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC4x4UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC5x4Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC5x4UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC5x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC5x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC6x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC6x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC6x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC6x6UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC8x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC8x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x6UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC8x8Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC8x8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x5Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x5UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x6Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x6UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x8Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x8UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC10x10Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC10x10UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC12x10Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC12x10UnormSRGB:\r\n case WebGPUConstants.TextureFormat.ASTC12x12Unorm:\r\n case WebGPUConstants.TextureFormat.ASTC12x12UnormSRGB:\r\n return 4;\r\n }\r\n\r\n throw `Unknown format ${format}!`;\r\n }\r\n\r\n public invertYPreMultiplyAlpha(gpuOrHdwTexture: GPUTexture | WebGPUHardwareTexture, width: number, height: number, format: GPUTextureFormat, invertY = false, premultiplyAlpha = false, faceIndex = 0, mipLevel = 0, layers = 1, commandEncoder?: GPUCommandEncoder, allowGPUOptimization?: boolean): void {\r\n const useOwnCommandEncoder = commandEncoder === undefined;\r\n const [pipeline, bindGroupLayout] = this._getPipeline(format, PipelineType.InvertYPremultiplyAlpha, { invertY, premultiplyAlpha });\r\n\r\n faceIndex = Math.max(faceIndex, 0);\r\n\r\n if (useOwnCommandEncoder) {\r\n commandEncoder = this._device.createCommandEncoder({});\r\n }\r\n\r\n commandEncoder!.pushDebugGroup?.(`internal process texture - invertY=${invertY} premultiplyAlpha=${premultiplyAlpha}`);\r\n\r\n let gpuTexture: Nullable<GPUTexture>;\r\n if (WebGPUTextureHelper._IsHardwareTexture(gpuOrHdwTexture)) {\r\n gpuTexture = gpuOrHdwTexture.underlyingResource;\r\n if (!(invertY && !premultiplyAlpha && layers === 1 && faceIndex === 0)) {\r\n // we optimize only for the most likely case (invertY=true, premultiplyAlpha=false, layers=1, faceIndex=0) to avoid dealing with big caches\r\n gpuOrHdwTexture = undefined as any;\r\n }\r\n } else {\r\n gpuTexture = gpuOrHdwTexture;\r\n gpuOrHdwTexture = undefined as any;\r\n }\r\n if (!gpuTexture) {\r\n return;\r\n }\r\n\r\n const webgpuHardwareTexture = gpuOrHdwTexture as Nullable<WebGPUHardwareTexture>;\r\n\r\n const outputTexture = webgpuHardwareTexture?._copyInvertYTempTexture ?? this.createTexture({ width, height, layers: 1 }, false, false, false, false, false, format, 1, commandEncoder, WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.RenderAttachment | WebGPUConstants.TextureUsage.TextureBinding);\r\n\r\n const renderPassDescriptor = webgpuHardwareTexture?._copyInvertYRenderPassDescr ?? {\r\n colorAttachments: [{\r\n view: outputTexture.createView({\r\n format,\r\n dimension: WebGPUConstants.TextureViewDimension.E2d,\r\n baseMipLevel: 0,\r\n mipLevelCount: 1,\r\n arrayLayerCount: 1,\r\n baseArrayLayer: 0,\r\n }),\r\n loadValue: WebGPUConstants.LoadOp.Load,\r\n storeOp: WebGPUConstants.StoreOp.Store,\r\n }],\r\n };\r\n const passEncoder = commandEncoder!.beginRenderPass(renderPassDescriptor);\r\n\r\n const bindGroup = webgpuHardwareTexture?._copyInvertYBindGroupd ?? this._device.createBindGroup({\r\n layout: bindGroupLayout,\r\n entries: [{\r\n binding: 0,\r\n resource: gpuTexture.createView({\r\n format,\r\n dimension: WebGPUConstants.TextureViewDimension.E2d,\r\n baseMipLevel: mipLevel,\r\n mipLevelCount: 1,\r\n arrayLayerCount: layers,\r\n baseArrayLayer: faceIndex,\r\n }),\r\n }],\r\n });\r\n\r\n passEncoder.setPipeline(pipeline);\r\n passEncoder.setBindGroup(0, bindGroup);\r\n passEncoder.draw(4, 1, 0, 0);\r\n passEncoder.endPass();\r\n\r\n commandEncoder!.copyTextureToTexture({\r\n texture: outputTexture,\r\n }, {\r\n texture: gpuTexture,\r\n mipLevel,\r\n origin: {\r\n x: 0,\r\n y: 0,\r\n z: faceIndex,\r\n }\r\n }, {\r\n width,\r\n height,\r\n depthOrArrayLayers: 1,\r\n }\r\n );\r\n\r\n if (webgpuHardwareTexture) {\r\n webgpuHardwareTexture._copyInvertYTempTexture = outputTexture;\r\n webgpuHardwareTexture._copyInvertYRenderPassDescr = renderPassDescriptor;\r\n webgpuHardwareTexture._copyInvertYBindGroupd = bindGroup;\r\n } else {\r\n this._deferredReleaseTextures.push([outputTexture, null]);\r\n }\r\n\r\n commandEncoder!.popDebugGroup?.();\r\n\r\n if (useOwnCommandEncoder) {\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n }\r\n\r\n public copyWithInvertY(srcTextureView: GPUTextureView, format: GPUTextureFormat, renderPassDescriptor: GPURenderPassDescriptor, commandEncoder?: GPUCommandEncoder): void {\r\n const useOwnCommandEncoder = commandEncoder === undefined;\r\n const [pipeline, bindGroupLayout] = this._getPipeline(format, PipelineType.InvertYPremultiplyAlpha, { invertY: true, premultiplyAlpha: false });\r\n\r\n if (useOwnCommandEncoder) {\r\n commandEncoder = this._device.createCommandEncoder({});\r\n }\r\n\r\n commandEncoder!.pushDebugGroup?.(`internal copy texture with invertY`);\r\n\r\n const passEncoder = commandEncoder!.beginRenderPass(renderPassDescriptor);\r\n\r\n const bindGroup = this._device.createBindGroup({\r\n layout: bindGroupLayout,\r\n entries: [{\r\n binding: 0,\r\n resource: srcTextureView,\r\n }],\r\n });\r\n\r\n passEncoder.setPipeline(pipeline);\r\n passEncoder.setBindGroup(0, bindGroup);\r\n passEncoder.draw(4, 1, 0, 0);\r\n passEncoder.endPass();\r\n\r\n commandEncoder!.popDebugGroup?.();\r\n\r\n if (useOwnCommandEncoder) {\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n }\r\n\r\n //------------------------------------------------------------------------------\r\n // Creation\r\n //------------------------------------------------------------------------------\r\n\r\n public createTexture(imageBitmap: ImageBitmap | { width: number, height: number, layers: number }, hasMipmaps = false, generateMipmaps = false, invertY = false, premultiplyAlpha = false, is3D = false, format: GPUTextureFormat = WebGPUConstants.TextureFormat.RGBA8Unorm,\r\n sampleCount = 1, commandEncoder?: GPUCommandEncoder, usage = -1, additionalUsages = 0): GPUTexture {\r\n\r\n const layerCount = (imageBitmap as any).layers || 1;\r\n let textureSize = {\r\n width: imageBitmap.width,\r\n height: imageBitmap.height,\r\n depthOrArrayLayers: layerCount,\r\n };\r\n\r\n const isCompressedFormat = WebGPUTextureHelper.IsCompressedFormat(format);\r\n const mipLevelCount = hasMipmaps ? WebGPUTextureHelper.ComputeNumMipmapLevels(imageBitmap.width, imageBitmap.height) : 1;\r\n const usages = usage >= 0 ? usage : WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.CopyDst | WebGPUConstants.TextureUsage.TextureBinding;\r\n additionalUsages |= hasMipmaps && !isCompressedFormat ? WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.RenderAttachment : 0;\r\n\r\n if (!isCompressedFormat) {\r\n // we don't know in advance if the texture will be updated with copyImageBitmapToTexture (which requires to have those flags), so we need to force the flags all the times\r\n additionalUsages |= WebGPUConstants.TextureUsage.RenderAttachment | WebGPUConstants.TextureUsage.CopyDst;\r\n }\r\n\r\n const gpuTexture = this._device.createTexture({\r\n size: textureSize,\r\n dimension: is3D ? WebGPUConstants.TextureDimension.E3d : WebGPUConstants.TextureDimension.E2d,\r\n format,\r\n usage: usages | additionalUsages,\r\n sampleCount,\r\n mipLevelCount\r\n });\r\n\r\n if (WebGPUTextureHelper.IsImageBitmap(imageBitmap)) {\r\n this.updateTexture(imageBitmap, gpuTexture, imageBitmap.width, imageBitmap.height, layerCount, format, 0, 0, invertY, premultiplyAlpha, 0, 0, commandEncoder);\r\n\r\n if (hasMipmaps && generateMipmaps) {\r\n this.generateMipmaps(gpuTexture, format, mipLevelCount, 0, commandEncoder);\r\n }\r\n }\r\n\r\n return gpuTexture;\r\n }\r\n\r\n public createCubeTexture(imageBitmaps: ImageBitmap[] | { width: number, height: number }, hasMipmaps = false, generateMipmaps = false, invertY = false, premultiplyAlpha = false, format: GPUTextureFormat = WebGPUConstants.TextureFormat.RGBA8Unorm,\r\n sampleCount = 1, commandEncoder?: GPUCommandEncoder, usage = -1, additionalUsages = 0): GPUTexture {\r\n\r\n const width = WebGPUTextureHelper.IsImageBitmapArray(imageBitmaps) ? imageBitmaps[0].width : imageBitmaps.width;\r\n const height = WebGPUTextureHelper.IsImageBitmapArray(imageBitmaps) ? imageBitmaps[0].height : imageBitmaps.height;\r\n\r\n const isCompressedFormat = WebGPUTextureHelper.IsCompressedFormat(format);\r\n const mipLevelCount = hasMipmaps ? WebGPUTextureHelper.ComputeNumMipmapLevels(width, height) : 1;\r\n const usages = usage >= 0 ? usage : WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.CopyDst | WebGPUConstants.TextureUsage.TextureBinding;\r\n additionalUsages |= hasMipmaps && !isCompressedFormat ? WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.RenderAttachment : 0;\r\n\r\n if (!isCompressedFormat) {\r\n // we don't know in advance if the texture will be updated with copyImageBitmapToTexture (which requires to have those flags), so we need to force the flags all the times\r\n additionalUsages |= WebGPUConstants.TextureUsage.RenderAttachment | WebGPUConstants.TextureUsage.CopyDst;\r\n }\r\n\r\n const gpuTexture = this._device.createTexture({\r\n size: {\r\n width,\r\n height,\r\n depthOrArrayLayers: 6,\r\n },\r\n dimension: WebGPUConstants.TextureDimension.E2d,\r\n format,\r\n usage: usages | additionalUsages,\r\n sampleCount,\r\n mipLevelCount\r\n });\r\n\r\n if (WebGPUTextureHelper.IsImageBitmapArray(imageBitmaps)) {\r\n this.updateCubeTextures(imageBitmaps, gpuTexture, width, height, format, invertY, premultiplyAlpha, 0, 0, commandEncoder);\r\n\r\n if (hasMipmaps && generateMipmaps) {\r\n this.generateCubeMipmaps(gpuTexture, format, mipLevelCount, commandEncoder);\r\n }\r\n }\r\n\r\n return gpuTexture;\r\n }\r\n\r\n public generateCubeMipmaps(gpuTexture: GPUTexture | WebGPUHardwareTexture, format: GPUTextureFormat, mipLevelCount: number, commandEncoder?: GPUCommandEncoder): void {\r\n const useOwnCommandEncoder = commandEncoder === undefined;\r\n\r\n if (useOwnCommandEncoder) {\r\n commandEncoder = this._device.createCommandEncoder({});\r\n }\r\n\r\n commandEncoder!.pushDebugGroup?.(`create cube mipmaps - ${mipLevelCount} levels`);\r\n\r\n for (let f = 0; f < 6; ++f) {\r\n this.generateMipmaps(gpuTexture, format, mipLevelCount, f, commandEncoder);\r\n }\r\n\r\n commandEncoder!.popDebugGroup?.();\r\n\r\n if (useOwnCommandEncoder) {\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n }\r\n\r\n public generateMipmaps(gpuOrHdwTexture: GPUTexture | WebGPUHardwareTexture, format: GPUTextureFormat, mipLevelCount: number, faceIndex = 0, commandEncoder?: GPUCommandEncoder): void {\r\n const useOwnCommandEncoder = commandEncoder === undefined;\r\n const [pipeline, bindGroupLayout] = this._getPipeline(format);\r\n\r\n faceIndex = Math.max(faceIndex, 0);\r\n\r\n if (useOwnCommandEncoder) {\r\n commandEncoder = this._device.createCommandEncoder({});\r\n }\r\n\r\n commandEncoder!.pushDebugGroup?.(`create mipmaps for face #${faceIndex} - ${mipLevelCount} levels`);\r\n\r\n let gpuTexture: Nullable<GPUTexture>;\r\n if (WebGPUTextureHelper._IsHardwareTexture(gpuOrHdwTexture)) {\r\n gpuTexture = gpuOrHdwTexture.underlyingResource;\r\n gpuOrHdwTexture._mipmapGenRenderPassDescr = gpuOrHdwTexture._mipmapGenRenderPassDescr || [];\r\n gpuOrHdwTexture._mipmapGenBindGroup = gpuOrHdwTexture._mipmapGenBindGroup || [];\r\n } else {\r\n gpuTexture = gpuOrHdwTexture;\r\n gpuOrHdwTexture = undefined as any;\r\n }\r\n if (!gpuTexture) {\r\n return;\r\n }\r\n\r\n const webgpuHardwareTexture = gpuOrHdwTexture as Nullable<WebGPUHardwareTexture>;\r\n for (let i = 1; i < mipLevelCount; ++i) {\r\n const renderPassDescriptor = webgpuHardwareTexture?._mipmapGenRenderPassDescr[faceIndex]?.[i - 1] ?? {\r\n colorAttachments: [{\r\n view: gpuTexture.createView({\r\n format,\r\n dimension: WebGPUConstants.TextureViewDimension.E2d,\r\n baseMipLevel: i,\r\n mipLevelCount: 1,\r\n arrayLayerCount: 1,\r\n baseArrayLayer: faceIndex,\r\n }),\r\n loadValue: WebGPUConstants.LoadOp.Load,\r\n storeOp: WebGPUConstants.StoreOp.Store,\r\n }],\r\n };\r\n if (webgpuHardwareTexture) {\r\n webgpuHardwareTexture._mipmapGenRenderPassDescr[faceIndex] = webgpuHardwareTexture._mipmapGenRenderPassDescr[faceIndex] || [];\r\n webgpuHardwareTexture._mipmapGenRenderPassDescr[faceIndex][i - 1] = renderPassDescriptor;\r\n }\r\n const passEncoder = commandEncoder!.beginRenderPass(renderPassDescriptor);\r\n\r\n const bindGroup = webgpuHardwareTexture?._mipmapGenBindGroup[faceIndex]?.[i - 1] ?? this._device.createBindGroup({\r\n layout: bindGroupLayout,\r\n entries: [{\r\n binding: 0,\r\n resource: this._mipmapSampler,\r\n }, {\r\n binding: 1,\r\n resource: gpuTexture.createView({\r\n format,\r\n dimension: WebGPUConstants.TextureViewDimension.E2d,\r\n baseMipLevel: i - 1,\r\n mipLevelCount: 1,\r\n arrayLayerCount: 1,\r\n baseArrayLayer: faceIndex,\r\n }),\r\n }],\r\n });\r\n if (webgpuHardwareTexture) {\r\n webgpuHardwareTexture._mipmapGenBindGroup[faceIndex] = webgpuHardwareTexture._mipmapGenBindGroup[faceIndex] || [];\r\n webgpuHardwareTexture._mipmapGenBindGroup[faceIndex][i - 1] = bindGroup;\r\n }\r\n\r\n passEncoder.setPipeline(pipeline);\r\n passEncoder.setBindGroup(0, bindGroup);\r\n passEncoder.draw(4, 1, 0, 0);\r\n passEncoder.endPass();\r\n }\r\n\r\n commandEncoder!.popDebugGroup?.();\r\n\r\n if (useOwnCommandEncoder) {\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n }\r\n\r\n public createGPUTextureForInternalTexture(texture: InternalTexture, width?: number, height?: number, depth?: number, creationFlags?: number): WebGPUHardwareTexture {\r\n if (!texture._hardwareTexture) {\r\n texture._hardwareTexture = new WebGPUHardwareTexture();\r\n }\r\n\r\n if (width === undefined) {\r\n width = texture.width;\r\n }\r\n if (height === undefined) {\r\n height = texture.height;\r\n }\r\n if (depth === undefined) {\r\n depth = texture.depth;\r\n }\r\n\r\n const gpuTextureWrapper = texture._hardwareTexture as WebGPUHardwareTexture;\r\n\r\n gpuTextureWrapper.format = WebGPUTextureHelper.GetWebGPUTextureFormat(texture.type, texture.format, texture._useSRGBBuffer);\r\n\r\n gpuTextureWrapper.textureUsages =\r\n texture._source === InternalTextureSource.RenderTarget || texture.source === InternalTextureSource.MultiRenderTarget ? WebGPUConstants.TextureUsage.TextureBinding | WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.RenderAttachment :\r\n texture._source === InternalTextureSource.DepthStencil ? WebGPUConstants.TextureUsage.TextureBinding | WebGPUConstants.TextureUsage.RenderAttachment : -1;\r\n\r\n gpuTextureWrapper.textureAdditionalUsages = (creationFlags ?? 0) & 1 ? WebGPUConstants.TextureUsage.StorageBinding : 0;\r\n\r\n const hasMipMaps = texture.generateMipMaps;\r\n const layerCount = depth || 1;\r\n\r\n if (texture.isCube) {\r\n const gpuTexture = this.createCubeTexture({ width, height }, texture.generateMipMaps, texture.generateMipMaps, texture.invertY, false, gpuTextureWrapper.format, 1, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages);\r\n\r\n gpuTextureWrapper.set(gpuTexture);\r\n gpuTextureWrapper.createView({\r\n format: gpuTextureWrapper.format,\r\n dimension: WebGPUConstants.TextureViewDimension.Cube,\r\n mipLevelCount: hasMipMaps ? WebGPUTextureHelper.ComputeNumMipmapLevels(width!, height!) : 1,\r\n baseArrayLayer: 0,\r\n baseMipLevel: 0,\r\n arrayLayerCount: 6,\r\n aspect: WebGPUConstants.TextureAspect.All\r\n });\r\n } else {\r\n const gpuTexture = this.createTexture({ width, height, layers: layerCount }, texture.generateMipMaps, texture.generateMipMaps, texture.invertY, false, texture.is3D, gpuTextureWrapper.format, 1, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages);\r\n\r\n gpuTextureWrapper.set(gpuTexture);\r\n gpuTextureWrapper.createView({\r\n format: gpuTextureWrapper.format,\r\n dimension: texture.is2DArray ? WebGPUConstants.TextureViewDimension.E2dArray : texture.is3D ? WebGPUConstants.TextureDimension.E3d : WebGPUConstants.TextureViewDimension.E2d,\r\n mipLevelCount: hasMipMaps ? WebGPUTextureHelper.ComputeNumMipmapLevels(width!, height!) : 1,\r\n baseArrayLayer: 0,\r\n baseMipLevel: 0,\r\n arrayLayerCount: texture.is3D ? 1 : layerCount,\r\n aspect: WebGPUConstants.TextureAspect.All\r\n });\r\n }\r\n\r\n texture.width = texture.baseWidth = width;\r\n texture.height = texture.baseHeight = height;\r\n texture.depth = texture.baseDepth = depth;\r\n\r\n this.createMSAATexture(texture, texture.samples);\r\n\r\n return gpuTextureWrapper;\r\n }\r\n\r\n public createMSAATexture(texture: InternalTexture, samples: number): void {\r\n const gpuTextureWrapper = texture._hardwareTexture as Nullable<WebGPUHardwareTexture>;\r\n\r\n if (gpuTextureWrapper?.msaaTexture) {\r\n this.releaseTexture(gpuTextureWrapper.msaaTexture);\r\n gpuTextureWrapper.msaaTexture = null;\r\n }\r\n\r\n if (!gpuTextureWrapper || (samples ?? 1) <= 1) {\r\n return;\r\n }\r\n\r\n const width = texture.width;\r\n const height = texture.height;\r\n const layerCount = texture.depth || 1;\r\n\r\n if (texture.isCube) {\r\n const gpuMSAATexture = this.createCubeTexture({ width, height }, false, false, texture.invertY, false, gpuTextureWrapper.format, samples, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages);\r\n gpuTextureWrapper.setMSAATexture(gpuMSAATexture);\r\n } else {\r\n const gpuMSAATexture = this.createTexture({ width, height, layers: layerCount }, false, false, texture.invertY, false, texture.is3D, gpuTextureWrapper.format, samples, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages);\r\n gpuTextureWrapper.setMSAATexture(gpuMSAATexture);\r\n }\r\n }\r\n\r\n //------------------------------------------------------------------------------\r\n // Update\r\n //------------------------------------------------------------------------------\r\n\r\n public updateCubeTextures(imageBitmaps: ImageBitmap[] | Uint8Array[], gpuTexture: GPUTexture, width: number, height: number, format: GPUTextureFormat, invertY = false, premultiplyAlpha = false, offsetX = 0, offsetY = 0,\r\n commandEncoder?: GPUCommandEncoder): void {\r\n const faces = [0, 3, 1, 4, 2, 5];\r\n\r\n for (let f = 0; f < faces.length; ++f) {\r\n let imageBitmap = imageBitmaps[faces[f]];\r\n\r\n this.updateTexture(imageBitmap, gpuTexture, width, height, 1, format, f, 0, invertY, premultiplyAlpha, offsetX, offsetY, commandEncoder);\r\n }\r\n }\r\n\r\n // TODO WEBGPU handle data source not being in the same format than the destination texture?\r\n public updateTexture(imageBitmap: ImageBitmap | Uint8Array | HTMLCanvasElement | OffscreenCanvas, texture: GPUTexture | InternalTexture, width: number, height: number, layers: number, format: GPUTextureFormat, faceIndex: number = 0, mipLevel: number = 0, invertY = false, premultiplyAlpha = false, offsetX = 0, offsetY = 0,\r\n commandEncoder?: GPUCommandEncoder, allowGPUOptimization?: boolean): void {\r\n const gpuTexture = WebGPUTextureHelper._IsInternalTexture(texture) ? (texture._hardwareTexture as WebGPUHardwareTexture).underlyingResource! : texture;\r\n const blockInformation = WebGPUTextureHelper._GetBlockInformationFromFormat(format);\r\n const gpuOrHdwTexture = WebGPUTextureHelper._IsInternalTexture(texture) ? (texture._hardwareTexture as WebGPUHardwareTexture) : texture;\r\n\r\n const textureCopyView: GPUImageCopyTextureTagged = {\r\n texture: gpuTexture,\r\n origin: {\r\n x: offsetX,\r\n y: offsetY,\r\n z: Math.max(faceIndex, 0)\r\n },\r\n mipLevel: mipLevel,\r\n premultipliedAlpha: premultiplyAlpha,\r\n };\r\n\r\n const textureExtent = {\r\n width: Math.ceil(width / blockInformation.width) * blockInformation.width,\r\n height: Math.ceil(height / blockInformation.height) * blockInformation.height,\r\n depthOrArrayLayers: layers || 1\r\n };\r\n\r\n if ((imageBitmap as Uint8Array).byteLength !== undefined) {\r\n imageBitmap = imageBitmap as Uint8Array;\r\n\r\n const bytesPerRow = Math.ceil(width / blockInformation.width) * blockInformation.length;\r\n const aligned = Math.ceil(bytesPerRow / 256) * 256 === bytesPerRow;\r\n\r\n if (aligned) {\r\n const useOwnCommandEncoder = commandEncoder === undefined;\r\n\r\n if (useOwnCommandEncoder) {\r\n commandEncoder = this._device.createCommandEncoder({});\r\n }\r\n\r\n const buffer = this._bufferManager.createRawBuffer(imageBitmap.byteLength, WebGPUConstants.BufferUsage.MapWrite | WebGPUConstants.BufferUsage.CopySrc, true);\r\n\r\n const arrayBuffer = buffer.getMappedRange();\r\n\r\n new Uint8Array(arrayBuffer).set(imageBitmap);\r\n\r\n buffer.unmap();\r\n\r\n commandEncoder!.copyBufferToTexture({\r\n buffer: buffer,\r\n offset: 0,\r\n bytesPerRow,\r\n rowsPerImage: height,\r\n }, textureCopyView, textureExtent);\r\n\r\n if (useOwnCommandEncoder) {\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n\r\n this._bufferManager.releaseBuffer(buffer);\r\n } else {\r\n this._device.queue.writeTexture(textureCopyView, imageBitmap, {\r\n offset: 0,\r\n bytesPerRow,\r\n rowsPerImage: height,\r\n }, textureExtent);\r\n }\r\n\r\n if (invertY || premultiplyAlpha) {\r\n this.invertYPreMultiplyAlpha(gpuOrHdwTexture, width, height, format, invertY, premultiplyAlpha, faceIndex, mipLevel, layers || 1, commandEncoder, allowGPUOptimization);\r\n }\r\n } else {\r\n imageBitmap = imageBitmap as (ImageBitmap | HTMLCanvasElement | OffscreenCanvas);\r\n\r\n if (invertY) {\r\n textureCopyView.premultipliedAlpha = false; // we are going to handle premultiplyAlpha ourselves\r\n\r\n // we must preprocess the image\r\n if (WebGPUTextureHelper._IsInternalTexture(texture) && offsetX === 0 && offsetY === 0 && width === texture.width && height === texture.height) {\r\n // optimization when the source image is the same size than the destination texture and offsets X/Y == 0:\r\n // we simply copy the source to the destination and we apply the preprocessing on the destination\r\n this._device.queue.copyExternalImageToTexture({ source: imageBitmap }, textureCopyView, textureExtent);\r\n\r\n // note that we have to use a new command encoder and submit it just right away so that the copy (see line above) and the preprocessing render pass happens in the right order!\r\n // (to do that, we don't pass to invertYPreMultiplyAlpha the command encoder which is passed to updateTexture, meaning invertYPreMultiplyAlpha will create a temporary one and will submit it right away)\r\n // if we don't create a new command encoder, we could end up calling copyExternalImageToTexture / invertYPreMultiplyAlpha / copyExternalImageToTexture / invertYPreMultiplyAlpha in the same frame,\r\n // in which case it would be executed as copyExternalImageToTexture / copyExternalImageToTexture / invertYPreMultiplyAlpha / invertYPreMultiplyAlpha because the command encoder we are passed in\r\n // is submitted at the end of the frame\r\n this.invertYPreMultiplyAlpha(gpuOrHdwTexture, width, height, format, invertY, premultiplyAlpha, faceIndex, mipLevel, layers || 1, undefined, allowGPUOptimization);\r\n } else {\r\n // we must apply the preprocessing on the source image before copying it into the destination texture\r\n // we don't use the command encoder we are passed in because it will be submitted at the end of the frame: see more explanations in the comments above\r\n commandEncoder = this._device.createCommandEncoder({});\r\n\r\n // create a temp texture and copy the image to it\r\n const srcTexture = this.createTexture({ width, height, layers: 1 }, false, false, false, false, false, format, 1, commandEncoder, WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.TextureBinding);\r\n\r\n this._deferredReleaseTextures.push([srcTexture, null]);\r\n\r\n textureExtent.depthOrArrayLayers = 1;\r\n this._device.queue.copyExternalImageToTexture({ source: imageBitmap }, { texture: srcTexture }, textureExtent);\r\n textureExtent.depthOrArrayLayers = layers || 1;\r\n\r\n // apply the preprocessing to this temp texture\r\n this.invertYPreMultiplyAlpha(srcTexture, width, height, format, invertY, premultiplyAlpha, faceIndex, mipLevel, layers || 1, commandEncoder, allowGPUOptimization);\r\n\r\n // copy the temp texture to the destination texture\r\n commandEncoder.copyTextureToTexture({ texture: srcTexture }, textureCopyView, textureExtent);\r\n\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n commandEncoder = null as any;\r\n }\r\n } else {\r\n // no preprocessing: direct copy to destination texture\r\n this._device.queue.copyExternalImageToTexture({ source: imageBitmap }, textureCopyView, textureExtent);\r\n }\r\n }\r\n }\r\n\r\n public readPixels(texture: GPUTexture, x: number, y: number, width: number, height: number, format: GPUTextureFormat, faceIndex: number = 0, mipLevel: number = 0, buffer: Nullable<ArrayBufferView> = null, noDataConversion = false): Promise<ArrayBufferView> {\r\n const blockInformation = WebGPUTextureHelper._GetBlockInformationFromFormat(format);\r\n\r\n const bytesPerRow = Math.ceil(width / blockInformation.width) * blockInformation.length;\r\n\r\n const bytesPerRowAligned = Math.ceil(bytesPerRow / 256) * 256;\r\n\r\n const size = bytesPerRowAligned * height;\r\n\r\n const gpuBuffer = this._bufferManager.createRawBuffer(size, WebGPUConstants.BufferUsage.MapRead | WebGPUConstants.BufferUsage.CopyDst);\r\n\r\n const commandEncoder = this._device.createCommandEncoder({});\r\n\r\n commandEncoder.copyTextureToBuffer({\r\n texture,\r\n mipLevel,\r\n origin: {\r\n x,\r\n y,\r\n z: Math.max(faceIndex, 0)\r\n }\r\n }, {\r\n buffer: gpuBuffer,\r\n offset: 0,\r\n bytesPerRow: bytesPerRowAligned\r\n }, {\r\n width,\r\n height,\r\n depthOrArrayLayers: 1\r\n });\r\n\r\n this._device.queue.submit([commandEncoder!.finish()]);\r\n\r\n return this._bufferManager.readDataFromBuffer(gpuBuffer, size, width, height, bytesPerRow, bytesPerRowAligned, WebGPUTextureHelper._GetTextureTypeFromFormat(format), 0, buffer, true, noDataConversion);\r\n }\r\n\r\n //------------------------------------------------------------------------------\r\n // Dispose\r\n //------------------------------------------------------------------------------\r\n\r\n public releaseTexture(texture: InternalTexture | GPUTexture): void {\r\n if (WebGPUTextureHelper._IsInternalTexture(texture)) {\r\n const hardwareTexture = texture._hardwareTexture;\r\n const irradianceTexture = texture._irradianceTexture;\r\n\r\n // We can't destroy the objects just now because they could be used in the current frame - we delay the destroying after the end of the frame\r\n this._deferredReleaseTextures.push([hardwareTexture, irradianceTexture]);\r\n } else {\r\n this._deferredReleaseTextures.push([texture, null]);\r\n }\r\n }\r\n\r\n public destroyDeferredTextures(): void {\r\n for (let i = 0; i < this._deferredReleaseTextures.length; ++i) {\r\n const [hardwareTexture, irradianceTexture] = this._deferredReleaseTextures[i];\r\n\r\n if (hardwareTexture) {\r\n if (WebGPUTextureHelper._IsHardwareTexture(hardwareTexture)) {\r\n hardwareTexture.release();\r\n } else {\r\n hardwareTexture.destroy();\r\n }\r\n }\r\n irradianceTexture?.dispose();\r\n }\r\n\r\n this._deferredReleaseTextures.length = 0;\r\n }\r\n}"]}
|