@luma.gl/webgpu 9.0.0-alpha.15 → 9.0.0-alpha.17

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 (105) hide show
  1. package/dist/.DS_Store +0 -0
  2. package/dist/adapter/.DS_Store +0 -0
  3. package/dist/adapter/helpers/accessor-to-format.js.map +1 -1
  4. package/dist/adapter/helpers/convert-texture-format.d.ts +1 -1
  5. package/dist/adapter/helpers/convert-texture-format.js +0 -1
  6. package/dist/adapter/helpers/convert-texture-format.js.map +1 -1
  7. package/dist/adapter/helpers/generate-mipmaps.d.ts +1 -1
  8. package/dist/adapter/helpers/generate-mipmaps.js +1 -8
  9. package/dist/adapter/helpers/generate-mipmaps.js.map +1 -1
  10. package/dist/adapter/helpers/get-bind-group.d.ts +1 -1
  11. package/dist/adapter/helpers/get-bind-group.d.ts.map +1 -1
  12. package/dist/adapter/helpers/get-bind-group.js +0 -9
  13. package/dist/adapter/helpers/get-bind-group.js.map +1 -1
  14. package/dist/adapter/helpers/get-vertex-buffer-layout.d.ts +1 -1
  15. package/dist/adapter/helpers/get-vertex-buffer-layout.js +3 -15
  16. package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +1 -1
  17. package/dist/adapter/helpers/webgpu-parameters.d.ts +1 -1
  18. package/dist/adapter/helpers/webgpu-parameters.d.ts.map +1 -1
  19. package/dist/adapter/helpers/webgpu-parameters.js +9 -14
  20. package/dist/adapter/helpers/webgpu-parameters.js.map +1 -1
  21. package/dist/adapter/resources/webgpu-buffer.d.ts +1 -1
  22. package/dist/adapter/resources/webgpu-buffer.js +11 -21
  23. package/dist/adapter/resources/webgpu-buffer.js.map +1 -1
  24. package/dist/adapter/resources/webgpu-command-encoder.d.ts +1 -1
  25. package/dist/adapter/resources/webgpu-command-encoder.d.ts.map +1 -1
  26. package/dist/adapter/resources/webgpu-command-encoder.js +1 -18
  27. package/dist/adapter/resources/webgpu-command-encoder.js.map +1 -1
  28. package/dist/adapter/resources/webgpu-compute-pass.d.ts +2 -2
  29. package/dist/adapter/resources/webgpu-compute-pass.d.ts.map +1 -1
  30. package/dist/adapter/resources/webgpu-compute-pass.js +6 -20
  31. package/dist/adapter/resources/webgpu-compute-pass.js.map +1 -1
  32. package/dist/adapter/resources/webgpu-compute-pipeline.d.ts +1 -1
  33. package/dist/adapter/resources/webgpu-compute-pipeline.d.ts.map +1 -1
  34. package/dist/adapter/resources/webgpu-compute-pipeline.js +2 -6
  35. package/dist/adapter/resources/webgpu-compute-pipeline.js.map +1 -1
  36. package/dist/adapter/resources/webgpu-external-texture.d.ts +1 -1
  37. package/dist/adapter/resources/webgpu-external-texture.js +1 -8
  38. package/dist/adapter/resources/webgpu-external-texture.js.map +1 -1
  39. package/dist/adapter/resources/webgpu-framebuffer.d.ts +1 -1
  40. package/dist/adapter/resources/webgpu-framebuffer.d.ts.map +1 -1
  41. package/dist/adapter/resources/webgpu-framebuffer.js +8 -25
  42. package/dist/adapter/resources/webgpu-framebuffer.js.map +1 -1
  43. package/dist/adapter/resources/webgpu-query.js.map +1 -1
  44. package/dist/adapter/resources/webgpu-render-pass.d.ts +2 -2
  45. package/dist/adapter/resources/webgpu-render-pass.d.ts.map +1 -1
  46. package/dist/adapter/resources/webgpu-render-pass.js +9 -28
  47. package/dist/adapter/resources/webgpu-render-pass.js.map +1 -1
  48. package/dist/adapter/resources/webgpu-render-pipeline.d.ts +1 -1
  49. package/dist/adapter/resources/webgpu-render-pipeline.d.ts.map +1 -1
  50. package/dist/adapter/resources/webgpu-render-pipeline.js +7 -43
  51. package/dist/adapter/resources/webgpu-render-pipeline.js.map +1 -1
  52. package/dist/adapter/resources/webgpu-sampler.d.ts +1 -1
  53. package/dist/adapter/resources/webgpu-sampler.js +2 -8
  54. package/dist/adapter/resources/webgpu-sampler.js.map +1 -1
  55. package/dist/adapter/resources/webgpu-shader.d.ts +1 -1
  56. package/dist/adapter/resources/webgpu-shader.js +1 -15
  57. package/dist/adapter/resources/webgpu-shader.js.map +1 -1
  58. package/dist/adapter/resources/webgpu-texture.d.ts +1 -1
  59. package/dist/adapter/resources/webgpu-texture.js +2 -18
  60. package/dist/adapter/resources/webgpu-texture.js.map +1 -1
  61. package/dist/adapter/webgpu-canvas-context.d.ts +1 -1
  62. package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
  63. package/dist/adapter/webgpu-canvas-context.js +3 -25
  64. package/dist/adapter/webgpu-canvas-context.js.map +1 -1
  65. package/dist/adapter/webgpu-device.d.ts +1 -1
  66. package/dist/adapter/webgpu-device.d.ts.map +1 -1
  67. package/dist/adapter/webgpu-device.js +14 -62
  68. package/dist/adapter/webgpu-device.js.map +1 -1
  69. package/dist/adapter/webgpu-types.js.map +1 -1
  70. package/dist/dist.dev.js +3061 -0
  71. package/dist/glsl/glsllang.js +0 -1
  72. package/dist/glsl/glsllang.js.map +1 -1
  73. package/dist/index.cjs +1442 -0
  74. package/dist/index.d.ts +0 -2
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +5 -7
  77. package/dist/index.js.map +1 -1
  78. package/dist.min.js +17 -0
  79. package/package.json +18 -9
  80. package/src/.DS_Store +0 -0
  81. package/src/adapter/.DS_Store +0 -0
  82. package/src/adapter/helpers/generate-mipmaps.ts +1 -1
  83. package/src/adapter/helpers/get-bind-group.ts +1 -1
  84. package/src/adapter/helpers/get-vertex-buffer-layout.ts +2 -2
  85. package/src/adapter/helpers/webgpu-parameters.ts +16 -11
  86. package/src/adapter/resources/webgpu-command-encoder.ts +5 -4
  87. package/src/adapter/resources/webgpu-compute-pass.ts +4 -4
  88. package/src/adapter/resources/webgpu-compute-pipeline.ts +2 -1
  89. package/src/adapter/resources/webgpu-framebuffer.ts +8 -7
  90. package/src/adapter/resources/webgpu-render-pass.ts +2 -2
  91. package/src/adapter/resources/webgpu-render-pipeline.ts +4 -3
  92. package/src/adapter/resources/webgpu-shader.ts +1 -1
  93. package/src/adapter/webgpu-canvas-context.ts +3 -2
  94. package/src/adapter/webgpu-device.ts +4 -3
  95. package/src/index.ts +1 -4
  96. package/dist/bundle.d.ts +0 -2
  97. package/dist/bundle.d.ts.map +0 -1
  98. package/dist/bundle.js +0 -5
  99. package/dist/bundle.js.map +0 -1
  100. package/dist/init.d.ts +0 -2
  101. package/dist/init.d.ts.map +0 -1
  102. package/dist/init.js +0 -4
  103. package/dist/init.js.map +0 -1
  104. package/src/bundle.ts +0 -4
  105. package/src/init.ts +0 -4
