@luma.gl/webgpu 9.0.0-alpha.32 → 9.0.0-alpha.34

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 (40) hide show
  1. package/dist/adapter/helpers/generate-mipmaps.js +18 -6
  2. package/dist/adapter/helpers/generate-mipmaps.js.map +1 -1
  3. package/dist/adapter/helpers/get-bind-group.js +1 -1
  4. package/dist/adapter/helpers/get-bind-group.js.map +1 -1
  5. package/dist/adapter/helpers/get-vertex-buffer-layout.d.ts.map +1 -1
  6. package/dist/adapter/helpers/get-vertex-buffer-layout.js +12 -11
  7. package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +1 -1
  8. package/dist/adapter/helpers/webgpu-parameters.js +1 -1
  9. package/dist/adapter/helpers/webgpu-parameters.js.map +1 -1
  10. package/dist/adapter/resources/webgpu-buffer.js +3 -4
  11. package/dist/adapter/resources/webgpu-buffer.js.map +1 -1
  12. package/dist/adapter/resources/webgpu-command-encoder.js +2 -3
  13. package/dist/adapter/resources/webgpu-command-encoder.js.map +1 -1
  14. package/dist/adapter/resources/webgpu-compute-pass.js +3 -4
  15. package/dist/adapter/resources/webgpu-compute-pass.js.map +1 -1
  16. package/dist/adapter/resources/webgpu-compute-pipeline.js +2 -3
  17. package/dist/adapter/resources/webgpu-compute-pipeline.js.map +1 -1
  18. package/dist/adapter/resources/webgpu-external-texture.js +3 -4
  19. package/dist/adapter/resources/webgpu-external-texture.js.map +1 -1
  20. package/dist/adapter/resources/webgpu-framebuffer.js +1 -2
  21. package/dist/adapter/resources/webgpu-framebuffer.js.map +1 -1
  22. package/dist/adapter/resources/webgpu-render-pass.js +3 -4
  23. package/dist/adapter/resources/webgpu-render-pass.js.map +1 -1
  24. package/dist/adapter/resources/webgpu-render-pipeline.js +13 -14
  25. package/dist/adapter/resources/webgpu-render-pipeline.js.map +1 -1
  26. package/dist/adapter/resources/webgpu-sampler.js +2 -3
  27. package/dist/adapter/resources/webgpu-sampler.js.map +1 -1
  28. package/dist/adapter/resources/webgpu-shader.js +4 -5
  29. package/dist/adapter/resources/webgpu-shader.js.map +1 -1
  30. package/dist/adapter/resources/webgpu-texture.js +6 -7
  31. package/dist/adapter/resources/webgpu-texture.js.map +1 -1
  32. package/dist/adapter/webgpu-canvas-context.js +8 -9
  33. package/dist/adapter/webgpu-canvas-context.js.map +1 -1
  34. package/dist/adapter/webgpu-device.js +10 -11
  35. package/dist/adapter/webgpu-device.js.map +1 -1
  36. package/dist/dist.dev.js +213 -44
  37. package/dist/index.cjs +9 -7
  38. package/dist.min.js +5 -4
  39. package/package.json +3 -3
  40. package/src/adapter/helpers/get-vertex-buffer-layout.ts +12 -9
