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

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 (179) hide show
  1. package/dist/adapter/helpers/accessor-to-format.js +100 -1
  2. package/dist/adapter/helpers/convert-texture-format.js +5 -6
  3. package/dist/adapter/helpers/generate-mipmaps.js +88 -92
  4. package/dist/adapter/helpers/get-bind-group.js +54 -48
  5. package/dist/adapter/helpers/get-vertex-buffer-layout.js +97 -84
  6. package/dist/adapter/helpers/webgpu-parameters.d.ts.map +1 -1
  7. package/dist/adapter/helpers/webgpu-parameters.js +181 -129
  8. package/dist/adapter/resources/webgpu-buffer.js +57 -73
  9. package/dist/adapter/resources/webgpu-command-encoder.d.ts.map +1 -1
  10. package/dist/adapter/resources/webgpu-command-encoder.js +47 -63
  11. package/dist/adapter/resources/webgpu-compute-pass.d.ts +1 -1
  12. package/dist/adapter/resources/webgpu-compute-pass.d.ts.map +1 -1
  13. package/dist/adapter/resources/webgpu-compute-pass.js +51 -55
  14. package/dist/adapter/resources/webgpu-compute-pipeline.d.ts.map +1 -1
  15. package/dist/adapter/resources/webgpu-compute-pipeline.js +22 -24
  16. package/dist/adapter/resources/webgpu-external-texture.js +26 -27
  17. package/dist/adapter/resources/webgpu-framebuffer.d.ts.map +1 -1
  18. package/dist/adapter/resources/webgpu-framebuffer.js +89 -103
  19. package/dist/adapter/resources/webgpu-query.js +42 -1
  20. package/dist/adapter/resources/webgpu-render-pass.d.ts +1 -1
  21. package/dist/adapter/resources/webgpu-render-pass.d.ts.map +1 -1
  22. package/dist/adapter/resources/webgpu-render-pass.js +64 -89
  23. package/dist/adapter/resources/webgpu-render-pipeline.d.ts.map +1 -1
  24. package/dist/adapter/resources/webgpu-render-pipeline.js +158 -154
  25. package/dist/adapter/resources/webgpu-sampler.d.ts +1 -1
  26. package/dist/adapter/resources/webgpu-sampler.d.ts.map +1 -1
  27. package/dist/adapter/resources/webgpu-sampler.js +16 -22
  28. package/dist/adapter/resources/webgpu-shader.d.ts +1 -1
  29. package/dist/adapter/resources/webgpu-shader.d.ts.map +1 -1
  30. package/dist/adapter/resources/webgpu-shader.js +47 -58
  31. package/dist/adapter/resources/webgpu-texture.d.ts +0 -1
  32. package/dist/adapter/resources/webgpu-texture.d.ts.map +1 -1
  33. package/dist/adapter/resources/webgpu-texture.js +100 -103
  34. package/dist/adapter/webgpu-canvas-context.d.ts.map +1 -1
  35. package/dist/adapter/webgpu-canvas-context.js +77 -90
  36. package/dist/adapter/webgpu-device.js +215 -242
  37. package/dist/adapter/webgpu-types.js +0 -2
  38. package/dist/bundle.js +1 -2
  39. package/dist/dist.js +8051 -0
  40. package/dist/dist.min.js +1 -0
  41. package/dist/es5/adapter/helpers/accessor-to-format.js +2 -0
  42. package/dist/es5/adapter/helpers/accessor-to-format.js.map +1 -0
  43. package/dist/es5/adapter/helpers/convert-texture-format.js +13 -0
  44. package/dist/es5/adapter/helpers/convert-texture-format.js.map +1 -0
  45. package/dist/es5/adapter/helpers/generate-mipmaps.js +103 -0
  46. package/dist/es5/adapter/helpers/generate-mipmaps.js.map +1 -0
  47. package/dist/es5/adapter/helpers/get-bind-group.js +66 -0
  48. package/dist/es5/adapter/helpers/get-bind-group.js.map +1 -0
  49. package/dist/es5/adapter/helpers/get-vertex-buffer-layout.js +149 -0
  50. package/dist/es5/adapter/helpers/get-vertex-buffer-layout.js.map +1 -0
  51. package/dist/es5/adapter/helpers/webgpu-parameters.js +150 -0
  52. package/dist/es5/adapter/helpers/webgpu-parameters.js.map +1 -0
  53. package/dist/es5/adapter/resources/webgpu-buffer.js +131 -0
  54. package/dist/es5/adapter/resources/webgpu-buffer.js.map +1 -0
  55. package/dist/es5/adapter/resources/webgpu-command-encoder.js +90 -0
  56. package/dist/es5/adapter/resources/webgpu-command-encoder.js.map +1 -0
  57. package/dist/es5/adapter/resources/webgpu-compute-pass.js +85 -0
  58. package/dist/es5/adapter/resources/webgpu-compute-pass.js.map +1 -0
  59. package/dist/es5/adapter/resources/webgpu-compute-pipeline.js +48 -0
  60. package/dist/es5/adapter/resources/webgpu-compute-pipeline.js.map +1 -0
  61. package/dist/es5/adapter/resources/webgpu-external-texture.js +50 -0
  62. package/dist/es5/adapter/resources/webgpu-external-texture.js.map +1 -0
  63. package/dist/es5/adapter/resources/webgpu-framebuffer.js +126 -0
  64. package/dist/es5/adapter/resources/webgpu-framebuffer.js.map +1 -0
  65. package/dist/es5/adapter/resources/webgpu-query.js +2 -0
  66. package/dist/es5/adapter/resources/webgpu-query.js.map +1 -0
  67. package/dist/es5/adapter/resources/webgpu-render-pass.js +124 -0
  68. package/dist/es5/adapter/resources/webgpu-render-pass.js.map +1 -0
  69. package/dist/es5/adapter/resources/webgpu-render-pipeline.js +185 -0
  70. package/dist/es5/adapter/resources/webgpu-render-pipeline.js.map +1 -0
  71. package/dist/es5/adapter/resources/webgpu-sampler.js +45 -0
  72. package/dist/es5/adapter/resources/webgpu-sampler.js.map +1 -0
  73. package/dist/es5/adapter/resources/webgpu-shader.js +125 -0
  74. package/dist/es5/adapter/resources/webgpu-shader.js.map +1 -0
  75. package/dist/es5/adapter/resources/webgpu-texture.js +138 -0
  76. package/dist/es5/adapter/resources/webgpu-texture.js.map +1 -0
  77. package/dist/es5/adapter/webgpu-canvas-context.js +111 -0
  78. package/dist/es5/adapter/webgpu-canvas-context.js.map +1 -0
  79. package/dist/es5/adapter/webgpu-device.js +317 -0
  80. package/dist/es5/adapter/webgpu-device.js.map +1 -0
  81. package/dist/es5/adapter/webgpu-types.js +2 -0
  82. package/dist/es5/adapter/webgpu-types.js.map +1 -0
  83. package/dist/es5/bundle.js +6 -0
  84. package/dist/es5/bundle.js.map +1 -0
  85. package/dist/es5/glsl/glsllang.js +47 -0
  86. package/dist/es5/glsl/glsllang.js.map +1 -0
  87. package/dist/es5/index.js +44 -0
  88. package/dist/es5/index.js.map +1 -0
  89. package/dist/es5/init.js +7 -0
  90. package/dist/es5/init.js.map +1 -0
  91. package/dist/esm/adapter/helpers/accessor-to-format.js +2 -0
  92. package/dist/esm/adapter/helpers/accessor-to-format.js.map +1 -0
  93. package/dist/esm/adapter/helpers/convert-texture-format.js +7 -0
  94. package/dist/esm/adapter/helpers/convert-texture-format.js.map +1 -0
  95. package/dist/esm/adapter/helpers/generate-mipmaps.js +88 -0
  96. package/dist/esm/adapter/helpers/generate-mipmaps.js.map +1 -0
  97. package/dist/esm/adapter/helpers/get-bind-group.js +51 -0
  98. package/dist/esm/adapter/helpers/get-bind-group.js.map +1 -0
  99. package/dist/esm/adapter/helpers/get-vertex-buffer-layout.js +83 -0
  100. package/dist/esm/adapter/helpers/get-vertex-buffer-layout.js.map +1 -0
  101. package/dist/esm/adapter/helpers/webgpu-parameters.js +137 -0
  102. package/dist/esm/adapter/helpers/webgpu-parameters.js.map +1 -0
  103. package/dist/esm/adapter/resources/webgpu-buffer.js +70 -0
  104. package/dist/esm/adapter/resources/webgpu-buffer.js.map +1 -0
  105. package/dist/esm/adapter/resources/webgpu-command-encoder.js +49 -0
  106. package/dist/esm/adapter/resources/webgpu-command-encoder.js.map +1 -0
  107. package/dist/esm/adapter/resources/webgpu-compute-pass.js +44 -0
  108. package/dist/esm/adapter/resources/webgpu-compute-pass.js.map +1 -0
  109. package/dist/esm/adapter/resources/webgpu-compute-pipeline.js +23 -0
  110. package/dist/esm/adapter/resources/webgpu-compute-pipeline.js.map +1 -0
  111. package/dist/esm/adapter/resources/webgpu-external-texture.js +23 -0
  112. package/dist/esm/adapter/resources/webgpu-external-texture.js.map +1 -0
  113. package/dist/esm/adapter/resources/webgpu-framebuffer.js +93 -0
  114. package/dist/esm/adapter/resources/webgpu-framebuffer.js.map +1 -0
  115. package/dist/esm/adapter/resources/webgpu-query.js +2 -0
  116. package/dist/esm/adapter/resources/webgpu-query.js.map +1 -0
  117. package/dist/esm/adapter/resources/webgpu-render-pass.js +79 -0
  118. package/dist/esm/adapter/resources/webgpu-render-pass.js.map +1 -0
  119. package/dist/esm/adapter/resources/webgpu-render-pipeline.js +130 -0
  120. package/dist/esm/adapter/resources/webgpu-render-pipeline.js.map +1 -0
  121. package/dist/esm/adapter/resources/webgpu-sampler.js +20 -0
  122. package/dist/esm/adapter/resources/webgpu-sampler.js.map +1 -0
  123. package/dist/esm/adapter/resources/webgpu-shader.js +50 -0
  124. package/dist/esm/adapter/resources/webgpu-shader.js.map +1 -0
  125. package/dist/esm/adapter/resources/webgpu-texture.js +95 -0
  126. package/dist/esm/adapter/resources/webgpu-texture.js.map +1 -0
  127. package/dist/esm/adapter/webgpu-canvas-context.js +74 -0
  128. package/dist/esm/adapter/webgpu-canvas-context.js.map +1 -0
  129. package/dist/esm/adapter/webgpu-device.js +196 -0
  130. package/dist/esm/adapter/webgpu-device.js.map +1 -0
  131. package/dist/esm/adapter/webgpu-types.js +2 -0
  132. package/dist/esm/adapter/webgpu-types.js.map +1 -0
  133. package/dist/esm/bundle.js +4 -0
  134. package/dist/esm/bundle.js.map +1 -0
  135. package/dist/esm/glsl/glsllang.js +9 -0
  136. package/dist/esm/glsl/glsllang.js.map +1 -0
  137. package/dist/esm/index.js +8 -0
  138. package/dist/esm/index.js.map +1 -0
  139. package/dist/esm/init.js +4 -0
  140. package/dist/esm/init.js.map +1 -0
  141. package/dist/glsl/glsllang.js +9 -7
  142. package/dist/index.js +8 -6
  143. package/dist/init.js +1 -2
  144. package/package.json +8 -8
  145. package/src/adapter/helpers/webgpu-parameters.ts +7 -2
  146. package/src/adapter/resources/webgpu-command-encoder.ts +2 -1
  147. package/src/adapter/resources/webgpu-compute-pass.ts +4 -4
  148. package/src/adapter/resources/webgpu-compute-pipeline.ts +2 -1
  149. package/src/adapter/resources/webgpu-framebuffer.ts +3 -2
  150. package/src/adapter/resources/webgpu-render-pass.ts +2 -2
  151. package/src/adapter/resources/webgpu-render-pipeline.ts +2 -1
  152. package/src/adapter/resources/webgpu-shader.ts +1 -1
  153. package/src/adapter/webgpu-canvas-context.ts +3 -2
  154. package/src/adapter/webgpu-device.ts +2 -2
  155. package/dist/adapter/helpers/accessor-to-format.js.map +0 -1
  156. package/dist/adapter/helpers/convert-texture-format.js.map +0 -1
  157. package/dist/adapter/helpers/generate-mipmaps.js.map +0 -1
  158. package/dist/adapter/helpers/get-bind-group.js.map +0 -1
  159. package/dist/adapter/helpers/get-vertex-buffer-layout.js.map +0 -1
  160. package/dist/adapter/helpers/webgpu-parameters.js.map +0 -1
  161. package/dist/adapter/resources/webgpu-buffer.js.map +0 -1
  162. package/dist/adapter/resources/webgpu-command-encoder.js.map +0 -1
  163. package/dist/adapter/resources/webgpu-compute-pass.js.map +0 -1
  164. package/dist/adapter/resources/webgpu-compute-pipeline.js.map +0 -1
  165. package/dist/adapter/resources/webgpu-external-texture.js.map +0 -1
  166. package/dist/adapter/resources/webgpu-framebuffer.js.map +0 -1
  167. package/dist/adapter/resources/webgpu-query.js.map +0 -1
  168. package/dist/adapter/resources/webgpu-render-pass.js.map +0 -1
  169. package/dist/adapter/resources/webgpu-render-pipeline.js.map +0 -1
  170. package/dist/adapter/resources/webgpu-sampler.js.map +0 -1
  171. package/dist/adapter/resources/webgpu-shader.js.map +0 -1
  172. package/dist/adapter/resources/webgpu-texture.js.map +0 -1
  173. package/dist/adapter/webgpu-canvas-context.js.map +0 -1
  174. package/dist/adapter/webgpu-device.js.map +0 -1
  175. package/dist/adapter/webgpu-types.js.map +0 -1
  176. package/dist/bundle.js.map +0 -1
  177. package/dist/glsl/glsllang.js.map +0 -1
  178. package/dist/index.js.map +0 -1
  179. package/dist/init.js.map +0 -1
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.WebGPUMipmapGenerator = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var 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}";
12
+ var 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}";
13
+ var WebGPUMipmapGenerator = function () {
14
+ function WebGPUMipmapGenerator(device, glslang) {
15
+ (0, _classCallCheck2.default)(this, WebGPUMipmapGenerator);
16
+ (0, _defineProperty2.default)(this, "device", void 0);
17
+ (0, _defineProperty2.default)(this, "mipmapSampler", void 0);
18
+ (0, _defineProperty2.default)(this, "mipmapPipeline", void 0);
19
+ this.device = device;
20
+ this.mipmapSampler = device.createSampler({
21
+ minFilter: 'linear'
22
+ });
23
+ this.mipmapPipeline = device.createRenderPipeline({
24
+ vertexStage: {
25
+ module: device.createShaderModule({
26
+ code: glslang.compileGLSL(VS_GEN_MIPMAP, 'vertex')
27
+ }),
28
+ entryPoint: 'main'
29
+ },
30
+ fragmentStage: {
31
+ module: device.createShaderModule({
32
+ code: glslang.compileGLSL(FS_GEN_MIPMAP, 'fragment')
33
+ }),
34
+ entryPoint: 'main'
35
+ },
36
+ primitiveTopology: 'triangle-strip',
37
+ colorStates: [{
38
+ format: 'rgba8unorm'
39
+ }]
40
+ });
41
+ }
42
+ (0, _createClass2.default)(WebGPUMipmapGenerator, [{
43
+ key: "generateMipmappedTexture",
44
+ value: function generateMipmappedTexture(imageBitmap) {
45
+ var textureSize = {
46
+ width: imageBitmap.width,
47
+ height: imageBitmap.height,
48
+ depth: 1
49
+ };
50
+ var mipLevelCount = Math.floor(Math.log2(Math.max(imageBitmap.width, imageBitmap.height))) + 1;
51
+ var texture = this.device.createTexture({
52
+ size: textureSize,
53
+ format: 'rgba8unorm',
54
+ usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.SAMPLED | GPUTextureUsage.OUTPUT_ATTACHMENT,
55
+ mipLevelCount: mipLevelCount
56
+ });
57
+ this.device.queue.copyImageBitmapToTexture({
58
+ imageBitmap: imageBitmap
59
+ }, {
60
+ texture: srcTexture
61
+ }, textureSize);
62
+ var commandEncoder = this.device.createCommandEncoder({});
63
+ for (var i = 1; i < mipLevelCount; ++i) {
64
+ var passEncoder = commandEncoder.beginRenderPass({
65
+ colorAttachments: [{
66
+ attachment: texture.createView({
67
+ baseMipLevel: i,
68
+ mipLevelCount: 1
69
+ }),
70
+ loadValue: {
71
+ r: 1.0,
72
+ g: 0.0,
73
+ b: 0.0,
74
+ a: 0.0
75
+ }
76
+ }]
77
+ });
78
+ var bindGroup = this.device.createBindGroup({
79
+ layout: this.mipmapPipeline.getBindGroupLayout(0),
80
+ bindings: [{
81
+ binding: 0,
82
+ resource: this.mipmapSampler
83
+ }, {
84
+ binding: 1,
85
+ resource: texture.createView({
86
+ baseMipLevel: i - 1,
87
+ mipLevelCount: 1
88
+ })
89
+ }]
90
+ });
91
+ passEncoder.setPipeline(this.mipmapPipeline);
92
+ passEncoder.setBindGroup(0, bindGroup);
93
+ passEncoder.draw(4);
94
+ passEncoder.endPass();
95
+ }
96
+ this.device.queue.submit([commandEncoder.finish()]);
97
+ return texture;
98
+ }
99
+ }]);
100
+ return WebGPUMipmapGenerator;
101
+ }();
102
+ exports.WebGPUMipmapGenerator = WebGPUMipmapGenerator;
103
+ //# sourceMappingURL=generate-mipmaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-mipmaps.js","names":["VS_GEN_MIPMAP","FS_GEN_MIPMAP","WebGPUMipmapGenerator","device","glslang","_classCallCheck2","default","_defineProperty2","mipmapSampler","createSampler","minFilter","mipmapPipeline","createRenderPipeline","vertexStage","module","createShaderModule","code","compileGLSL","entryPoint","fragmentStage","primitiveTopology","colorStates","format","_createClass2","key","value","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","exports"],"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 let textureSize = {\n width: imageBitmap.width,\n height: imageBitmap.height,\n depth: 1,\n }\n const mipLevelCount = Math.floor(Math.log2(Math.max(imageBitmap.width, imageBitmap.height))) + 1;\n\n // Populate the top level of the srcTexture with the imageBitmap.\n const texture = this.device.createTexture({\n size: textureSize,\n format: 'rgba8unorm',\n usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.SAMPLED | GPUTextureUsage.OUTPUT_ATTACHMENT,\n mipLevelCount\n });\n this.device.queue.copyImageBitmapToTexture({ imageBitmap }, { texture: srcTexture }, textureSize);\n\n const commandEncoder = this.device.createCommandEncoder({});\n for (let i = 1; i < mipLevelCount; ++i) {\n const passEncoder = commandEncoder.beginRenderPass({\n colorAttachments: [{\n attachment: texture.createView({\n baseMipLevel: i,\n mipLevelCount: 1\n }),\n loadValue: { r: 1.0, g: 0.0, b: 0.0, a: 0.0 },\n }],\n });\n\n const bindGroup = this.device.createBindGroup({\n layout: this.mipmapPipeline.getBindGroupLayout(0),\n bindings: [{\n binding: 0,\n resource: this.mipmapSampler,\n }, {\n binding: 1,\n resource: texture.createView({\n baseMipLevel: i - 1,\n mipLevelCount: 1\n }),\n }],\n });\n\n passEncoder.setPipeline(this.mipmapPipeline);\n passEncoder.setBindGroup(0, bindGroup);\n passEncoder.draw(4);\n passEncoder.endPass();\n }\n\n this.device.queue.submit([commandEncoder.finish()]);\n return texture;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getBindGroup = getBindGroup;
8
+ exports.getShaderLayoutBinding = getShaderLayoutBinding;
9
+ exports.makeBindGroupLayout = makeBindGroupLayout;
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _api = require("@luma.gl/api");
12
+ function makeBindGroupLayout(device, layout, bindings) {
13
+ throw new Error('not implemented');
14
+ }
15
+ function getBindGroup(device, bindGroupLayout, layout, bindings) {
16
+ var entries = getBindGroupEntries(bindings, layout);
17
+ return device.createBindGroup({
18
+ layout: bindGroupLayout,
19
+ entries: entries
20
+ });
21
+ }
22
+ function getShaderLayoutBinding(layout, bindingName) {
23
+ var bindingLayout = layout.bindings.find(function (binding) {
24
+ return binding.name === bindingName;
25
+ });
26
+ if (!bindingLayout) {
27
+ _api.log.warn("Binding ".concat(bindingName, " not set: Not found in shader layout."))();
28
+ }
29
+ return bindingLayout;
30
+ }
31
+ function getBindGroupEntries(bindings, layout) {
32
+ var entries = [];
33
+ for (var _i = 0, _Object$entries = Object.entries(bindings); _i < _Object$entries.length; _i++) {
34
+ var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
35
+ bindingName = _Object$entries$_i[0],
36
+ value = _Object$entries$_i[1];
37
+ var bindingLayout = getShaderLayoutBinding(layout, bindingName);
38
+ if (bindingLayout) {
39
+ entries.push(getBindGroupEntry(value, bindingLayout.location));
40
+ }
41
+ }
42
+ return entries;
43
+ }
44
+ function getBindGroupEntry(binding, index) {
45
+ if (binding instanceof _api.Buffer) {
46
+ return {
47
+ binding: index,
48
+ resource: {
49
+ buffer: (0, _api.cast)(binding).handle
50
+ }
51
+ };
52
+ }
53
+ if (binding instanceof _api.Sampler) {
54
+ return {
55
+ binding: index,
56
+ resource: (0, _api.cast)(binding).handle
57
+ };
58
+ } else if (binding instanceof _api.Texture) {
59
+ return {
60
+ binding: index,
61
+ resource: (0, _api.cast)(binding).handle.createView()
62
+ };
63
+ }
64
+ throw new Error('invalid binding');
65
+ }
66
+ //# sourceMappingURL=get-bind-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-bind-group.js","names":["_api","require","makeBindGroupLayout","device","layout","bindings","Error","getBindGroup","bindGroupLayout","entries","getBindGroupEntries","createBindGroup","getShaderLayoutBinding","bindingName","bindingLayout","find","binding","name","log","warn","concat","_i","_Object$entries","Object","length","_Object$entries$_i","_slicedToArray2","default","value","push","getBindGroupEntry","location","index","Buffer","resource","buffer","cast","handle","Sampler","Texture","createView"],"sources":["../../../../src/adapter/helpers/get-bind-group.ts"],"sourcesContent":["// luma.gl, MIT license\nimport type {ShaderLayout, BindingLayout, Binding} from '@luma.gl/api';\nimport {Buffer, Sampler, Texture, log, cast} from '@luma.gl/api';\nimport type WebGPUBuffer from '../resources/webgpu-buffer';\nimport type WebGPUSampler from '../resources/webgpu-sampler';\nimport type WebGPUTexture from '../resources/webgpu-texture';\n\n/**\n * Create a WebGPU \"bind group layout\" from an array of luma.gl bindings\n * @note bind groups can be automatically generated by WebGPU.\n */\n export function makeBindGroupLayout(device: GPUDevice, layout: GPUBindGroupLayout, bindings: Binding[]): GPUBindGroupLayout {\n throw new Error('not implemented');\n // return device.createBindGroupLayout({\n // layout,\n // entries: getBindGroupEntries(bindings)\n // })\n}\n\n/**\n * Create a WebGPU \"bind group\" from an array of luma.gl bindings\n */\nexport function getBindGroup(\n device: GPUDevice,\n bindGroupLayout: GPUBindGroupLayout,\n layout: ShaderLayout,\n bindings: Record<string, Binding>\n): GPUBindGroup {\n const entries = getBindGroupEntries(bindings, layout);\n return device.createBindGroup({\n layout: bindGroupLayout,\n entries\n });\n}\n\nexport function getShaderLayoutBinding(layout: ShaderLayout, bindingName: string): BindingLayout {\n const bindingLayout = layout.bindings.find(binding => binding.name === bindingName);\n if (!bindingLayout) {\n log.warn(`Binding ${bindingName} not set: Not found in shader layout.`)();\n }\n return bindingLayout;\n}\n\n/**\n * @param bindings\n * @returns\n */\nfunction getBindGroupEntries(bindings: Record<string, Binding>, layout: ShaderLayout): GPUBindGroupEntry[] {\n const entries: GPUBindGroupEntry[] = [];\n\n for (const [bindingName, value] of Object.entries(bindings)) {\n const bindingLayout = getShaderLayoutBinding(layout, bindingName);\n if (bindingLayout) {\n entries.push(getBindGroupEntry(value, bindingLayout.location));\n }\n }\n\n return entries;\n}\n\nfunction getBindGroupEntry(binding: Binding, index: number): GPUBindGroupEntry {\n if (binding instanceof Buffer) {\n return {\n binding: index,\n resource: {\n buffer: cast<WebGPUBuffer>(binding).handle\n }\n };\n }\n if (binding instanceof Sampler) {\n return {\n binding: index,\n resource: cast<WebGPUSampler>(binding).handle\n };\n } else if (binding instanceof Texture) {\n return {\n binding: index,\n resource: cast<WebGPUTexture>(binding).handle.createView()\n };\n }\n throw new Error('invalid binding');\n}\n"],"mappings":";;;;;;;;;;AAEA,IAAAA,IAAA,GAAAC,OAAA;AASQ,SAASC,mBAAmBA,CAACC,MAAiB,EAAEC,MAA0B,EAAEC,QAAmB,EAAsB;EAC3H,MAAM,IAAIC,KAAK,CAAC,iBAAiB,CAAC;AAKpC;AAKO,SAASC,YAAYA,CAC1BJ,MAAiB,EACjBK,eAAmC,EACnCJ,MAAoB,EACpBC,QAAiC,EACnB;EACd,IAAMI,OAAO,GAAGC,mBAAmB,CAACL,QAAQ,EAAED,MAAM,CAAC;EACrD,OAAOD,MAAM,CAACQ,eAAe,CAAC;IAC5BP,MAAM,EAAEI,eAAe;IACvBC,OAAO,EAAPA;EACF,CAAC,CAAC;AACJ;AAEO,SAASG,sBAAsBA,CAACR,MAAoB,EAAES,WAAmB,EAAiB;EAC/F,IAAMC,aAAa,GAAGV,MAAM,CAACC,QAAQ,CAACU,IAAI,CAAC,UAAAC,OAAO;IAAA,OAAIA,OAAO,CAACC,IAAI,KAAKJ,WAAW;EAAA,EAAC;EACnF,IAAI,CAACC,aAAa,EAAE;IAClBI,QAAG,CAACC,IAAI,YAAAC,MAAA,CAAYP,WAAW,2CAAwC,EAAE;EAC3E;EACA,OAAOC,aAAa;AACtB;AAMA,SAASJ,mBAAmBA,CAACL,QAAiC,EAAED,MAAoB,EAAuB;EACzG,IAAMK,OAA4B,GAAG,EAAE;EAEvC,SAAAY,EAAA,MAAAC,eAAA,GAAmCC,MAAM,CAACd,OAAO,CAACJ,QAAQ,CAAC,EAAAgB,EAAA,GAAAC,eAAA,CAAAE,MAAA,EAAAH,EAAA,IAAE;IAAxD,IAAAI,kBAAA,OAAAC,eAAA,CAAAC,OAAA,EAAAL,eAAA,CAAAD,EAAA;MAAOR,WAAW,GAAAY,kBAAA;MAAEG,KAAK,GAAAH,kBAAA;IAC5B,IAAMX,aAAa,GAAGF,sBAAsB,CAACR,MAAM,EAAES,WAAW,CAAC;IACjE,IAAIC,aAAa,EAAE;MACjBL,OAAO,CAACoB,IAAI,CAACC,iBAAiB,CAACF,KAAK,EAAEd,aAAa,CAACiB,QAAQ,CAAC,CAAC;IAChE;EACF;EAEA,OAAOtB,OAAO;AAChB;AAEA,SAASqB,iBAAiBA,CAACd,OAAgB,EAAEgB,KAAa,EAAqB;EAC7E,IAAIhB,OAAO,YAAYiB,WAAM,EAAE;IAC7B,OAAO;MACLjB,OAAO,EAAEgB,KAAK;MACdE,QAAQ,EAAE;QACRC,MAAM,EAAE,IAAAC,SAAI,EAAepB,OAAO,CAAC,CAACqB;MACtC;IACF,CAAC;EACH;EACA,IAAIrB,OAAO,YAAYsB,YAAO,EAAE;IAC9B,OAAO;MACLtB,OAAO,EAAEgB,KAAK;MACdE,QAAQ,EAAE,IAAAE,SAAI,EAAgBpB,OAAO,CAAC,CAACqB;IACzC,CAAC;EACH,CAAC,MAAM,IAAIrB,OAAO,YAAYuB,YAAO,EAAE;IACrC,OAAO;MACLvB,OAAO,EAAEgB,KAAK;MACdE,QAAQ,EAAE,IAAAE,SAAI,EAAgBpB,OAAO,CAAC,CAACqB,MAAM,CAACG,UAAU;IAC1D,CAAC;EACH;EACA,MAAM,IAAIlC,KAAK,CAAC,iBAAiB,CAAC;AACpC"}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getBufferSlots = getBufferSlots;
7
+ exports.getVertexBufferLayout = getVertexBufferLayout;
8
+ var _api = require("@luma.gl/api");
9
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
10
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
11
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
12
+ function getVertexBufferLayout(layout, bufferMap) {
13
+ var vertexBufferLayouts = [];
14
+ var usedAttributes = new Set();
15
+ var _iterator = _createForOfIteratorHelper(bufferMap),
16
+ _step;
17
+ try {
18
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
19
+ var mapping = _step.value;
20
+ var vertexAttributes = [];
21
+ var stepMode = 'vertex';
22
+ var byteStride = 0;
23
+ var byteOffset = mapping.byteOffset || 0;
24
+ if ('attributes' in mapping) {
25
+ var _iterator3 = _createForOfIteratorHelper(mapping.attributes),
26
+ _step3;
27
+ try {
28
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
29
+ var interleaved = _step3.value;
30
+ var attributeLayout = findAttributeLayout(layout, interleaved.name, usedAttributes);
31
+ stepMode = attributeLayout.stepMode || 'vertex';
32
+ vertexAttributes.push({
33
+ format: attributeLayout.format,
34
+ offset: byteOffset + byteStride,
35
+ shaderLocation: attributeLayout.location
36
+ });
37
+ byteStride += (0, _api.decodeVertexFormat)(attributeLayout.format).byteLength;
38
+ }
39
+ } catch (err) {
40
+ _iterator3.e(err);
41
+ } finally {
42
+ _iterator3.f();
43
+ }
44
+ } else {
45
+ var _attributeLayout = findAttributeLayout(layout, mapping.name, usedAttributes);
46
+ byteStride = (0, _api.decodeVertexFormat)(_attributeLayout.format).byteLength, stepMode = _attributeLayout.stepMode || 'vertex';
47
+ vertexAttributes.push({
48
+ format: _attributeLayout.format,
49
+ offset: byteOffset,
50
+ shaderLocation: _attributeLayout.location
51
+ });
52
+ }
53
+ vertexBufferLayouts.push({
54
+ arrayStride: mapping.byteStride || byteStride,
55
+ stepMode: stepMode || 'vertex',
56
+ attributes: vertexAttributes
57
+ });
58
+ }
59
+ } catch (err) {
60
+ _iterator.e(err);
61
+ } finally {
62
+ _iterator.f();
63
+ }
64
+ var _iterator2 = _createForOfIteratorHelper(layout.attributes),
65
+ _step2;
66
+ try {
67
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
68
+ var attribute = _step2.value;
69
+ if (!usedAttributes.has(attribute.name)) {
70
+ vertexBufferLayouts.push({
71
+ arrayStride: (0, _api.decodeVertexFormat)(attribute.format).byteLength,
72
+ stepMode: attribute.stepMode || 'vertex',
73
+ attributes: [{
74
+ format: attribute.format,
75
+ offset: 0,
76
+ shaderLocation: attribute.location
77
+ }]
78
+ });
79
+ }
80
+ }
81
+ } catch (err) {
82
+ _iterator2.e(err);
83
+ } finally {
84
+ _iterator2.f();
85
+ }
86
+ return vertexBufferLayouts;
87
+ }
88
+ function getBufferSlots(layout, bufferMap) {
89
+ var usedAttributes = new Set();
90
+ var bufferSlot = 0;
91
+ var bufferSlots = {};
92
+ var _iterator4 = _createForOfIteratorHelper(bufferMap),
93
+ _step4;
94
+ try {
95
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
96
+ var mapping = _step4.value;
97
+ if ('attributes' in mapping) {
98
+ var _iterator6 = _createForOfIteratorHelper(mapping.attributes),
99
+ _step6;
100
+ try {
101
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
102
+ var interleaved = _step6.value;
103
+ usedAttributes.add(interleaved.name);
104
+ }
105
+ } catch (err) {
106
+ _iterator6.e(err);
107
+ } finally {
108
+ _iterator6.f();
109
+ }
110
+ } else {
111
+ usedAttributes.add(mapping.name);
112
+ }
113
+ bufferSlots[mapping.name] = bufferSlot++;
114
+ }
115
+ } catch (err) {
116
+ _iterator4.e(err);
117
+ } finally {
118
+ _iterator4.f();
119
+ }
120
+ var _iterator5 = _createForOfIteratorHelper(layout.attributes),
121
+ _step5;
122
+ try {
123
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
124
+ var attribute = _step5.value;
125
+ if (!usedAttributes.has(attribute.name)) {
126
+ bufferSlots[attribute.name] = bufferSlot++;
127
+ }
128
+ }
129
+ } catch (err) {
130
+ _iterator5.e(err);
131
+ } finally {
132
+ _iterator5.f();
133
+ }
134
+ return bufferSlots;
135
+ }
136
+ function findAttributeLayout(layout, name, attributeNames) {
137
+ var attribute = layout.attributes.find(function (attribute) {
138
+ return attribute.name === name;
139
+ });
140
+ if (!attribute) {
141
+ throw new Error("Unknown attribute ".concat(name));
142
+ }
143
+ if (attributeNames.has(name)) {
144
+ throw new Error("Duplicate attribute ".concat(name));
145
+ }
146
+ attributeNames.add(name);
147
+ return attribute;
148
+ }
149
+ //# sourceMappingURL=get-vertex-buffer-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-vertex-buffer-layout.js","names":["_api","require","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","getVertexBufferLayout","layout","bufferMap","vertexBufferLayouts","usedAttributes","Set","_iterator","_step","mapping","vertexAttributes","stepMode","byteStride","byteOffset","_iterator3","attributes","_step3","interleaved","attributeLayout","findAttributeLayout","push","format","offset","shaderLocation","location","decodeVertexFormat","byteLength","arrayStride","_iterator2","_step2","attribute","has","getBufferSlots","bufferSlot","bufferSlots","_iterator4","_step4","_iterator6","_step6","add","_iterator5","_step5","attributeNames","find","Error","concat"],"sources":["../../../../src/adapter/helpers/get-vertex-buffer-layout.ts"],"sourcesContent":["import type {ShaderLayout, BufferMapping, AttributeLayout} from '@luma.gl/api';\nimport {decodeVertexFormat} from '@luma.gl/api';\n\n/**\n * Build a WebGPU vertex buffer layout intended for use in a GPURenderPassDescriptor.\n * Converts luma.gl attribute definitions to a WebGPU GPUVertexBufferLayout[] array\n * @param layout\n * @param bufferMap The buffer map is optional\n * @returns WebGPU layout intended for a GPURenderPassDescriptor.\n */\nexport function getVertexBufferLayout(layout: ShaderLayout, bufferMap: BufferMapping[]): GPUVertexBufferLayout[] {\n const vertexBufferLayouts: GPUVertexBufferLayout[] = [];\n const usedAttributes = new Set<string>();\n\n // First handle any buffers mentioned in `bufferMapping`\n for (const mapping of bufferMap) {\n // Build vertex attributes for one buffer\n const vertexAttributes: GPUVertexAttribute[] = [];\n\n // TODO verify that all stepModes for one buffer are the same\n let stepMode: 'vertex' | 'instance' = 'vertex';\n let byteStride = 0;\n let byteOffset = mapping.byteOffset || 0;\n\n // interleaved mapping {..., attributes: [{...}, ...]}\n if ('attributes' in mapping) {\n // const arrayStride = mapping.byteStride; TODO \n for (const interleaved of mapping.attributes) {\n const attributeLayout = findAttributeLayout(layout, interleaved.name, usedAttributes);\n\n stepMode = attributeLayout.stepMode || 'vertex';\n vertexAttributes.push({\n format: attributeLayout.format,\n offset: byteOffset + byteStride,\n shaderLocation: attributeLayout.location\n });\n\n byteStride += decodeVertexFormat(attributeLayout.format).byteLength;\n }\n // non-interleaved mapping (just set offset and stride)\n } else {\n const attributeLayout = findAttributeLayout(layout, mapping.name, usedAttributes);\n byteStride = decodeVertexFormat(attributeLayout.format).byteLength,\n\n stepMode = attributeLayout.stepMode || 'vertex';\n vertexAttributes.push({\n format: attributeLayout.format,\n offset: byteOffset,\n shaderLocation: attributeLayout.location\n });\n }\n\n // Store all the attribute bindings for one buffer\n vertexBufferLayouts.push({\n arrayStride: mapping.byteStride || byteStride,\n stepMode: stepMode || 'vertex',\n attributes: vertexAttributes\n });\n }\n\n // Add any non-mapped attributes\n for (const attribute of layout.attributes) {\n if (!usedAttributes.has(attribute.name)) {\n vertexBufferLayouts.push({\n arrayStride: decodeVertexFormat(attribute.format).byteLength,\n stepMode: attribute.stepMode || 'vertex',\n attributes: [{\n format: attribute.format,\n offset: 0,\n shaderLocation: attribute.location\n }]\n });\n }\n }\n\n return vertexBufferLayouts;\n}\n\nexport function getBufferSlots(layout: ShaderLayout, bufferMap: BufferMapping[]): Record<string, number> {\n const usedAttributes = new Set<string>();\n let bufferSlot = 0;\n const bufferSlots: Record<string, number> = {};\n\n // First handle any buffers mentioned in `bufferMapping`\n for (const mapping of bufferMap) {\n // interleaved mapping {..., attributes: [{...}, ...]}\n if ('attributes' in mapping) {\n for (const interleaved of mapping.attributes) {\n usedAttributes.add(interleaved.name);\n }\n // non-interleaved mapping (just set offset and stride)\n } else {\n usedAttributes.add(mapping.name);\n }\n bufferSlots[mapping.name] = bufferSlot++;\n }\n\n // Add any non-mapped attributes\n for (const attribute of layout.attributes) {\n if (!usedAttributes.has(attribute.name)) {\n bufferSlots[attribute.name] = bufferSlot++;\n }\n }\n\n return bufferSlots;\n}\n\n/**\n * Looks up an attribute in the ShaderLayout.\n * @throws if name is not in ShaderLayout\n * @throws if name has already been referenced\n */\nfunction findAttributeLayout(layout: ShaderLayout, name: string, attributeNames: Set<string>): AttributeLayout {\n const attribute = layout.attributes.find(attribute => attribute.name === name);\n if (!attribute) {\n throw new Error(`Unknown attribute ${name}`);\n }\n if (attributeNames.has(name)) {\n throw new Error(`Duplicate attribute ${name}`);\n }\n attributeNames.add(name);\n return attribute;\n}\n"],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.PARAMETER_TABLE = void 0;
8
+ exports.applyParametersToRenderPipelineDescriptor = applyParametersToRenderPipelineDescriptor;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
13
+ function addDepthStencil(descriptor) {
14
+ descriptor.depthStencil = descriptor.depthStencil || {
15
+ format: 'depth24plus',
16
+ stencilFront: {},
17
+ stencilBack: {},
18
+ depthWriteEnabled: undefined,
19
+ depthCompare: undefined
20
+ };
21
+ return descriptor.depthStencil;
22
+ }
23
+ var PARAMETER_TABLE = {
24
+ cullMode: function cullMode(parameter, value, descriptor) {
25
+ descriptor.primitive = descriptor.primitive || {};
26
+ descriptor.primitive.cullMode = value;
27
+ },
28
+ frontFace: function frontFace(parameter, value, descriptor) {
29
+ descriptor.primitive = descriptor.primitive || {};
30
+ descriptor.primitive.frontFace = value;
31
+ },
32
+ depthWriteEnabled: function depthWriteEnabled(parameter, value, descriptor) {
33
+ var depthStencil = addDepthStencil(descriptor);
34
+ depthStencil.depthWriteEnabled = value;
35
+ },
36
+ depthCompare: function depthCompare(parameter, value, descriptor) {
37
+ var depthStencil = addDepthStencil(descriptor);
38
+ depthStencil.depthCompare = value;
39
+ },
40
+ depthFormat: function depthFormat(parameter, value, descriptor) {
41
+ var depthStencil = addDepthStencil(descriptor);
42
+ depthStencil.format = value;
43
+ },
44
+ depthBias: function depthBias(parameter, value, descriptor) {
45
+ var depthStencil = addDepthStencil(descriptor);
46
+ depthStencil.depthBias = value;
47
+ },
48
+ depthBiasSlopeScale: function depthBiasSlopeScale(parameter, value, descriptor) {
49
+ var depthStencil = addDepthStencil(descriptor);
50
+ depthStencil.depthBiasSlopeScale = value;
51
+ },
52
+ depthBiasClamp: function depthBiasClamp(parameter, value, descriptor) {
53
+ var depthStencil = addDepthStencil(descriptor);
54
+ depthStencil.depthBiasClamp = value;
55
+ },
56
+ stencilReadMask: function stencilReadMask(parameter, value, descriptor) {
57
+ var depthStencil = addDepthStencil(descriptor);
58
+ depthStencil.stencilReadMask = value;
59
+ },
60
+ stencilWriteMask: function stencilWriteMask(parameter, value, descriptor) {
61
+ var depthStencil = addDepthStencil(descriptor);
62
+ depthStencil.stencilWriteMask = value;
63
+ },
64
+ stencilCompare: function stencilCompare(parameter, value, descriptor) {
65
+ var depthStencil = addDepthStencil(descriptor);
66
+ depthStencil.stencilFront.compare = value;
67
+ depthStencil.stencilBack.compare = value;
68
+ },
69
+ stencilPassOperation: function stencilPassOperation(parameter, value, descriptor) {
70
+ var depthStencil = addDepthStencil(descriptor);
71
+ depthStencil.stencilFront.passOp = value;
72
+ depthStencil.stencilBack.passOp = value;
73
+ },
74
+ stencilFailOperation: function stencilFailOperation(parameter, value, descriptor) {
75
+ var depthStencil = addDepthStencil(descriptor);
76
+ depthStencil.stencilFront.failOp = value;
77
+ depthStencil.stencilBack.failOp = value;
78
+ },
79
+ stencilDepthFailOperation: function stencilDepthFailOperation(parameter, value, descriptor) {
80
+ var depthStencil = addDepthStencil(descriptor);
81
+ depthStencil.stencilFront.depthFailOp = value;
82
+ depthStencil.stencilBack.depthFailOp = value;
83
+ },
84
+ sampleCount: function sampleCount(parameter, value, descriptor) {
85
+ descriptor.multisample = descriptor.multisample || {};
86
+ descriptor.multisample.count = value;
87
+ },
88
+ sampleMask: function sampleMask(parameter, value, descriptor) {
89
+ descriptor.multisample = descriptor.multisample || {};
90
+ descriptor.multisample.mask = value;
91
+ },
92
+ sampleAlphaToCoverageEnabled: function sampleAlphaToCoverageEnabled(parameter, value, descriptor) {
93
+ descriptor.multisample = descriptor.multisample || {};
94
+ descriptor.multisample.alphaToCoverageEnabled = value;
95
+ },
96
+ colorMask: function colorMask(parameter, value, descriptor) {
97
+ var targets = addColorState(descriptor);
98
+ targets[0].writeMask = value;
99
+ },
100
+ blendColorOperation: function blendColorOperation(parameter, value, descriptor) {
101
+ addColorState(descriptor);
102
+ }
103
+ };
104
+ exports.PARAMETER_TABLE = PARAMETER_TABLE;
105
+ var DEFAULT_PIPELINE_DESCRIPTOR = {
106
+ primitive: {
107
+ cullMode: 'back',
108
+ topology: 'triangle-list'
109
+ },
110
+ vertex: {
111
+ module: undefined,
112
+ entryPoint: 'main'
113
+ },
114
+ fragment: {
115
+ module: undefined,
116
+ entryPoint: 'main',
117
+ targets: []
118
+ },
119
+ layout: 'auto'
120
+ };
121
+ function applyParametersToRenderPipelineDescriptor(pipelineDescriptor) {
122
+ var parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
123
+ Object.assign(pipelineDescriptor, _objectSpread(_objectSpread({}, DEFAULT_PIPELINE_DESCRIPTOR), pipelineDescriptor));
124
+ setParameters(pipelineDescriptor, parameters);
125
+ }
126
+ function setParameters(pipelineDescriptor, parameters) {
127
+ for (var _i = 0, _Object$entries = Object.entries(parameters); _i < _Object$entries.length; _i++) {
128
+ var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
129
+ key = _Object$entries$_i[0],
130
+ value = _Object$entries$_i[1];
131
+ var setterFunction = PARAMETER_TABLE[key];
132
+ if (!setterFunction) {
133
+ throw new Error("Illegal parameter ".concat(key));
134
+ }
135
+ setterFunction(key, value, pipelineDescriptor);
136
+ }
137
+ }
138
+ function addColorState(descriptor) {
139
+ var _descriptor$fragment, _descriptor$fragment2, _descriptor$fragment3, _descriptor$fragment4, _descriptor$fragment5;
140
+ descriptor.fragment.targets = ((_descriptor$fragment = descriptor.fragment) === null || _descriptor$fragment === void 0 ? void 0 : _descriptor$fragment.targets) || [];
141
+ if (!Array.isArray((_descriptor$fragment2 = descriptor.fragment) === null || _descriptor$fragment2 === void 0 ? void 0 : _descriptor$fragment2.targets)) {
142
+ throw new Error('colorstate');
143
+ }
144
+ if (((_descriptor$fragment3 = descriptor.fragment) === null || _descriptor$fragment3 === void 0 ? void 0 : (_descriptor$fragment4 = _descriptor$fragment3.targets) === null || _descriptor$fragment4 === void 0 ? void 0 : _descriptor$fragment4.length) === 0) {
145
+ var _descriptor$fragment$;
146
+ (_descriptor$fragment$ = descriptor.fragment.targets) === null || _descriptor$fragment$ === void 0 ? void 0 : _descriptor$fragment$.push({});
147
+ }
148
+ return (_descriptor$fragment5 = descriptor.fragment) === null || _descriptor$fragment5 === void 0 ? void 0 : _descriptor$fragment5.targets;
149
+ }
150
+ //# sourceMappingURL=webgpu-parameters.js.map
@@ -0,0 +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","exports","DEFAULT_PIPELINE_DESCRIPTOR","topology","vertex","module","entryPoint","fragment","layout","applyParametersToRenderPipelineDescriptor","pipelineDescriptor","parameters","arguments","length","Object","assign","_objectSpread","setParameters","_i","_Object$entries","entries","_Object$entries$_i","_slicedToArray2","default","key","setterFunction","Error","concat","_descriptor$fragment","_descriptor$fragment2","_descriptor$fragment3","_descriptor$fragment4","_descriptor$fragment5","Array","isArray","_descriptor$fragment$","push"],"sources":["../../../../src/adapter/helpers/webgpu-parameters.ts"],"sourcesContent":["import {Parameters} from '@luma.gl/api';\n\nfunction addDepthStencil(descriptor: GPURenderPipelineDescriptor): GPUDepthStencilState {\n descriptor.depthStencil = descriptor.depthStencil || {\n // required, set something\n format: 'depth24plus',\n stencilFront: {},\n stencilBack: {},\n // TODO can this cause trouble? Should we set to WebGPU defaults? Are there defaults?\n depthWriteEnabled: undefined!,\n depthCompare: undefined!\n };\n return descriptor.depthStencil;\n}\n\n/**\n * Supports for luma.gl's flat parameter space\n * Populates the corresponding sub-objects in a GPURenderPipelineDescriptor\n */\n// @ts-expect-error\nexport const PARAMETER_TABLE: Record<keyof Parameters, Function> = {\n // RASTERIZATION PARAMETERS\n\n cullMode: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.primitive = descriptor.primitive || {};\n descriptor.primitive.cullMode = value;\n },\n\n frontFace: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.primitive = descriptor.primitive || {};\n descriptor.primitive.frontFace = value;\n },\n\n // DEPTH\n\n depthWriteEnabled: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthWriteEnabled = value;\n },\n\n depthCompare: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthCompare = value;\n },\n\n depthFormat: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.format = value;\n },\n\n depthBias: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthBias = value;\n },\n\n depthBiasSlopeScale: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthBiasSlopeScale = value;\n },\n\n depthBiasClamp: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.depthBiasClamp = value;\n },\n\n // STENCIL\n\n stencilReadMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilReadMask = value;\n },\n\n stencilWriteMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilWriteMask = value;\n },\n\n stencilCompare: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront!.compare = value;\n depthStencil.stencilBack!.compare = value;\n },\n\n stencilPassOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront!.passOp = value;\n depthStencil.stencilBack!.passOp = value;\n },\n\n stencilFailOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront!.failOp = value;\n depthStencil.stencilBack!.failOp = value;\n },\n\n stencilDepthFailOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const depthStencil = addDepthStencil(descriptor);\n depthStencil.stencilFront!.depthFailOp = value;\n depthStencil.stencilBack!.depthFailOp = value;\n },\n\n // MULTISAMPLE\n\n sampleCount: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.multisample = descriptor.multisample || {};\n descriptor.multisample.count = value;\n },\n\n sampleMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.multisample = descriptor.multisample || {};\n descriptor.multisample.mask = value;\n },\n\n sampleAlphaToCoverageEnabled: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n descriptor.multisample = descriptor.multisample || {};\n descriptor.multisample.alphaToCoverageEnabled = value;\n },\n\n // COLOR\n\n colorMask: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n const targets = addColorState(descriptor);\n targets[0].writeMask = value;\n },\n\n blendColorOperation: (parameter: keyof Parameters, value: any, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n // const targets = addColorState(descriptor);\n // const target = targets[0];\n // const blend: GPUBlendState = target.blend || {color: {alpha: 0}};\n // blend.color = blend.color || {};\n // target.blend.color.operation = value;\n }\n\n /*\n blendColorSrcTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.color = targets[0].blend.color || {};\n targets[0].blend.color.srcTarget = value;\n },\n\n blendColorDstTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.color = targets[0].blend.color || {};\n targets[0].blend.color.dstTarget = value;\n },\n\n blendAlphaOperation: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.alpha = targets[0].blend.alpha || {};\n targets[0].blend.alpha.operation = value;\n },\n\n blendAlphaSrcTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.alpha = targets[0].blend.alpha || {};\n targets[0].blend.alpha.srcTarget = value;\n },\n\n blendAlphaDstTarget: (parameter, value, descriptor: GPURenderPipelineDescriptor) => {\n addColorState(descriptor);\n targets[0].blend = targets[0].blend || {};\n targets[0].blend.alpha = targets[0].blend.alpha || {};\n targets[0].blend.alpha.dstTarget = value;\n },\n */\n};\n\nconst DEFAULT_PIPELINE_DESCRIPTOR: GPURenderPipelineDescriptor = {\n // depthStencil: {\n // stencilFront: {},\n // stencilBack: {},\n // // depthWriteEnabled: true,\n // // depthCompare: 'less',\n // // format: 'depth24plus-stencil8',\n // },\n\n primitive: {\n cullMode: 'back',\n topology: 'triangle-list'\n },\n\n vertex: {\n module: undefined!,\n entryPoint: 'main'\n },\n\n fragment: {\n module: undefined!,\n entryPoint: 'main',\n targets: [\n // { format: props.color0Format || 'bgra8unorm' }\n ]\n },\n\n layout: 'auto'\n};\n\nexport function applyParametersToRenderPipelineDescriptor(\n pipelineDescriptor: GPURenderPipelineDescriptor,\n parameters: Parameters = {}\n): void {\n // Apply defaults\n Object.assign(pipelineDescriptor, {...DEFAULT_PIPELINE_DESCRIPTOR, ...pipelineDescriptor});\n setParameters(pipelineDescriptor, parameters);\n}\n\n// Apply any supplied parameters\nfunction setParameters(\n pipelineDescriptor: GPURenderPipelineDescriptor,\n parameters: Parameters\n): void {\n for (const [key, value] of Object.entries(parameters)) {\n const setterFunction = PARAMETER_TABLE[key as keyof Parameters];\n if (!setterFunction) {\n throw new Error(`Illegal parameter ${key}`);\n }\n setterFunction(key, value, pipelineDescriptor);\n }\n}\n\nfunction addColorState(descriptor: GPURenderPipelineDescriptor): GPUColorTargetState[] {\n descriptor.fragment!.targets = descriptor.fragment?.targets || [];\n if (!Array.isArray(descriptor.fragment?.targets)) {\n throw new Error('colorstate');\n }\n if (descriptor.fragment?.targets?.length === 0) {\n descriptor.fragment.targets?.push({});\n }\n return descriptor.fragment?.targets as GPUColorTargetState[];\n}\n"],"mappings":"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"}