package/dist/.DS_Store ADDED
Binary file
Binary file
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"accessor-to-format.js"}
1
+ {"version":3,"file":"accessor-to-format.js","names":[],"sources":["../../../src/adapter/helpers/accessor-to-format.ts"],"sourcesContent":["/*\nimport {assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\n\ntype Accessor = Record<string, any>;\n\nconst FORMAT_TO_ACCESSOR: Record<GPUVertexFormat, Accessor> = {\n uchar2: {type: 'uchar', size: 2},\n uchar4: {type: 'uchar', size: 4},\n char2: {type: 'char', size: 2},\n char4: {type: 'char', size: 4},\n uchar2norm: {type: 'uchar', size: 2, normalized: true},\n uchar4norm: {type: 'uchar', size: 4, normalized: true},\n char2norm: {type: 'char', size: 2, normalized: true},\n char4norm: {type: 'char', size: 4, normalized: true},\n ushort2: {type: 'ushort', size: 2},\n ushort4: {type: 'ushort', size: 4},\n short2: {type: 'short', size: 2},\n short4: {type: 'short', size: 4},\n ushort2norm: {type: 'ushort', size: 2, normalized: true},\n ushort4norm: {type: 'ushort', size: 4, normalized: true},\n short2norm: {type: 'short', size: 1, normalized: true},\n short4norm: {type: 'short', size: 1, normalized: true},\n half2: {type: 'half', size: 2},\n half4: {type: 'half', size: 4},\n float: {type: 'float', size: 1},\n float2: {type: 'float', size: 2},\n float3: {type: 'float', size: 3},\n float4: {type: 'float', size: 4},\n uint: {type: 'uint', size: 1, integer: true},\n uint2: {type: 'uint', size: 2, integer: true},\n uint3: {type: 'uint', size: 3, integer: true},\n uint4: {type: 'uint', size: 4, integer: true},\n int: {type: 'int', size: 1, integer: true},\n int2: {type: 'int', size: 2, integer: true},\n int3: {type: 'int', size: 3, integer: true},\n int4: {type: 'int', size: 4, integer: true}\n};\n\n/**\n * Convert from WebGPU attribute format strings to accessor {type, size, normalized, integer}\n * @param {*} format\n *\nexport function mapWebGPUFormatToAccessor(format) {\n const accessorDefinition = FORMAT_TO_ACCESSOR[format];\n assert(accessorDefinition, 'invalid attribute format');\n return Object.freeze(accessorDefinition);\n}\n\n/**\n * Convert from accessor {type, size, normalized, integer} to WebGPU attribute format strings\n * @param {*} format\n *\nexport function mapAccessorToWebGPUFormat(accessor) {\n const {type = GL.FLOAT, size = 1, normalized = false, integer = false} = accessor;\n assert(size >=1 && size <=4);\n // `norm` suffix (uchar4norm)\n const norm = normalized ? 'norm' : '';\n // size 1 is ommitted in format names (float vs float2)\n const count = size === 1 ? '' : size;\n switch (type) {\n case GL.UNSIGNED_BYTE:\n switch (size) {\n case 2:\n case 4:\n return `uchar${count}${norm}`;\n }\n case GL.BYTE:\n switch (size) {\n case 2:\n case 4:\n return `char${count}${norm}`;\n }\n case GL.UNSIGNED_SHORT:\n switch (size) {\n case 2:\n case 4:\n return `ushort${count}${norm}`;\n }\n case GL.SHORT:\n switch (size) {\n case 2:\n case 4:\n return `short${count}${norm}`;\n }\n case GL.HALF_FLOAT:\n switch (size) {\n case 2:\n case 4:\n return `half${count}`;\n }\n case GL.FLOAT:\n return `float${count}`;\n case GL.UNSIGNED_INT:\n return `uint${count}`;\n case GL.INT:\n return `int${count}`;\n }\n throw new Error('illegal accessor');\n}\n*/"],"mappings":""}
@@ -1,4 +1,4 @@
1
- /// <reference types="@webgpu/types" />
1
+ /// <reference types="dist" />
2
2
  import { TextureFormat } from '@luma.gl/api';
3
3
  /** Ensure a texture format is WebGPU compatible */
4
4
  export declare function getWebGPUTextureFormat(format: TextureFormat): GPUTextureFormat;
@@ -2,7 +2,6 @@ export function getWebGPUTextureFormat(format) {
2
2
  if (format.includes('webgl')) {
3
3
  throw new Error('webgl-only format');
4
4
  }
5
-
6
5
  return format;
7
6
  }
8
7
  //# sourceMappingURL=convert-texture-format.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/adapter/helpers/convert-texture-format.ts"],"names":["getWebGPUTextureFormat","format","includes","Error"],"mappings":"AAIA,OAAO,SAASA,sBAAT,CAAgCC,MAAhC,EAAyE;AAC9E,MAAIA,MAAM,CAACC,QAAP,CAAgB,OAAhB,CAAJ,EAA8B;AAC5B,UAAM,IAAIC,KAAJ,CAAU,mBAAV,CAAN;AACD;;AACD,SAAOF,MAAP;AACD","sourcesContent":["// luma.gl, MIT license\nimport {TextureFormat} from '@luma.gl/api';\n\n/** Ensure a texture format is WebGPU compatible */\nexport function getWebGPUTextureFormat(format: TextureFormat): GPUTextureFormat {\n if (format.includes('webgl')) {\n throw new Error('webgl-only format');\n }\n return format as GPUTextureFormat;\n}\n"],"file":"convert-texture-format.js"}
1
+ {"version":3,"file":"convert-texture-format.js","names":["getWebGPUTextureFormat","format","includes","Error"],"sources":["../../../src/adapter/helpers/convert-texture-format.ts"],"sourcesContent":["// luma.gl, MIT license\nimport {TextureFormat} from '@luma.gl/api';\n\n/** Ensure a texture format is WebGPU compatible */\nexport function getWebGPUTextureFormat(format: TextureFormat): GPUTextureFormat {\n if (format.includes('webgl')) {\n throw new Error('webgl-only format');\n }\n return format as GPUTextureFormat;\n}\n"],"mappings":"AAIA,OAAO,SAASA,sBAAsBA,CAACC,MAAqB,EAAoB;EAC9E,IAAIA,MAAM,CAACC,QAAQ,CAAC,OAAO,CAAC,EAAE;IAC5B,MAAM,IAAIC,KAAK,CAAC,mBAAmB,CAAC;EACtC;EACA,OAAOF,MAAM;AACf"}
@@ -1,4 +1,4 @@
1
- /// <reference types="@webgpu/types" />
1
+ /// <reference types="dist" />
2
2
  /** WebGPU does not have built-in mipmap creation */