@@ -1,11 +1,23 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- const 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}";
3
- const 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}";
1
+ const VS_GEN_MIPMAP = `\#version 450
2
+ const vec2 pos[4] = vec2[4](vec2(-1.0f, 1.0f), vec2(1.0f, 1.0f), vec2(-1.0f, -1.0f), vec2(1.0f, -1.0f));
3
+ layout(location = 0) out vec2 vTex;
4
+ void main() {
5
+ gl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);
6
+ vTex = gl_Position / 2.0f + vec2(0.5f);
7
+ }`;
8
+ const FS_GEN_MIPMAP = `#version 450
9
+ layout(set = 0, binding = 0) uniform sampler imgSampler;
10
+ layout(set = 0, binding = 1) uniform texture2D img;
11
+ layout(location = 0) in vec2 vTex;
12
+ layout(location = 0) out vec4 outColor;
13
+ void main() {
14
+ outColor = texture(sampler2D(img, imgSampler), vTex);
15
+ }`;
4
16
  export class WebGPUMipmapGenerator {
5
17
  constructor(device, glslang) {
6
- _defineProperty(this, "device", void 0);
7
- _defineProperty(this, "mipmapSampler", void 0);
8
- _defineProperty(this, "mipmapPipeline", void 0);
18
+ this.device = void 0;
19
+ this.mipmapSampler = void 0;
20
+ this.mipmapPipeline = void 0;
9
21
  this.device = device;
10
22
  this.mipmapSampler = device.createSampler({
11
23
  minFilter: 'linear'
@@ -1 +1 @@
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
+ {"version":3,"file":"generate-mipmaps.js","names":["VS_GEN_MIPMAP","FS_GEN_MIPMAP","WebGPUMipmapGenerator","constructor","device","glslang","mipmapSampler","mipmapPipeline","createSampler","minFilter","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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"}
@@ -12,7 +12,7 @@ export function getBindGroup(device, bindGroupLayout, shaderLayout, bindings) {
12
12
  export function getShaderLayoutBinding(shaderLayout, bindingName) {
13
13
  const bindingLayout = shaderLayout.bindings.find(binding => binding.name === bindingName);
14
14
  if (!bindingLayout) {
15
- log.warn("Binding ".concat(bindingName, " not set: Not found in shader layout."))();
15
+ log.warn(`Binding ${bindingName} not set: Not found in shader layout.`)();
16
16
  }
17
17
  return bindingLayout;
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-bind-group.js","names":["Buffer","Sampler","Texture","log","cast","makeBindGroupLayout","device","layout","bindings","Error","getBindGroup","bindGroupLayout","shaderLayout","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, BindingDeclaration, Binding} from '@luma.gl/core';\nimport {Buffer, Sampler, Texture, log, cast} from '@luma.gl/core';\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(\n device: GPUDevice,\n layout: GPUBindGroupLayout,\n bindings: Binding[]\n): 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 shaderLayout: ShaderLayout,\n bindings: Record<string, Binding>\n): GPUBindGroup {\n const entries = getBindGroupEntries(bindings, shaderLayout);\n return device.createBindGroup({\n layout: bindGroupLayout,\n entries\n });\n}\n\nexport function getShaderLayoutBinding(\n shaderLayout: ShaderLayout,\n bindingName: string\n): BindingDeclaration {\n const bindingLayout = shaderLayout.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(\n bindings: Record<string, Binding>,\n shaderLayout: ShaderLayout\n): GPUBindGroupEntry[] {\n const entries: GPUBindGroupEntry[] = [];\n\n for (const [bindingName, value] of Object.entries(bindings)) {\n const bindingLayout = getShaderLayoutBinding(shaderLayout, 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,eAAe;AASjE,OAAO,SAASC,mBAAmBA,CACjCC,MAAiB,EACjBC,MAA0B,EAC1BC,QAAmB,EACC;EACpB,MAAM,IAAIC,KAAK,CAAC,iBAAiB,CAAC;AAKpC;AAKA,OAAO,SAASC,YAAYA,CAC1BJ,MAAiB,EACjBK,eAAmC,EACnCC,YAA0B,EAC1BJ,QAAiC,EACnB;EACd,MAAMK,OAAO,GAAGC,mBAAmB,CAACN,QAAQ,EAAEI,YAAY,CAAC;EAC3D,OAAON,MAAM,CAACS,eAAe,CAAC;IAC5BR,MAAM,EAAEI,eAAe;IACvBE;EACF,CAAC,CAAC;AACJ;AAEA,OAAO,SAASG,sBAAsBA,CACpCJ,YAA0B,EAC1BK,WAAmB,EACC;EACpB,MAAMC,aAAa,GAAGN,YAAY,CAACJ,QAAQ,CAACW,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACC,IAAI,KAAKJ,WAAW,CAAC;EACzF,IAAI,CAACC,aAAa,EAAE;IAClBf,GAAG,CAACmB,IAAI,YAAAC,MAAA,CAAYN,WAAW,0CAAuC,CAAC,CAAC,CAAC;EAC3E;EACA,OAAOC,aAAa;AACtB;AAMA,SAASJ,mBAAmBA,CAC1BN,QAAiC,EACjCI,YAA0B,EACL;EACrB,MAAMC,OAA4B,GAAG,EAAE;EAEvC,KAAK,MAAM,CAACI,WAAW,EAAEO,KAAK,CAAC,IAAIC,MAAM,CAACZ,OAAO,CAACL,QAAQ,CAAC,EAAE;IAC3D,MAAMU,aAAa,GAAGF,sBAAsB,CAACJ,YAAY,EAAEK,WAAW,CAAC;IACvE,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,YAAYpB,MAAM,EAAE;IAC7B,OAAO;MACLoB,OAAO,EAAES,KAAK;MACdC,QAAQ,EAAE;QACRC,MAAM,EAAE3B,IAAI,CAAegB,OAAO,CAAC,CAACY;MACtC;IACF,CAAC;EACH;EACA,IAAIZ,OAAO,YAAYnB,OAAO,EAAE;IAC9B,OAAO;MACLmB,OAAO,EAAES,KAAK;MACdC,QAAQ,EAAE1B,IAAI,CAAgBgB,OAAO,CAAC,CAACY;IACzC,CAAC;EACH,CAAC,MAAM,IAAIZ,OAAO,YAAYlB,OAAO,EAAE;IACrC,OAAO;MACLkB,OAAO,EAAES,KAAK;MACdC,QAAQ,EAAE1B,IAAI,CAAgBgB,OAAO,CAAC,CAACY,MAAM,CAACC,UAAU,CAAC;IAC3D,CAAC;EACH;EACA,MAAM,IAAIxB,KAAK,CAAC,iBAAiB,CAAC;AACpC"}
1
+ {"version":3,"file":"get-bind-group.js","names":["Buffer","Sampler","Texture","log","cast","makeBindGroupLayout","device","layout","bindings","Error","getBindGroup","bindGroupLayout","shaderLayout","entries","getBindGroupEntries","createBindGroup","getShaderLayoutBinding","bindingName","bindingLayout","find","binding","name","warn","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, BindingDeclaration, Binding} from '@luma.gl/core';\nimport {Buffer, Sampler, Texture, log, cast} from '@luma.gl/core';\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(\n device: GPUDevice,\n layout: GPUBindGroupLayout,\n bindings: Binding[]\n): 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 shaderLayout: ShaderLayout,\n bindings: Record<string, Binding>\n): GPUBindGroup {\n const entries = getBindGroupEntries(bindings, shaderLayout);\n return device.createBindGroup({\n layout: bindGroupLayout,\n entries\n });\n}\n\nexport function getShaderLayoutBinding(\n shaderLayout: ShaderLayout,\n bindingName: string\n): BindingDeclaration {\n const bindingLayout = shaderLayout.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(\n bindings: Record<string, Binding>,\n shaderLayout: ShaderLayout\n): GPUBindGroupEntry[] {\n const entries: GPUBindGroupEntry[] = [];\n\n for (const [bindingName, value] of Object.entries(bindings)) {\n const bindingLayout = getShaderLayoutBinding(shaderLayout, 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,eAAe;AASjE,OAAO,SAASC,mBAAmBA,CACjCC,MAAiB,EACjBC,MAA0B,EAC1BC,QAAmB,EACC;EACpB,MAAM,IAAIC,KAAK,CAAC,iBAAiB,CAAC;AAKpC;AAKA,OAAO,SAASC,YAAYA,CAC1BJ,MAAiB,EACjBK,eAAmC,EACnCC,YAA0B,EAC1BJ,QAAiC,EACnB;EACd,MAAMK,OAAO,GAAGC,mBAAmB,CAACN,QAAQ,EAAEI,YAAY,CAAC;EAC3D,OAAON,MAAM,CAACS,eAAe,CAAC;IAC5BR,MAAM,EAAEI,eAAe;IACvBE;EACF,CAAC,CAAC;AACJ;AAEA,OAAO,SAASG,sBAAsBA,CACpCJ,YAA0B,EAC1BK,WAAmB,EACC;EACpB,MAAMC,aAAa,GAAGN,YAAY,CAACJ,QAAQ,CAACW,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACC,IAAI,KAAKJ,WAAW,CAAC;EACzF,IAAI,CAACC,aAAa,EAAE;IAClBf,GAAG,CAACmB,IAAI,CAAE,WAAUL,WAAY,uCAAsC,CAAC,CAAC,CAAC;EAC3E;EACA,OAAOC,aAAa;AACtB;AAMA,SAASJ,mBAAmBA,CAC1BN,QAAiC,EACjCI,YAA0B,EACL;EACrB,MAAMC,OAA4B,GAAG,EAAE;EAEvC,KAAK,MAAM,CAACI,WAAW,EAAEM,KAAK,CAAC,IAAIC,MAAM,CAACX,OAAO,CAACL,QAAQ,CAAC,EAAE;IAC3D,MAAMU,aAAa,GAAGF,sBAAsB,CAACJ,YAAY,EAAEK,WAAW,CAAC;IACvE,IAAIC,aAAa,EAAE;MACjBL,OAAO,CAACY,IAAI,CAACC,iBAAiB,CAACH,KAAK,EAAEL,aAAa,CAACS,QAAQ,CAAC,CAAC;IAChE;EACF;EAEA,OAAOd,OAAO;AAChB;AAEA,SAASa,iBAAiBA,CAACN,OAAgB,EAAEQ,KAAa,EAAqB;EAC7E,IAAIR,OAAO,YAAYpB,MAAM,EAAE;IAC7B,OAAO;MACLoB,OAAO,EAAEQ,KAAK;MACdC,QAAQ,EAAE;QACRC,MAAM,EAAE1B,IAAI,CAAegB,OAAO,CAAC,CAACW;MACtC;IACF,CAAC;EACH;EACA,IAAIX,OAAO,YAAYnB,OAAO,EAAE;IAC9B,OAAO;MACLmB,OAAO,EAAEQ,KAAK;MACdC,QAAQ,EAAEzB,IAAI,CAAgBgB,OAAO,CAAC,CAACW;IACzC,CAAC;EACH,CAAC,MAAM,IAAIX,OAAO,YAAYlB,OAAO,EAAE;IACrC,OAAO;MACLkB,OAAO,EAAEQ,KAAK;MACdC,QAAQ,EAAEzB,IAAI,CAAgBgB,OAAO,CAAC,CAACW,MAAM,CAACC,UAAU,CAAC;IAC3D,CAAC;EACH;EACA,MAAM,IAAIvB,KAAK,CAAC,iBAAiB,CAAC;AACpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-vertex-buffer-layout.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-vertex-buffer-layout.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAqC,MAAM,eAAe,CAAC;AAWlG;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAAE,GAC3B,qBAAqB,EAAE,CAoEzB;AAED,wBAAgB,cAAc,CAC5B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2BxB"}
1
+ {"version":3,"file":"get-vertex-buffer-layout.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-vertex-buffer-layout.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAC,YAAY,EAAE,YAAY,EAAqC,MAAM,eAAe,CAAC;AAWlG;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAAE,GAC3B,qBAAqB,EAAE,CAuEzB;AAED,wBAAgB,cAAc,CAC5B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2BxB"}
@@ -1,25 +1,26 @@
1
- import { decodeVertexFormat } from '@luma.gl/core';
1
+ import { getAttributeInfosFromLayouts, decodeVertexFormat } from '@luma.gl/core';
2
2
  function getWebGPUVertexFormat(format) {
3
3
  if (format.endsWith('-webgl')) {
4
- throw new Error("WebGPU does not support vertex format ".concat(format));
4
+ throw new Error(`WebGPU does not support vertex format ${format}`);
5
5
  }
6
6
  return format;
7
7
  }
8
8
  export function getVertexBufferLayout(shaderLayout, bufferLayout) {
9
+ const attributeInfos = getAttributeInfosFromLayouts(shaderLayout, bufferLayout);
9
10
  const vertexBufferLayouts = [];
10
11
  const usedAttributes = new Set();
11
12
  for (const mapping of bufferLayout) {
12
13
  const vertexAttributes = [];
13
14
  let stepMode = 'vertex';
14
15
  let byteStride = 0;
15
- const byteOffset = mapping.byteOffset || 0;
16
16
  if (mapping.attributes) {
17
- for (const interleaved of mapping.attributes) {
18
- const attributeLayout = findAttributeLayout(shaderLayout, interleaved.name, usedAttributes);
17
+ for (const attributeMapping of mapping.attributes) {
18
+ const attributeName = attributeMapping.attribute;
19
+ const attributeLayout = findAttributeLayout(shaderLayout, attributeName, usedAttributes);
19
20
  stepMode = attributeLayout.stepMode || 'vertex';
20
21
  vertexAttributes.push({
21
- format: getWebGPUVertexFormat(interleaved.format || mapping.format),
22
- offset: byteOffset + byteStride,
22
+ format: getWebGPUVertexFormat(attributeMapping.format || mapping.format),
23
+ offset: attributeMapping.byteOffset,
23
24
  shaderLocation: attributeLayout.location
24
25
  });
25
26
  byteStride += decodeVertexFormat(mapping.format).byteLength;
@@ -30,7 +31,7 @@ export function getVertexBufferLayout(shaderLayout, bufferLayout) {
30
31
  stepMode = attributeLayout.stepMode || 'vertex';
31
32
  vertexAttributes.push({
32
33
  format: getWebGPUVertexFormat(mapping.format),
33
- offset: byteOffset,
34
+ offset: 0,
34
35
  shaderLocation: attributeLayout.location
35
36
  });
36
37
  }
@@ -62,7 +63,7 @@ export function getBufferSlots(shaderLayout, bufferLayout) {
62
63
  for (const mapping of bufferLayout) {
63
64
  if ('attributes' in mapping) {
64
65
  for (const interleaved of mapping.attributes) {
65
- usedAttributes.add(interleaved.name);
66
+ usedAttributes.add(interleaved.attribute);
66
67
  }
67
68
  } else {
68
69
  usedAttributes.add(mapping.name);
@@ -79,10 +80,10 @@ export function getBufferSlots(shaderLayout, bufferLayout) {
79
80
  function findAttributeLayout(shaderLayout, name, attributeNames) {
80
81
  const attribute = shaderLayout.attributes.find(attribute => attribute.name === name);
81
82
  if (!attribute) {
82
- throw new Error("Unknown attribute ".concat(name));
83
+ throw new Error(`Unknown attribute ${name}`);
83
84
  }
84
85
  if (attributeNames.has(name)) {
85
- throw new Error("Duplicate attribute ".concat(name));
86
+ throw new Error(`Duplicate attribute ${name}`);
86
87
  }
87
88
  attributeNames.add(name);
88
89
  return attribute;
@@ -1 +1 @@
1
- {"version":3,"file":"get-vertex-buffer-layout.js","names":["decodeVertexFormat","getWebGPUVertexFormat","format","endsWith","Error","concat","getVertexBufferLayout","shaderLayout","bufferLayout","vertexBufferLayouts","usedAttributes","Set","mapping","vertexAttributes","stepMode","byteStride","byteOffset","attributes","interleaved","attributeLayout","findAttributeLayout","name","push","offset","shaderLocation","location","byteLength","arrayStride","attribute","has","getBufferSlots","bufferSlot","bufferSlots","add","attributeNames","find"],"sources":["../../../src/adapter/helpers/get-vertex-buffer-layout.ts"],"sourcesContent":["import type {ShaderLayout, BufferLayout, AttributeDeclaration, VertexFormat} from '@luma.gl/core';\nimport {decodeVertexFormat} from '@luma.gl/core';\n\n/** Throw error on any WebGL-only vertex formats */\nfunction getWebGPUVertexFormat(format: VertexFormat): GPUVertexFormat {\n if (format.endsWith('-webgl')) {\n throw new Error(`WebGPU does not support vertex format ${format}`);\n }\n return format as GPUVertexFormat;\n}\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 bufferLayout The buffer map is optional\n * @returns WebGPU layout intended for a GPURenderPassDescriptor.\n */\nexport function getVertexBufferLayout(\n shaderLayout: ShaderLayout,\n bufferLayout: BufferLayout[]\n): GPUVertexBufferLayout[] {\n const vertexBufferLayouts: GPUVertexBufferLayout[] = [];\n const usedAttributes = new Set<string>();\n\n // First handle any buffers mentioned in `bufferLayout`\n for (const mapping of bufferLayout) {\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 (mapping.attributes) {\n // const arrayStride = mapping.byteStride; TODO\n for (const interleaved of mapping.attributes) {\n const attributeLayout = findAttributeLayout(shaderLayout, interleaved.name, usedAttributes);\n\n stepMode = attributeLayout.stepMode || 'vertex';\n vertexAttributes.push({\n format: getWebGPUVertexFormat(interleaved.format || mapping.format),\n offset: byteOffset + byteStride,\n shaderLocation: attributeLayout.location\n });\n\n byteStride += decodeVertexFormat(mapping.format).byteLength;\n }\n // non-interleaved mapping (just set offset and stride)\n } else {\n const attributeLayout = findAttributeLayout(shaderLayout, mapping.name, usedAttributes);\n byteStride = decodeVertexFormat(mapping.format).byteLength;\n\n stepMode = attributeLayout.stepMode || 'vertex';\n vertexAttributes.push({\n format: getWebGPUVertexFormat(mapping.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 - TODO - avoid hardcoded types\n for (const attribute of shaderLayout.attributes) {\n if (!usedAttributes.has(attribute.name)) {\n vertexBufferLayouts.push({\n arrayStride: decodeVertexFormat('float32x3').byteLength,\n stepMode: attribute.stepMode || 'vertex',\n attributes: [\n {\n format: getWebGPUVertexFormat('float32x3'),\n offset: 0,\n shaderLocation: attribute.location\n }\n ]\n });\n }\n }\n\n return vertexBufferLayouts;\n}\n\nexport function getBufferSlots(\n shaderLayout: ShaderLayout,\n bufferLayout: BufferLayout[]\n): 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 `bufferLayout`\n for (const mapping of bufferLayout) {\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 shaderLayout.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(\n shaderLayout: ShaderLayout,\n name: string,\n attributeNames: Set<string>\n): AttributeDeclaration {\n const attribute = shaderLayout.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":"AACA,SAAQA,kBAAkB,QAAO,eAAe;AAGhD,SAASC,qBAAqBA,CAACC,MAAoB,EAAmB;EACpE,IAAIA,MAAM,CAACC,QAAQ,CAAC,QAAQ,CAAC,EAAE;IAC7B,MAAM,IAAIC,KAAK,0CAAAC,MAAA,CAA0CH,MAAM,CAAE,CAAC;EACpE;EACA,OAAOA,MAAM;AACf;AASA,OAAO,SAASI,qBAAqBA,CACnCC,YAA0B,EAC1BC,YAA4B,EACH;EACzB,MAAMC,mBAA4C,GAAG,EAAE;EACvD,MAAMC,cAAc,GAAG,IAAIC,GAAG,CAAS,CAAC;EAGxC,KAAK,MAAMC,OAAO,IAAIJ,YAAY,EAAE;IAElC,MAAMK,gBAAsC,GAAG,EAAE;IAGjD,IAAIC,QAA+B,GAAG,QAAQ;IAC9C,IAAIC,UAAU,GAAG,CAAC;IAClB,MAAMC,UAAU,GAAGJ,OAAO,CAACI,UAAU,IAAI,CAAC;IAG1C,IAAIJ,OAAO,CAACK,UAAU,EAAE;MAEtB,KAAK,MAAMC,WAAW,IAAIN,OAAO,CAACK,UAAU,EAAE;QAC5C,MAAME,eAAe,GAAGC,mBAAmB,CAACb,YAAY,EAAEW,WAAW,CAACG,IAAI,EAAEX,cAAc,CAAC;QAE3FI,QAAQ,GAAGK,eAAe,CAACL,QAAQ,IAAI,QAAQ;QAC/CD,gBAAgB,CAACS,IAAI,CAAC;UACpBpB,MAAM,EAAED,qBAAqB,CAACiB,WAAW,CAAChB,MAAM,IAAIU,OAAO,CAACV,MAAM,CAAC;UACnEqB,MAAM,EAAEP,UAAU,GAAGD,UAAU;UAC/BS,cAAc,EAAEL,eAAe,CAACM;QAClC,CAAC,CAAC;QAEFV,UAAU,IAAIf,kBAAkB,CAACY,OAAO,CAACV,MAAM,CAAC,CAACwB,UAAU;MAC7D;IAEF,CAAC,MAAM;MACL,MAAMP,eAAe,GAAGC,mBAAmB,CAACb,YAAY,EAAEK,OAAO,CAACS,IAAI,EAAEX,cAAc,CAAC;MACvFK,UAAU,GAAGf,kBAAkB,CAACY,OAAO,CAACV,MAAM,CAAC,CAACwB,UAAU;MAE1DZ,QAAQ,GAAGK,eAAe,CAACL,QAAQ,IAAI,QAAQ;MAC/CD,gBAAgB,CAACS,IAAI,CAAC;QACpBpB,MAAM,EAAED,qBAAqB,CAACW,OAAO,CAACV,MAAM,CAAC;QAC7CqB,MAAM,EAAEP,UAAU;QAClBQ,cAAc,EAAEL,eAAe,CAACM;MAClC,CAAC,CAAC;IACJ;IAGAhB,mBAAmB,CAACa,IAAI,CAAC;MACvBK,WAAW,EAAEf,OAAO,CAACG,UAAU,IAAIA,UAAU;MAC7CD,QAAQ,EAAEA,QAAQ,IAAI,QAAQ;MAC9BG,UAAU,EAAEJ;IACd,CAAC,CAAC;EACJ;EAGA,KAAK,MAAMe,SAAS,IAAIrB,YAAY,CAACU,UAAU,EAAE;IAC/C,IAAI,CAACP,cAAc,CAACmB,GAAG,CAACD,SAAS,CAACP,IAAI,CAAC,EAAE;MACvCZ,mBAAmB,CAACa,IAAI,CAAC;QACvBK,WAAW,EAAE3B,kBAAkB,CAAC,WAAW,CAAC,CAAC0B,UAAU;QACvDZ,QAAQ,EAAEc,SAAS,CAACd,QAAQ,IAAI,QAAQ;QACxCG,UAAU,EAAE,CACV;UACEf,MAAM,EAAED,qBAAqB,CAAC,WAAW,CAAC;UAC1CsB,MAAM,EAAE,CAAC;UACTC,cAAc,EAAEI,SAAS,CAACH;QAC5B,CAAC;MAEL,CAAC,CAAC;IACJ;EACF;EAEA,OAAOhB,mBAAmB;AAC5B;AAEA,OAAO,SAASqB,cAAcA,CAC5BvB,YAA0B,EAC1BC,YAA4B,EACJ;EACxB,MAAME,cAAc,GAAG,IAAIC,GAAG,CAAS,CAAC;EACxC,IAAIoB,UAAU,GAAG,CAAC;EAClB,MAAMC,WAAmC,GAAG,CAAC,CAAC;EAG9C,KAAK,MAAMpB,OAAO,IAAIJ,YAAY,EAAE;IAElC,IAAI,YAAY,IAAII,OAAO,EAAE;MAC3B,KAAK,MAAMM,WAAW,IAAIN,OAAO,CAACK,UAAU,EAAE;QAC5CP,cAAc,CAACuB,GAAG,CAACf,WAAW,CAACG,IAAI,CAAC;MACtC;IAEF,CAAC,MAAM;MACLX,cAAc,CAACuB,GAAG,CAACrB,OAAO,CAACS,IAAI,CAAC;IAClC;IACAW,WAAW,CAACpB,OAAO,CAACS,IAAI,CAAC,GAAGU,UAAU,EAAE;EAC1C;EAGA,KAAK,MAAMH,SAAS,IAAIrB,YAAY,CAACU,UAAU,EAAE;IAC/C,IAAI,CAACP,cAAc,CAACmB,GAAG,CAACD,SAAS,CAACP,IAAI,CAAC,EAAE;MACvCW,WAAW,CAACJ,SAAS,CAACP,IAAI,CAAC,GAAGU,UAAU,EAAE;IAC5C;EACF;EAEA,OAAOC,WAAW;AACpB;AAOA,SAASZ,mBAAmBA,CAC1Bb,YAA0B,EAC1Bc,IAAY,EACZa,cAA2B,EACL;EACtB,MAAMN,SAAS,GAAGrB,YAAY,CAACU,UAAU,CAACkB,IAAI,CAACP,SAAS,IAAIA,SAAS,CAACP,IAAI,KAAKA,IAAI,CAAC;EACpF,IAAI,CAACO,SAAS,EAAE;IACd,MAAM,IAAIxB,KAAK,sBAAAC,MAAA,CAAsBgB,IAAI,CAAE,CAAC;EAC9C;EACA,IAAIa,cAAc,CAACL,GAAG,CAACR,IAAI,CAAC,EAAE;IAC5B,MAAM,IAAIjB,KAAK,wBAAAC,MAAA,CAAwBgB,IAAI,CAAE,CAAC;EAChD;EACAa,cAAc,CAACD,GAAG,CAACZ,IAAI,CAAC;EACxB,OAAOO,SAAS;AAClB"}
1
+ {"version":3,"file":"get-vertex-buffer-layout.js","names":["getAttributeInfosFromLayouts","decodeVertexFormat","getWebGPUVertexFormat","format","endsWith","Error","getVertexBufferLayout","shaderLayout","bufferLayout","attributeInfos","vertexBufferLayouts","usedAttributes","Set","mapping","vertexAttributes","stepMode","byteStride","attributes","attributeMapping","attributeName","attribute","attributeLayout","findAttributeLayout","push","offset","byteOffset","shaderLocation","location","byteLength","name","arrayStride","has","getBufferSlots","bufferSlot","bufferSlots","interleaved","add","attributeNames","find"],"sources":["../../../src/adapter/helpers/get-vertex-buffer-layout.ts"],"sourcesContent":["import type {ShaderLayout, BufferLayout, AttributeDeclaration, VertexFormat} from '@luma.gl/core';\nimport {getAttributeInfosFromLayouts, decodeVertexFormat} from '@luma.gl/core';\n\n/** Throw error on any WebGL-only vertex formats */\nfunction getWebGPUVertexFormat(format: VertexFormat): GPUVertexFormat {\n if (format.endsWith('-webgl')) {\n throw new Error(`WebGPU does not support vertex format ${format}`);\n }\n return format as GPUVertexFormat;\n}\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 bufferLayout The buffer map is optional\n * @returns WebGPU layout intended for a GPURenderPassDescriptor.\n */\nexport function getVertexBufferLayout(\n shaderLayout: ShaderLayout,\n bufferLayout: BufferLayout[]\n): GPUVertexBufferLayout[] {\n // @ts-expect-error Deduplicate and make use of the new core attribute logic here in webgpu module\n const attributeInfos = getAttributeInfosFromLayouts(shaderLayout, bufferLayout);\n\n const vertexBufferLayouts: GPUVertexBufferLayout[] = [];\n const usedAttributes = new Set<string>();\n\n // First handle any buffers mentioned in `bufferLayout`\n for (const mapping of bufferLayout) {\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 // interleaved mapping {..., attributes: [{...}, ...]}\n if (mapping.attributes) {\n // const arrayStride = mapping.byteStride; TODO\n for (const attributeMapping of mapping.attributes) {\n const attributeName = attributeMapping.attribute;\n const attributeLayout = findAttributeLayout(shaderLayout, attributeName, usedAttributes);\n\n stepMode = attributeLayout.stepMode || 'vertex';\n vertexAttributes.push({\n format: getWebGPUVertexFormat(attributeMapping.format || mapping.format),\n offset: attributeMapping.byteOffset,\n shaderLocation: attributeLayout.location\n });\n\n byteStride += decodeVertexFormat(mapping.format).byteLength;\n }\n // non-interleaved mapping (just set offset and stride)\n } else {\n const attributeLayout = findAttributeLayout(shaderLayout, mapping.name, usedAttributes);\n byteStride = decodeVertexFormat(mapping.format).byteLength;\n\n stepMode = attributeLayout.stepMode || 'vertex';\n vertexAttributes.push({\n format: getWebGPUVertexFormat(mapping.format),\n // We only support 0 offset for non-interleaved buffer layouts\n offset: 0,\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 - TODO - avoid hardcoded types\n for (const attribute of shaderLayout.attributes) {\n if (!usedAttributes.has(attribute.name)) {\n vertexBufferLayouts.push({\n arrayStride: decodeVertexFormat('float32x3').byteLength,\n stepMode: attribute.stepMode || 'vertex',\n attributes: [\n {\n format: getWebGPUVertexFormat('float32x3'),\n offset: 0,\n shaderLocation: attribute.location\n }\n ]\n });\n }\n }\n\n return vertexBufferLayouts;\n}\n\nexport function getBufferSlots(\n shaderLayout: ShaderLayout,\n bufferLayout: BufferLayout[]\n): 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 `bufferLayout`\n for (const mapping of bufferLayout) {\n // interleaved mapping {..., attributes: [{...}, ...]}\n if ('attributes' in mapping) {\n for (const interleaved of mapping.attributes) {\n usedAttributes.add(interleaved.attribute);\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 shaderLayout.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(\n shaderLayout: ShaderLayout,\n name: string,\n attributeNames: Set<string>\n): AttributeDeclaration {\n const attribute = shaderLayout.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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"}
@@ -117,7 +117,7 @@ function setParameters(pipelineDescriptor, parameters) {
117
117
  for (const [key, value] of Object.entries(parameters)) {
118
118
  const setterFunction = PARAMETER_TABLE[key];
119
119
  if (!setterFunction) {
120
- throw new Error("Illegal parameter ".concat(key));
120
+ throw new Error(`Illegal parameter ${key}`);
121
121
  }
122
122
  setterFunction(key, value, pipelineDescriptor);
123
123
  }
@@ -1 +1 @@
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","Array","isArray","_descriptor$fragment$","push"],"sources":["../../../src/adapter/helpers/webgpu-parameters.ts"],"sourcesContent":["import {Parameters} from '@luma.gl/core';\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
+ {"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","_descriptor$fragment","_descriptor$fragment2","_descriptor$fragment3","_descriptor$fragment4","Array","isArray","_descriptor$fragment$","push"],"sources":["../../../src/adapter/helpers/webgpu-parameters.ts"],"sourcesContent":["import {Parameters} from '@luma.gl/core';\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,3 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  import { Buffer } from '@luma.gl/core';
3
2
  function getByteLength(props) {
4
3
  var _props$data;
@@ -7,9 +6,9 @@ function getByteLength(props) {
7
6
  export class WebGPUBuffer extends Buffer {
8
7
  constructor(device, props) {
9
8
  super(device, props);
10
- _defineProperty(this, "device", void 0);
11
- _defineProperty(this, "handle", void 0);
12
- _defineProperty(this, "byteLength", void 0);
9
+ this.device = void 0;
10
+ this.handle = void 0;
11
+ this.byteLength = void 0;
13
12
  this.device = device;
14
13
  this.byteLength = getByteLength(props);
15
14
  const mapBuffer = Boolean(props.data);
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-buffer.js","names":["Buffer","getByteLength","props","_props$data","byteLength","data","WebGPUBuffer","constructor","device","_defineProperty","mapBuffer","Boolean","handle","createBuffer","size","usage","GPUBufferUsage","VERTEX","COPY_DST","mappedAtCreation","label","id","_writeMapped","unmap","destroy","write","byteOffset","arguments","length","undefined","queue","writeBuffer","buffer","readAsync","tempBuffer","MAP_READ","commandEncoder","createCommandEncoder","copyBufferToBuffer","submit","finish","mapAsync","GPUMapMode","READ","arrayBuffer","getMappedRange","slice","typedArray","set","mode","offset"],"sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"sourcesContent":["// WEBGPU Buffer implementation\nimport {Buffer, BufferProps} from '@luma.gl/core';\nimport type {WebGPUDevice} from '../webgpu-device';\n\nfunction getByteLength(props: BufferProps): number {\n return props.byteLength || props.data?.byteLength || 0;\n}\n\nexport class WebGPUBuffer extends Buffer {\n readonly device: WebGPUDevice;\n readonly handle: GPUBuffer;\n readonly byteLength: number;\n\n constructor(device: WebGPUDevice, props: BufferProps) {\n super(device, props);\n this.device = device;\n\n this.byteLength = getByteLength(props);\n const mapBuffer = Boolean(props.data);\n\n this.handle = this.props.handle || this.device.handle.createBuffer({\n size: this.byteLength,\n // usage defaults to vertex\n usage: this.props.usage || (GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST),\n mappedAtCreation: this.props.mappedAtCreation || mapBuffer,\n label: this.props.id\n });\n\n if (props.data) {\n this._writeMapped(props.data);\n // this.handle.writeAsync({data: props.data, map: false, unmap: false});\n }\n\n if (mapBuffer && !props.mappedAtCreation) {\n this.handle.unmap();\n }\n }\n\n override destroy(): void {\n this.handle.destroy();\n }\n\n // WebGPU provides multiple ways to write a buffer...\n override write(data: ArrayBufferView, byteOffset = 0) {\n this.device.handle.queue.writeBuffer(\n this.handle,\n byteOffset,\n data.buffer,\n data.byteOffset,\n data.byteLength\n );\n }\n\n override async readAsync(byteOffset: number = 0, byteLength: number = this.byteLength): Promise<ArrayBuffer> {\n // We need MAP_READ flag, but only COPY_DST buffers can have MAP_READ flag, so we need to create a temp buffer\n const tempBuffer = new WebGPUBuffer(this.device, {usage: Buffer.MAP_READ | Buffer.COPY_DST, byteLength});\n\n // Now do a GPU-side copy into the temp buffer we can actually read.\n // TODO - we are spinning up an independent command queue here, what does this mean\n const commandEncoder = this.device.handle.createCommandEncoder();\n commandEncoder.copyBufferToBuffer(this.handle, byteOffset, tempBuffer.handle, 0, byteLength);\n this.device.handle.queue.submit([commandEncoder.finish()]);\n\n // Map the temp buffer and read the data.\n await tempBuffer.handle.mapAsync(GPUMapMode.READ, byteOffset, byteLength);\n const arrayBuffer = tempBuffer.handle.getMappedRange().slice(0);\n tempBuffer.handle.unmap();\n tempBuffer.destroy();\n\n return arrayBuffer;\n }\n\n _writeMapped<TypedArray>(typedArray: TypedArray): void {\n const arrayBuffer = this.handle.getMappedRange();\n // @ts-expect-error\n new typedArray.constructor(arrayBuffer).set(typedArray);\n }\n\n // WEBGPU API\n\n mapAsync(mode: number, offset: number = 0, size?: number): Promise<void> {\n return this.handle.mapAsync(mode, offset, size);\n }\n\n getMappedRange(offset: number = 0, size?: number): ArrayBuffer {\n return this.handle.getMappedRange(offset, size);\n }\n\n unmap(): void {\n this.handle.unmap();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"webgpu-buffer.js","names":["Buffer","getByteLength","props","_props$data","byteLength","data","WebGPUBuffer","constructor","device","handle","mapBuffer","Boolean","createBuffer","size","usage","GPUBufferUsage","VERTEX","COPY_DST","mappedAtCreation","label","id","_writeMapped","unmap","destroy","write","byteOffset","arguments","length","undefined","queue","writeBuffer","buffer","readAsync","tempBuffer","MAP_READ","commandEncoder","createCommandEncoder","copyBufferToBuffer","submit","finish","mapAsync","GPUMapMode","READ","arrayBuffer","getMappedRange","slice","typedArray","set","mode","offset"],"sources":["../../../src/adapter/resources/webgpu-buffer.ts"],"sourcesContent":["// WEBGPU Buffer implementation\nimport {Buffer, BufferProps} from '@luma.gl/core';\nimport type {WebGPUDevice} from '../webgpu-device';\n\nfunction getByteLength(props: BufferProps): number {\n return props.byteLength || props.data?.byteLength || 0;\n}\n\nexport class WebGPUBuffer extends Buffer {\n readonly device: WebGPUDevice;\n readonly handle: GPUBuffer;\n readonly byteLength: number;\n\n constructor(device: WebGPUDevice, props: BufferProps) {\n super(device, props);\n this.device = device;\n\n this.byteLength = getByteLength(props);\n const mapBuffer = Boolean(props.data);\n\n this.handle = this.props.handle || this.device.handle.createBuffer({\n size: this.byteLength,\n // usage defaults to vertex\n usage: this.props.usage || (GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST),\n mappedAtCreation: this.props.mappedAtCreation || mapBuffer,\n label: this.props.id\n });\n\n if (props.data) {\n this._writeMapped(props.data);\n // this.handle.writeAsync({data: props.data, map: false, unmap: false});\n }\n\n if (mapBuffer && !props.mappedAtCreation) {\n this.handle.unmap();\n }\n }\n\n override destroy(): void {\n this.handle.destroy();\n }\n\n // WebGPU provides multiple ways to write a buffer...\n override write(data: ArrayBufferView, byteOffset = 0) {\n this.device.handle.queue.writeBuffer(\n this.handle,\n byteOffset,\n data.buffer,\n data.byteOffset,\n data.byteLength\n );\n }\n\n override async readAsync(byteOffset: number = 0, byteLength: number = this.byteLength): Promise<ArrayBuffer> {\n // We need MAP_READ flag, but only COPY_DST buffers can have MAP_READ flag, so we need to create a temp buffer\n const tempBuffer = new WebGPUBuffer(this.device, {usage: Buffer.MAP_READ | Buffer.COPY_DST, byteLength});\n\n // Now do a GPU-side copy into the temp buffer we can actually read.\n // TODO - we are spinning up an independent command queue here, what does this mean\n const commandEncoder = this.device.handle.createCommandEncoder();\n commandEncoder.copyBufferToBuffer(this.handle, byteOffset, tempBuffer.handle, 0, byteLength);\n this.device.handle.queue.submit([commandEncoder.finish()]);\n\n // Map the temp buffer and read the data.\n await tempBuffer.handle.mapAsync(GPUMapMode.READ, byteOffset, byteLength);\n const arrayBuffer = tempBuffer.handle.getMappedRange().slice(0);\n tempBuffer.handle.unmap();\n tempBuffer.destroy();\n\n return arrayBuffer;\n }\n\n _writeMapped<TypedArray>(typedArray: TypedArray): void {\n const arrayBuffer = this.handle.getMappedRange();\n // @ts-expect-error\n new typedArray.constructor(arrayBuffer).set(typedArray);\n }\n\n // WEBGPU API\n\n mapAsync(mode: number, offset: number = 0, size?: number): Promise<void> {\n return this.handle.mapAsync(mode, offset, size);\n }\n\n getMappedRange(offset: number = 0, size?: number): ArrayBuffer {\n return this.handle.getMappedRange(offset, size);\n }\n\n unmap(): void {\n this.handle.unmap();\n }\n}\n"],"mappings":"AACA,SAAQA,MAAM,QAAoB,eAAe;AAGjD,SAASC,aAAaA,CAACC,KAAkB,EAAU;EAAA,IAAAC,WAAA;EACjD,OAAOD,KAAK,CAACE,UAAU,MAAAD,WAAA,GAAID,KAAK,CAACG,IAAI,cAAAF,WAAA,uBAAVA,WAAA,CAAYC,UAAU,KAAI,CAAC;AACxD;AAEA,OAAO,MAAME,YAAY,SAASN,MAAM,CAAC;EAKvCO,WAAWA,CAACC,MAAoB,EAAEN,KAAkB,EAAE;IACpD,KAAK,CAACM,MAAM,EAAEN,KAAK,CAAC;IAAC,KALdM,MAAM;IAAA,KACNC,MAAM;IAAA,KACNL,UAAU;IAIjB,IAAI,CAACI,MAAM,GAAGA,MAAM;IAEpB,IAAI,CAACJ,UAAU,GAAGH,aAAa,CAACC,KAAK,CAAC;IACtC,MAAMQ,SAAS,GAAGC,OAAO,CAACT,KAAK,CAACG,IAAI,CAAC;IAErC,IAAI,CAACI,MAAM,GAAG,IAAI,CAACP,KAAK,CAACO,MAAM,IAAI,IAAI,CAACD,MAAM,CAACC,MAAM,CAACG,YAAY,CAAC;MACjEC,IAAI,EAAE,IAAI,CAACT,UAAU;MAErBU,KAAK,EAAE,IAAI,CAACZ,KAAK,CAACY,KAAK,IAAKC,cAAc,CAACC,MAAM,GAAGD,cAAc,CAACE,QAAS;MAC5EC,gBAAgB,EAAE,IAAI,CAAChB,KAAK,CAACgB,gBAAgB,IAAIR,SAAS;MAC1DS,KAAK,EAAE,IAAI,CAACjB,KAAK,CAACkB;IACpB,CAAC,CAAC;IAEF,IAAIlB,KAAK,CAACG,IAAI,EAAE;MACd,IAAI,CAACgB,YAAY,CAACnB,KAAK,CAACG,IAAI,CAAC;IAE/B;IAEA,IAAIK,SAAS,IAAI,CAACR,KAAK,CAACgB,gBAAgB,EAAE;MACxC,IAAI,CAACT,MAAM,CAACa,KAAK,CAAC,CAAC;IACrB;EACF;EAESC,OAAOA,CAAA,EAAS;IACvB,IAAI,CAACd,MAAM,CAACc,OAAO,CAAC,CAAC;EACvB;EAGSC,KAAKA,CAACnB,IAAqB,EAAkB;IAAA,IAAhBoB,UAAU,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IAClD,IAAI,CAAClB,MAAM,CAACC,MAAM,CAACoB,KAAK,CAACC,WAAW,CAClC,IAAI,CAACrB,MAAM,EACXgB,UAAU,EACVpB,IAAI,CAAC0B,MAAM,EACX1B,IAAI,CAACoB,UAAU,EACfpB,IAAI,CAACD,UACP,CAAC;EACH;EAEA,MAAe4B,SAASA,CAAA,EAAqF;IAAA,IAApFP,UAAkB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IAAA,IAAEtB,UAAkB,GAAAsB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI,CAACtB,UAAU;IAEnF,MAAM6B,UAAU,GAAG,IAAI3B,YAAY,CAAC,IAAI,CAACE,MAAM,EAAE;MAACM,KAAK,EAAEd,MAAM,CAACkC,QAAQ,GAAGlC,MAAM,CAACiB,QAAQ;MAAEb;IAAU,CAAC,CAAC;IAIxG,MAAM+B,cAAc,GAAG,IAAI,CAAC3B,MAAM,CAACC,MAAM,CAAC2B,oBAAoB,CAAC,CAAC;IAChED,cAAc,CAACE,kBAAkB,CAAC,IAAI,CAAC5B,MAAM,EAAEgB,UAAU,EAAEQ,UAAU,CAACxB,MAAM,EAAE,CAAC,EAAEL,UAAU,CAAC;IAC5F,IAAI,CAACI,MAAM,CAACC,MAAM,CAACoB,KAAK,CAACS,MAAM,CAAC,CAACH,cAAc,CAACI,MAAM,CAAC,CAAC,CAAC,CAAC;IAG1D,MAAMN,UAAU,CAACxB,MAAM,CAAC+B,QAAQ,CAACC,UAAU,CAACC,IAAI,EAAEjB,UAAU,EAAErB,UAAU,CAAC;IACzE,MAAMuC,WAAW,GAAGV,UAAU,CAACxB,MAAM,CAACmC,cAAc,CAAC,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC;IAC/DZ,UAAU,CAACxB,MAAM,CAACa,KAAK,CAAC,CAAC;IACzBW,UAAU,CAACV,OAAO,CAAC,CAAC;IAEpB,OAAOoB,WAAW;EACpB;EAEAtB,YAAYA,CAAayB,UAAsB,EAAQ;IACrD,MAAMH,WAAW,GAAG,IAAI,CAAClC,MAAM,CAACmC,cAAc,CAAC,CAAC;IAEhD,IAAIE,UAAU,CAACvC,WAAW,CAACoC,WAAW,CAAC,CAACI,GAAG,CAACD,UAAU,CAAC;EACzD;EAIAN,QAAQA,CAACQ,IAAY,EAAoD;IAAA,IAAlDC,MAAc,GAAAvB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IAAA,IAAEb,IAAa,GAAAa,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;IACtD,OAAO,IAAI,CAACnB,MAAM,CAAC+B,QAAQ,CAACQ,IAAI,EAAEC,MAAM,EAAEpC,IAAI,CAAC;EACjD;EAEA+B,cAAcA,CAAA,EAAiD;IAAA,IAAhDK,MAAc,GAAAvB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IAAA,IAAEb,IAAa,GAAAa,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;IAC9C,OAAO,IAAI,CAACnB,MAAM,CAACmC,cAAc,CAACK,MAAM,EAAEpC,IAAI,CAAC;EACjD;EAEAS,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACb,MAAM,CAACa,KAAK,CAAC,CAAC;EACrB;AACF"}
@@ -1,10 +1,9 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  import { CommandEncoder, cast } from '@luma.gl/core';
3
2
  export class WebGPUCommandEncoder extends CommandEncoder {
4
3
  constructor(device, props) {
5
4
  super(device, props);
6
- _defineProperty(this, "device", void 0);
7
- _defineProperty(this, "handle", void 0);
5
+ this.device = void 0;
6
+ this.handle = void 0;
8
7
  this.device = device;
9
8
  this.handle = props.handle || this.device.handle.createCommandEncoder({});
10
9
  this.handle.label = this.props.id;
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-command-encoder.js","names":["CommandEncoder","cast","WebGPUCommandEncoder","constructor","device","props","_defineProperty","handle","createCommandEncoder","label","id","destroy","finish","options","copyBufferToBuffer","_options$sourceOffset","_options$destinationO","_options$size","source","sourceOffset","destination","destinationOffset","size","copyBufferToTexture","_options$offset","_options$mipLevel","_options$origin","buffer","offset","bytesPerRow","rowsPerImage","texture","mipLevel","origin","width","extent","height","depthOrArrayLayers","copyTextureToBuffer","copyTextureToTexture","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"sourcesContent":["import {CommandEncoder, CommandEncoderProps, Buffer, Texture, cast, \n CopyTextureToTextureOptions, \n CopyTextureToBufferOptions\n // CopyBufferToTextureOptions,\n // CopyBufferToBufferOptions,\n} from '@luma.gl/core';\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUBuffer} from './webgpu-buffer';\nimport {WebGPUTexture} from './webgpu-texture';\n\nexport class WebGPUCommandEncoder extends CommandEncoder {\n readonly device: WebGPUDevice;\n readonly handle: GPUCommandEncoder;\n\n constructor(device: WebGPUDevice, props: CommandEncoderProps) {\n super(device, props);\n this.device = device;\n this.handle = props.handle || this.device.handle.createCommandEncoder({\n // TODO was this removed in standard?\n // measureExecutionTime: this.props.measureExecutionTime\n });\n this.handle.label = this.props.id;\n }\n\n override destroy(): void {}\n\n finish(options?: {id?: string}): GPUCommandBuffer {\n return this.finish(options);\n }\n\n // beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;\n // beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;\n\n copyBufferToBuffer(options: // CopyBufferToBufferOptions\n {\n source: Buffer,\n sourceOffset?: number,\n destination: Buffer,\n destinationOffset?: number,\n size?: number\n }\n ): void {\n this.handle.copyBufferToBuffer(\n cast<WebGPUBuffer>(options.source).handle,\n options.sourceOffset ?? 0,\n cast<WebGPUBuffer>(options.destination).handle,\n options.destinationOffset ?? 0,\n options.size ?? 0\n );\n }\n\n copyBufferToTexture(options: // CopyBufferToTextureOptions\n {\n source: Buffer,\n offset?: number,\n bytesPerRow: number,\n rowsPerImage: number,\n\n destination: Texture,\n mipLevel?: number;\n aspect?: 'all' | 'stencil-only' | 'depth-only',\n\n origin?: number[] | [number, number, number],\n extent?: number[] | [number, number, number]\n }\n ): void {\n this.handle.copyBufferToTexture(\n {\n buffer: cast<WebGPUBuffer>(options.source).handle,\n offset: options.offset ?? 0,\n bytesPerRow: options.bytesPerRow,\n rowsPerImage: options.rowsPerImage,\n },\n {\n texture: cast<WebGPUTexture>(options.destination).handle,\n mipLevel: options.mipLevel ?? 0,\n origin: options.origin ?? {},\n // aspect: options.aspect\n },\n {\n // TODO exclamation mark hack\n width: options.extent[0],\n height: options.extent[1],\n depthOrArrayLayers: options.extent[2]\n }\n );\n }\n\n copyTextureToBuffer(options: CopyTextureToBufferOptions): void {\n // this.handle.copyTextureToBuffer(\n // // source\n // {},\n // // destination\n // {},\n // // copySize\n // {}\n // );\n }\n\n copyTextureToTexture(options: CopyTextureToTextureOptions): void {\n // this.handle.copyTextureToTexture(\n // // source\n // {},\n // // destination\n // {},\n // // copySize\n // {}\n // );\n }\n\n override pushDebugGroup(groupLabel: string): void {\n this.handle.pushDebugGroup(groupLabel);\n }\n\n override popDebugGroup(): void {\n this.handle.popDebugGroup();\n }\n\n override insertDebugMarker(markerLabel: string): void {\n this.handle.insertDebugMarker(markerLabel);\n }\n\n // writeTimestamp(querySet: Query, queryIndex: number): void {}\n\n // resolveQuerySet(options: {\n // querySet: GPUQuerySet,\n // firstQuery: number,\n // queryCount: number,\n // destination: Buffer,\n // destinationOffset?: number;\n // }): void;\n}"],"mappings":";AAAA,SAAQA,cAAc,EAAwCC,IAAI,QAK3D,eAAe;AAKtB,OAAO,MAAMC,oBAAoB,SAASF,cAAc,CAAC;EAIvDG,WAAWA,CAACC,MAAoB,EAAEC,KAA0B,EAAE;IAC5D,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IACrB,IAAI,CAACF,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACG,MAAM,GAAGF,KAAK,CAACE,MAAM,IAAI,IAAI,CAACH,MAAM,CAACG,MAAM,CAACC,oBAAoB,CAAC,CAGtE,CAAC,CAAC;IACF,IAAI,CAACD,MAAM,CAACE,KAAK,GAAG,IAAI,CAACJ,KAAK,CAACK,EAAE;EACnC;EAESC,OAAOA,CAAA,EAAS,CAAC;EAE1BC,MAAMA,CAACC,OAAuB,EAAoB;IAChD,OAAO,IAAI,CAACD,MAAM,CAACC,OAAO,CAAC;EAC7B;EAKAC,kBAAkBA,CAACD,OAOhB,EACK;IAAA,IAAAE,qBAAA,EAAAC,qBAAA,EAAAC,aAAA;IACN,IAAI,CAACV,MAAM,CAACO,kBAAkB,CAC5Bb,IAAI,CAAeY,OAAO,CAACK,MAAM,CAAC,CAACX,MAAM,GAAAQ,qBAAA,GACzCF,OAAO,CAACM,YAAY,cAAAJ,qBAAA,cAAAA,qBAAA,GAAI,CAAC,EACzBd,IAAI,CAAeY,OAAO,CAACO,WAAW,CAAC,CAACb,MAAM,GAAAS,qBAAA,GAC9CH,OAAO,CAACQ,iBAAiB,cAAAL,qBAAA,cAAAA,qBAAA,GAAI,CAAC,GAAAC,aAAA,GAC9BJ,OAAO,CAACS,IAAI,cAAAL,aAAA,cAAAA,aAAA,GAAI,CAClB,CAAC;EACH;EAEAM,mBAAmBA,CAACV,OAanB,EACO;IAAA,IAAAW,eAAA,EAAAC,iBAAA,EAAAC,eAAA;IACN,IAAI,CAACnB,MAAM,CAACgB,mBAAmB,CAC7B;MACEI,MAAM,EAAE1B,IAAI,CAAeY,OAAO,CAACK,MAAM,CAAC,CAACX,MAAM;MACjDqB,MAAM,GAAAJ,eAAA,GAAEX,OAAO,CAACe,MAAM,cAAAJ,eAAA,cAAAA,eAAA,GAAI,CAAC;MAC3BK,WAAW,EAAEhB,OAAO,CAACgB,WAAW;MAChCC,YAAY,EAAEjB,OAAO,CAACiB;IACxB,CAAC,EACD;MACEC,OAAO,EAAE9B,IAAI,CAAgBY,OAAO,CAACO,WAAW,CAAC,CAACb,MAAM;MACxDyB,QAAQ,GAAAP,iBAAA,GAAEZ,OAAO,CAACmB,QAAQ,cAAAP,iBAAA,cAAAA,iBAAA,GAAI,CAAC;MAC/BQ,MAAM,GAAAP,eAAA,GAAEb,OAAO,CAACoB,MAAM,cAAAP,eAAA,cAAAA,eAAA,GAAI,CAAC;IAE7B,CAAC,EACD;MAEEQ,KAAK,EAAErB,OAAO,CAACsB,MAAM,CAAC,CAAC,CAAC;MACxBC,MAAM,EAAEvB,OAAO,CAACsB,MAAM,CAAC,CAAC,CAAC;MACzBE,kBAAkB,EAAExB,OAAO,CAACsB,MAAM,CAAC,CAAC;IACtC,CACF,CAAC;EACH;EAEAG,mBAAmBA,CAACzB,OAAmC,EAAQ,CAS/D;EAEA0B,oBAAoBA,CAAC1B,OAAoC,EAAQ,CASjE;EAES2B,cAAcA,CAACC,UAAkB,EAAQ;IAChD,IAAI,CAAClC,MAAM,CAACiC,cAAc,CAACC,UAAU,CAAC;EACxC;EAESC,aAAaA,CAAA,EAAS;IAC7B,IAAI,CAACnC,MAAM,CAACmC,aAAa,CAAC,CAAC;EAC7B;EAESC,iBAAiBA,CAACC,WAAmB,EAAQ;IACpD,IAAI,CAACrC,MAAM,CAACoC,iBAAiB,CAACC,WAAW,CAAC;EAC5C;AAWF"}
1
+ {"version":3,"file":"webgpu-command-encoder.js","names":["CommandEncoder","cast","WebGPUCommandEncoder","constructor","device","props","handle","createCommandEncoder","label","id","destroy","finish","options","copyBufferToBuffer","_options$sourceOffset","_options$destinationO","_options$size","source","sourceOffset","destination","destinationOffset","size","copyBufferToTexture","_options$offset","_options$mipLevel","_options$origin","buffer","offset","bytesPerRow","rowsPerImage","texture","mipLevel","origin","width","extent","height","depthOrArrayLayers","copyTextureToBuffer","copyTextureToTexture","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"sources":["../../../src/adapter/resources/webgpu-command-encoder.ts"],"sourcesContent":["import {CommandEncoder, CommandEncoderProps, Buffer, Texture, cast, \n CopyTextureToTextureOptions, \n CopyTextureToBufferOptions\n // CopyBufferToTextureOptions,\n // CopyBufferToBufferOptions,\n} from '@luma.gl/core';\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUBuffer} from './webgpu-buffer';\nimport {WebGPUTexture} from './webgpu-texture';\n\nexport class WebGPUCommandEncoder extends CommandEncoder {\n readonly device: WebGPUDevice;\n readonly handle: GPUCommandEncoder;\n\n constructor(device: WebGPUDevice, props: CommandEncoderProps) {\n super(device, props);\n this.device = device;\n this.handle = props.handle || this.device.handle.createCommandEncoder({\n // TODO was this removed in standard?\n // measureExecutionTime: this.props.measureExecutionTime\n });\n this.handle.label = this.props.id;\n }\n\n override destroy(): void {}\n\n finish(options?: {id?: string}): GPUCommandBuffer {\n return this.finish(options);\n }\n\n // beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;\n // beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;\n\n copyBufferToBuffer(options: // CopyBufferToBufferOptions\n {\n source: Buffer,\n sourceOffset?: number,\n destination: Buffer,\n destinationOffset?: number,\n size?: number\n }\n ): void {\n this.handle.copyBufferToBuffer(\n cast<WebGPUBuffer>(options.source).handle,\n options.sourceOffset ?? 0,\n cast<WebGPUBuffer>(options.destination).handle,\n options.destinationOffset ?? 0,\n options.size ?? 0\n );\n }\n\n copyBufferToTexture(options: // CopyBufferToTextureOptions\n {\n source: Buffer,\n offset?: number,\n bytesPerRow: number,\n rowsPerImage: number,\n\n destination: Texture,\n mipLevel?: number;\n aspect?: 'all' | 'stencil-only' | 'depth-only',\n\n origin?: number[] | [number, number, number],\n extent?: number[] | [number, number, number]\n }\n ): void {\n this.handle.copyBufferToTexture(\n {\n buffer: cast<WebGPUBuffer>(options.source).handle,\n offset: options.offset ?? 0,\n bytesPerRow: options.bytesPerRow,\n rowsPerImage: options.rowsPerImage,\n },\n {\n texture: cast<WebGPUTexture>(options.destination).handle,\n mipLevel: options.mipLevel ?? 0,\n origin: options.origin ?? {},\n // aspect: options.aspect\n },\n {\n // TODO exclamation mark hack\n width: options.extent[0],\n height: options.extent[1],\n depthOrArrayLayers: options.extent[2]\n }\n );\n }\n\n copyTextureToBuffer(options: CopyTextureToBufferOptions): void {\n // this.handle.copyTextureToBuffer(\n // // source\n // {},\n // // destination\n // {},\n // // copySize\n // {}\n // );\n }\n\n copyTextureToTexture(options: CopyTextureToTextureOptions): void {\n // this.handle.copyTextureToTexture(\n // // source\n // {},\n // // destination\n // {},\n // // copySize\n // {}\n // );\n }\n\n override pushDebugGroup(groupLabel: string): void {\n this.handle.pushDebugGroup(groupLabel);\n }\n\n override popDebugGroup(): void {\n this.handle.popDebugGroup();\n }\n\n override insertDebugMarker(markerLabel: string): void {\n this.handle.insertDebugMarker(markerLabel);\n }\n\n // writeTimestamp(querySet: Query, queryIndex: number): void {}\n\n // resolveQuerySet(options: {\n // querySet: GPUQuerySet,\n // firstQuery: number,\n // queryCount: number,\n // destination: Buffer,\n // destinationOffset?: number;\n // }): void;\n}"],"mappings":"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"}
@@ -1,12 +1,11 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  import { ComputePass, cast } from '@luma.gl/core';
3
2
  export class WebGPUComputePass extends ComputePass {
4
3
  constructor(device, props) {
5
4
  var _device$commandEncode;
6
5
  super(device, props);
7
- _defineProperty(this, "device", void 0);
8
- _defineProperty(this, "handle", void 0);
9
- _defineProperty(this, "_bindGroupLayout", null);
6
+ this.device = void 0;
7
+ this.handle = void 0;
8
+ this._bindGroupLayout = null;
10
9
  this.device = device;
11
10
  this.handle = this.props.handle || ((_device$commandEncode = device.commandEncoder) === null || _device$commandEncode === void 0 ? void 0 : _device$commandEncode.beginComputePass({
12
11
  label: this.props.id
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-compute-pass.js","names":["ComputePass","cast","WebGPUComputePass","constructor","device","props","_device$commandEncode","_defineProperty","handle","commandEncoder","beginComputePass","label","id","destroy","end","setPipeline","pipeline","wgpuPipeline","_bindGroupLayout","_getBindGroupLayout","setBindings","bindings","Error","dispatch","x","y","z","dispatchWorkgroups","dispatchIndirect","indirectBuffer","indirectOffset","arguments","length","undefined","dispatchWorkgroupsIndirect","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"sourcesContent":["import {ComputePass, ComputePassProps, ComputePipeline, Buffer, Binding, cast} from '@luma.gl/core';\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUBuffer} from './webgpu-buffer';\n// import {WebGPUCommandEncoder} from './webgpu-command-encoder';\nimport {WebGPUComputePipeline} from './webgpu-compute-pipeline';\n\nexport class WebGPUComputePass extends ComputePass {\n readonly device: WebGPUDevice;\n readonly handle: GPUComputePassEncoder;\n _bindGroupLayout: GPUBindGroupLayout | null = null;\n\n constructor(device: WebGPUDevice, props: ComputePassProps) {\n super(device, props);\n this.device = device;\n\n this.handle = this.props.handle || device.commandEncoder?.beginComputePass({\n label: this.props.id,\n // timestampWrites?: GPUComputePassTimestampWrites;\n });\n }\n\n /** @note no WebGPU destroy method, just gc */\n override destroy(): void {}\n\n end(): void {\n this.handle.end();\n }\n\n setPipeline(pipeline: ComputePipeline): void {\n const wgpuPipeline = cast<WebGPUComputePipeline>(pipeline);\n this.handle.setPipeline(wgpuPipeline.handle);\n this._bindGroupLayout = wgpuPipeline._getBindGroupLayout();\n }\n\n /** Sets an array of bindings (uniform buffers, samplers, textures, ...) */\n setBindings(bindings: Binding[]): void {\n throw new Error('fix me');\n // const bindGroup = getBindGroup(this.device.handle, this._bindGroupLayout, this.props.bindings);\n // this.handle.setBindGroup(0, bindGroup);\n }\n\n /**\n * Dispatch work to be performed with the current ComputePipeline.\n * @param x X dimension of the grid of workgroups to dispatch.\n * @param y Y dimension of the grid of workgroups to dispatch.\n * @param z Z dimension of the grid of workgroups to dispatch.\n */\n dispatch(x: number, y?: number, z?: number): void {\n this.handle.dispatchWorkgroups(x, y, z);\n }\n\n /**\n * Dispatch work to be performed with the current ComputePipeline.\n * @param indirectBuffer buffer must be a tightly packed block of three 32-bit unsigned integer values (12 bytes total), given in the same order as the arguments for dispatch()\n * @param indirectOffset\n */\n dispatchIndirect(indirectBuffer: Buffer, indirectOffset: number = 0): void {\n this.handle.dispatchWorkgroupsIndirect(cast<WebGPUBuffer>(indirectBuffer).handle, indirectOffset);\n }\n\n pushDebugGroup(groupLabel: string): void {\n this.handle.pushDebugGroup(groupLabel);\n }\n popDebugGroup(): void {\n this.handle.popDebugGroup();\n }\n insertDebugMarker(markerLabel: string): void {\n this.handle.insertDebugMarker(markerLabel);\n }\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n // beginPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n // endPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n}\n"],"mappings":";AAAA,SAAQA,WAAW,EAAsDC,IAAI,QAAO,eAAe;AAMnG,OAAO,MAAMC,iBAAiB,SAASF,WAAW,CAAC;EAKjDG,WAAWA,CAACC,MAAoB,EAAEC,KAAuB,EAAE;IAAA,IAAAC,qBAAA;IACzD,KAAK,CAACF,MAAM,EAAEC,KAAK,CAAC;IAACE,eAAA;IAAAA,eAAA;IAAAA,eAAA,2BAHuB,IAAI;IAIhD,IAAI,CAACH,MAAM,GAAGA,MAAM;IAEpB,IAAI,CAACI,MAAM,GAAG,IAAI,CAACH,KAAK,CAACG,MAAM,MAAAF,qBAAA,GAAIF,MAAM,CAACK,cAAc,cAAAH,qBAAA,uBAArBA,qBAAA,CAAuBI,gBAAgB,CAAC;MACzEC,KAAK,EAAE,IAAI,CAACN,KAAK,CAACO;IAEpB,CAAC,CAAC;EACJ;EAGSC,OAAOA,CAAA,EAAS,CAAC;EAE1BC,GAAGA,CAAA,EAAS;IACV,IAAI,CAACN,MAAM,CAACM,GAAG,CAAC,CAAC;EACnB;EAEAC,WAAWA,CAACC,QAAyB,EAAQ;IAC3C,MAAMC,YAAY,GAAGhB,IAAI,CAAwBe,QAAQ,CAAC;IAC1D,IAAI,CAACR,MAAM,CAACO,WAAW,CAACE,YAAY,CAACT,MAAM,CAAC;IAC5C,IAAI,CAACU,gBAAgB,GAAGD,YAAY,CAACE,mBAAmB,CAAC,CAAC;EAC5D;EAGAC,WAAWA,CAACC,QAAmB,EAAQ;IACrC,MAAM,IAAIC,KAAK,CAAC,QAAQ,CAAC;EAG3B;EAQAC,QAAQA,CAACC,CAAS,EAAEC,CAAU,EAAEC,CAAU,EAAQ;IAChD,IAAI,CAAClB,MAAM,CAACmB,kBAAkB,CAACH,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC;EACzC;EAOAE,gBAAgBA,CAACC,cAAsB,EAAoC;IAAA,IAAlCC,cAAsB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IACjE,IAAI,CAACvB,MAAM,CAAC0B,0BAA0B,CAACjC,IAAI,CAAe4B,cAAc,CAAC,CAACrB,MAAM,EAAEsB,cAAc,CAAC;EACnG;EAEAK,cAAcA,CAACC,UAAkB,EAAQ;IACvC,IAAI,CAAC5B,MAAM,CAAC2B,cAAc,CAACC,UAAU,CAAC;EACxC;EACAC,aAAaA,CAAA,EAAS;IACpB,IAAI,CAAC7B,MAAM,CAAC6B,aAAa,CAAC,CAAC;EAC7B;EACAC,iBAAiBA,CAACC,WAAmB,EAAQ;IAC3C,IAAI,CAAC/B,MAAM,CAAC8B,iBAAiB,CAACC,WAAW,CAAC;EAC5C;AAKF"}
1
+ {"version":3,"file":"webgpu-compute-pass.js","names":["ComputePass","cast","WebGPUComputePass","constructor","device","props","_device$commandEncode","handle","_bindGroupLayout","commandEncoder","beginComputePass","label","id","destroy","end","setPipeline","pipeline","wgpuPipeline","_getBindGroupLayout","setBindings","bindings","Error","dispatch","x","y","z","dispatchWorkgroups","dispatchIndirect","indirectBuffer","indirectOffset","arguments","length","undefined","dispatchWorkgroupsIndirect","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel"],"sources":["../../../src/adapter/resources/webgpu-compute-pass.ts"],"sourcesContent":["import {ComputePass, ComputePassProps, ComputePipeline, Buffer, Binding, cast} from '@luma.gl/core';\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUBuffer} from './webgpu-buffer';\n// import {WebGPUCommandEncoder} from './webgpu-command-encoder';\nimport {WebGPUComputePipeline} from './webgpu-compute-pipeline';\n\nexport class WebGPUComputePass extends ComputePass {\n readonly device: WebGPUDevice;\n readonly handle: GPUComputePassEncoder;\n _bindGroupLayout: GPUBindGroupLayout | null = null;\n\n constructor(device: WebGPUDevice, props: ComputePassProps) {\n super(device, props);\n this.device = device;\n\n this.handle = this.props.handle || device.commandEncoder?.beginComputePass({\n label: this.props.id,\n // timestampWrites?: GPUComputePassTimestampWrites;\n });\n }\n\n /** @note no WebGPU destroy method, just gc */\n override destroy(): void {}\n\n end(): void {\n this.handle.end();\n }\n\n setPipeline(pipeline: ComputePipeline): void {\n const wgpuPipeline = cast<WebGPUComputePipeline>(pipeline);\n this.handle.setPipeline(wgpuPipeline.handle);\n this._bindGroupLayout = wgpuPipeline._getBindGroupLayout();\n }\n\n /** Sets an array of bindings (uniform buffers, samplers, textures, ...) */\n setBindings(bindings: Binding[]): void {\n throw new Error('fix me');\n // const bindGroup = getBindGroup(this.device.handle, this._bindGroupLayout, this.props.bindings);\n // this.handle.setBindGroup(0, bindGroup);\n }\n\n /**\n * Dispatch work to be performed with the current ComputePipeline.\n * @param x X dimension of the grid of workgroups to dispatch.\n * @param y Y dimension of the grid of workgroups to dispatch.\n * @param z Z dimension of the grid of workgroups to dispatch.\n */\n dispatch(x: number, y?: number, z?: number): void {\n this.handle.dispatchWorkgroups(x, y, z);\n }\n\n /**\n * Dispatch work to be performed with the current ComputePipeline.\n * @param indirectBuffer buffer must be a tightly packed block of three 32-bit unsigned integer values (12 bytes total), given in the same order as the arguments for dispatch()\n * @param indirectOffset\n */\n dispatchIndirect(indirectBuffer: Buffer, indirectOffset: number = 0): void {\n this.handle.dispatchWorkgroupsIndirect(cast<WebGPUBuffer>(indirectBuffer).handle, indirectOffset);\n }\n\n pushDebugGroup(groupLabel: string): void {\n this.handle.pushDebugGroup(groupLabel);\n }\n popDebugGroup(): void {\n this.handle.popDebugGroup();\n }\n insertDebugMarker(markerLabel: string): void {\n this.handle.insertDebugMarker(markerLabel);\n }\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n // beginPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n // endPipelineStatisticsQuery(querySet: GPUQuerySet, queryIndex: number): void;\n}\n"],"mappings":"AAAA,SAAQA,WAAW,EAAsDC,IAAI,QAAO,eAAe;AAMnG,OAAO,MAAMC,iBAAiB,SAASF,WAAW,CAAC;EAKjDG,WAAWA,CAACC,MAAoB,EAAEC,KAAuB,EAAE;IAAA,IAAAC,qBAAA;IACzD,KAAK,CAACF,MAAM,EAAEC,KAAK,CAAC;IAAC,KALdD,MAAM;IAAA,KACNG,MAAM;IAAA,KACfC,gBAAgB,GAA8B,IAAI;IAIhD,IAAI,CAACJ,MAAM,GAAGA,MAAM;IAEpB,IAAI,CAACG,MAAM,GAAG,IAAI,CAACF,KAAK,CAACE,MAAM,MAAAD,qBAAA,GAAIF,MAAM,CAACK,cAAc,cAAAH,qBAAA,uBAArBA,qBAAA,CAAuBI,gBAAgB,CAAC;MACzEC,KAAK,EAAE,IAAI,CAACN,KAAK,CAACO;IAEpB,CAAC,CAAC;EACJ;EAGSC,OAAOA,CAAA,EAAS,CAAC;EAE1BC,GAAGA,CAAA,EAAS;IACV,IAAI,CAACP,MAAM,CAACO,GAAG,CAAC,CAAC;EACnB;EAEAC,WAAWA,CAACC,QAAyB,EAAQ;IAC3C,MAAMC,YAAY,GAAGhB,IAAI,CAAwBe,QAAQ,CAAC;IAC1D,IAAI,CAACT,MAAM,CAACQ,WAAW,CAACE,YAAY,CAACV,MAAM,CAAC;IAC5C,IAAI,CAACC,gBAAgB,GAAGS,YAAY,CAACC,mBAAmB,CAAC,CAAC;EAC5D;EAGAC,WAAWA,CAACC,QAAmB,EAAQ;IACrC,MAAM,IAAIC,KAAK,CAAC,QAAQ,CAAC;EAG3B;EAQAC,QAAQA,CAACC,CAAS,EAAEC,CAAU,EAAEC,CAAU,EAAQ;IAChD,IAAI,CAAClB,MAAM,CAACmB,kBAAkB,CAACH,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC;EACzC;EAOAE,gBAAgBA,CAACC,cAAsB,EAAoC;IAAA,IAAlCC,cAAsB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;IACjE,IAAI,CAACvB,MAAM,CAAC0B,0BAA0B,CAAChC,IAAI,CAAe2B,cAAc,CAAC,CAACrB,MAAM,EAAEsB,cAAc,CAAC;EACnG;EAEAK,cAAcA,CAACC,UAAkB,EAAQ;IACvC,IAAI,CAAC5B,MAAM,CAAC2B,cAAc,CAACC,UAAU,CAAC;EACxC;EACAC,aAAaA,CAAA,EAAS;IACpB,IAAI,CAAC7B,MAAM,CAAC6B,aAAa,CAAC,CAAC;EAC7B;EACAC,iBAAiBA,CAACC,WAAmB,EAAQ;IAC3C,IAAI,CAAC/B,MAAM,CAAC8B,iBAAiB,CAACC,WAAW,CAAC;EAC5C;AAKF"}
@@ -1,10 +1,9 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  import { ComputePipeline, cast } from '@luma.gl/core';
3
2
  export class WebGPUComputePipeline extends ComputePipeline {
4
3
  constructor(device, props) {
5
4
  super(device, props);
6
- _defineProperty(this, "device", void 0);
7
- _defineProperty(this, "handle", void 0);
5
+ this.device = void 0;
6
+ this.handle = void 0;
8
7
  this.device = device;
9
8
  const module = cast(this.props.cs).handle;
10
9
  this.handle = this.props.handle || this.device.handle.createComputePipeline({
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-compute-pipeline.js","names":["ComputePipeline","cast","WebGPUComputePipeline","constructor","device","props","_defineProperty","module","cs","handle","createComputePipeline","label","id","compute","entryPoint","csEntryPoint","layout","_getBindGroupLayout","getBindGroupLayout"],"sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"sourcesContent":["// prettier-ignore\nimport {ComputePipeline, ComputePipelineProps, cast} from '@luma.gl/core';\n\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUShader} from './webgpu-shader';\n\n// COMPUTE PIPELINE\n\n/** Creates a new compute pipeline when parameters change */\nexport class WebGPUComputePipeline extends ComputePipeline {\n device: WebGPUDevice;\n handle: GPUComputePipeline;\n\n constructor(device: WebGPUDevice, props: ComputePipelineProps) {\n super(device, props);\n this.device = device;\n\n const module = cast<WebGPUShader>(this.props.cs).handle;\n this.handle = this.props.handle || this.device.handle.createComputePipeline({\n label: this.props.id,\n compute: {\n module,\n entryPoint: this.props.csEntryPoint,\n // constants: this.props.csConstants\n },\n layout: 'auto'\n });\n }\n\n /** For internal use in render passes */\n _getBindGroupLayout() {\n // TODO: Cache?\n return this.handle.getBindGroupLayout(0);\n }\n}\n"],"mappings":";AACA,SAAQA,eAAe,EAAwBC,IAAI,QAAO,eAAe;AAQzE,OAAO,MAAMC,qBAAqB,SAASF,eAAe,CAAC;EAIzDG,WAAWA,CAACC,MAAoB,EAAEC,KAA2B,EAAE;IAC7D,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IACrB,IAAI,CAACF,MAAM,GAAGA,MAAM;IAEpB,MAAMG,MAAM,GAAGN,IAAI,CAAe,IAAI,CAACI,KAAK,CAACG,EAAE,CAAC,CAACC,MAAM;IACvD,IAAI,CAACA,MAAM,GAAG,IAAI,CAACJ,KAAK,CAACI,MAAM,IAAI,IAAI,CAACL,MAAM,CAACK,MAAM,CAACC,qBAAqB,CAAC;MAC1EC,KAAK,EAAE,IAAI,CAACN,KAAK,CAACO,EAAE;MACpBC,OAAO,EAAE;QACPN,MAAM;QACNO,UAAU,EAAE,IAAI,CAACT,KAAK,CAACU;MAEzB,CAAC;MACDC,MAAM,EAAE;IACV,CAAC,CAAC;EACJ;EAGAC,mBAAmBA,CAAA,EAAG;IAEpB,OAAO,IAAI,CAACR,MAAM,CAACS,kBAAkB,CAAC,CAAC,CAAC;EAC1C;AACF"}
1
+ {"version":3,"file":"webgpu-compute-pipeline.js","names":["ComputePipeline","cast","WebGPUComputePipeline","constructor","device","props","handle","module","cs","createComputePipeline","label","id","compute","entryPoint","csEntryPoint","layout","_getBindGroupLayout","getBindGroupLayout"],"sources":["../../../src/adapter/resources/webgpu-compute-pipeline.ts"],"sourcesContent":["// prettier-ignore\nimport {ComputePipeline, ComputePipelineProps, cast} from '@luma.gl/core';\n\nimport {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUShader} from './webgpu-shader';\n\n// COMPUTE PIPELINE\n\n/** Creates a new compute pipeline when parameters change */\nexport class WebGPUComputePipeline extends ComputePipeline {\n device: WebGPUDevice;\n handle: GPUComputePipeline;\n\n constructor(device: WebGPUDevice, props: ComputePipelineProps) {\n super(device, props);\n this.device = device;\n\n const module = cast<WebGPUShader>(this.props.cs).handle;\n this.handle = this.props.handle || this.device.handle.createComputePipeline({\n label: this.props.id,\n compute: {\n module,\n entryPoint: this.props.csEntryPoint,\n // constants: this.props.csConstants\n },\n layout: 'auto'\n });\n }\n\n /** For internal use in render passes */\n _getBindGroupLayout() {\n // TODO: Cache?\n return this.handle.getBindGroupLayout(0);\n }\n}\n"],"mappings":"AACA,SAAQA,eAAe,EAAwBC,IAAI,QAAO,eAAe;AAQzE,OAAO,MAAMC,qBAAqB,SAASF,eAAe,CAAC;EAIzDG,WAAWA,CAACC,MAAoB,EAAEC,KAA2B,EAAE;IAC7D,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAAC,KAJvBD,MAAM;IAAA,KACNE,MAAM;IAIJ,IAAI,CAACF,MAAM,GAAGA,MAAM;IAEpB,MAAMG,MAAM,GAAGN,IAAI,CAAe,IAAI,CAACI,KAAK,CAACG,EAAE,CAAC,CAACF,MAAM;IACvD,IAAI,CAACA,MAAM,GAAG,IAAI,CAACD,KAAK,CAACC,MAAM,IAAI,IAAI,CAACF,MAAM,CAACE,MAAM,CAACG,qBAAqB,CAAC;MAC1EC,KAAK,EAAE,IAAI,CAACL,KAAK,CAACM,EAAE;MACpBC,OAAO,EAAE;QACPL,MAAM;QACNM,UAAU,EAAE,IAAI,CAACR,KAAK,CAACS;MAEzB,CAAC;MACDC,MAAM,EAAE;IACV,CAAC,CAAC;EACJ;EAGAC,mBAAmBA,CAAA,EAAG;IAEpB,OAAO,IAAI,CAACV,MAAM,CAACW,kBAAkB,CAAC,CAAC,CAAC;EAC1C;AACF"}
@@ -1,12 +1,11 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  import { ExternalTexture } from '@luma.gl/core';
3
2
  import { WebGPUSampler } from "./webgpu-sampler.js";
4
3
  export class WebGPUExternalTexture extends ExternalTexture {
5
4
  constructor(device, props) {
6
5
  super(device, props);
7
- _defineProperty(this, "device", void 0);
8
- _defineProperty(this, "handle", void 0);
9
- _defineProperty(this, "sampler", void 0);
6
+ this.device = void 0;
7
+ this.handle = void 0;
8
+ this.sampler = void 0;
10
9
  this.device = device;
11
10
  this.handle = this.props.handle || this.device.handle.importExternalTexture({
12
11
  source: props.source,
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-external-texture.js","names":["ExternalTexture","WebGPUSampler","WebGPUExternalTexture","constructor","device","props","_defineProperty","handle","importExternalTexture","source","colorSpace","sampler","destroy","setSampler"],"sources":["../../../src/adapter/resources/webgpu-external-texture.ts"],"sourcesContent":["// luma.gl, MIT license\nimport {ExternalTexture, ExternalTextureProps, Sampler, SamplerProps} from '@luma.gl/core';\nimport type {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUSampler} from './webgpu-sampler';\n\n/**\n * Cheap, temporary texture view for videos\n * Only valid within same callback, destroyed automatically as a microtask.\n */\nexport class WebGPUExternalTexture extends ExternalTexture {\n readonly device: WebGPUDevice;\n readonly handle: GPUExternalTexture;\n sampler: WebGPUSampler;\n\n constructor(device: WebGPUDevice, props: ExternalTextureProps) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.handle.importExternalTexture({\n source: props.source,\n colorSpace: props.colorSpace\n });\n this.sampler = null;\n }\n\n override destroy(): void {\n // External textures are destroyed automatically,\n // as a microtask, instead of manually or upon garbage collection like other resources.\n // this.handle.destroy();\n }\n\n /** Set default sampler */\n setSampler(sampler: Sampler | SamplerProps): this {\n // We can accept a sampler instance or set of props;\n this.sampler = sampler instanceof WebGPUSampler ? sampler : new WebGPUSampler(this.device, sampler);\n return this;\n }\n}\n"],"mappings":";AACA,SAAQA,eAAe,QAAoD,eAAe;AAAC,SAEnFC,aAAa;AAMrB,OAAO,MAAMC,qBAAqB,SAASF,eAAe,CAAC;EAKzDG,WAAWA,CAACC,MAAoB,EAAEC,KAA2B,EAAE;IAC7D,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IACrB,IAAI,CAACF,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACG,MAAM,GAAG,IAAI,CAACF,KAAK,CAACE,MAAM,IAAI,IAAI,CAACH,MAAM,CAACG,MAAM,CAACC,qBAAqB,CAAC;MAC1EC,MAAM,EAAEJ,KAAK,CAACI,MAAM;MACpBC,UAAU,EAAEL,KAAK,CAACK;IACpB,CAAC,CAAC;IACF,IAAI,CAACC,OAAO,GAAG,IAAI;EACrB;EAESC,OAAOA,CAAA,EAAS,CAIzB;EAGAC,UAAUA,CAACF,OAA+B,EAAQ;IAEhD,IAAI,CAACA,OAAO,GAAGA,OAAO,YAAYV,aAAa,GAAGU,OAAO,GAAG,IAAIV,aAAa,CAAC,IAAI,CAACG,MAAM,EAAEO,OAAO,CAAC;IACnG,OAAO,IAAI;EACb;AACF"}
1
+ {"version":3,"file":"webgpu-external-texture.js","names":["ExternalTexture","WebGPUSampler","WebGPUExternalTexture","constructor","device","props","handle","sampler","importExternalTexture","source","colorSpace","destroy","setSampler"],"sources":["../../../src/adapter/resources/webgpu-external-texture.ts"],"sourcesContent":["// luma.gl, MIT license\nimport {ExternalTexture, ExternalTextureProps, Sampler, SamplerProps} from '@luma.gl/core';\nimport type {WebGPUDevice} from '../webgpu-device';\nimport {WebGPUSampler} from './webgpu-sampler';\n\n/**\n * Cheap, temporary texture view for videos\n * Only valid within same callback, destroyed automatically as a microtask.\n */\nexport class WebGPUExternalTexture extends ExternalTexture {\n readonly device: WebGPUDevice;\n readonly handle: GPUExternalTexture;\n sampler: WebGPUSampler;\n\n constructor(device: WebGPUDevice, props: ExternalTextureProps) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.handle.importExternalTexture({\n source: props.source,\n colorSpace: props.colorSpace\n });\n this.sampler = null;\n }\n\n override destroy(): void {\n // External textures are destroyed automatically,\n // as a microtask, instead of manually or upon garbage collection like other resources.\n // this.handle.destroy();\n }\n\n /** Set default sampler */\n setSampler(sampler: Sampler | SamplerProps): this {\n // We can accept a sampler instance or set of props;\n this.sampler = sampler instanceof WebGPUSampler ? sampler : new WebGPUSampler(this.device, sampler);\n return this;\n }\n}\n"],"mappings":"AACA,SAAQA,eAAe,QAAoD,eAAe;AAAC,SAEnFC,aAAa;AAMrB,OAAO,MAAMC,qBAAqB,SAASF,eAAe,CAAC;EAKzDG,WAAWA,CAACC,MAAoB,EAAEC,KAA2B,EAAE;IAC7D,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAAC,KALdD,MAAM;IAAA,KACNE,MAAM;IAAA,KACfC,OAAO;IAIL,IAAI,CAACH,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACE,MAAM,GAAG,IAAI,CAACD,KAAK,CAACC,MAAM,IAAI,IAAI,CAACF,MAAM,CAACE,MAAM,CAACE,qBAAqB,CAAC;MAC1EC,MAAM,EAAEJ,KAAK,CAACI,MAAM;MACpBC,UAAU,EAAEL,KAAK,CAACK;IACpB,CAAC,CAAC;IACF,IAAI,CAACH,OAAO,GAAG,IAAI;EACrB;EAESI,OAAOA,CAAA,EAAS,CAIzB;EAGAC,UAAUA,CAACL,OAA+B,EAAQ;IAEhD,IAAI,CAACA,OAAO,GAAGA,OAAO,YAAYN,aAAa,GAAGM,OAAO,GAAG,IAAIN,aAAa,CAAC,IAAI,CAACG,MAAM,EAAEG,OAAO,CAAC;IACnG,OAAO,IAAI;EACb;AACF"}
@@ -1,9 +1,8 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  import { Framebuffer } from '@luma.gl/core';
3
2
  export class WebGPUFramebuffer extends Framebuffer {
4
3
  constructor(device, props) {
5
4
  super(device, props);
6
- _defineProperty(this, "device", void 0);
5
+ this.device = void 0;
7
6
  this.device = device;
8
7
  this.autoCreateAttachmentTextures();
9
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-framebuffer.js","names":["Framebuffer","WebGPUFramebuffer","constructor","device","props","_defineProperty","autoCreateAttachmentTextures"],"sources":["../../../src/adapter/resources/webgpu-framebuffer.ts"],"sourcesContent":["import type {FramebufferProps} from '@luma.gl/core';\nimport {Framebuffer} from '@luma.gl/core';\nimport {WebGPUDevice} from '../webgpu-device';\n\n/**\n * Create new textures with correct size for all attachments.\n * @note resize() destroys existing textures (if size has changed).\n */\nexport class WebGPUFramebuffer extends Framebuffer {\n readonly device: WebGPUDevice;\n\n constructor(device: WebGPUDevice, props: FramebufferProps) {\n super(device, props);\n this.device = device;\n\n // Auto create textures for attachments if needed\n this.autoCreateAttachmentTextures();\n }\n}\n"],"mappings":";AACA,SAAQA,WAAW,QAAO,eAAe;AAOzC,OAAO,MAAMC,iBAAiB,SAASD,WAAW,CAAC;EAGjDE,WAAWA,CAACC,MAAoB,EAAEC,KAAuB,EAAE;IACzD,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAACC,eAAA;IACrB,IAAI,CAACF,MAAM,GAAGA,MAAM;IAGpB,IAAI,CAACG,4BAA4B,CAAC,CAAC;EACrC;AACF"}
1
+ {"version":3,"file":"webgpu-framebuffer.js","names":["Framebuffer","WebGPUFramebuffer","constructor","device","props","autoCreateAttachmentTextures"],"sources":["../../../src/adapter/resources/webgpu-framebuffer.ts"],"sourcesContent":["import type {FramebufferProps} from '@luma.gl/core';\nimport {Framebuffer} from '@luma.gl/core';\nimport {WebGPUDevice} from '../webgpu-device';\n\n/**\n * Create new textures with correct size for all attachments.\n * @note resize() destroys existing textures (if size has changed).\n */\nexport class WebGPUFramebuffer extends Framebuffer {\n readonly device: WebGPUDevice;\n\n constructor(device: WebGPUDevice, props: FramebufferProps) {\n super(device, props);\n this.device = device;\n\n // Auto create textures for attachments if needed\n this.autoCreateAttachmentTextures();\n }\n}\n"],"mappings":"AACA,SAAQA,WAAW,QAAO,eAAe;AAOzC,OAAO,MAAMC,iBAAiB,SAASD,WAAW,CAAC;EAGjDE,WAAWA,CAACC,MAAoB,EAAEC,KAAuB,EAAE;IACzD,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAAC,KAHdD,MAAM;IAIb,IAAI,CAACA,MAAM,GAAGA,MAAM;IAGpB,IAAI,CAACE,4BAA4B,CAAC,CAAC;EACrC;AACF"}
@@ -1,12 +1,11 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
1
  import { RenderPass, cast } from '@luma.gl/core';
3
2
  export class WebGPURenderPass extends RenderPass {
4
3
  constructor(device) {
5
4
  let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
6
5
  super(device, props);
7
- _defineProperty(this, "device", void 0);
8
- _defineProperty(this, "handle", void 0);
9
- _defineProperty(this, "pipeline", null);
6
+ this.device = void 0;
7
+ this.handle = void 0;
8
+ this.pipeline = null;
10
9
  this.device = device;
11
10
  const framebuffer = props.framebuffer || device.canvasContext.getCurrentFramebuffer();
12
11
  const renderPassDescriptor = this.getRenderPassDescriptor(framebuffer);