@babylonjs/core 5.53.0 → 5.53.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/Animations/animationGroup.js +8 -1
  2. package/Animations/animationGroup.js.map +1 -1
  3. package/Engines/Extensions/engine.cubeTexture.js +3 -0
  4. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  5. package/Engines/Extensions/engine.multiRender.js +74 -19
  6. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  7. package/Engines/Extensions/engine.renderTarget.js +2 -5
  8. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  9. package/Engines/WebGL/webGLHardwareTexture.d.ts +3 -1
  10. package/Engines/WebGL/webGLHardwareTexture.js +19 -7
  11. package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
  12. package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +14 -1
  13. package/Engines/WebGL/webGLRenderTargetWrapper.js +76 -6
  14. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  15. package/Engines/WebGPU/Extensions/engine.multiRender.js +20 -0
  16. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  17. package/Engines/WebGPU/Extensions/engine.renderTarget.js +3 -1
  18. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  19. package/Engines/WebGPU/webgpuConstants.d.ts +22 -7
  20. package/Engines/WebGPU/webgpuConstants.js +24 -8
  21. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  22. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +0 -3
  23. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +20 -53
  24. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  25. package/Engines/WebGPU/webgpuTextureHelper.d.ts +3 -2
  26. package/Engines/WebGPU/webgpuTextureHelper.js +33 -14
  27. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  28. package/Engines/WebGPU/webgpuTintWASM.d.ts +3 -2
  29. package/Engines/WebGPU/webgpuTintWASM.js +10 -8
  30. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  31. package/Engines/constants.d.ts +12 -0
  32. package/Engines/constants.js +12 -0
  33. package/Engines/constants.js.map +1 -1
  34. package/Engines/engine.d.ts +128 -72
  35. package/Engines/nativeEngine.d.ts +1 -0
  36. package/Engines/nativeEngine.js +16 -5
  37. package/Engines/nativeEngine.js.map +1 -1
  38. package/Engines/renderTargetWrapper.d.ts +28 -4
  39. package/Engines/renderTargetWrapper.js +107 -10
  40. package/Engines/renderTargetWrapper.js.map +1 -1
  41. package/Engines/thinEngine.d.ts +6 -6
  42. package/Engines/thinEngine.js +28 -20
  43. package/Engines/thinEngine.js.map +1 -1
  44. package/Engines/webgpuEngine.d.ts +25 -8
  45. package/Engines/webgpuEngine.js +112 -48
  46. package/Engines/webgpuEngine.js.map +1 -1
  47. package/Materials/PBR/pbrAnisotropicConfiguration.js +0 -1
  48. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  49. package/Materials/PBR/pbrBaseMaterial.js +3 -0
  50. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  51. package/Materials/Textures/internalTexture.d.ts +4 -0
  52. package/Materials/Textures/internalTexture.js.map +1 -1
  53. package/Materials/Textures/multiRenderTarget.d.ts +40 -0
  54. package/Materials/Textures/multiRenderTarget.js +143 -4
  55. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  56. package/Materials/Textures/renderTargetTexture.d.ts +4 -0
  57. package/Materials/Textures/renderTargetTexture.js +10 -2
  58. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  59. package/Materials/Textures/texture.d.ts +4 -2
  60. package/Materials/Textures/texture.js +1 -0
  61. package/Materials/Textures/texture.js.map +1 -1
  62. package/Materials/Textures/textureCreationOptions.d.ts +4 -0
  63. package/Materials/Textures/textureCreationOptions.js.map +1 -1
  64. package/Misc/interfaces/screenshotSize.d.ts +17 -3
  65. package/Misc/interfaces/screenshotSize.js.map +1 -1
  66. package/Misc/screenshotTools.d.ts +2 -2
  67. package/Misc/screenshotTools.js +49 -9
  68. package/Misc/screenshotTools.js.map +1 -1
  69. package/Misc/textureTools.d.ts +1 -1
  70. package/Misc/textureTools.js +4 -2
  71. package/Misc/textureTools.js.map +1 -1
  72. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +1 -0
  73. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  74. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.d.ts +5 -0
  75. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js +7 -0
  76. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js.map +1 -1
  77. package/PostProcesses/depthOfFieldMergePostProcess.d.ts +0 -23
  78. package/PostProcesses/depthOfFieldMergePostProcess.js +0 -5
  79. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  80. package/PostProcesses/postProcess.js +1 -0
  81. package/PostProcesses/postProcess.js.map +1 -1
  82. package/Probes/reflectionProbe.js +1 -0
  83. package/Probes/reflectionProbe.js.map +1 -1
  84. package/Rendering/depthPeelingRenderer.js +3 -1
  85. package/Rendering/depthPeelingRenderer.js.map +1 -1
  86. package/Rendering/fluidRenderer/fluidRenderer.js +1 -1
  87. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
  88. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +2 -1
  89. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
  90. package/Rendering/fluidRenderer/fluidRenderingTextures.js +2 -0
  91. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  92. package/Shaders/default.fragment.js +1 -1
  93. package/Shaders/default.fragment.js.map +1 -1
  94. package/Shaders/depthOfFieldMerge.fragment.js +10 -5
  95. package/Shaders/depthOfFieldMerge.fragment.js.map +1 -1
  96. package/Shaders/fluidRenderingRender.fragment.js +3 -3
  97. package/Shaders/fluidRenderingRender.fragment.js.map +1 -1
  98. package/Shaders/motionBlur.fragment.js +8 -2
  99. package/Shaders/motionBlur.fragment.js.map +1 -1
  100. package/Shaders/screenSpaceReflection2.fragment.js +11 -4
  101. package/Shaders/screenSpaceReflection2.fragment.js.map +1 -1
  102. package/Shaders/screenSpaceReflection2Blur.fragment.js +6 -1
  103. package/Shaders/screenSpaceReflection2Blur.fragment.js.map +1 -1
  104. package/Shaders/ssao2.fragment.js +1 -0
  105. package/Shaders/ssao2.fragment.js.map +1 -1
  106. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js +9 -9
  107. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js.map +1 -1
  108. package/ShadersWGSL/ShadersInclude/bonesVertex.js +16 -16
  109. package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
  110. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js +6 -6
  111. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js.map +1 -1
  112. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js +6 -6
  113. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js.map +1 -1
  114. package/ShadersWGSL/ShadersInclude/instancesVertex.js +1 -1
  115. package/ShadersWGSL/ShadersInclude/instancesVertex.js.map +1 -1
  116. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +8 -8
  117. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
  118. package/package.json +1 -1
@@ -20,13 +20,7 @@ import "../../ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js";
20
20
  import "../../ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js";
21
21
  import "../../ShadersWGSL/ShadersInclude/sceneUboDeclaration.js";
22
22
  import { ShaderLanguage } from "../../Materials/shaderLanguage.js";
23
- const builtInName_vertex_index = "gl_VertexID";
24
- const builtInName_instance_index = "gl_InstanceID";
25
- const builtInName_position = "gl_Position";
26
- const builtInName_position_frag = "gl_FragCoord";
27
- const builtInName_front_facing = "gl_FrontFacing";
28
- const builtInName_frag_depth = "gl_FragDepth";
29
- const builtInName_FragColor = "gl_FragColor";
23
+ const builtInName_frag_depth = "fragmentOutputs.fragDepth";
30
24
  const leftOverVarName = "uniforms";
31
25
  const internalsVarName = "internals";