3
3
  export declare class WebGPUMipmapGenerator {
4
4
  device: GPUDevice;
@@ -4,11 +4,8 @@ const FS_GEN_MIPMAP = "#version 450\nlayout(set = 0, binding = 0) uniform sample
4
4
  export class WebGPUMipmapGenerator {
5
5
  constructor(device, glslang) {
6
6
  _defineProperty(this, "device", void 0);
7
-
8
7
  _defineProperty(this, "mipmapSampler", void 0);
9
-
10
8
  _defineProperty(this, "mipmapPipeline", void 0);
11
-
12
9
  this.device = device;
13
10
  this.mipmapSampler = device.createSampler({
14
11
  minFilter: 'linear'
@@ -32,9 +29,8 @@ export class WebGPUMipmapGenerator {
32
29
  }]
33
30
  });
34
31
  }
35
-
36
32
  generateMipmappedTexture(imageBitmap) {
37
- let textureSize = {
33
+ const textureSize = {
38
34
  width: imageBitmap.width,
39
35
  height: imageBitmap.height,
40
36
  depth: 1
@@ -52,7 +48,6 @@ export class WebGPUMipmapGenerator {
52
48
  texture: srcTexture
53
49
  }, textureSize);
54
50
  const commandEncoder = this.device.createCommandEncoder({});
55
-
56
51
  for (let i = 1; i < mipLevelCount; ++i) {
57
52
  const passEncoder = commandEncoder.beginRenderPass({
58
53
  colorAttachments: [{
@@ -86,10 +81,8 @@ export class WebGPUMipmapGenerator {
86
81
  passEncoder.draw(4);
87
82
  passEncoder.endPass();
88
83
  }
89
-
90
84
  this.device.queue.submit([commandEncoder.finish()]);
91
85
  return texture;
92
86
  }
93
-
94
87
  }
95
88
  //# sourceMappingURL=generate-mipmaps.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/adapter/helpers/generate-mipmaps.ts"],"names":["VS_GEN_MIPMAP","FS_GEN_MIPMAP","WebGPUMipmapGenerator","constructor","device","glslang","mipmapSampler","createSampler","minFilter","mipmapPipeline","createRenderPipeline","vertexStage","module","createShaderModule","code","compileGLSL","entryPoint","fragmentStage","primitiveTopology","colorStates","format","generateMipmappedTexture","imageBitmap","textureSize","width","height","depth","mipLevelCount","Math","floor","log2","max","texture","createTexture","size","usage","GPUTextureUsage","COPY_DST","SAMPLED","OUTPUT_ATTACHMENT","queue","copyImageBitmapToTexture","srcTexture","commandEncoder","createCommandEncoder","i","passEncoder","beginRenderPass","colorAttachments","attachment","createView","baseMipLevel","loadValue","r","g","b","a","bindGroup","createBindGroup","layout","getBindGroupLayout","bindings","binding","resource","setPipeline","setBindGroup","draw","endPass","submit","finish"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\n// Forked from Kangz/mipmapper.js under MIT license Copyright 2020 Brandon Jones\n// https://gist.github.com/Kangz/782d5f1ae502daf53910a13f55db2f83\n\n// @ts-nocheck this is written against outdated WebGPU API, needs an update pass\n\nconst VS_GEN_MIPMAP = `\\#version 450\nconst 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));\nlayout(location = 0) out vec2 vTex;\nvoid main() {\n gl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);\n vTex = gl_Position / 2.0f + vec2(0.5f);\n}`;\n\nconst FS_GEN_MIPMAP = `#version 450\nlayout(set = 0, binding = 0) uniform sampler imgSampler;\nlayout(set = 0, binding = 1) uniform texture2D img;\nlayout(location = 0) in vec2 vTex;\nlayout(location = 0) out vec4 outColor;\nvoid main() {\n outColor = texture(sampler2D(img, imgSampler), vTex);\n}`;\n\n/** WebGPU does not have built-in mipmap creation */\nexport class WebGPUMipmapGenerator {\n device: GPUDevice;\n mipmapSampler: GPUSampler;\n mipmapPipeline: GPURenderPipeline;\n\n constructor(device: GPUDevice, glslang) {\n this.device = device;\n\n this.mipmapSampler = device.createSampler({ minFilter: 'linear' });\n\n this.mipmapPipeline = device.createRenderPipeline({\n vertexStage: {\n module: device.createShaderModule({\n code: glslang.compileGLSL(VS_GEN_MIPMAP, 'vertex')\n }),\n entryPoint: 'main'\n },\n fragmentStage: {\n module: device.createShaderModule({\n code: glslang.compileGLSL(FS_GEN_MIPMAP, 'fragment')\n }),\n entryPoint: 'main'\n },\n primitiveTopology: 'triangle-strip',\n colorStates: [{\n format: 'rgba8unorm',\n }]\n });\n }\n\n generateMipmappedTexture(imageBitmap: ImageBitmap) {\n let textureSize = {\n width: imageBitmap.width,\n height: imageBitmap.height,\n depth: 1,\n }\n const mipLevelCount = Math.floor(Math.log2(Math.max(imageBitmap.width, imageBitmap.height))) + 1;\n\n // Populate the top level of the srcTexture with the imageBitmap.\n const texture = this.device.createTexture({\n size: textureSize,\n format: 'rgba8unorm',\n usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.SAMPLED | GPUTextureUsage.OUTPUT_ATTACHMENT,\n mipLevelCount\n });\n this.device.queue.copyImageBitmapToTexture({ imageBitmap }, { texture: srcTexture }, textureSize);\n\n const commandEncoder = this.device.createCommandEncoder({});\n for (let i = 1; i < mipLevelCount; ++i) {\n const passEncoder = commandEncoder.beginRenderPass({\n colorAttachments: [{\n attachment: texture.createView({\n baseMipLevel: i,\n mipLevelCount: 1\n }),\n loadValue: { r: 1.0, g: 0.0, b: 0.0, a: 0.0 },\n }],\n });\n\n const bindGroup = this.device.createBindGroup({\n layout: this.mipmapPipeline.getBindGroupLayout(0),\n bindings: [{\n binding: 0,\n resource: this.mipmapSampler,\n }, {\n binding: 1,\n resource: texture.createView({\n baseMipLevel: i - 1,\n mipLevelCount: 1\n }),\n }],\n });\n\n passEncoder.setPipeline(this.mipmapPipeline);\n passEncoder.setBindGroup(0, bindGroup);\n passEncoder.draw(4);\n passEncoder.endPass();\n }\n\n this.device.queue.submit([commandEncoder.finish()]);\n return texture;\n }\n}\n"],"file":"generate-mipmaps.js"}
1
+ {"version":3,"file":"generate-mipmaps.js","names":["VS_GEN_MIPMAP","FS_GEN_MIPMAP","WebGPUMipmapGenerator","constructor","device","glslang","_defineProperty","mipmapSampler","createSampler","minFilter","mipmapPipeline","createRenderPipeline","vertexStage","module","createShaderModule","code","compileGLSL","entryPoint","fragmentStage","primitiveTopology","colorStates","format","generateMipmappedTexture","imageBitmap","textureSize","width","height","depth","mipLevelCount","Math","floor","log2","max","texture","createTexture","size","usage","GPUTextureUsage","COPY_DST","SAMPLED","OUTPUT_ATTACHMENT","queue","copyImageBitmapToTexture","srcTexture","commandEncoder","createCommandEncoder","i","passEncoder","beginRenderPass","colorAttachments","attachment","createView","baseMipLevel","loadValue","r","g","b","a","bindGroup","createBindGroup","layout","getBindGroupLayout","bindings","binding","resource","setPipeline","setBindGroup","draw","endPass","submit","finish"],"sources":["../../../src/adapter/helpers/generate-mipmaps.ts"],"sourcesContent":["// luma.gl, MIT license\n// Forked from Kangz/mipmapper.js under MIT license Copyright 2020 Brandon Jones\n// https://gist.github.com/Kangz/782d5f1ae502daf53910a13f55db2f83\n\n// @ts-nocheck this is written against outdated WebGPU API, needs an update pass\n\nconst VS_GEN_MIPMAP = `\\#version 450\nconst 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));\nlayout(location = 0) out vec2 vTex;\nvoid main() {\n gl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);\n vTex = gl_Position / 2.0f + vec2(0.5f);\n}`;\n\nconst FS_GEN_MIPMAP = `#version 450\nlayout(set = 0, binding = 0) uniform sampler imgSampler;\nlayout(set = 0, binding = 1) uniform texture2D img;\nlayout(location = 0) in vec2 vTex;\nlayout(location = 0) out vec4 outColor;\nvoid main() {\n outColor = texture(sampler2D(img, imgSampler), vTex);\n}`;\n\n/** WebGPU does not have built-in mipmap creation */\nexport class WebGPUMipmapGenerator {\n device: GPUDevice;\n mipmapSampler: GPUSampler;\n mipmapPipeline: GPURenderPipeline;\n\n constructor(device: GPUDevice, glslang) {\n this.device = device;\n\n this.mipmapSampler = device.createSampler({ minFilter: 'linear' });\n\n this.mipmapPipeline = device.createRenderPipeline({\n vertexStage: {\n module: device.createShaderModule({\n code: glslang.compileGLSL(VS_GEN_MIPMAP, 'vertex')\n }),\n entryPoint: 'main'\n },\n fragmentStage: {\n module: device.createShaderModule({\n code: glslang.compileGLSL(FS_GEN_MIPMAP, 'fragment')\n }),\n entryPoint: 'main'\n },\n primitiveTopology: 'triangle-strip',\n colorStates: [{\n format: 'rgba8unorm',\n }]\n });\n }\n\n generateMipmappedTexture(imageBitmap: ImageBitmap) {\n const textureSize = {\n width: imageBitmap.width,\n height: imageBitmap.height,\n depth: 1,\n }\n const mipLevelCount = Math.floor(Math.log2(Math.max(imageBitmap.width, imageBitmap.height))) + 1;\n\n // Populate the top level of the srcTexture with the imageBitmap.\n const texture = this.device.createTexture({\n size: textureSize,\n format: 'rgba8unorm',\n usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.SAMPLED | GPUTextureUsage.OUTPUT_ATTACHMENT,\n mipLevelCount\n });\n this.device.queue.copyImageBitmapToTexture({ imageBitmap }, { texture: srcTexture }, textureSize);\n\n const commandEncoder = this.device.createCommandEncoder({});\n for (let i = 1; i < mipLevelCount; ++i) {\n const passEncoder = commandEncoder.beginRenderPass({\n colorAttachments: [{\n attachment: texture.createView({\n baseMipLevel: i,\n mipLevelCount: 1\n }),\n loadValue: { r: 1.0, g: 0.0, b: 0.0, a: 0.0 },\n }],\n });\n\n const bindGroup = this.device.createBindGroup({\n layout: this.mipmapPipeline.getBindGroupLayout(0),\n bindings: [{\n binding: 0,\n resource: this.mipmapSampler,\n }, {\n binding: 1,\n resource: texture.createView({\n baseMipLevel: i - 1,\n mipLevelCount: 1\n }),\n }],\n });\n\n passEncoder.setPipeline(this.mipmapPipeline);\n passEncoder.setBindGroup(0, bindGroup);\n passEncoder.draw(4);\n passEncoder.endPass();\n }\n\n this.device.queue.submit([commandEncoder.finish()]);\n return texture;\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /// <reference types="@webgpu/types" />
1
+ /// <reference types="dist" />
2
2
  import type { ShaderLayout, BindingLayout, Binding } from '@luma.gl/api';
3
3
  /**
4
4
  * Create a WebGPU "bind group layout" from an array of luma.gl bindings
@@ -1 +1 @@
1
- {"version":3,"file":"get-bind-group.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-bind-group.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAC,MAAM,cAAc,CAAC;AAMvE;;;GAGG;AACF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAM3H;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,kBAAkB,EACnC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,YAAY,CAMd;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,CAM/F"}
1
+ {"version":3,"file":"get-bind-group.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-bind-group.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAC,MAAM,cAAc,CAAC;AAMvE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAM1H;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,kBAAkB,EACnC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,YAAY,CAMd;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,CAM/F"}
@@ -11,28 +11,21 @@ export function getBindGroup(device, bindGroupLayout, layout, bindings) {
11
11
  }
12
12
  export function getShaderLayoutBinding(layout, bindingName) {
13
13
  const bindingLayout = layout.bindings.find(binding => binding.name === bindingName);
14
-
15
14
  if (!bindingLayout) {
16
15
  log.warn("Binding ".concat(bindingName, " not set: Not found in shader layout."))();
17
16
  }
18
-
19
17
  return bindingLayout;
20
18
  }
21
-
22
19
  function getBindGroupEntries(bindings, layout) {
23
20
  const entries = [];
24
-
25
21
  for (const [bindingName, value] of Object.entries(bindings)) {
26
22
  const bindingLayout = getShaderLayoutBinding(layout, bindingName);
27
-
28
23
  if (bindingLayout) {
29
24
  entries.push(getBindGroupEntry(value, bindingLayout.location));
30
25
  }
31
26
  }
32
-
33
27
  return entries;
34
28
  }
35
-
36
29
  function getBindGroupEntry(binding, index) {
37
30
  if (binding instanceof Buffer) {
38
31
  return {
@@ -42,7 +35,6 @@ function getBindGroupEntry(binding, index) {
42
35
  }
43
36
  };
44
37
  }
45
-
46
38
  if (binding instanceof Sampler) {
47
39
  return {
48
40
  binding: index,
@@ -54,7 +46,6 @@ function getBindGroupEntry(binding, index) {
54
46
  resource: cast(binding).handle.createView()
55
47
  };
56
48
  }
57
-
58
49
  throw new Error('invalid binding');
59
50
  }
60
51
  //# sourceMappingURL=get-bind-group.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/adapter/helpers/get-bind-group.ts"],"names":["Buffer","Sampler","Texture","log","cast","makeBindGroupLayout","device","layout","bindings","Error","getBindGroup","bindGroupLayout","entries","getBindGroupEntries","createBindGroup","getShaderLayoutBinding","bindingName","bindingLayout","find","binding","name","warn","value","Object","push","getBindGroupEntry","location","index","resource","buffer","handle","createView"],"mappings":"AAEA,SAAQA,MAAR,EAAgBC,OAAhB,EAAyBC,OAAzB,EAAkCC,GAAlC,EAAuCC,IAAvC,QAAkD,cAAlD;AASC,OAAO,SAASC,mBAAT,CAA6BC,MAA7B,EAAgDC,MAAhD,EAA4EC,QAA5E,EAAqH;AAC3H,QAAM,IAAIC,KAAJ,CAAU,iBAAV,CAAN;AAKD;AAKD,OAAO,SAASC,YAAT,CACLJ,MADK,EAELK,eAFK,EAGLJ,MAHK,EAILC,QAJK,EAKS;AACd,QAAMI,OAAO,GAAGC,mBAAmB,CAACL,QAAD,EAAWD,MAAX,CAAnC;AACA,SAAOD,MAAM,CAACQ,eAAP,CAAuB;AAC5BP,IAAAA,MAAM,EAAEI,eADoB;AAE5BC,IAAAA;AAF4B,GAAvB,CAAP;AAID;AAED,OAAO,SAASG,sBAAT,CAAgCR,MAAhC,EAAsDS,WAAtD,EAA0F;AAC/F,QAAMC,aAAa,GAAGV,MAAM,CAACC,QAAP,CAAgBU,IAAhB,CAAqBC,OAAO,IAAIA,OAAO,CAACC,IAAR,KAAiBJ,WAAjD,CAAtB;;AACA,MAAI,CAACC,aAAL,EAAoB;AAClBd,IAAAA,GAAG,CAACkB,IAAJ,mBAAoBL,WAApB;AACD;;AACD,SAAOC,aAAP;AACD;;AAMD,SAASJ,mBAAT,CAA6BL,QAA7B,EAAgED,MAAhE,EAA2G;AACzG,QAAMK,OAA4B,GAAG,EAArC;;AAEA,OAAK,MAAM,CAACI,WAAD,EAAcM,KAAd,CAAX,IAAmCC,MAAM,CAACX,OAAP,CAAeJ,QAAf,CAAnC,EAA6D;AAC3D,UAAMS,aAAa,GAAGF,sBAAsB,CAACR,MAAD,EAASS,WAAT,CAA5C;;AACA,QAAIC,aAAJ,EAAmB;AACjBL,MAAAA,OAAO,CAACY,IAAR,CAAaC,iBAAiB,CAACH,KAAD,EAAQL,aAAa,CAACS,QAAtB,CAA9B;AACD;AACF;;AAED,SAAOd,OAAP;AACD;;AAED,SAASa,iBAAT,CAA2BN,OAA3B,EAA6CQ,KAA7C,EAA+E;AAC7E,MAAIR,OAAO,YAAYnB,MAAvB,EAA+B;AAC7B,WAAO;AACLmB,MAAAA,OAAO,EAAEQ,KADJ;AAELC,MAAAA,QAAQ,EAAE;AACRC,QAAAA,MAAM,EAAEzB,IAAI,CAAee,OAAf,CAAJ,CAA4BW;AAD5B;AAFL,KAAP;AAMD;;AACD,MAAIX,OAAO,YAAYlB,OAAvB,EAAgC;AAC9B,WAAO;AACLkB,MAAAA,OAAO,EAAEQ,KADJ;AAELC,MAAAA,QAAQ,EAAExB,IAAI,CAAgBe,OAAhB,CAAJ,CAA6BW;AAFlC,KAAP;AAID,GALD,MAKO,IAAIX,OAAO,YAAYjB,OAAvB,EAAgC;AACrC,WAAO;AACLiB,MAAAA,OAAO,EAAEQ,KADJ;AAELC,MAAAA,QAAQ,EAAExB,IAAI,CAAgBe,OAAhB,CAAJ,CAA6BW,MAA7B,CAAoCC,UAApC;AAFL,KAAP;AAID;;AACD,QAAM,IAAItB,KAAJ,CAAU,iBAAV,CAAN;AACD","sourcesContent":["// luma.gl, MIT license\nimport type {ShaderLayout, BindingLayout, Binding} from '@luma.gl/api';\nimport {Buffer, Sampler, Texture, log, cast} from '@luma.gl/api';\nimport type WebGPUBuffer from '../resources/webgpu-buffer';\nimport type WebGPUSampler from '../resources/webgpu-sampler';\nimport type WebGPUTexture from '../resources/webgpu-texture';\n\n/**\n * Create a WebGPU \"bind group layout\" from an array of luma.gl bindings\n * @note bind groups can be automatically generated by WebGPU.\n */\n export function makeBindGroupLayout(device: GPUDevice, layout: GPUBindGroupLayout, bindings: Binding[]): GPUBindGroupLayout {\n throw new Error('not implemented');\n // return device.createBindGroupLayout({\n // layout,\n // entries: getBindGroupEntries(bindings)\n // })\n}\n\n/**\n * Create a WebGPU \"bind group\" from an array of luma.gl bindings\n */\nexport function getBindGroup(\n device: GPUDevice,\n bindGroupLayout: GPUBindGroupLayout,\n layout: ShaderLayout,\n bindings: Record<string, Binding>\n): GPUBindGroup {\n const entries = getBindGroupEntries(bindings, layout);\n return device.createBindGroup({\n layout: bindGroupLayout,\n entries\n });\n}\n\nexport function getShaderLayoutBinding(layout: ShaderLayout, bindingName: string): BindingLayout {\n const bindingLayout = layout.bindings.find(binding => binding.name === bindingName);\n if (!bindingLayout) {\n log.warn(`Binding ${bindingName} not set: Not found in shader layout.`)();\n }\n return bindingLayout;\n}\n\n/**\n * @param bindings\n * @returns\n */\nfunction getBindGroupEntries(bindings: Record<string, Binding>, layout: ShaderLayout): GPUBindGroupEntry[] {\n const entries: GPUBindGroupEntry[] = [];\n\n for (const [bindingName, value] of Object.entries(bindings)) {\n const bindingLayout = getShaderLayoutBinding(layout, bindingName);\n if (bindingLayout) {\n entries.push(getBindGroupEntry(value, bindingLayout.location));\n }\n }\n\n return entries;\n}\n\nfunction getBindGroupEntry(binding: Binding, index: number): GPUBindGroupEntry {\n if (binding instanceof Buffer) {\n return {\n binding: index,\n resource: {\n buffer: cast<WebGPUBuffer>(binding).handle\n }\n };\n }\n if (binding instanceof Sampler) {\n return {\n binding: index,\n resource: cast<WebGPUSampler>(binding).handle\n };\n } else if (binding instanceof Texture) {\n return {\n binding: index,\n resource: cast<WebGPUTexture>(binding).handle.createView()\n };\n }\n throw new Error('invalid binding');\n}\n"],"file":"get-bind-group.js"}
1
+ {"version":3,"file":"get-bind-group.js","names":["Buffer","Sampler","Texture","log","cast","makeBindGroupLayout","device","layout","bindings","Error","getBindGroup","bindGroupLayout","entries","getBindGroupEntries","createBindGroup","getShaderLayoutBinding","bindingName","bindingLayout","find","binding","name","warn","concat","value","Object","push","getBindGroupEntry","location","index","resource","buffer","handle","createView"],"sources":["../../../src/adapter/helpers/get-bind-group.ts"],"sourcesContent":["// luma.gl, MIT license\nimport type {ShaderLayout, BindingLayout, Binding} from '@luma.gl/api';\nimport {Buffer, Sampler, Texture, log, cast} from '@luma.gl/api';\nimport type WebGPUBuffer from '../resources/webgpu-buffer';\nimport type WebGPUSampler from '../resources/webgpu-sampler';\nimport type WebGPUTexture from '../resources/webgpu-texture';\n\n/**\n * Create a WebGPU \"bind group layout\" from an array of luma.gl bindings\n * @note bind groups can be automatically generated by WebGPU.\n */\nexport function makeBindGroupLayout(device: GPUDevice, layout: GPUBindGroupLayout, bindings: Binding[]): GPUBindGroupLayout {\n throw new Error('not implemented');\n // return device.createBindGroupLayout({\n // layout,\n // entries: getBindGroupEntries(bindings)\n // })\n}\n\n/**\n * Create a WebGPU \"bind group\" from an array of luma.gl bindings\n */\nexport function getBindGroup(\n device: GPUDevice,\n bindGroupLayout: GPUBindGroupLayout,\n layout: ShaderLayout,\n bindings: Record<string, Binding>\n): GPUBindGroup {\n const entries = getBindGroupEntries(bindings, layout);\n return device.createBindGroup({\n layout: bindGroupLayout,\n entries\n });\n}\n\nexport function getShaderLayoutBinding(layout: ShaderLayout, bindingName: string): BindingLayout {\n const bindingLayout = layout.bindings.find(binding => binding.name === bindingName);\n if (!bindingLayout) {\n log.warn(`Binding ${bindingName} not set: Not found in shader layout.`)();\n }\n return bindingLayout;\n}\n\n/**\n * @param bindings\n * @returns\n */\nfunction getBindGroupEntries(bindings: Record<string, Binding>, layout: ShaderLayout): GPUBindGroupEntry[] {\n const entries: GPUBindGroupEntry[] = [];\n\n for (const [bindingName, value] of Object.entries(bindings)) {\n const bindingLayout = getShaderLayoutBinding(layout, bindingName);\n if (bindingLayout) {\n entries.push(getBindGroupEntry(value, bindingLayout.location));\n }\n }\n\n return entries;\n}\n\nfunction getBindGroupEntry(binding: Binding, index: number): GPUBindGroupEntry {\n if (binding instanceof Buffer) {\n return {\n binding: index,\n resource: {\n buffer: cast<WebGPUBuffer>(binding).handle\n }\n };\n }\n if (binding instanceof Sampler) {\n return {\n binding: index,\n resource: cast<WebGPUSampler>(binding).handle\n };\n } else if (binding instanceof Texture) {\n return {\n binding: index,\n resource: cast<WebGPUTexture>(binding).handle.createView()\n };\n }\n throw new Error('invalid binding');\n}\n"],"mappings":"AAEA,SAAQA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,GAAG,EAAEC,IAAI,QAAO,cAAc;AAShE,OAAO,SAASC,mBAAmBA,CAACC,MAAiB,EAAEC,MAA0B,EAAEC,QAAmB,EAAsB;EAC1H,MAAM,IAAIC,KAAK,CAAC,iBAAiB,CAAC;AAKpC;AAKA,OAAO,SAASC,YAAYA,CAC1BJ,MAAiB,EACjBK,eAAmC,EACnCJ,MAAoB,EACpBC,QAAiC,EACnB;EACd,MAAMI,OAAO,GAAGC,mBAAmB,CAACL,QAAQ,EAAED,MAAM,CAAC;EACrD,OAAOD,MAAM,CAACQ,eAAe,CAAC;IAC5BP,MAAM,EAAEI,eAAe;IACvBC;EACF,CAAC,CAAC;AACJ;AAEA,OAAO,SAASG,sBAAsBA,CAACR,MAAoB,EAAES,WAAmB,EAAiB;EAC/F,MAAMC,aAAa,GAAGV,MAAM,CAACC,QAAQ,CAACU,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACC,IAAI,KAAKJ,WAAW,CAAC;EACnF,IAAI,CAACC,aAAa,EAAE;IAClBd,GAAG,CAACkB,IAAI,YAAAC,MAAA,CAAYN,WAAW,2CAAwC,EAAE;EAC3E;EACA,OAAOC,aAAa;AACtB;AAMA,SAASJ,mBAAmBA,CAACL,QAAiC,EAAED,MAAoB,EAAuB;EACzG,MAAMK,OAA4B,GAAG,EAAE;EAEvC,KAAK,MAAM,CAACI,WAAW,EAAEO,KAAK,CAAC,IAAIC,MAAM,CAACZ,OAAO,CAACJ,QAAQ,CAAC,EAAE;IAC3D,MAAMS,aAAa,GAAGF,sBAAsB,CAACR,MAAM,EAAES,WAAW,CAAC;IACjE,IAAIC,aAAa,EAAE;MACjBL,OAAO,CAACa,IAAI,CAACC,iBAAiB,CAACH,KAAK,EAAEN,aAAa,CAACU,QAAQ,CAAC,CAAC;IAChE;EACF;EAEA,OAAOf,OAAO;AAChB;AAEA,SAASc,iBAAiBA,CAACP,OAAgB,EAAES,KAAa,EAAqB;EAC7E,IAAIT,OAAO,YAAYnB,MAAM,EAAE;IAC7B,OAAO;MACLmB,OAAO,EAAES,KAAK;MACdC,QAAQ,EAAE;QACRC,MAAM,EAAE1B,IAAI,CAAee,OAAO,CAAC,CAACY;MACtC;IACF,CAAC;EACH;EACA,IAAIZ,OAAO,YAAYlB,OAAO,EAAE;IAC9B,OAAO;MACLkB,OAAO,EAAES,KAAK;MACdC,QAAQ,EAAEzB,IAAI,CAAgBe,OAAO,CAAC,CAACY;IACzC,CAAC;EACH,CAAC,MAAM,IAAIZ,OAAO,YAAYjB,OAAO,EAAE;IACrC,OAAO;MACLiB,OAAO,EAAES,KAAK;MACdC,QAAQ,EAAEzB,IAAI,CAAgBe,OAAO,CAAC,CAACY,MAAM,CAACC,UAAU;IAC1D,CAAC;EACH;EACA,MAAM,IAAIvB,KAAK,CAAC,iBAAiB,CAAC;AACpC"}
@@ -1,4 +1,4 @@
1
- /// <reference types="@webgpu/types" />
1
+ /// <reference types="dist" />
2
2
  import type { ShaderLayout, BufferMapping } from '@luma.gl/api';
3
3
  /**
4
4
  * Build a WebGPU vertex buffer layout intended for use in a GPURenderPassDescriptor.
@@ -2,13 +2,11 @@ import { decodeVertexFormat } from '@luma.gl/api';
2
2
  export function getVertexBufferLayout(layout, bufferMap) {
3
3
  const vertexBufferLayouts = [];
4
4
  const usedAttributes = new Set();
5
-
6
5
  for (const mapping of bufferMap) {
7
6
  const vertexAttributes = [];
8
7
  let stepMode = 'vertex';
9
8
  let byteStride = 0;
10
- let byteOffset = mapping.byteOffset || 0;
11
-
9
+ const byteOffset = mapping.byteOffset || 0;
12
10
  if ('attributes' in mapping) {
13
11
  for (const interleaved of mapping.attributes) {
14
12
  const attributeLayout = findAttributeLayout(layout, interleaved.name, usedAttributes);
@@ -22,21 +20,20 @@ export function getVertexBufferLayout(layout, bufferMap) {
22
20
  }
23
21
  } else {
24
22
  const attributeLayout = findAttributeLayout(layout, mapping.name, usedAttributes);
25
- byteStride = decodeVertexFormat(attributeLayout.format).byteLength, stepMode = attributeLayout.stepMode || 'vertex';
23
+ byteStride = decodeVertexFormat(attributeLayout.format).byteLength;
24
+ stepMode = attributeLayout.stepMode || 'vertex';
26
25
  vertexAttributes.push({
27
26
  format: attributeLayout.format,
28
27
  offset: byteOffset,
29
28
  shaderLocation: attributeLayout.location
30
29
  });
31
30
  }
32
-
33
31
  vertexBufferLayouts.push({
34
32
  arrayStride: mapping.byteStride || byteStride,
35
33
  stepMode: stepMode || 'vertex',
36
34
  attributes: vertexAttributes
37
35
  });
38
36
  }
39
-
40
37
  for (const attribute of layout.attributes) {
41
38
  if (!usedAttributes.has(attribute.name)) {
42
39
  vertexBufferLayouts.push({
@@ -50,14 +47,12 @@ export function getVertexBufferLayout(layout, bufferMap) {
50
47
  });
51
48
  }
52
49
  }
53
-
54
50
  return vertexBufferLayouts;
55
51
  }
56
52
  export function getBufferSlots(layout, bufferMap) {
57
53
  const usedAttributes = new Set();
58
54
  let bufferSlot = 0;
59
55
  const bufferSlots = {};
60
-
61
56
  for (const mapping of bufferMap) {
62
57
  if ('attributes' in mapping) {
63
58
  for (const interleaved of mapping.attributes) {
@@ -66,30 +61,23 @@ export function getBufferSlots(layout, bufferMap) {
66
61
  } else {
67
62
  usedAttributes.add(mapping.name);
68
63
  }
69
-
70
64
  bufferSlots[mapping.name] = bufferSlot++;
71
65
  }
72
-
73
66
  for (const attribute of layout.attributes) {
74
67
  if (!usedAttributes.has(attribute.name)) {
75
68
  bufferSlots[attribute.name] = bufferSlot++;
76
69
  }
77
70
  }
78
-
79
71
  return bufferSlots;
80
72
  }
81
-
82
73
  function findAttributeLayout(layout, name, attributeNames) {
83
74
  const attribute = layout.attributes.find(attribute => attribute.name === name);
84
-
85
75
  if (!attribute) {
86
76
  throw new Error("Unknown attribute ".concat(name));
87
77
  }
88
-
89
78
  if (attributeNames.has(name)) {
90
79
  throw new Error("Duplicate attribute ".concat(name));
91
80
  }
92
-
93
81
  attributeNames.add(name);
94
82
  return attribute;
95
83
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/adapter/helpers/get-vertex-buffer-layout.ts"],"names":["decodeVertexFormat","getVertexBufferLayout","layout","bufferMap","vertexBufferLayouts","usedAttributes","Set","mapping","vertexAttributes","stepMode","byteStride","byteOffset","interleaved","attributes","attributeLayout","findAttributeLayout","name","push","format","offset","shaderLocation","location","byteLength","arrayStride","attribute","has","getBufferSlots","bufferSlot","bufferSlots","add","attributeNames","find","Error"],"mappings":"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","sourcesContent":["import type {ShaderLayout, BufferMapping, AttributeLayout} from '@luma.gl/api';\nimport {decodeVertexFormat} from '@luma.gl/api';\n\n/**\n * Build a WebGPU vertex buffer layout intended for use in a GPURenderPassDescriptor.\n * Converts luma.gl attribute definitions to a WebGPU GPUVertexBufferLayout[] array\n * @param layout\n * @param bufferMap The buffer map is optional\n * @returns WebGPU layout intended for a GPURenderPassDescriptor.\n */\nexport function getVertexBufferLayout(layout: ShaderLayout, bufferMap: BufferMapping[]): GPUVertexBufferLayout[] {\n const vertexBufferLayouts: GPUVertexBufferLayout[] = [];\n const usedAttributes = new Set<string>();\n\n // First handle any buffers mentioned in `bufferMapping`\n for (const mapping of bufferMap) {\n // Build vertex attributes for one buffer\n const vertexAttributes: GPUVertexAttribute[] = [];\n\n // TODO verify that all stepModes for one buffer are the same\n let stepMode: 'vertex' | 'instance' = 'vertex';\n let byteStride = 0;\n let byteOffset = mapping.byteOffset || 0;\n\n // interleaved mapping {..., attributes: [{...}, ...]}\n if ('attributes' in mapping) {\n // const arrayStride = mapping.byteStride; TODO \n for (const interleaved of mapping.attributes) {\n const attributeLayout = findAttributeLayout(layout, interleaved.name, usedAttributes);\n\n stepMode = attributeLayout.stepMode || 'vertex';\n vertexAttributes.push({\n format: attributeLayout.format,\n offset: byteOffset + byteStride,\n shaderLocation: attributeLayout.location\n });\n\n byteStride += decodeVertexFormat(attributeLayout.format).byteLength;\n }\n // non-interleaved mapping (just set offset and stride)\n } else {\n const attributeLayout = findAttributeLayout(layout, mapping.name, usedAttributes);\n byteStride = decodeVertexFormat(attributeLayout.format).byteLength,\n\n stepMode = attributeLayout.stepMode || 'vertex';\n vertexAttributes.push({\n format: attributeLayout.format,\n offset: byteOffset,\n shaderLocation: attributeLayout.location\n });\n }\n\n // Store all the attribute bindings for one buffer\n vertexBufferLayouts.push({\n arrayStride: mapping.byteStride || byteStride,\n stepMode: stepMode || 'vertex',\n attributes: vertexAttributes\n });\n }\n\n // Add any non-mapped attributes\n for (const attribute of layout.attributes) {\n if (!usedAttributes.has(attribute.name)) {\n vertexBufferLayouts.push({\n arrayStride: decodeVertexFormat(attribute.format).byteLength,\n stepMode: attribute.stepMode || 'vertex',\n attributes: [{\n format: attribute.format,\n offset: 0,\n shaderLocation: attribute.location\n }]\n });\n }\n }\n\n return vertexBufferLayouts;\n}\n\nexport function getBufferSlots(layout: ShaderLayout, bufferMap: BufferMapping[]): Record<string, number> {\n const usedAttributes = new Set<string>();\n let bufferSlot = 0;\n const bufferSlots: Record<string, number> = {};\n\n // First handle any buffers mentioned in `bufferMapping`\n for (const mapping of bufferMap) {\n // interleaved mapping {..., attributes: [{...}, ...]}\n if ('attributes' in mapping) {\n for (const interleaved of mapping.attributes) {\n usedAttributes.add(interleaved.name);\n }\n // non-interleaved mapping (just set offset and stride)\n } else {\n usedAttributes.add(mapping.name);\n }\n bufferSlots[mapping.name] = bufferSlot++;\n }\n\n // Add any non-mapped attributes\n for (const attribute of layout.attributes) {\n if (!usedAttributes.has(attribute.name)) {\n bufferSlots[attribute.name] = bufferSlot++;\n }\n }\n\n return bufferSlots;\n}\n\n/**\n * Looks up an attribute in the ShaderLayout.\n * @throws if name is not in ShaderLayout\n * @throws if name has already been referenced\n */\nfunction findAttributeLayout(layout: ShaderLayout, name: string, attributeNames: Set<string>): AttributeLayout {\n const attribute = layout.attributes.find(attribute => attribute.name === name);\n if (!attribute) {\n throw new Error(`Unknown attribute ${name}`);\n }\n if (attributeNames.has(name)) {\n throw new Error(`Duplicate attribute ${name}`);\n }\n attributeNames.add(name);\n return attribute;\n}\n"],"file":"get-vertex-buffer-layout.js"}
1
+ {"version":3,"file":"get-vertex-buffer-layout.js","names":["decodeVertexFormat","getVertexBufferLayout","layout","bufferMap","vertexBufferLayouts","usedAttributes","Set","mapping","vertexAttributes","stepMode","byteStride","byteOffset","interleaved","attributes","attributeLayout","findAttributeLayout","name","push","format","offset","shaderLocation","location","byteLength","arrayStride","attribute","has","getBufferSlots","bufferSlot","bufferSlots","add","attributeNames","find","Error","concat"],"sources":["../../../src/adapter/helpers/get-vertex-buffer-layout.ts"],"sourcesContent":["import type {ShaderLayout, BufferMapping, AttributeLayout} from '@luma.gl/api';\nimport {decodeVertexFormat} from '@luma.gl/api';\n\n/**\n * Build a WebGPU vertex buffer layout intended for use in a GPURenderPassDescriptor.\n * Converts luma.gl attribute definitions to a WebGPU GPUVertexBufferLayout[] array\n * @param layout\n * @param bufferMap The buffer map is optional\n * @returns WebGPU layout intended for a GPURenderPassDescriptor.\n */\nexport function getVertexBufferLayout(layout: ShaderLayout, bufferMap: BufferMapping[]): GPUVertexBufferLayout[] {\n const vertexBufferLayouts: GPUVertexBufferLayout[] = [];\n const usedAttributes = new Set<string>();\n\n // First handle any buffers mentioned in `bufferMapping`\n for (const mapping of bufferMap) {\n // Build vertex attributes for one buffer\n const vertexAttributes: GPUVertexAttribute[] = [];\n\n // TODO verify that all stepModes for one buffer are the same\n let stepMode: 'vertex' | 'instance' = 'vertex';\n let byteStride = 0;\n const byteOffset = mapping.byteOffset || 0;\n\n // interleaved mapping {..., attributes: [{...}, ...]}\n if ('attributes' in mapping) {\n // const arrayStride = mapping.byteStride; TODO \n for (const interleaved of mapping.attributes) {\n const attributeLayout = findAttributeLayout(layout, interleaved.name, usedAttributes);\n\n stepMode = attributeLayout.stepMode || 'vertex';\n vertexAttributes.push({\n format: attributeLayout.format,\n offset: byteOffset + byteStride,\n shaderLocation: attributeLayout.location\n });\n\n byteStride += decodeVertexFormat(attributeLayout.format).byteLength;\n }\n // non-interleaved mapping (just set offset and stride)\n } else {\n const attributeLayout = findAttributeLayout(layout, mapping.name, usedAttributes);\n byteStride = decodeVertexFormat(attributeLayout.format).byteLength;\n\n stepMode = attributeLayout.stepMode || 'vertex';\n vertexAttributes.push({\n format: attributeLayout.format,\n offset: byteOffset,\n shaderLocation: attributeLayout.location\n });\n }\n\n // Store all the attribute bindings for one buffer\n vertexBufferLayouts.push({\n arrayStride: mapping.byteStride || byteStride,\n stepMode: stepMode || 'vertex',\n attributes: vertexAttributes\n });\n }\n\n // Add any non-mapped attributes\n for (const attribute of layout.attributes) {\n if (!usedAttributes.has(attribute.name)) {\n vertexBufferLayouts.push({\n arrayStride: decodeVertexFormat(attribute.format).byteLength,\n stepMode: attribute.stepMode || 'vertex',\n attributes: [{\n format: attribute.format,\n offset: 0,\n shaderLocation: attribute.location\n }]\n });\n }\n }\n\n return vertexBufferLayouts;\n}\n\nexport function getBufferSlots(layout: ShaderLayout, bufferMap: BufferMapping[]): Record<string, number> {\n const usedAttributes = new Set<string>();\n let bufferSlot = 0;\n const bufferSlots: Record<string, number> = {};\n\n // First handle any buffers mentioned in `bufferMapping`\n for (const mapping of bufferMap) {\n // interleaved mapping {..., attributes: [{...}, ...]}\n if ('attributes' in mapping) {\n for (const interleaved of mapping.attributes) {\n usedAttributes.add(interleaved.name);\n }\n // non-interleaved mapping (just set offset and stride)\n } else {\n usedAttributes.add(mapping.name);\n }\n bufferSlots[mapping.name] = bufferSlot++;\n }\n\n // Add any non-mapped attributes\n for (const attribute of layout.attributes) {\n if (!usedAttributes.has(attribute.name)) {\n bufferSlots[attribute.name] = bufferSlot++;\n }\n }\n\n return bufferSlots;\n}\n\n/**\n * Looks up an attribute in the ShaderLayout.\n * @throws if name is not in ShaderLayout\n * @throws if name has already been referenced\n */\nfunction findAttributeLayout(layout: ShaderLayout, name: string, attributeNames: Set<string>): AttributeLayout {\n const attribute = layout.attributes.find(attribute => attribute.name === name);\n if (!attribute) {\n throw new Error(`Unknown attribute ${name}`);\n }\n if (attributeNames.has(name)) {\n throw new Error(`Duplicate attribute ${name}`);\n }\n attributeNames.add(name);\n return attribute;\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /// <reference types="@webgpu/types" />
1
+ /// <reference types="dist" />
2
2
  import { Parameters } from '@luma.gl/api';
3
3
  /**
4
4
  * Supports for luma.gl's flat parameter space
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/webgpu-parameters.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAYxC;;;GAGG;AAEH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,UAAU,EAAE,QAAQ,CAsJ9D,CAAC;AA8BF,wBAAgB,yCAAyC,CACvD,kBAAkB,EAAE,2BAA2B,EAC/C,UAAU,GAAE,UAAe,GAC1B,IAAI,CAIN"}
1
+ {"version":3,"file":"webgpu-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/webgpu-parameters.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAexC;;;GAGG;AAEH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,UAAU,EAAE,QAAQ,CAsJ9D,CAAC;AAgCF,wBAAgB,yCAAyC,CACvD,kBAAkB,EAAE,2BAA2B,EAC/C,UAAU,GAAE,UAAe,GAC1B,IAAI,CAIN"}
@@ -2,11 +2,12 @@ function addDepthStencil(descriptor) {
2
2
  descriptor.depthStencil = descriptor.depthStencil || {
3
3
  format: 'depth24plus',
4
4
  stencilFront: {},
5
- stencilBack: {}
5
+ stencilBack: {},
6
+ depthWriteEnabled: undefined,
7
+ depthCompare: undefined
6
8
  };
7
9
  return descriptor.depthStencil;
8
10
  }
9
-
10
11
  export const PARAMETER_TABLE = {
11
12
  cullMode: (parameter, value, descriptor) => {
12
13
  descriptor.primitive = descriptor.primitive || {};
@@ -101,42 +102,36 @@ const DEFAULT_PIPELINE_DESCRIPTOR = {
101
102
  module: undefined,
102
103
  entryPoint: 'main',
103
104
  targets: []
104
- }
105
+ },
106
+ layout: 'auto'
105
107
  };
106
- export function applyParametersToRenderPipelineDescriptor(pipelineDescriptor, parameters = {}) {
107
- Object.assign(pipelineDescriptor, { ...DEFAULT_PIPELINE_DESCRIPTOR,
108
+ export function applyParametersToRenderPipelineDescriptor(pipelineDescriptor) {
109
+ let parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
110
+ Object.assign(pipelineDescriptor, {
111
+ ...DEFAULT_PIPELINE_DESCRIPTOR,
108
112
  ...pipelineDescriptor
109
113
  });
110
114
  setParameters(pipelineDescriptor, parameters);
111
115
  }
112
-
113
116
  function setParameters(pipelineDescriptor, parameters) {
114
117
  for (const [key, value] of Object.entries(parameters)) {
115
118
  const setterFunction = PARAMETER_TABLE[key];
116
-
117
119
  if (!setterFunction) {
118
120
  throw new Error("Illegal parameter ".concat(key));
119
121
  }
120
-
121
122
  setterFunction(key, value, pipelineDescriptor);
122
123
  }
123
124
  }
124
-
125
125
  function addColorState(descriptor) {
126
126
  var _descriptor$fragment, _descriptor$fragment2, _descriptor$fragment3, _descriptor$fragment4, _descriptor$fragment5;
127
-
128
127
  descriptor.fragment.targets = ((_descriptor$fragment = descriptor.fragment) === null || _descriptor$fragment === void 0 ? void 0 : _descriptor$fragment.targets) || [];
129
-
130
128
  if (!Array.isArray((_descriptor$fragment2 = descriptor.fragment) === null || _descriptor$fragment2 === void 0 ? void 0 : _descriptor$fragment2.targets)) {
131
129
  throw new Error('colorstate');
132
130
  }
133
-
134
131
  if (((_descriptor$fragment3 = descriptor.fragment) === null || _descriptor$fragment3 === void 0 ? void 0 : (_descriptor$fragment4 = _descriptor$fragment3.targets) === null || _descriptor$fragment4 === void 0 ? void 0 : _descriptor$fragment4.length) === 0) {
135
132
  var _descriptor$fragment$;
136
-
137
133
  (_descriptor$fragment$ = descriptor.fragment.targets) === null || _descriptor$fragment$ === void 0 ? void 0 : _descriptor$fragment$.push({});
138
134
  }
139
-
140
135
  return (_descriptor$fragment5 = descriptor.fragment) === null || _descriptor$fragment5 === void 0 ? void 0 : _descriptor$fragment5.targets;
141
136
  }
142
137
  //# sourceMappingURL=webgpu-parameters.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/adapter/helpers/webgpu-parameters.ts"],"names":["addDepthStencil","descriptor","depthStencil","format","stencilFront","stencilBack","PARAMETER_TABLE","cullMode","parameter","value","primitive","frontFace","depthWriteEnabled","depthCompare","depthFormat","depthBias","depthBiasSlopeScale","depthBiasClamp","stencilReadMask","stencilWriteMask","stencilCompare","compare","stencilPassOperation","passOp","stencilFailOperation","failOp","stencilDepthFailOperation","depthFailOp","sampleCount","multisample","count","sampleMask","mask","sampleAlphaToCoverageEnabled","alphaToCoverageEnabled","colorMask","targets","addColorState","writeMask","blendColorOperation","DEFAULT_PIPELINE_DESCRIPTOR","topology","vertex","module","undefined","entryPoint","fragment","applyParametersToRenderPipelineDescriptor","pipelineDescriptor","parameters","Object","assign","setParameters","key","entries","setterFunction","Error","Array","isArray","length","push"],"mappings":"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","sourcesContent":["import {Parameters} from '@luma.gl/api';\n\nfunction addDepthStencil(descriptor: GPURenderPipelineDescriptor): GPUDepthStencilState {\n descriptor.depthStencil = descriptor.depthStencil || {\n // required, set something\n format: 'depth24plus',\n stencilFront: {},\n stencilBack: {}\n };\n return descriptor.depthStencil;\n}\n\n/**\n * Supports for luma.gl's flat parameter space\n * Populates the corresponding sub-objects in a GPURenderPipelineDescriptor\n */\n// @ts-expect-error\nexport const PARAMETER_TABLE: Record<keyof Parameters, Function> = {\n // RASTERIZATION PARAMETERS\n\n cullMode: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.primitive = descriptor.primitive || {};\n descriptor.primitive.cullMode = value;\n },\n\n frontFace: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.primitive = descriptor.primitive || {};\n descriptor.primitive.frontFace = value;\n },\n\n // DEPTH\n\n depthWriteEnabled: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthWriteEnabled = value;\n },\n\n depthCompare: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthCompare = value;\n },\n\n depthFormat: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.format = value;\n },\n\n depthBias: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthBias = value;\n },\n\n depthBiasSlopeScale: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthBiasSlopeScale = value;\n },\n\n depthBiasClamp: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthBiasClamp = value;\n },\n\n // STENCIL\n\n stencilReadMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilReadMask = value;\n },\n\n stencilWriteMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilWriteMask = value;\n },\n\n stencilCompare: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront!.compare = value;\n depthStencil.stencilBack!.compare = value;\n },\n\n stencilPassOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront!.passOp = value;\n depthStencil.stencilBack!.passOp = value;\n },\n\n stencilFailOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront!.failOp = value;\n depthStencil.stencilBack!.failOp = value;\n },\n\n stencilDepthFailOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront!.depthFailOp = value;\n depthStencil.stencilBack!.depthFailOp = value;\n },\n\n // MULTISAMPLE\n\n sampleCount: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.multisample = descriptor.multisample || {};\n descriptor.multisample.count = value;\n },\n\n sampleMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.multisample = descriptor.multisample || {};\n descriptor.multisample.mask = value;\n },\n\n sampleAlphaToCoverageEnabled: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.multisample = descriptor.multisample || {};\n descriptor.multisample.alphaToCoverageEnabled = value;\n },\n\n // COLOR\n\n colorMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const targets = addColorState(descriptor);\n targets[0].writeMask = value;\n },\n\n blendColorOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n // const targets = addColorState(descriptor);\n // const target = targets[0];\n // const blend: GPUBlendState = target.blend || {color: {alpha: 0}};\n // blend.color = blend.color || {};\n // target.blend.color.operation = value;\n }\n\n /*\n blendColorSrcTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.color = targets[0].blend.color || {};\n targets[0].blend.color.srcTarget = value;\n },\n\n blendColorDstTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.color = targets[0].blend.color || {};\n targets[0].blend.color.dstTarget = value;\n },\n\n blendAlphaOperation: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.alpha = targets[0].blend.alpha || {};\n targets[0].blend.alpha.operation = value;\n },\n\n blendAlphaSrcTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.alpha = targets[0].blend.alpha || {};\n targets[0].blend.alpha.srcTarget = value;\n },\n\n blendAlphaDstTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.alpha = targets[0].blend.alpha || {};\n targets[0].blend.alpha.dstTarget = value;\n },\n */\n};\n\nconst DEFAULT_PIPELINE_DESCRIPTOR: GPURenderPipelineDescriptor = {\n // depthStencil: {\n // stencilFront: {},\n // stencilBack: {},\n // // depthWriteEnabled: true,\n // // depthCompare: 'less',\n // // format: 'depth24plus-stencil8',\n // },\n\n primitive: {\n cullMode: 'back',\n topology: 'triangle-list'\n },\n\n vertex: {\n module: undefined!,\n entryPoint: 'main'\n },\n\n fragment: {\n module: undefined!,\n entryPoint: 'main',\n targets: [\n // { format: props.color0Format || 'bgra8unorm' }\n ]\n }\n};\n\nexport function applyParametersToRenderPipelineDescriptor(\n pipelineDescriptor: GPURenderPipelineDescriptor,\n parameters: Parameters = {}\n): void {\n // Apply defaults\n Object.assign(pipelineDescriptor, {...DEFAULT_PIPELINE_DESCRIPTOR, ...pipelineDescriptor});\n setParameters(pipelineDescriptor, parameters);\n}\n\n// Apply any supplied parameters\nfunction setParameters(\n pipelineDescriptor: GPURenderPipelineDescriptor,\n parameters: Parameters\n): void {\n for (const [key, value] of Object.entries(parameters)) {\n const setterFunction = PARAMETER_TABLE[key as keyof Parameters];\n if (!setterFunction) {\n throw new Error(`Illegal parameter ${key}`);\n }\n setterFunction(key, value, pipelineDescriptor);\n }\n}\n\nfunction addColorState(descriptor: GPURenderPipelineDescriptor): GPUColorTargetState[] {\n descriptor.fragment!.targets = descriptor.fragment?.targets || [];\n if (!Array.isArray(descriptor.fragment?.targets)) {\n throw new Error('colorstate');\n }\n if (descriptor.fragment?.targets?.length === 0) {\n descriptor.fragment.targets?.push({});\n }\n return descriptor.fragment?.targets as GPUColorTargetState[];\n}\n"],"file":"webgpu-parameters.js"}
1
+ {"version":3,"file":"webgpu-parameters.js","names":["addDepthStencil","descriptor","depthStencil","format","stencilFront","stencilBack","depthWriteEnabled","undefined","depthCompare","PARAMETER_TABLE","cullMode","parameter","value","primitive","frontFace","depthFormat","depthBias","depthBiasSlopeScale","depthBiasClamp","stencilReadMask","stencilWriteMask","stencilCompare","compare","stencilPassOperation","passOp","stencilFailOperation","failOp","stencilDepthFailOperation","depthFailOp","sampleCount","multisample","count","sampleMask","mask","sampleAlphaToCoverageEnabled","alphaToCoverageEnabled","colorMask","targets","addColorState","writeMask","blendColorOperation","DEFAULT_PIPELINE_DESCRIPTOR","topology","vertex","module","entryPoint","fragment","layout","applyParametersToRenderPipelineDescriptor","pipelineDescriptor","parameters","arguments","length","Object","assign","setParameters","key","entries","setterFunction","Error","concat","_descriptor$fragment","_descriptor$fragment2","_descriptor$fragment3","_descriptor$fragment4","_descriptor$fragment5","Array","isArray","_descriptor$fragment$","push"],"sources":["../../../src/adapter/helpers/webgpu-parameters.ts"],"sourcesContent":["import {Parameters} from '@luma.gl/api';\n\nfunction addDepthStencil(descriptor: GPURenderPipelineDescriptor): GPUDepthStencilState {\n descriptor.depthStencil = descriptor.depthStencil || {\n // required, set something\n format: 'depth24plus',\n stencilFront: {},\n stencilBack: {},\n // TODO can this cause trouble? Should we set to WebGPU defaults? Are there defaults?\n depthWriteEnabled: undefined!,\n depthCompare: undefined!\n };\n return descriptor.depthStencil;\n}\n\n/**\n * Supports for luma.gl's flat parameter space\n * Populates the corresponding sub-objects in a GPURenderPipelineDescriptor\n */\n// @ts-expect-error\nexport const PARAMETER_TABLE: Record<keyof Parameters, Function> = {\n // RASTERIZATION PARAMETERS\n\n cullMode: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.primitive = descriptor.primitive || {};\n descriptor.primitive.cullMode = value;\n },\n\n frontFace: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.primitive = descriptor.primitive || {};\n descriptor.primitive.frontFace = value;\n },\n\n // DEPTH\n\n depthWriteEnabled: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthWriteEnabled = value;\n },\n\n depthCompare: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthCompare = value;\n },\n\n depthFormat: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.format = value;\n },\n\n depthBias: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthBias = value;\n },\n\n depthBiasSlopeScale: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthBiasSlopeScale = value;\n },\n\n depthBiasClamp: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthBiasClamp = value;\n },\n\n // STENCIL\n\n stencilReadMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilReadMask = value;\n },\n\n stencilWriteMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilWriteMask = value;\n },\n\n stencilCompare: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront.compare = value;\n depthStencil.stencilBack.compare = value;\n },\n\n stencilPassOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront.passOp = value;\n depthStencil.stencilBack.passOp = value;\n },\n\n stencilFailOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront.failOp = value;\n depthStencil.stencilBack.failOp = value;\n },\n\n stencilDepthFailOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront.depthFailOp = value;\n depthStencil.stencilBack.depthFailOp = value;\n },\n\n // MULTISAMPLE\n\n sampleCount: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.multisample = descriptor.multisample || {};\n descriptor.multisample.count = value;\n },\n\n sampleMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.multisample = descriptor.multisample || {};\n descriptor.multisample.mask = value;\n },\n\n sampleAlphaToCoverageEnabled: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.multisample = descriptor.multisample || {};\n descriptor.multisample.alphaToCoverageEnabled = value;\n },\n\n // COLOR\n\n colorMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const targets = addColorState(descriptor);\n targets[0].writeMask = value;\n },\n\n blendColorOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n // const targets = addColorState(descriptor);\n // const target = targets[0];\n // const blend: GPUBlendState = target.blend || {color: {alpha: 0}};\n // blend.color = blend.color || {};\n // target.blend.color.operation = value;\n }\n\n /*\n blendColorSrcTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.color = targets[0].blend.color || {};\n targets[0].blend.color.srcTarget = value;\n },\n\n blendColorDstTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.color = targets[0].blend.color || {};\n targets[0].blend.color.dstTarget = value;\n },\n\n blendAlphaOperation: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.alpha = targets[0].blend.alpha || {};\n targets[0].blend.alpha.operation = value;\n },\n\n blendAlphaSrcTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.alpha = targets[0].blend.alpha || {};\n targets[0].blend.alpha.srcTarget = value;\n },\n\n blendAlphaDstTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.alpha = targets[0].blend.alpha || {};\n targets[0].blend.alpha.dstTarget = value;\n },\n */\n};\n\nconst DEFAULT_PIPELINE_DESCRIPTOR: GPURenderPipelineDescriptor = {\n // depthStencil: {\n // stencilFront: {},\n // stencilBack: {},\n // // depthWriteEnabled: true,\n // // depthCompare: 'less',\n // // format: 'depth24plus-stencil8',\n // },\n\n primitive: {\n cullMode: 'back',\n topology: 'triangle-list'\n },\n\n vertex: {\n module: undefined!,\n entryPoint: 'main'\n },\n\n fragment: {\n module: undefined!,\n entryPoint: 'main',\n targets: [\n // { format: props.color0Format || 'bgra8unorm' }\n ]\n },\n\n layout: 'auto'\n};\n\nexport function applyParametersToRenderPipelineDescriptor(\n pipelineDescriptor: GPURenderPipelineDescriptor,\n parameters: Parameters = {}\n): void {\n // Apply defaults\n Object.assign(pipelineDescriptor, {...DEFAULT_PIPELINE_DESCRIPTOR, ...pipelineDescriptor});\n setParameters(pipelineDescriptor, parameters);\n}\n\n// Apply any supplied parameters\nfunction setParameters(\n pipelineDescriptor: GPURenderPipelineDescriptor,\n parameters: Parameters\n): void {\n for (const [key, value] of Object.entries(parameters)) {\n const setterFunction = PARAMETER_TABLE[key as keyof Parameters];\n if (!setterFunction) {\n throw new Error(`Illegal parameter ${key}`);\n }\n setterFunction(key, value, pipelineDescriptor);\n }\n}\n\nfunction addColorState(descriptor: GPURenderPipelineDescriptor): GPUColorTargetState[] {\n descriptor.fragment.targets = descriptor.fragment?.targets || [];\n if (!Array.isArray(descriptor.fragment?.targets)) {\n throw new Error('colorstate');\n }\n if (descriptor.fragment?.targets?.length === 0) {\n descriptor.fragment.targets?.push({});\n }\n return descriptor.fragment?.targets as GPUColorTargetState[];\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /// <reference types="@webgpu/types" />
1
+ /// <reference types="dist" />
2
2
  import { Buffer, BufferProps } from '@luma.gl/api';
3
3
  import type WebGPUDevice from '../webgpu-device';
4
4
  export default class WebGPUBuffer extends Buffer {
@@ -1,22 +1,15 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
  import { Buffer } from '@luma.gl/api';
3
-
4
3
  function getByteLength(props) {
5
4
  var _props$data;
6
-
7
5
  return props.byteLength || ((_props$data = props.data) === null || _props$data === void 0 ? void 0 : _props$data.byteLength) || 0;
8
6
  }
9
-
10
7
  export default class WebGPUBuffer extends Buffer {
11
8
  constructor(device, props) {
12
9
  super(device, props);
13
-
14
10
  _defineProperty(this, "device", void 0);
15
-
16
11
  _defineProperty(this, "handle", void 0);
17
-
18
12
  _defineProperty(this, "byteLength", void 0);
19
-
20
13
  this.device = device;
21
14
  this.byteLength = getByteLength(props);
22
15
  const mapBuffer = Boolean(props.data);
@@ -26,25 +19,23 @@ export default class WebGPUBuffer extends Buffer {
26
19
  mappedAtCreation: this.props.mappedAtCreation || mapBuffer,
27
20
  label: this.props.id
28
21
  });
29
-
30
22
  if (props.data) {
31
23
  this._writeMapped(props.data);
32
24
  }
33
-
34
25
  if (mapBuffer && !props.mappedAtCreation) {
35
26
  this.handle.unmap();
36
27
  }
37
28
  }
38
-
39
29
  destroy() {
40
30
  this.handle.destroy();
41
31
  }
42
-
43
- write(data, byteOffset = 0) {
32
+ write(data) {
33
+ let byteOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
44
34
  this.device.handle.queue.writeBuffer(this.handle, byteOffset, data.buffer, data.byteOffset, data.byteLength);
45
35
  }
46
-
47
- async readAsync(byteOffset = 0, byteLength = this.byteLength) {
36
+ async readAsync() {
37
+ let byteOffset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
38
+ let byteLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.byteLength;
48
39
  const tempBuffer = new WebGPUBuffer(this.device, {
49
40
  usage: Buffer.MAP_READ | Buffer.COPY_DST,
50
41
  byteLength
@@ -58,23 +49,22 @@ export default class WebGPUBuffer extends Buffer {
58
49
  tempBuffer.destroy();
59
50
  return arrayBuffer;
60
51
  }
61
-
62
52
  _writeMapped(typedArray) {
63
53
  const arrayBuffer = this.handle.getMappedRange();
64
54
  new typedArray.constructor(arrayBuffer).set(typedArray);
65
55
  }
66
-
67
- mapAsync(mode, offset = 0, size) {
56
+ mapAsync(mode) {
57
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
58
+ let size = arguments.length > 2 ? arguments[2] : undefined;
68
59
  return this.handle.mapAsync(mode, offset, size);
69
60
  }
70
-
71
- getMappedRange(offset = 0, size) {
61
+ getMappedRange() {
62
+ let offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
63
+ let size = arguments.length > 1 ? arguments[1] : undefined;
72
64
  return this.handle.getMappedRange(offset, size);
73
65
  }
74
-
75
66
  unmap() {
76
67
  this.handle.unmap();
77
68
  }
78
-
79
69
  }
80
70
  //# sourceMappingURL=webgpu-buffer.js.map