32
26
  const gpuTextureViewDimensionByWebGPUTextureFunction = {
@@ -80,15 +74,12 @@ export class WebGPUShaderProcessorWGSL extends WebGPUShaderProcessor {
80
74
  initializeShaders(processingContext) {
81
75
  this._webgpuProcessingContext = processingContext;
82
76
  this._attributesWGSL = [];
83
- this._attributesDeclWGSL = [];
84
- this._attributeNamesWGSL = [];
85
77
  this._varyingsWGSL = [];
86
- this._varyingsDeclWGSL = [];
87
78
  this._varyingNamesWGSL = [];
88
79
  this._stridedUniformArrays = [];
89
80
  }
90
81
  preProcessShaderCode(code) {
91
- return (`struct ${WebGPUShaderProcessor.InternalsUBOName} {\nyFactor_: f32,\ntextureOutputHeight_: f32,\n};\nvar<uniform> ${internalsVarName} : ${WebGPUShaderProcessor.InternalsUBOName};\n` +
82
+ return (`struct ${WebGPUShaderProcessor.InternalsUBOName} {\n yFactor_: f32,\n textureOutputHeight_: f32,\n};\nvar<uniform> ${internalsVarName} : ${WebGPUShaderProcessor.InternalsUBOName};\n` +
92
83
  RemoveComments(code));
93
84
  }
94
85
  varyingProcessor(varying, isFragment, preProcessors) {
@@ -107,8 +98,7 @@ export class WebGPUShaderProcessorWGSL extends WebGPUShaderProcessor {
107
98
  else {
108
99
  location = this._webgpuProcessingContext.getVaryingNextLocation(varyingType, this._getArraySize(name, varyingType, preProcessors)[2]);
109
100
  this._webgpuProcessingContext.availableVaryings[name] = location;
110
- this._varyingsWGSL.push(`@location(${location}) ${name} : ${varyingType},`);
111
- this._varyingsDeclWGSL.push(`var<private> ${name} : ${varyingType};`);
101
+ this._varyingsWGSL.push(` @location(${location}) ${name} : ${varyingType},`);
112
102
  this._varyingNamesWGSL.push(name);
113
103
  }
114
104
  varying = "";
@@ -125,8 +115,6 @@ export class WebGPUShaderProcessorWGSL extends WebGPUShaderProcessor {
125
115
  this._webgpuProcessingContext.availableAttributes[name] = location;
126
116
  this._webgpuProcessingContext.orderedAttributes[location] = name;
127
117
  this._attributesWGSL.push(`@location(${location}) ${name} : ${attributeType},`);
128
- this._attributesDeclWGSL.push(`var<private> ${name} : ${attributeType};`);
129
- this._attributeNamesWGSL.push(name);
130
118
  attribute = "";
131
119
  }
132
120
  return attribute;
@@ -196,10 +184,10 @@ export class WebGPUShaderProcessorWGSL extends WebGPUShaderProcessor {
196
184
  return code;
197
185
  }
198
186
  finalizeShaders(vertexCode, fragmentCode) {
199
- const fragCoordCode = fragmentCode.indexOf("gl_FragCoord") >= 0
187
+ const fragCoordCode = fragmentCode.indexOf("fragmentInputs.position") >= 0
200
188
  ? `
201
189
  if (internals.yFactor_ == 1.) {
202
- gl_FragCoord.y = internals.textureOutputHeight_ - gl_FragCoord.y;
190
+ fragmentInputs.position.y = internals.textureOutputHeight_ - fragmentInputs.position.y;
203
191
  }
204
192
  `
205
193
  : "";
@@ -216,42 +204,29 @@ export class WebGPUShaderProcessorWGSL extends WebGPUShaderProcessor {
216
204
  // Vertex code
217
205
  vertexCode = vertexCode.replace(/#define /g, "//#define ");
218
206
  vertexCode = this._processStridedUniformArrays(vertexCode);
219
- const varyingsDecl = this._varyingsDeclWGSL.join("\n") + "\n";
220
- const vertexBuiltinDecl = `var<private> ${builtInName_vertex_index} : u32;\nvar<private> ${builtInName_instance_index} : u32;\nvar<private> ${builtInName_position} : vec4<f32>;\n`;
221
- const vertexAttributesDecl = this._attributesDeclWGSL.join("\n") + "\n";
222
207
  let vertexInputs = "struct VertexInputs {\n @builtin(vertex_index) vertexIndex : u32,\n @builtin(instance_index) instanceIndex : u32,\n";
223
208
  if (this._attributesWGSL.length > 0) {
224
209
  vertexInputs += this._attributesWGSL.join("\n");
225
210
  }
226
- vertexInputs += "\n};\n";
227
- let vertexFragmentInputs = "struct FragmentInputs {\n @builtin(position) position : vec4<f32>,\n";
211
+ vertexInputs += "\n};\nvar<private> vertexInputs : VertexInputs;\n";
212
+ let vertexOutputs = "struct FragmentInputs {\n @builtin(position) position : vec4<f32>,\n";
228
213
  if (this._varyingsWGSL.length > 0) {
229
- vertexFragmentInputs += this._varyingsWGSL.join("\n");
214
+ vertexOutputs += this._varyingsWGSL.join("\n");
230
215
  }
231
- vertexFragmentInputs += "\n};\n";
232
- vertexCode = vertexBuiltinDecl + vertexInputs + vertexAttributesDecl + vertexFragmentInputs + varyingsDecl + vertexCode;
233
- let vertexStartingCode = ` var output : FragmentInputs;\n ${builtInName_vertex_index} = input.vertexIndex;\n ${builtInName_instance_index} = input.instanceIndex;\n`;
234
- for (let i = 0; i < this._attributeNamesWGSL.length; ++i) {
235
- const name = this._attributeNamesWGSL[i];
236
- vertexStartingCode += ` ${name} = input.${name};\n`;
237
- }
238
- let vertexEndingCode = ` output.position = ${builtInName_position};\n output.position.y = output.position.y * internals.yFactor_;\n`;
239
- for (let i = 0; i < this._varyingNamesWGSL.length; ++i) {
240
- const name = this._varyingNamesWGSL[i];
241
- vertexEndingCode += ` output.${name} = ${name};\n`;
242
- }
243
- vertexEndingCode += " return output;";
244
- vertexCode = this._injectStartingAndEndingCode(vertexCode, "fn main", vertexStartingCode, vertexEndingCode);
216
+ vertexOutputs += "\n};\nvar<private> vertexOutputs : FragmentInputs;\n";
217
+ vertexCode = vertexInputs + vertexOutputs + vertexCode;
218
+ const vertexMainStartingCode = `\n vertexInputs = input;\n`;
219
+ const vertexMainEndingCode = ` vertexOutputs.position.y = vertexOutputs.position.y * internals.yFactor_;\n return vertexOutputs;`;
220
+ vertexCode = this._injectStartingAndEndingCode(vertexCode, "fn main", vertexMainStartingCode, vertexMainEndingCode);
245
221
  // fragment code
246
222
  fragmentCode = fragmentCode.replace(/#define /g, "//#define ");
247
223
  fragmentCode = this._processStridedUniformArrays(fragmentCode);
248
224
  fragmentCode = fragmentCode.replace(/dpdy/g, "(-internals.yFactor_)*dpdy"); // will also handle dpdyCoarse and dpdyFine
249
- const fragmentBuiltinDecl = `var<private> ${builtInName_position_frag} : vec4<f32>;\nvar<private> ${builtInName_front_facing} : bool;\nvar<private> ${builtInName_FragColor} : vec4<f32>;\nvar<private> ${builtInName_frag_depth} : f32;\n`;
250
- let fragmentFragmentInputs = "struct FragmentInputs {\n @builtin(position) position : vec4<f32>,\n @builtin(front_facing) frontFacing : bool,\n";
225
+ let fragmentInputs = "struct FragmentInputs {\n @builtin(position) position : vec4<f32>,\n @builtin(front_facing) frontFacing : bool,\n";
251
226
  if (this._varyingsWGSL.length > 0) {
252
- fragmentFragmentInputs += this._varyingsWGSL.join("\n");
227
+ fragmentInputs += this._varyingsWGSL.join("\n");
253
228
  }
254
- fragmentFragmentInputs += "\n};\n";
229
+ fragmentInputs += "\n};\nvar<private> fragmentInputs : FragmentInputs;\n";
255
230
  let fragmentOutputs = "struct FragmentOutputs {\n @location(0) color : vec4<f32>,\n";
256
231
  let hasFragDepth = false;
257
232
  let idx = 0;
@@ -274,18 +249,10 @@ export class WebGPUShaderProcessorWGSL extends WebGPUShaderProcessor {
274
249
  if (hasFragDepth) {
275
250
  fragmentOutputs += " @builtin(frag_depth) fragDepth: f32,\n";
276
251
  }
277
- fragmentOutputs += "};\n";
278
- fragmentCode = fragmentBuiltinDecl + fragmentFragmentInputs + varyingsDecl + fragmentOutputs + fragmentCode;
279
- let fragmentStartingCode = ` var output : FragmentOutputs;\n ${builtInName_position_frag} = input.position;\n ${builtInName_front_facing} = input.frontFacing;\n` + fragCoordCode;
280
- for (let i = 0; i < this._varyingNamesWGSL.length; ++i) {
281
- const name = this._varyingNamesWGSL[i];
282
- fragmentStartingCode += ` ${name} = input.${name};\n`;
283
- }
284
- let fragmentEndingCode = ` output.color = ${builtInName_FragColor};\n`;
285
- if (hasFragDepth) {
286
- fragmentEndingCode += ` output.fragDepth = ${builtInName_frag_depth};\n`;
287
- }
288
- fragmentEndingCode += " return output;";
252
+ fragmentOutputs += "};\nvar<private> fragmentOutputs : FragmentOutputs;\n";
253
+ fragmentCode = fragmentInputs + fragmentOutputs + fragmentCode;
254
+ const fragmentStartingCode = " fragmentInputs = input;\n " + fragCoordCode;
255
+ const fragmentEndingCode = " return fragmentOutputs;";
289
256
  fragmentCode = this._injectStartingAndEndingCode(fragmentCode, "fn main", fragmentStartingCode, fragmentEndingCode);
290
257
  this._collectBindingNames();
291
258
  this._preCreateBindGroupEntries();
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuShaderProcessorsWGSL.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuShaderProcessorsWGSL.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../../types\";\r\nimport type { ShaderProcessingContext } from \"../Processors/shaderProcessingOptions\";\r\nimport type { WebGPUBufferDescription } from \"./webgpuShaderProcessingContext\";\r\nimport { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { WebGPUShaderProcessor } from \"./webgpuShaderProcessor\";\r\nimport { RemoveComments } from \"../../Misc/codeStringParsingTools\";\r\n\r\nimport \"../../ShadersWGSL/ShadersInclude/bonesDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/bonesVertex\";\r\nimport \"../../ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/bakedVertexAnimation\";\r\nimport \"../../ShadersWGSL/ShadersInclude/clipPlaneFragment\";\r\nimport \"../../ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/clipPlaneVertex\";\r\nimport \"../../ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/instancesDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/instancesVertex\";\r\nimport \"../../ShadersWGSL/ShadersInclude/meshUboDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/morphTargetsVertex\";\r\nimport \"../../ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal\";\r\nimport \"../../ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/sceneUboDeclaration\";\r\nimport { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\n\r\nconst builtInName_vertex_index = \"gl_VertexID\";\r\nconst builtInName_instance_index = \"gl_InstanceID\";\r\nconst builtInName_position = \"gl_Position\";\r\n\r\nconst builtInName_position_frag = \"gl_FragCoord\";\r\nconst builtInName_front_facing = \"gl_FrontFacing\";\r\nconst builtInName_frag_depth = \"gl_FragDepth\";\r\nconst builtInName_FragColor = \"gl_FragColor\";\r\n\r\nconst leftOverVarName = \"uniforms\";\r\nconst internalsVarName = \"internals\";\r\n\r\nconst gpuTextureViewDimensionByWebGPUTextureFunction: { [key: string]: Nullable<GPUTextureViewDimension> } = {\r\n texture_1d: WebGPUConstants.TextureViewDimension.E1d,\r\n texture_2d: WebGPUConstants.TextureViewDimension.E2d,\r\n texture_2d_array: WebGPUConstants.TextureViewDimension.E2dArray,\r\n texture_3d: WebGPUConstants.TextureViewDimension.E3d,\r\n texture_cube: WebGPUConstants.TextureViewDimension.Cube,\r\n texture_cube_array: WebGPUConstants.TextureViewDimension.CubeArray,\r\n texture_multisampled_2d: WebGPUConstants.TextureViewDimension.E2d,\r\n texture_depth_2d: WebGPUConstants.TextureViewDimension.E2d,\r\n texture_depth_2d_array: WebGPUConstants.TextureViewDimension.E2dArray,\r\n texture_depth_cube: WebGPUConstants.TextureViewDimension.Cube,\r\n texture_depth_cube_array: WebGPUConstants.TextureViewDimension.CubeArray,\r\n texture_depth_multisampled_2d: WebGPUConstants.TextureViewDimension.E2d,\r\n texture_storage_1d: WebGPUConstants.TextureViewDimension.E1d,\r\n texture_storage_2d: WebGPUConstants.TextureViewDimension.E2d,\r\n texture_storage_2d_array: WebGPUConstants.TextureViewDimension.E2dArray,\r\n texture_storage_3d: WebGPUConstants.TextureViewDimension.E3d,\r\n texture_external: null,\r\n};\r\n\r\n/** @internal */\r\nexport class WebGPUShaderProcessorWGSL extends WebGPUShaderProcessor {\r\n protected _attributesWGSL: string[];\r\n protected _attributesDeclWGSL: string[];\r\n protected _attributeNamesWGSL: string[];\r\n protected _varyingsWGSL: string[];\r\n protected _varyingsDeclWGSL: string[];\r\n protected _varyingNamesWGSL: string[];\r\n protected _stridedUniformArrays: string[];\r\n\r\n public shaderLanguage = ShaderLanguage.WGSL;\r\n public uniformRegexp = /uniform\\s+(\\w+)\\s*:\\s*(.+)\\s*;/;\r\n public textureRegexp = /var\\s+(\\w+)\\s*:\\s*((array<\\s*)?(texture_\\w+)\\s*(<\\s*(.+)\\s*>)?\\s*(,\\s*\\w+\\s*>\\s*)?);/;\r\n public noPrecision = true;\r\n\r\n protected _getArraySize(name: string, uniformType: string, preProcessors: { [key: string]: string }): [string, string, number] {\r\n let length = 0;\r\n\r\n const endArray = uniformType.lastIndexOf(\">\");\r\n if (uniformType.indexOf(\"array\") >= 0 && endArray > 0) {\r\n let startArray = endArray;\r\n while (startArray > 0 && uniformType.charAt(startArray) !== \" \" && uniformType.charAt(startArray) !== \",\") {\r\n startArray--;\r\n }\r\n const lengthInString = uniformType.substring(startArray + 1, endArray);\r\n length = +lengthInString;\r\n if (isNaN(length)) {\r\n length = +preProcessors[lengthInString.trim()];\r\n }\r\n while (startArray > 0 && (uniformType.charAt(startArray) === \" \" || uniformType.charAt(startArray) === \",\")) {\r\n startArray--;\r\n }\r\n uniformType = uniformType.substring(uniformType.indexOf(\"<\") + 1, startArray + 1);\r\n }\r\n\r\n return [name, uniformType, length];\r\n }\r\n\r\n public initializeShaders(processingContext: Nullable<ShaderProcessingContext>): void {\r\n this._webgpuProcessingContext = processingContext as WebGPUShaderProcessingContext;\r\n\r\n this._attributesWGSL = [];\r\n this._attributesDeclWGSL = [];\r\n this._attributeNamesWGSL = [];\r\n this._varyingsWGSL = [];\r\n this._varyingsDeclWGSL = [];\r\n this._varyingNamesWGSL = [];\r\n this._stridedUniformArrays = [];\r\n }\r\n\r\n public preProcessShaderCode(code: string): string {\r\n return (\r\n `struct ${WebGPUShaderProcessor.InternalsUBOName} {\\nyFactor_: f32,\\ntextureOutputHeight_: f32,\\n};\\nvar<uniform> ${internalsVarName} : ${WebGPUShaderProcessor.InternalsUBOName};\\n` +\r\n RemoveComments(code)\r\n );\r\n }\r\n\r\n public varyingProcessor(varying: string, isFragment: boolean, preProcessors: { [key: string]: string }) {\r\n const varyingRegex = /\\s*varying\\s+(?:(?:highp)?|(?:lowp)?)\\s*(\\S+)\\s*:\\s*(.+)\\s*;/gm;\r\n const match = varyingRegex.exec(varying);\r\n if (match !== null) {\r\n const varyingType = match[2];\r\n const name = match[1];\r\n let location: number;\r\n if (isFragment) {\r\n location = this._webgpuProcessingContext.availableVaryings[name];\r\n if (location === undefined) {\r\n Logger.Warn(`Invalid fragment shader: The varying named \"${name}\" is not declared in the vertex shader! This declaration will be ignored.`);\r\n }\r\n } else {\r\n location = this._webgpuProcessingContext.getVaryingNextLocation(varyingType, this._getArraySize(name, varyingType, preProcessors)[2]);\r\n this._webgpuProcessingContext.availableVaryings[name] = location;\r\n this._varyingsWGSL.push(`@location(${location}) ${name} : ${varyingType},`);\r\n this._varyingsDeclWGSL.push(`var<private> ${name} : ${varyingType};`);\r\n this._varyingNamesWGSL.push(name);\r\n }\r\n\r\n varying = \"\";\r\n }\r\n return varying;\r\n }\r\n\r\n public attributeProcessor(attribute: string, preProcessors: { [key: string]: string }) {\r\n const attribRegex = /\\s*attribute\\s+(\\S+)\\s*:\\s*(.+)\\s*;/gm;\r\n const match = attribRegex.exec(attribute);\r\n if (match !== null) {\r\n const attributeType = match[2];\r\n const name = match[1];\r\n const location = this._webgpuProcessingContext.getAttributeNextLocation(attributeType, this._getArraySize(name, attributeType, preProcessors)[2]);\r\n\r\n this._webgpuProcessingContext.availableAttributes[name] = location;\r\n this._webgpuProcessingContext.orderedAttributes[location] = name;\r\n\r\n this._attributesWGSL.push(`@location(${location}) ${name} : ${attributeType},`);\r\n this._attributesDeclWGSL.push(`var<private> ${name} : ${attributeType};`);\r\n this._attributeNamesWGSL.push(name);\r\n attribute = \"\";\r\n }\r\n return attribute;\r\n }\r\n\r\n public uniformProcessor(uniform: string, isFragment: boolean, preProcessors: { [key: string]: string }): string {\r\n const match = this.uniformRegexp.exec(uniform);\r\n if (match !== null) {\r\n const uniformType = match[2];\r\n const name = match[1];\r\n\r\n this._addUniformToLeftOverUBO(name, uniformType, preProcessors);\r\n\r\n uniform = \"\";\r\n }\r\n return uniform;\r\n }\r\n\r\n public textureProcessor(texture: string, isFragment: boolean, preProcessors: { [key: string]: string }): string {\r\n const match = this.textureRegexp.exec(texture);\r\n if (match !== null) {\r\n const name = match[1]; // name of the variable\r\n const type = match[2]; // texture_2d<f32> or array<texture_2d_array<f32>, 5> for eg\r\n const isArrayOfTexture = !!match[3];\r\n const textureFunc = match[4]; // texture_2d, texture_depth_2d, etc\r\n const isStorageTexture = textureFunc.indexOf(\"storage\") > 0;\r\n const componentType = match[6]; // f32 or i32 or u32 or undefined\r\n const storageTextureFormat = isStorageTexture ? (componentType.substring(0, componentType.indexOf(\",\")).trim() as GPUTextureFormat) : null;\r\n\r\n let arraySize = isArrayOfTexture ? this._getArraySize(name, type, preProcessors)[2] : 0;\r\n let textureInfo = this._webgpuProcessingContext.availableTextures[name];\r\n if (!textureInfo) {\r\n textureInfo = {\r\n isTextureArray: arraySize > 0,\r\n isStorageTexture,\r\n textures: [],\r\n sampleType: WebGPUConstants.TextureSampleType.Float,\r\n };\r\n arraySize = arraySize || 1;\r\n for (let i = 0; i < arraySize; ++i) {\r\n textureInfo.textures.push(this._webgpuProcessingContext.getNextFreeUBOBinding());\r\n }\r\n } else {\r\n arraySize = textureInfo.textures.length;\r\n }\r\n\r\n this._webgpuProcessingContext.availableTextures[name] = textureInfo;\r\n\r\n const isDepthTexture = textureFunc.indexOf(\"depth\") > 0;\r\n const textureDimension = gpuTextureViewDimensionByWebGPUTextureFunction[textureFunc];\r\n const sampleType = isDepthTexture\r\n ? WebGPUConstants.TextureSampleType.Depth\r\n : componentType === \"u32\"\r\n ? WebGPUConstants.TextureSampleType.Uint\r\n : componentType === \"i32\"\r\n ? WebGPUConstants.TextureSampleType.Sint\r\n : WebGPUConstants.TextureSampleType.Float;\r\n\r\n textureInfo.sampleType = sampleType;\r\n\r\n if (textureDimension === undefined) {\r\n throw `Can't get the texture dimension corresponding to the texture function \"${textureFunc}\"!`;\r\n }\r\n\r\n for (let i = 0; i < arraySize; ++i) {\r\n const { groupIndex, bindingIndex } = textureInfo.textures[i];\r\n\r\n if (i === 0) {\r\n texture = `@group(${groupIndex}) @binding(${bindingIndex}) ${texture}`;\r\n }\r\n\r\n this._addTextureBindingDescription(name, textureInfo, i, textureDimension, storageTextureFormat, !isFragment);\r\n }\r\n }\r\n\r\n return texture;\r\n }\r\n\r\n public postProcessor(code: string) {\r\n return code;\r\n }\r\n\r\n public finalizeShaders(vertexCode: string, fragmentCode: string): { vertexCode: string; fragmentCode: string } {\r\n const fragCoordCode =\r\n fragmentCode.indexOf(\"gl_FragCoord\") >= 0\r\n ? `\r\n if (internals.yFactor_ == 1.) {\r\n gl_FragCoord.y = internals.textureOutputHeight_ - gl_FragCoord.y;\r\n }\r\n `\r\n : \"\";\r\n\r\n // Add the group/binding info to the sampler declaration (var xxx: sampler|sampler_comparison)\r\n vertexCode = this._processSamplers(vertexCode, true);\r\n fragmentCode = this._processSamplers(fragmentCode, false);\r\n\r\n // Add the group/binding info to the uniform/storage buffer declarations (var<uniform> XXX:YYY or var<storage(,read_write|read)> XXX:YYY)\r\n vertexCode = this._processCustomBuffers(vertexCode, true);\r\n fragmentCode = this._processCustomBuffers(fragmentCode, false);\r\n\r\n // Builds the leftover UBOs.\r\n const leftOverUBO = this._buildLeftOverUBO();\r\n\r\n vertexCode = leftOverUBO + vertexCode;\r\n fragmentCode = leftOverUBO + fragmentCode;\r\n\r\n // Vertex code\r\n vertexCode = vertexCode.replace(/#define /g, \"//#define \");\r\n vertexCode = this._processStridedUniformArrays(vertexCode);\r\n\r\n const varyingsDecl = this._varyingsDeclWGSL.join(\"\\n\") + \"\\n\";\r\n\r\n const vertexBuiltinDecl = `var<private> ${builtInName_vertex_index} : u32;\\nvar<private> ${builtInName_instance_index} : u32;\\nvar<private> ${builtInName_position} : vec4<f32>;\\n`;\r\n\r\n const vertexAttributesDecl = this._attributesDeclWGSL.join(\"\\n\") + \"\\n\";\r\n\r\n let vertexInputs = \"struct VertexInputs {\\n @builtin(vertex_index) vertexIndex : u32,\\n @builtin(instance_index) instanceIndex : u32,\\n\";\r\n if (this._attributesWGSL.length > 0) {\r\n vertexInputs += this._attributesWGSL.join(\"\\n\");\r\n }\r\n vertexInputs += \"\\n};\\n\";\r\n\r\n let vertexFragmentInputs = \"struct FragmentInputs {\\n @builtin(position) position : vec4<f32>,\\n\";\r\n if (this._varyingsWGSL.length > 0) {\r\n vertexFragmentInputs += this._varyingsWGSL.join(\"\\n\");\r\n }\r\n vertexFragmentInputs += \"\\n};\\n\";\r\n\r\n vertexCode = vertexBuiltinDecl + vertexInputs + vertexAttributesDecl + vertexFragmentInputs + varyingsDecl + vertexCode;\r\n\r\n let vertexStartingCode = ` var output : FragmentInputs;\\n ${builtInName_vertex_index} = input.vertexIndex;\\n ${builtInName_instance_index} = input.instanceIndex;\\n`;\r\n\r\n for (let i = 0; i < this._attributeNamesWGSL.length; ++i) {\r\n const name = this._attributeNamesWGSL[i];\r\n vertexStartingCode += ` ${name} = input.${name};\\n`;\r\n }\r\n\r\n let vertexEndingCode = ` output.position = ${builtInName_position};\\n output.position.y = output.position.y * internals.yFactor_;\\n`;\r\n\r\n for (let i = 0; i < this._varyingNamesWGSL.length; ++i) {\r\n const name = this._varyingNamesWGSL[i];\r\n vertexEndingCode += ` output.${name} = ${name};\\n`;\r\n }\r\n\r\n vertexEndingCode += \" return output;\";\r\n\r\n vertexCode = this._injectStartingAndEndingCode(vertexCode, \"fn main\", vertexStartingCode, vertexEndingCode);\r\n\r\n // fragment code\r\n fragmentCode = fragmentCode.replace(/#define /g, \"//#define \");\r\n fragmentCode = this._processStridedUniformArrays(fragmentCode);\r\n fragmentCode = fragmentCode.replace(/dpdy/g, \"(-internals.yFactor_)*dpdy\"); // will also handle dpdyCoarse and dpdyFine\r\n\r\n const fragmentBuiltinDecl = `var<private> ${builtInName_position_frag} : vec4<f32>;\\nvar<private> ${builtInName_front_facing} : bool;\\nvar<private> ${builtInName_FragColor} : vec4<f32>;\\nvar<private> ${builtInName_frag_depth} : f32;\\n`;\r\n\r\n let fragmentFragmentInputs = \"struct FragmentInputs {\\n @builtin(position) position : vec4<f32>,\\n @builtin(front_facing) frontFacing : bool,\\n\";\r\n if (this._varyingsWGSL.length > 0) {\r\n fragmentFragmentInputs += this._varyingsWGSL.join(\"\\n\");\r\n }\r\n fragmentFragmentInputs += \"\\n};\\n\";\r\n\r\n let fragmentOutputs = \"struct FragmentOutputs {\\n @location(0) color : vec4<f32>,\\n\";\r\n\r\n let hasFragDepth = false;\r\n let idx = 0;\r\n while (!hasFragDepth) {\r\n idx = fragmentCode.indexOf(builtInName_frag_depth, idx);\r\n if (idx < 0) {\r\n break;\r\n }\r\n const saveIndex = idx;\r\n hasFragDepth = true;\r\n while (idx > 1 && fragmentCode.charAt(idx) !== \"\\n\") {\r\n if (fragmentCode.charAt(idx) === \"/\" && fragmentCode.charAt(idx - 1) === \"/\") {\r\n hasFragDepth = false;\r\n break;\r\n }\r\n idx--;\r\n }\r\n idx = saveIndex + builtInName_frag_depth.length;\r\n }\r\n\r\n if (hasFragDepth) {\r\n fragmentOutputs += \" @builtin(frag_depth) fragDepth: f32,\\n\";\r\n }\r\n\r\n fragmentOutputs += \"};\\n\";\r\n\r\n fragmentCode = fragmentBuiltinDecl + fragmentFragmentInputs + varyingsDecl + fragmentOutputs + fragmentCode;\r\n\r\n let fragmentStartingCode =\r\n ` var output : FragmentOutputs;\\n ${builtInName_position_frag} = input.position;\\n ${builtInName_front_facing} = input.frontFacing;\\n` + fragCoordCode;\r\n\r\n for (let i = 0; i < this._varyingNamesWGSL.length; ++i) {\r\n const name = this._varyingNamesWGSL[i];\r\n fragmentStartingCode += ` ${name} = input.${name};\\n`;\r\n }\r\n\r\n let fragmentEndingCode = ` output.color = ${builtInName_FragColor};\\n`;\r\n\r\n if (hasFragDepth) {\r\n fragmentEndingCode += ` output.fragDepth = ${builtInName_frag_depth};\\n`;\r\n }\r\n\r\n fragmentEndingCode += \" return output;\";\r\n\r\n fragmentCode = this._injectStartingAndEndingCode(fragmentCode, \"fn main\", fragmentStartingCode, fragmentEndingCode);\r\n\r\n this._collectBindingNames();\r\n this._preCreateBindGroupEntries();\r\n\r\n return { vertexCode, fragmentCode };\r\n }\r\n\r\n protected _generateLeftOverUBOCode(name: string, uniformBufferDescription: WebGPUBufferDescription): string {\r\n let stridedArrays = \"\";\r\n let ubo = `struct ${name} {\\n`;\r\n for (const leftOverUniform of this._webgpuProcessingContext.leftOverUniforms) {\r\n const type = leftOverUniform.type.replace(/^(.*?)(<.*>)?$/, \"$1\");\r\n const size = WebGPUShaderProcessor.UniformSizes[type];\r\n\r\n if (leftOverUniform.length > 0) {\r\n if (size <= 2) {\r\n const stridedArrayType = `${name}_${this._stridedUniformArrays.length}_strided_arr`;\r\n stridedArrays += `struct ${stridedArrayType} {\r\n @size(16)\r\n el: ${type},\r\n }`;\r\n this._stridedUniformArrays.push(leftOverUniform.name);\r\n\r\n ubo += ` @align(16) ${leftOverUniform.name} : array<${stridedArrayType}, ${leftOverUniform.length}>,\\n`;\r\n } else {\r\n ubo += ` ${leftOverUniform.name} : array<${leftOverUniform.type}, ${leftOverUniform.length}>,\\n`;\r\n }\r\n } else {\r\n ubo += ` ${leftOverUniform.name} : ${leftOverUniform.type},\\n`;\r\n }\r\n }\r\n ubo += \"};\\n\";\r\n ubo = `${stridedArrays}\\n${ubo}`;\r\n ubo += `@group(${uniformBufferDescription.binding.groupIndex}) @binding(${uniformBufferDescription.binding.bindingIndex}) var<uniform> ${leftOverVarName} : ${name};\\n`;\r\n\r\n return ubo;\r\n }\r\n\r\n private _processSamplers(code: string, isVertex: boolean): string {\r\n const samplerRegexp = /var\\s+(\\w+Sampler)\\s*:\\s*(sampler|sampler_comparison)\\s*;/gm;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n const match = samplerRegexp.exec(code);\r\n if (match === null) {\r\n break;\r\n }\r\n\r\n const name = match[1]; // name of the variable\r\n const samplerType = match[2]; // sampler or sampler_comparison\r\n const textureName =\r\n name.indexOf(WebGPUShaderProcessor.AutoSamplerSuffix) === name.length - WebGPUShaderProcessor.AutoSamplerSuffix.length\r\n ? name.substring(0, name.indexOf(WebGPUShaderProcessor.AutoSamplerSuffix))\r\n : null;\r\n const samplerBindingType = samplerType === \"sampler_comparison\" ? WebGPUConstants.SamplerBindingType.Comparison : WebGPUConstants.SamplerBindingType.Filtering;\r\n\r\n if (textureName) {\r\n const textureInfo = this._webgpuProcessingContext.availableTextures[textureName];\r\n if (textureInfo) {\r\n textureInfo.autoBindSampler = true;\r\n }\r\n }\r\n\r\n let samplerInfo = this._webgpuProcessingContext.availableSamplers[name];\r\n if (!samplerInfo) {\r\n samplerInfo = {\r\n binding: this._webgpuProcessingContext.getNextFreeUBOBinding(),\r\n type: samplerBindingType,\r\n };\r\n this._webgpuProcessingContext.availableSamplers[name] = samplerInfo;\r\n }\r\n\r\n this._addSamplerBindingDescription(name, samplerInfo, isVertex);\r\n\r\n const part1 = code.substring(0, match.index);\r\n const insertPart = `@group(${samplerInfo.binding.groupIndex}) @binding(${samplerInfo.binding.bindingIndex}) `;\r\n const part2 = code.substring(match.index);\r\n\r\n code = part1 + insertPart + part2;\r\n\r\n samplerRegexp.lastIndex += insertPart.length;\r\n }\r\n\r\n return code;\r\n }\r\n\r\n private _processCustomBuffers(code: string, isVertex: boolean): string {\r\n const instantiateBufferRegexp = /var<\\s*(uniform|storage)\\s*(,\\s*(read|read_write)\\s*)?>\\s+(\\S+)\\s*:\\s*(\\S+)\\s*;/gm;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n const match = instantiateBufferRegexp.exec(code);\r\n if (match === null) {\r\n break;\r\n }\r\n\r\n const type = match[1];\r\n const decoration = match[3];\r\n let name = match[4];\r\n const structName = match[5];\r\n\r\n let bufferInfo = this._webgpuProcessingContext.availableBuffers[name];\r\n if (!bufferInfo) {\r\n const knownUBO = type === \"uniform\" ? WebGPUShaderProcessingContext.KnownUBOs[structName] : null;\r\n\r\n let binding;\r\n if (knownUBO) {\r\n name = structName;\r\n binding = knownUBO.binding;\r\n if (binding.groupIndex === -1) {\r\n binding = this._webgpuProcessingContext.getNextFreeUBOBinding();\r\n }\r\n } else {\r\n binding = this._webgpuProcessingContext.getNextFreeUBOBinding();\r\n }\r\n\r\n bufferInfo = { binding };\r\n this._webgpuProcessingContext.availableBuffers[name] = bufferInfo;\r\n }\r\n\r\n this._addBufferBindingDescription(\r\n name,\r\n this._webgpuProcessingContext.availableBuffers[name],\r\n decoration === \"read_write\"\r\n ? WebGPUConstants.BufferBindingType.Storage\r\n : type === \"storage\"\r\n ? WebGPUConstants.BufferBindingType.ReadOnlyStorage\r\n : WebGPUConstants.BufferBindingType.Uniform,\r\n isVertex\r\n );\r\n\r\n const groupIndex = bufferInfo.binding.groupIndex;\r\n const bindingIndex = bufferInfo.binding.bindingIndex;\r\n\r\n const part1 = code.substring(0, match.index);\r\n const insertPart = `@group(${groupIndex}) @binding(${bindingIndex}) `;\r\n const part2 = code.substring(match.index);\r\n\r\n code = part1 + insertPart + part2;\r\n\r\n instantiateBufferRegexp.lastIndex += insertPart.length;\r\n }\r\n\r\n return code;\r\n }\r\n\r\n private _processStridedUniformArrays(code: string): string {\r\n for (const uniformArrayName of this._stridedUniformArrays) {\r\n code = code.replace(new RegExp(`${uniformArrayName}\\\\s*\\\\[(.*)\\\\]`, \"g\"), `${uniformArrayName}[$1].el`);\r\n }\r\n return code;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuShaderProcessorsWGSL.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/WebGPU/webgpuShaderProcessorsWGSL.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../../types\";\r\nimport type { ShaderProcessingContext } from \"../Processors/shaderProcessingOptions\";\r\nimport type { WebGPUBufferDescription } from \"./webgpuShaderProcessingContext\";\r\nimport { WebGPUShaderProcessingContext } from \"./webgpuShaderProcessingContext\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { WebGPUShaderProcessor } from \"./webgpuShaderProcessor\";\r\nimport { RemoveComments } from \"../../Misc/codeStringParsingTools\";\r\n\r\nimport \"../../ShadersWGSL/ShadersInclude/bonesDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/bonesVertex\";\r\nimport \"../../ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/bakedVertexAnimation\";\r\nimport \"../../ShadersWGSL/ShadersInclude/clipPlaneFragment\";\r\nimport \"../../ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/clipPlaneVertex\";\r\nimport \"../../ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/instancesDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/instancesVertex\";\r\nimport \"../../ShadersWGSL/ShadersInclude/meshUboDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/morphTargetsVertex\";\r\nimport \"../../ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal\";\r\nimport \"../../ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration\";\r\nimport \"../../ShadersWGSL/ShadersInclude/sceneUboDeclaration\";\r\nimport { ShaderLanguage } from \"../../Materials/shaderLanguage\";\r\n\r\nconst builtInName_frag_depth = \"fragmentOutputs.fragDepth\";\r\n\r\nconst leftOverVarName = \"uniforms\";\r\nconst internalsVarName = \"internals\";\r\n\r\nconst gpuTextureViewDimensionByWebGPUTextureFunction: { [key: string]: Nullable<GPUTextureViewDimension> } = {\r\n texture_1d: WebGPUConstants.TextureViewDimension.E1d,\r\n texture_2d: WebGPUConstants.TextureViewDimension.E2d,\r\n texture_2d_array: WebGPUConstants.TextureViewDimension.E2dArray,\r\n texture_3d: WebGPUConstants.TextureViewDimension.E3d,\r\n texture_cube: WebGPUConstants.TextureViewDimension.Cube,\r\n texture_cube_array: WebGPUConstants.TextureViewDimension.CubeArray,\r\n texture_multisampled_2d: WebGPUConstants.TextureViewDimension.E2d,\r\n texture_depth_2d: WebGPUConstants.TextureViewDimension.E2d,\r\n texture_depth_2d_array: WebGPUConstants.TextureViewDimension.E2dArray,\r\n texture_depth_cube: WebGPUConstants.TextureViewDimension.Cube,\r\n texture_depth_cube_array: WebGPUConstants.TextureViewDimension.CubeArray,\r\n texture_depth_multisampled_2d: WebGPUConstants.TextureViewDimension.E2d,\r\n texture_storage_1d: WebGPUConstants.TextureViewDimension.E1d,\r\n texture_storage_2d: WebGPUConstants.TextureViewDimension.E2d,\r\n texture_storage_2d_array: WebGPUConstants.TextureViewDimension.E2dArray,\r\n texture_storage_3d: WebGPUConstants.TextureViewDimension.E3d,\r\n texture_external: null,\r\n};\r\n\r\n/** @internal */\r\nexport class WebGPUShaderProcessorWGSL extends WebGPUShaderProcessor {\r\n protected _attributesWGSL: string[];\r\n protected _varyingsWGSL: string[];\r\n protected _varyingNamesWGSL: string[];\r\n protected _stridedUniformArrays: string[];\r\n\r\n public shaderLanguage = ShaderLanguage.WGSL;\r\n public uniformRegexp = /uniform\\s+(\\w+)\\s*:\\s*(.+)\\s*;/;\r\n public textureRegexp = /var\\s+(\\w+)\\s*:\\s*((array<\\s*)?(texture_\\w+)\\s*(<\\s*(.+)\\s*>)?\\s*(,\\s*\\w+\\s*>\\s*)?);/;\r\n public noPrecision = true;\r\n\r\n protected _getArraySize(name: string, uniformType: string, preProcessors: { [key: string]: string }): [string, string, number] {\r\n let length = 0;\r\n\r\n const endArray = uniformType.lastIndexOf(\">\");\r\n if (uniformType.indexOf(\"array\") >= 0 && endArray > 0) {\r\n let startArray = endArray;\r\n while (startArray > 0 && uniformType.charAt(startArray) !== \" \" && uniformType.charAt(startArray) !== \",\") {\r\n startArray--;\r\n }\r\n const lengthInString = uniformType.substring(startArray + 1, endArray);\r\n length = +lengthInString;\r\n if (isNaN(length)) {\r\n length = +preProcessors[lengthInString.trim()];\r\n }\r\n while (startArray > 0 && (uniformType.charAt(startArray) === \" \" || uniformType.charAt(startArray) === \",\")) {\r\n startArray--;\r\n }\r\n uniformType = uniformType.substring(uniformType.indexOf(\"<\") + 1, startArray + 1);\r\n }\r\n\r\n return [name, uniformType, length];\r\n }\r\n\r\n public initializeShaders(processingContext: Nullable<ShaderProcessingContext>): void {\r\n this._webgpuProcessingContext = processingContext as WebGPUShaderProcessingContext;\r\n\r\n this._attributesWGSL = [];\r\n this._varyingsWGSL = [];\r\n this._varyingNamesWGSL = [];\r\n this._stridedUniformArrays = [];\r\n }\r\n\r\n public preProcessShaderCode(code: string): string {\r\n return (\r\n `struct ${WebGPUShaderProcessor.InternalsUBOName} {\\n yFactor_: f32,\\n textureOutputHeight_: f32,\\n};\\nvar<uniform> ${internalsVarName} : ${WebGPUShaderProcessor.InternalsUBOName};\\n` +\r\n RemoveComments(code)\r\n );\r\n }\r\n\r\n public varyingProcessor(varying: string, isFragment: boolean, preProcessors: { [key: string]: string }) {\r\n const varyingRegex = /\\s*varying\\s+(?:(?:highp)?|(?:lowp)?)\\s*(\\S+)\\s*:\\s*(.+)\\s*;/gm;\r\n const match = varyingRegex.exec(varying);\r\n if (match !== null) {\r\n const varyingType = match[2];\r\n const name = match[1];\r\n let location: number;\r\n if (isFragment) {\r\n location = this._webgpuProcessingContext.availableVaryings[name];\r\n if (location === undefined) {\r\n Logger.Warn(`Invalid fragment shader: The varying named \"${name}\" is not declared in the vertex shader! This declaration will be ignored.`);\r\n }\r\n } else {\r\n location = this._webgpuProcessingContext.getVaryingNextLocation(varyingType, this._getArraySize(name, varyingType, preProcessors)[2]);\r\n this._webgpuProcessingContext.availableVaryings[name] = location;\r\n this._varyingsWGSL.push(` @location(${location}) ${name} : ${varyingType},`);\r\n this._varyingNamesWGSL.push(name);\r\n }\r\n\r\n varying = \"\";\r\n }\r\n return varying;\r\n }\r\n\r\n public attributeProcessor(attribute: string, preProcessors: { [key: string]: string }) {\r\n const attribRegex = /\\s*attribute\\s+(\\S+)\\s*:\\s*(.+)\\s*;/gm;\r\n const match = attribRegex.exec(attribute);\r\n if (match !== null) {\r\n const attributeType = match[2];\r\n const name = match[1];\r\n const location = this._webgpuProcessingContext.getAttributeNextLocation(attributeType, this._getArraySize(name, attributeType, preProcessors)[2]);\r\n\r\n this._webgpuProcessingContext.availableAttributes[name] = location;\r\n this._webgpuProcessingContext.orderedAttributes[location] = name;\r\n\r\n this._attributesWGSL.push(`@location(${location}) ${name} : ${attributeType},`);\r\n attribute = \"\";\r\n }\r\n return attribute;\r\n }\r\n\r\n public uniformProcessor(uniform: string, isFragment: boolean, preProcessors: { [key: string]: string }): string {\r\n const match = this.uniformRegexp.exec(uniform);\r\n if (match !== null) {\r\n const uniformType = match[2];\r\n const name = match[1];\r\n\r\n this._addUniformToLeftOverUBO(name, uniformType, preProcessors);\r\n\r\n uniform = \"\";\r\n }\r\n return uniform;\r\n }\r\n\r\n public textureProcessor(texture: string, isFragment: boolean, preProcessors: { [key: string]: string }): string {\r\n const match = this.textureRegexp.exec(texture);\r\n if (match !== null) {\r\n const name = match[1]; // name of the variable\r\n const type = match[2]; // texture_2d<f32> or array<texture_2d_array<f32>, 5> for eg\r\n const isArrayOfTexture = !!match[3];\r\n const textureFunc = match[4]; // texture_2d, texture_depth_2d, etc\r\n const isStorageTexture = textureFunc.indexOf(\"storage\") > 0;\r\n const componentType = match[6]; // f32 or i32 or u32 or undefined\r\n const storageTextureFormat = isStorageTexture ? (componentType.substring(0, componentType.indexOf(\",\")).trim() as GPUTextureFormat) : null;\r\n\r\n let arraySize = isArrayOfTexture ? this._getArraySize(name, type, preProcessors)[2] : 0;\r\n let textureInfo = this._webgpuProcessingContext.availableTextures[name];\r\n if (!textureInfo) {\r\n textureInfo = {\r\n isTextureArray: arraySize > 0,\r\n isStorageTexture,\r\n textures: [],\r\n sampleType: WebGPUConstants.TextureSampleType.Float,\r\n };\r\n arraySize = arraySize || 1;\r\n for (let i = 0; i < arraySize; ++i) {\r\n textureInfo.textures.push(this._webgpuProcessingContext.getNextFreeUBOBinding());\r\n }\r\n } else {\r\n arraySize = textureInfo.textures.length;\r\n }\r\n\r\n this._webgpuProcessingContext.availableTextures[name] = textureInfo;\r\n\r\n const isDepthTexture = textureFunc.indexOf(\"depth\") > 0;\r\n const textureDimension = gpuTextureViewDimensionByWebGPUTextureFunction[textureFunc];\r\n const sampleType = isDepthTexture\r\n ? WebGPUConstants.TextureSampleType.Depth\r\n : componentType === \"u32\"\r\n ? WebGPUConstants.TextureSampleType.Uint\r\n : componentType === \"i32\"\r\n ? WebGPUConstants.TextureSampleType.Sint\r\n : WebGPUConstants.TextureSampleType.Float;\r\n\r\n textureInfo.sampleType = sampleType;\r\n\r\n if (textureDimension === undefined) {\r\n throw `Can't get the texture dimension corresponding to the texture function \"${textureFunc}\"!`;\r\n }\r\n\r\n for (let i = 0; i < arraySize; ++i) {\r\n const { groupIndex, bindingIndex } = textureInfo.textures[i];\r\n\r\n if (i === 0) {\r\n texture = `@group(${groupIndex}) @binding(${bindingIndex}) ${texture}`;\r\n }\r\n\r\n this._addTextureBindingDescription(name, textureInfo, i, textureDimension, storageTextureFormat, !isFragment);\r\n }\r\n }\r\n\r\n return texture;\r\n }\r\n\r\n public postProcessor(code: string) {\r\n return code;\r\n }\r\n\r\n public finalizeShaders(vertexCode: string, fragmentCode: string): { vertexCode: string; fragmentCode: string } {\r\n const fragCoordCode =\r\n fragmentCode.indexOf(\"fragmentInputs.position\") >= 0\r\n ? `\r\n if (internals.yFactor_ == 1.) {\r\n fragmentInputs.position.y = internals.textureOutputHeight_ - fragmentInputs.position.y;\r\n }\r\n `\r\n : \"\";\r\n\r\n // Add the group/binding info to the sampler declaration (var xxx: sampler|sampler_comparison)\r\n vertexCode = this._processSamplers(vertexCode, true);\r\n fragmentCode = this._processSamplers(fragmentCode, false);\r\n\r\n // Add the group/binding info to the uniform/storage buffer declarations (var<uniform> XXX:YYY or var<storage(,read_write|read)> XXX:YYY)\r\n vertexCode = this._processCustomBuffers(vertexCode, true);\r\n fragmentCode = this._processCustomBuffers(fragmentCode, false);\r\n\r\n // Builds the leftover UBOs.\r\n const leftOverUBO = this._buildLeftOverUBO();\r\n\r\n vertexCode = leftOverUBO + vertexCode;\r\n fragmentCode = leftOverUBO + fragmentCode;\r\n\r\n // Vertex code\r\n vertexCode = vertexCode.replace(/#define /g, \"//#define \");\r\n vertexCode = this._processStridedUniformArrays(vertexCode);\r\n\r\n let vertexInputs = \"struct VertexInputs {\\n @builtin(vertex_index) vertexIndex : u32,\\n @builtin(instance_index) instanceIndex : u32,\\n\";\r\n if (this._attributesWGSL.length > 0) {\r\n vertexInputs += this._attributesWGSL.join(\"\\n\");\r\n }\r\n vertexInputs += \"\\n};\\nvar<private> vertexInputs : VertexInputs;\\n\";\r\n\r\n let vertexOutputs = \"struct FragmentInputs {\\n @builtin(position) position : vec4<f32>,\\n\";\r\n if (this._varyingsWGSL.length > 0) {\r\n vertexOutputs += this._varyingsWGSL.join(\"\\n\");\r\n }\r\n vertexOutputs += \"\\n};\\nvar<private> vertexOutputs : FragmentInputs;\\n\";\r\n\r\n vertexCode = vertexInputs + vertexOutputs + vertexCode;\r\n\r\n const vertexMainStartingCode = `\\n vertexInputs = input;\\n`;\r\n const vertexMainEndingCode = ` vertexOutputs.position.y = vertexOutputs.position.y * internals.yFactor_;\\n return vertexOutputs;`;\r\n\r\n vertexCode = this._injectStartingAndEndingCode(vertexCode, \"fn main\", vertexMainStartingCode, vertexMainEndingCode);\r\n\r\n // fragment code\r\n fragmentCode = fragmentCode.replace(/#define /g, \"//#define \");\r\n fragmentCode = this._processStridedUniformArrays(fragmentCode);\r\n fragmentCode = fragmentCode.replace(/dpdy/g, \"(-internals.yFactor_)*dpdy\"); // will also handle dpdyCoarse and dpdyFine\r\n\r\n let fragmentInputs = \"struct FragmentInputs {\\n @builtin(position) position : vec4<f32>,\\n @builtin(front_facing) frontFacing : bool,\\n\";\r\n if (this._varyingsWGSL.length > 0) {\r\n fragmentInputs += this._varyingsWGSL.join(\"\\n\");\r\n }\r\n fragmentInputs += \"\\n};\\nvar<private> fragmentInputs : FragmentInputs;\\n\";\r\n\r\n let fragmentOutputs = \"struct FragmentOutputs {\\n @location(0) color : vec4<f32>,\\n\";\r\n\r\n let hasFragDepth = false;\r\n let idx = 0;\r\n while (!hasFragDepth) {\r\n idx = fragmentCode.indexOf(builtInName_frag_depth, idx);\r\n if (idx < 0) {\r\n break;\r\n }\r\n const saveIndex = idx;\r\n hasFragDepth = true;\r\n while (idx > 1 && fragmentCode.charAt(idx) !== \"\\n\") {\r\n if (fragmentCode.charAt(idx) === \"/\" && fragmentCode.charAt(idx - 1) === \"/\") {\r\n hasFragDepth = false;\r\n break;\r\n }\r\n idx--;\r\n }\r\n idx = saveIndex + builtInName_frag_depth.length;\r\n }\r\n\r\n if (hasFragDepth) {\r\n fragmentOutputs += \" @builtin(frag_depth) fragDepth: f32,\\n\";\r\n }\r\n\r\n fragmentOutputs += \"};\\nvar<private> fragmentOutputs : FragmentOutputs;\\n\";\r\n\r\n fragmentCode = fragmentInputs + fragmentOutputs + fragmentCode;\r\n\r\n const fragmentStartingCode = \" fragmentInputs = input;\\n \" + fragCoordCode;\r\n const fragmentEndingCode = \" return fragmentOutputs;\";\r\n\r\n fragmentCode = this._injectStartingAndEndingCode(fragmentCode, \"fn main\", fragmentStartingCode, fragmentEndingCode);\r\n\r\n this._collectBindingNames();\r\n this._preCreateBindGroupEntries();\r\n\r\n return { vertexCode, fragmentCode };\r\n }\r\n\r\n protected _generateLeftOverUBOCode(name: string, uniformBufferDescription: WebGPUBufferDescription): string {\r\n let stridedArrays = \"\";\r\n let ubo = `struct ${name} {\\n`;\r\n for (const leftOverUniform of this._webgpuProcessingContext.leftOverUniforms) {\r\n const type = leftOverUniform.type.replace(/^(.*?)(<.*>)?$/, \"$1\");\r\n const size = WebGPUShaderProcessor.UniformSizes[type];\r\n\r\n if (leftOverUniform.length > 0) {\r\n if (size <= 2) {\r\n const stridedArrayType = `${name}_${this._stridedUniformArrays.length}_strided_arr`;\r\n stridedArrays += `struct ${stridedArrayType} {\r\n @size(16)\r\n el: ${type},\r\n }`;\r\n this._stridedUniformArrays.push(leftOverUniform.name);\r\n\r\n ubo += ` @align(16) ${leftOverUniform.name} : array<${stridedArrayType}, ${leftOverUniform.length}>,\\n`;\r\n } else {\r\n ubo += ` ${leftOverUniform.name} : array<${leftOverUniform.type}, ${leftOverUniform.length}>,\\n`;\r\n }\r\n } else {\r\n ubo += ` ${leftOverUniform.name} : ${leftOverUniform.type},\\n`;\r\n }\r\n }\r\n ubo += \"};\\n\";\r\n ubo = `${stridedArrays}\\n${ubo}`;\r\n ubo += `@group(${uniformBufferDescription.binding.groupIndex}) @binding(${uniformBufferDescription.binding.bindingIndex}) var<uniform> ${leftOverVarName} : ${name};\\n`;\r\n\r\n return ubo;\r\n }\r\n\r\n private _processSamplers(code: string, isVertex: boolean): string {\r\n const samplerRegexp = /var\\s+(\\w+Sampler)\\s*:\\s*(sampler|sampler_comparison)\\s*;/gm;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n const match = samplerRegexp.exec(code);\r\n if (match === null) {\r\n break;\r\n }\r\n\r\n const name = match[1]; // name of the variable\r\n const samplerType = match[2]; // sampler or sampler_comparison\r\n const textureName =\r\n name.indexOf(WebGPUShaderProcessor.AutoSamplerSuffix) === name.length - WebGPUShaderProcessor.AutoSamplerSuffix.length\r\n ? name.substring(0, name.indexOf(WebGPUShaderProcessor.AutoSamplerSuffix))\r\n : null;\r\n const samplerBindingType = samplerType === \"sampler_comparison\" ? WebGPUConstants.SamplerBindingType.Comparison : WebGPUConstants.SamplerBindingType.Filtering;\r\n\r\n if (textureName) {\r\n const textureInfo = this._webgpuProcessingContext.availableTextures[textureName];\r\n if (textureInfo) {\r\n textureInfo.autoBindSampler = true;\r\n }\r\n }\r\n\r\n let samplerInfo = this._webgpuProcessingContext.availableSamplers[name];\r\n if (!samplerInfo) {\r\n samplerInfo = {\r\n binding: this._webgpuProcessingContext.getNextFreeUBOBinding(),\r\n type: samplerBindingType,\r\n };\r\n this._webgpuProcessingContext.availableSamplers[name] = samplerInfo;\r\n }\r\n\r\n this._addSamplerBindingDescription(name, samplerInfo, isVertex);\r\n\r\n const part1 = code.substring(0, match.index);\r\n const insertPart = `@group(${samplerInfo.binding.groupIndex}) @binding(${samplerInfo.binding.bindingIndex}) `;\r\n const part2 = code.substring(match.index);\r\n\r\n code = part1 + insertPart + part2;\r\n\r\n samplerRegexp.lastIndex += insertPart.length;\r\n }\r\n\r\n return code;\r\n }\r\n\r\n private _processCustomBuffers(code: string, isVertex: boolean): string {\r\n const instantiateBufferRegexp = /var<\\s*(uniform|storage)\\s*(,\\s*(read|read_write)\\s*)?>\\s+(\\S+)\\s*:\\s*(\\S+)\\s*;/gm;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n const match = instantiateBufferRegexp.exec(code);\r\n if (match === null) {\r\n break;\r\n }\r\n\r\n const type = match[1];\r\n const decoration = match[3];\r\n let name = match[4];\r\n const structName = match[5];\r\n\r\n let bufferInfo = this._webgpuProcessingContext.availableBuffers[name];\r\n if (!bufferInfo) {\r\n const knownUBO = type === \"uniform\" ? WebGPUShaderProcessingContext.KnownUBOs[structName] : null;\r\n\r\n let binding;\r\n if (knownUBO) {\r\n name = structName;\r\n binding = knownUBO.binding;\r\n if (binding.groupIndex === -1) {\r\n binding = this._webgpuProcessingContext.getNextFreeUBOBinding();\r\n }\r\n } else {\r\n binding = this._webgpuProcessingContext.getNextFreeUBOBinding();\r\n }\r\n\r\n bufferInfo = { binding };\r\n this._webgpuProcessingContext.availableBuffers[name] = bufferInfo;\r\n }\r\n\r\n this._addBufferBindingDescription(\r\n name,\r\n this._webgpuProcessingContext.availableBuffers[name],\r\n decoration === \"read_write\"\r\n ? WebGPUConstants.BufferBindingType.Storage\r\n : type === \"storage\"\r\n ? WebGPUConstants.BufferBindingType.ReadOnlyStorage\r\n : WebGPUConstants.BufferBindingType.Uniform,\r\n isVertex\r\n );\r\n\r\n const groupIndex = bufferInfo.binding.groupIndex;\r\n const bindingIndex = bufferInfo.binding.bindingIndex;\r\n\r\n const part1 = code.substring(0, match.index);\r\n const insertPart = `@group(${groupIndex}) @binding(${bindingIndex}) `;\r\n const part2 = code.substring(match.index);\r\n\r\n code = part1 + insertPart + part2;\r\n\r\n instantiateBufferRegexp.lastIndex += insertPart.length;\r\n }\r\n\r\n return code;\r\n }\r\n\r\n private _processStridedUniformArrays(code: string): string {\r\n for (const uniformArrayName of this._stridedUniformArrays) {\r\n code = code.replace(new RegExp(`${uniformArrayName}\\\\s*\\\\[(.*)\\\\]`, \"g\"), `${uniformArrayName}[$1].el`);\r\n }\r\n return code;\r\n }\r\n}\r\n"]}
@@ -47,6 +47,7 @@ export declare class WebGPUTextureHelper {
47
47
  static GetNumChannelsFromWebGPUTextureFormat(format: GPUTextureFormat): number;
48
48
  static HasStencilAspect(format: GPUTextureFormat): boolean;
49
49
  static HasDepthAndStencilAspects(format: GPUTextureFormat): boolean;
50
+ static GetDepthFormatOnly(format: GPUTextureFormat): GPUTextureFormat;
50
51
  copyVideoToTexture(video: ExternalTexture, texture: InternalTexture, format: GPUTextureFormat, invertY?: boolean, commandEncoder?: GPUCommandEncoder): void;
51
52
  invertYPreMultiplyAlpha(gpuOrHdwTexture: GPUTexture | WebGPUHardwareTexture, width: number, height: number, format: GPUTextureFormat, invertY?: boolean, premultiplyAlpha?: boolean, faceIndex?: number, mipLevel?: number, layers?: number, ofstX?: number, ofstY?: number, rectWidth?: number, rectHeight?: number, commandEncoder?: GPUCommandEncoder, allowGPUOptimization?: boolean): void;
52
53
  copyWithInvertY(srcTextureView: GPUTextureView, format: GPUTextureFormat, renderPassDescriptor: GPURenderPassDescriptor, commandEncoder?: GPUCommandEncoder): void;
@@ -54,11 +55,11 @@ export declare class WebGPUTextureHelper {
54
55
  width: number;
55
56
  height: number;
56
57
  layers: number;
57
- }, hasMipmaps?: boolean, generateMipmaps?: boolean, invertY?: boolean, premultiplyAlpha?: boolean, is3D?: boolean, format?: GPUTextureFormat, sampleCount?: number, commandEncoder?: GPUCommandEncoder, usage?: number, additionalUsages?: number): GPUTexture;
58
+ }, hasMipmaps?: boolean, generateMipmaps?: boolean, invertY?: boolean, premultiplyAlpha?: boolean, is3D?: boolean, format?: GPUTextureFormat, sampleCount?: number, commandEncoder?: GPUCommandEncoder, usage?: number, additionalUsages?: number, label?: string): GPUTexture;
58
59
  createCubeTexture(imageBitmaps: ImageBitmap[] | {
59
60
  width: number;
60
61
  height: number;
61
- }, hasMipmaps?: boolean, generateMipmaps?: boolean, invertY?: boolean, premultiplyAlpha?: boolean, format?: GPUTextureFormat, sampleCount?: number, commandEncoder?: GPUCommandEncoder, usage?: number, additionalUsages?: number): GPUTexture;
62
+ }, hasMipmaps?: boolean, generateMipmaps?: boolean, invertY?: boolean, premultiplyAlpha?: boolean, format?: GPUTextureFormat, sampleCount?: number, commandEncoder?: GPUCommandEncoder, usage?: number, additionalUsages?: number, label?: string): GPUTexture;
62
63
  generateCubeMipmaps(gpuTexture: GPUTexture | WebGPUHardwareTexture, format: GPUTextureFormat, mipLevelCount: number, commandEncoder?: GPUCommandEncoder): void;
63
64
  generateMipmaps(gpuOrHdwTexture: GPUTexture | WebGPUHardwareTexture, format: GPUTextureFormat, mipLevelCount: number, faceIndex?: number, commandEncoder?: GPUCommandEncoder): void;
64
65
  createGPUTextureForInternalTexture(texture: InternalTexture, width?: number, height?: number, depth?: number, creationFlags?: number): WebGPUHardwareTexture;
@@ -726,6 +726,8 @@ export class WebGPUTextureHelper {
726
726
  return WebGPUConstants.TextureFormat.Depth24UnormStencil8;
727
727
  case 18:
728
728
  return WebGPUConstants.TextureFormat.Depth32FloatStencil8;
729
+ case 19:
730
+ return WebGPUConstants.TextureFormat.Stencil8;
729
731
  case 36492:
730
732
  return useSRGBBuffer ? WebGPUConstants.TextureFormat.BC7RGBAUnormSRGB : WebGPUConstants.TextureFormat.BC7RGBAUnorm;
731
733
  case 36495:
@@ -1019,6 +1021,23 @@ export class WebGPUTextureHelper {
1019
1021
  }
1020
1022
  return false;
1021
1023
  }
1024
+ static GetDepthFormatOnly(format) {
1025
+ switch (format) {
1026
+ case WebGPUConstants.TextureFormat.Depth16Unorm:
1027
+ return WebGPUConstants.TextureFormat.Depth16Unorm;
1028
+ case WebGPUConstants.TextureFormat.Depth24Plus:
1029
+ return WebGPUConstants.TextureFormat.Depth24Plus;
1030
+ case WebGPUConstants.TextureFormat.Depth24PlusStencil8:
1031
+ return WebGPUConstants.TextureFormat.Depth24Plus;
1032
+ case WebGPUConstants.TextureFormat.Depth24UnormStencil8:
1033
+ return WebGPUConstants.TextureFormat.Depth24Plus;
1034
+ case WebGPUConstants.TextureFormat.Depth32Float:
1035
+ return WebGPUConstants.TextureFormat.Depth32Float;
1036
+ case WebGPUConstants.TextureFormat.Depth32FloatStencil8:
1037
+ return WebGPUConstants.TextureFormat.Depth32Float;
1038
+ }
1039
+ return format;
1040
+ }
1022
1041
  copyVideoToTexture(video, texture, format, invertY = false, commandEncoder) {
1023
1042
  var _a, _b, _c, _d;
1024
1043
  const useOwnCommandEncoder = commandEncoder === undefined;
@@ -1106,7 +1125,7 @@ export class WebGPUTextureHelper {
1106
1125
  this._bufferManager.setRawData(this._ubCopyWithOfst, 0, new Float32Array([ofstX, ofstY, rectWidth, rectHeight]), 0, 4 * 4);
1107
1126
  }
1108
1127
  const webgpuHardwareTexture = gpuOrHdwTexture;
1109
- const outputTexture = (_c = webgpuHardwareTexture === null || webgpuHardwareTexture === void 0 ? void 0 : webgpuHardwareTexture._copyInvertYTempTexture) !== null && _c !== void 0 ? _c : this.createTexture({ width, height, layers: 1 }, false, false, false, false, false, format, 1, commandEncoder, WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.RenderAttachment | WebGPUConstants.TextureUsage.TextureBinding);
1128
+ const outputTexture = (_c = webgpuHardwareTexture === null || webgpuHardwareTexture === void 0 ? void 0 : webgpuHardwareTexture._copyInvertYTempTexture) !== null && _c !== void 0 ? _c : this.createTexture({ width, height, layers: 1 }, false, false, false, false, false, format, 1, commandEncoder, WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.RenderAttachment | WebGPUConstants.TextureUsage.TextureBinding, undefined, "TempTextureForCopyWithInvertY");
1110
1129
  const renderPassDescriptor = (_d = webgpuHardwareTexture === null || webgpuHardwareTexture === void 0 ? void 0 : webgpuHardwareTexture._copyInvertYRenderPassDescr) !== null && _d !== void 0 ? _d : {
1111
1130
  colorAttachments: [
1112
1131
  {
@@ -1221,7 +1240,7 @@ export class WebGPUTextureHelper {
1221
1240
  //------------------------------------------------------------------------------
1222
1241
  // Creation
1223
1242
  //------------------------------------------------------------------------------
1224
- createTexture(imageBitmap, hasMipmaps = false, generateMipmaps = false, invertY = false, premultiplyAlpha = false, is3D = false, format = WebGPUConstants.TextureFormat.RGBA8Unorm, sampleCount = 1, commandEncoder, usage = -1, additionalUsages = 0) {
1243
+ createTexture(imageBitmap, hasMipmaps = false, generateMipmaps = false, invertY = false, premultiplyAlpha = false, is3D = false, format = WebGPUConstants.TextureFormat.RGBA8Unorm, sampleCount = 1, commandEncoder, usage = -1, additionalUsages = 0, label) {
1225
1244
  if (sampleCount > 1) {
1226
1245
  // WebGPU only supports 1 or 4
1227
1246
  sampleCount = 4;
@@ -1241,7 +1260,7 @@ export class WebGPUTextureHelper {
1241
1260
  additionalUsages |= WebGPUConstants.TextureUsage.RenderAttachment | WebGPUConstants.TextureUsage.CopyDst;
1242
1261
  }
1243
1262
  const gpuTexture = this._device.createTexture({
1244
- label: `Texture_${textureSize.width}x${textureSize.height}x${textureSize.depthOrArrayLayers}_${hasMipmaps ? "wmips" : "womips"}_${format}_samples${sampleCount}`,
1263
+ label: `Texture_${label ? label + "_" : ""}${textureSize.width}x${textureSize.height}x${textureSize.depthOrArrayLayers}_${hasMipmaps ? "wmips" : "womips"}_${format}_samples${sampleCount}`,
1245
1264
  size: textureSize,
1246
1265
  dimension: is3D ? WebGPUConstants.TextureDimension.E3d : WebGPUConstants.TextureDimension.E2d,
1247
1266
  format,
@@ -1257,7 +1276,7 @@ export class WebGPUTextureHelper {
1257
1276
  }
1258
1277
  return gpuTexture;
1259
1278
  }
1260
- createCubeTexture(imageBitmaps, hasMipmaps = false, generateMipmaps = false, invertY = false, premultiplyAlpha = false, format = WebGPUConstants.TextureFormat.RGBA8Unorm, sampleCount = 1, commandEncoder, usage = -1, additionalUsages = 0) {
1279
+ createCubeTexture(imageBitmaps, hasMipmaps = false, generateMipmaps = false, invertY = false, premultiplyAlpha = false, format = WebGPUConstants.TextureFormat.RGBA8Unorm, sampleCount = 1, commandEncoder, usage = -1, additionalUsages = 0, label) {
1261
1280
  if (sampleCount > 1) {
1262
1281
  // WebGPU only supports 1 or 4
1263
1282
  sampleCount = 4;
@@ -1273,7 +1292,7 @@ export class WebGPUTextureHelper {
1273
1292
  additionalUsages |= WebGPUConstants.TextureUsage.RenderAttachment | WebGPUConstants.TextureUsage.CopyDst;
1274
1293
  }
1275
1294
  const gpuTexture = this._device.createTexture({
1276
- label: `TextureCube_${width}x${height}x6_${hasMipmaps ? "wmips" : "womips"}_${format}_samples${sampleCount}`,
1295
+ label: `TextureCube_${label ? label + "_" : ""}${width}x${height}x6_${hasMipmaps ? "wmips" : "womips"}_${format}_samples${sampleCount}`,
1277
1296
  size: {
1278
1297
  width,
1279
1298
  height,
@@ -1422,23 +1441,23 @@ export class WebGPUTextureHelper {
1422
1441
  mipmapCount = hasMipMaps ? WebGPUTextureHelper.ComputeNumMipmapLevels(width, height) : 1;
1423
1442
  }
1424
1443
  if (texture.isCube) {
1425
- const gpuTexture = this.createCubeTexture({ width, height }, texture.generateMipMaps, texture.generateMipMaps, texture.invertY, false, gpuTextureWrapper.format, 1, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages);
1444
+ const gpuTexture = this.createCubeTexture({ width, height }, texture.generateMipMaps, texture.generateMipMaps, texture.invertY, false, gpuTextureWrapper.format, 1, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages, texture.label);
1426
1445
  gpuTextureWrapper.set(gpuTexture);
1427
1446
  gpuTextureWrapper.createView({
1428
- format: gpuTextureWrapper.format,
1447
+ format: WebGPUTextureHelper.GetDepthFormatOnly(gpuTextureWrapper.format),
1429
1448
  dimension: WebGPUConstants.TextureViewDimension.Cube,
1430
1449
  mipLevelCount: mipmapCount,
1431
1450
  baseArrayLayer: 0,
1432
1451
  baseMipLevel: 0,
1433
1452
  arrayLayerCount: 6,
1434
- aspect: WebGPUConstants.TextureAspect.All,
1453
+ aspect: WebGPUTextureHelper.HasDepthAndStencilAspects(gpuTextureWrapper.format) ? WebGPUConstants.TextureAspect.DepthOnly : WebGPUConstants.TextureAspect.All,
1435
1454
  }, isStorageTexture);
1436
1455
  }
1437
1456
  else {
1438
- 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);
1457
+ 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, texture.label);
1439
1458
  gpuTextureWrapper.set(gpuTexture);
1440
1459
  gpuTextureWrapper.createView({
1441
- format: gpuTextureWrapper.format,
1460
+ format: WebGPUTextureHelper.GetDepthFormatOnly(gpuTextureWrapper.format),
1442
1461
  dimension: texture.is2DArray
1443
1462
  ? WebGPUConstants.TextureViewDimension.E2dArray
1444
1463
  : texture.is3D
@@ -1448,7 +1467,7 @@ export class WebGPUTextureHelper {
1448
1467
  baseArrayLayer: 0,
1449
1468
  baseMipLevel: 0,
1450
1469
  arrayLayerCount: texture.is3D ? 1 : layerCount,
1451
- aspect: WebGPUConstants.TextureAspect.All,
1470
+ aspect: WebGPUTextureHelper.HasDepthAndStencilAspects(gpuTextureWrapper.format) ? WebGPUConstants.TextureAspect.DepthOnly : WebGPUConstants.TextureAspect.All,
1452
1471
  }, isStorageTexture);
1453
1472
  }
1454
1473
  texture.width = texture.baseWidth = width;
@@ -1470,11 +1489,11 @@ export class WebGPUTextureHelper {
1470
1489
  const height = texture.height;
1471
1490
  const layerCount = texture.depth || 1;
1472
1491
  if (texture.isCube) {
1473
- const gpuMSAATexture = this.createCubeTexture({ width, height }, false, false, texture.invertY, false, gpuTextureWrapper.format, samples, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages);
1492
+ const gpuMSAATexture = this.createCubeTexture({ width, height }, false, false, texture.invertY, false, gpuTextureWrapper.format, samples, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages, texture.label ? "MSAA" + texture.label : undefined);
1474
1493
  gpuTextureWrapper.msaaTexture = gpuMSAATexture;
1475
1494
  }
1476
1495
  else {
1477
- const gpuMSAATexture = this.createTexture({ width, height, layers: layerCount }, false, false, texture.invertY, false, texture.is3D, gpuTextureWrapper.format, samples, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages);
1496
+ const gpuMSAATexture = this.createTexture({ width, height, layers: layerCount }, false, false, texture.invertY, false, texture.is3D, gpuTextureWrapper.format, samples, this._commandEncoderForCreation, gpuTextureWrapper.textureUsages, gpuTextureWrapper.textureAdditionalUsages, texture.label ? "MSAA" + texture.label : undefined);
1478
1497
  gpuTextureWrapper.msaaTexture = gpuMSAATexture;
1479
1498
  }
1480
1499
  }
@@ -1560,7 +1579,7 @@ export class WebGPUTextureHelper {
1560
1579
  // we must apply the preprocessing on the source image before copying it into the destination texture
1561
1580
  const commandEncoder = this._device.createCommandEncoder({});
1562
1581
  // create a temp texture and copy the image to it
1563
- const srcTexture = this.createTexture({ width, height, layers: 1 }, false, false, false, false, false, format, 1, commandEncoder, WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.TextureBinding);
1582
+ const srcTexture = this.createTexture({ width, height, layers: 1 }, false, false, false, false, false, format, 1, commandEncoder, WebGPUConstants.TextureUsage.CopySrc | WebGPUConstants.TextureUsage.TextureBinding, undefined, "TempTextureForUpdateTexture");
1564
1583
  this._deferredReleaseTextures.push([srcTexture, null]);
1565
1584
  textureExtent.depthOrArrayLayers = 1;
1566
1585
  this._device.queue.copyExternalImageToTexture({ source: imageBitmap }, { texture: srcTexture }, textureExtent);