@luma.gl/core 9.0.0-beta.4 → 9.0.0-beta.6

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 (291) hide show
  1. package/dist/adapter/attribute-utils/get-attribute-from-layouts.d.ts +4 -4
  2. package/dist/adapter/attribute-utils/get-attribute-from-layouts.d.ts.map +1 -1
  3. package/dist/adapter/attribute-utils/get-attribute-from-layouts.js +138 -106
  4. package/dist/adapter/canvas-context.d.ts +2 -2
  5. package/dist/adapter/canvas-context.d.ts.map +1 -1
  6. package/dist/adapter/canvas-context.js +306 -232
  7. package/dist/adapter/device.d.ts +112 -69
  8. package/dist/adapter/device.d.ts.map +1 -1
  9. package/dist/adapter/device.js +145 -94
  10. package/dist/adapter/resources/buffer.d.ts +3 -3
  11. package/dist/adapter/resources/buffer.d.ts.map +1 -1
  12. package/dist/adapter/resources/buffer.js +70 -56
  13. package/dist/adapter/resources/command-buffer.d.ts +2 -2
  14. package/dist/adapter/resources/command-buffer.d.ts.map +1 -1
  15. package/dist/adapter/resources/command-buffer.js +15 -12
  16. package/dist/adapter/resources/command-encoder.d.ts +22 -7
  17. package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
  18. package/dist/adapter/resources/command-encoder.js +16 -16
  19. package/dist/adapter/resources/compute-pass.d.ts +16 -5
  20. package/dist/adapter/resources/compute-pass.d.ts.map +1 -1
  21. package/dist/adapter/resources/compute-pass.js +15 -12
  22. package/dist/adapter/resources/compute-pipeline.d.ts +4 -4
  23. package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -1
  24. package/dist/adapter/resources/compute-pipeline.js +20 -17
  25. package/dist/adapter/resources/external-texture.d.ts +2 -2
  26. package/dist/adapter/resources/external-texture.d.ts.map +1 -1
  27. package/dist/adapter/resources/external-texture.js +14 -14
  28. package/dist/adapter/resources/framebuffer.d.ts +9 -8
  29. package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
  30. package/dist/adapter/resources/framebuffer.js +191 -91
  31. package/dist/adapter/resources/query-set.d.ts +26 -0
  32. package/dist/adapter/resources/query-set.d.ts.map +1 -0
  33. package/dist/adapter/resources/query-set.js +18 -0
  34. package/dist/adapter/resources/render-pass.d.ts +22 -9
  35. package/dist/adapter/resources/render-pass.d.ts.map +1 -1
  36. package/dist/adapter/resources/render-pass.js +34 -20
  37. package/dist/adapter/resources/render-pipeline.d.ts +22 -18
  38. package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
  39. package/dist/adapter/resources/render-pipeline.js +50 -33
  40. package/dist/adapter/resources/resource.d.ts +1 -1
  41. package/dist/adapter/resources/resource.d.ts.map +1 -1
  42. package/dist/adapter/resources/resource.js +133 -92
  43. package/dist/adapter/resources/sampler.d.ts +3 -3
  44. package/dist/adapter/resources/sampler.d.ts.map +1 -1
  45. package/dist/adapter/resources/sampler.js +24 -23
  46. package/dist/adapter/resources/shader.d.ts +8 -6
  47. package/dist/adapter/resources/shader.d.ts.map +1 -1
  48. package/dist/adapter/resources/shader.js +98 -74
  49. package/dist/adapter/resources/texture-view.d.ts +32 -0
  50. package/dist/adapter/resources/texture-view.d.ts.map +1 -0
  51. package/dist/adapter/resources/texture-view.js +24 -0
  52. package/dist/adapter/resources/texture.d.ts +10 -15
  53. package/dist/adapter/resources/texture.d.ts.map +1 -1
  54. package/dist/adapter/resources/texture.js +54 -42
  55. package/dist/adapter/resources/transform-feedback.d.ts +7 -7
  56. package/dist/adapter/resources/transform-feedback.d.ts.map +1 -1
  57. package/dist/adapter/resources/transform-feedback.js +15 -14
  58. package/dist/adapter/resources/vertex-array.d.ts +9 -9
  59. package/dist/adapter/resources/vertex-array.d.ts.map +1 -1
  60. package/dist/adapter/resources/vertex-array.js +36 -20
  61. package/dist/adapter/type-utils/decode-attribute-type.d.ts +2 -2
  62. package/dist/adapter/type-utils/decode-attribute-type.d.ts.map +1 -1
  63. package/dist/adapter/type-utils/decode-attribute-type.js +59 -52
  64. package/dist/adapter/type-utils/decode-data-type.d.ts +1 -1
  65. package/dist/adapter/type-utils/decode-data-type.d.ts.map +1 -1
  66. package/dist/adapter/type-utils/decode-data-type.js +39 -35
  67. package/dist/adapter/type-utils/decode-shader-types.d.ts +1 -1
  68. package/dist/adapter/type-utils/decode-shader-types.d.ts.map +1 -1
  69. package/dist/adapter/type-utils/decode-shader-types.js +36 -96
  70. package/dist/adapter/type-utils/decode-texture-format.d.ts +6 -2
  71. package/dist/adapter/type-utils/decode-texture-format.d.ts.map +1 -1
  72. package/dist/adapter/type-utils/decode-texture-format.js +172 -92
  73. package/dist/adapter/type-utils/decode-vertex-format.d.ts +1 -1
  74. package/dist/adapter/type-utils/decode-vertex-format.d.ts.map +1 -1
  75. package/dist/adapter/type-utils/decode-vertex-format.js +30 -22
  76. package/dist/adapter/type-utils/vertex-format-from-attribute.d.ts +2 -2
  77. package/dist/adapter/type-utils/vertex-format-from-attribute.d.ts.map +1 -1
  78. package/dist/adapter/type-utils/vertex-format-from-attribute.js +72 -65
  79. package/dist/adapter/type-utils/wgsl-utils.d.ts +1 -1
  80. package/dist/adapter/type-utils/wgsl-utils.d.ts.map +1 -1
  81. package/dist/adapter/type-utils/wgsl-utils.js +17 -13
  82. package/dist/adapter/types/accessor.d.ts +1 -1
  83. package/dist/adapter/types/accessor.d.ts.map +1 -1
  84. package/dist/adapter/types/accessor.js +3 -1
  85. package/dist/adapter/types/buffer-layout.d.ts +1 -1
  86. package/dist/adapter/types/buffer-layout.d.ts.map +1 -1
  87. package/dist/adapter/types/buffer-layout.js +3 -1
  88. package/dist/adapter/types/parameters.d.ts +28 -6
  89. package/dist/adapter/types/parameters.d.ts.map +1 -1
  90. package/dist/adapter/types/parameters.js +46 -26
  91. package/dist/adapter/types/shader-layout.d.ts +8 -7
  92. package/dist/adapter/types/shader-layout.d.ts.map +1 -1
  93. package/dist/adapter/types/shader-layout.js +3 -1
  94. package/dist/adapter/types/shader-types.d.ts.map +1 -1
  95. package/dist/adapter/types/shader-types.js +3 -1
  96. package/dist/adapter/types/texture-formats.d.ts +2 -2
  97. package/dist/adapter/types/texture-formats.d.ts.map +1 -1
  98. package/dist/adapter/types/texture-formats.js +3 -1
  99. package/dist/adapter/types/types.d.ts +4 -4
  100. package/dist/adapter/types/types.d.ts.map +1 -1
  101. package/dist/adapter/types/types.js +3 -1
  102. package/dist/adapter/types/vertex-formats.d.ts.map +1 -1
  103. package/dist/adapter/types/vertex-formats.js +3 -1
  104. package/dist/dist.dev.js +614 -406
  105. package/dist/index.cjs +344 -369
  106. package/dist/index.cjs.map +7 -0
  107. package/dist/index.d.ts +80 -76
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +19 -5
  110. package/dist/init.d.ts.map +1 -1
  111. package/dist/init.js +30 -17
  112. package/dist/lib/compiler-log/compiler-message.d.ts.map +1 -1
  113. package/dist/lib/compiler-log/compiler-message.js +3 -1
  114. package/dist/lib/compiler-log/format-compiler-log.d.ts +1 -1
  115. package/dist/lib/compiler-log/format-compiler-log.d.ts.map +1 -1
  116. package/dist/lib/compiler-log/format-compiler-log.js +69 -48
  117. package/dist/lib/compiler-log/get-shader-info.d.ts.map +1 -1
  118. package/dist/lib/compiler-log/get-shader-info.js +23 -19
  119. package/dist/lib/luma.d.ts +3 -3
  120. package/dist/lib/luma.d.ts.map +1 -1
  121. package/dist/lib/luma.js +60 -51
  122. package/dist/lib/uniforms/uniform-block.d.ts +3 -4
  123. package/dist/lib/uniforms/uniform-block.d.ts.map +1 -1
  124. package/dist/lib/uniforms/uniform-block.js +52 -42
  125. package/dist/lib/uniforms/uniform-buffer-layout.d.ts +2 -2
  126. package/dist/lib/uniforms/uniform-buffer-layout.d.ts.map +1 -1
  127. package/dist/lib/uniforms/uniform-buffer-layout.js +86 -66
  128. package/dist/lib/uniforms/uniform-store.d.ts +6 -6
  129. package/dist/lib/uniforms/uniform-store.d.ts.map +1 -1
  130. package/dist/lib/uniforms/uniform-store.js +111 -75
  131. package/dist/lib/uniforms/uniform.d.ts +2 -2
  132. package/dist/lib/uniforms/uniform.d.ts.map +1 -1
  133. package/dist/lib/uniforms/uniform.js +15 -15
  134. package/dist/types.d.ts.map +1 -1
  135. package/dist/types.js +4 -3
  136. package/dist/utils/array-equal.d.ts.map +1 -1
  137. package/dist/utils/array-equal.js +25 -22
  138. package/dist/utils/array-utils-flat.d.ts +1 -1
  139. package/dist/utils/array-utils-flat.d.ts.map +1 -1
  140. package/dist/utils/array-utils-flat.js +29 -28
  141. package/dist/utils/assert.d.ts.map +1 -1
  142. package/dist/utils/assert.js +8 -4
  143. package/dist/utils/cast.d.ts.map +1 -1
  144. package/dist/utils/cast.js +5 -2
  145. package/dist/utils/check-props.d.ts.map +1 -1
  146. package/dist/utils/check-props.js +30 -26
  147. package/dist/utils/deep-equal.d.ts.map +1 -1
  148. package/dist/utils/deep-equal.js +42 -32
  149. package/dist/utils/format-value.d.ts +1 -1
  150. package/dist/utils/format-value.d.ts.map +1 -1
  151. package/dist/utils/format-value.js +36 -39
  152. package/dist/utils/is-array.d.ts +1 -1
  153. package/dist/utils/is-array.d.ts.map +1 -1
  154. package/dist/utils/is-array.js +20 -6
  155. package/dist/utils/load-file.d.ts.map +1 -1
  156. package/dist/utils/load-file.js +63 -37
  157. package/dist/utils/log.d.ts.map +1 -1
  158. package/dist/utils/log.js +5 -4
  159. package/dist/utils/random.d.ts.map +1 -1
  160. package/dist/utils/random.js +13 -9
  161. package/dist/utils/request-animation-frame.d.ts.map +1 -1
  162. package/dist/utils/request-animation-frame.js +12 -3
  163. package/dist/utils/stats-manager.d.ts.map +1 -1
  164. package/dist/utils/stats-manager.js +16 -14
  165. package/dist/utils/stub-methods.d.ts.map +1 -1
  166. package/dist/utils/stub-methods.js +15 -12
  167. package/dist/utils/utils.d.ts +0 -6
  168. package/dist/utils/utils.d.ts.map +1 -1
  169. package/dist/utils/utils.js +21 -15
  170. package/dist.min.js +8 -23
  171. package/package.json +6 -6
  172. package/src/adapter/attribute-utils/get-attribute-from-layouts.ts +6 -5
  173. package/src/adapter/canvas-context.ts +8 -5
  174. package/src/adapter/device.ts +181 -127
  175. package/src/adapter/resources/buffer.ts +19 -6
  176. package/src/adapter/resources/command-buffer.ts +7 -5
  177. package/src/adapter/resources/command-encoder.ts +40 -29
  178. package/src/adapter/resources/compute-pass.ts +23 -9
  179. package/src/adapter/resources/compute-pipeline.ts +5 -2
  180. package/src/adapter/resources/external-texture.ts +8 -2
  181. package/src/adapter/resources/framebuffer.ts +115 -102
  182. package/src/adapter/resources/query-set.ts +41 -0
  183. package/src/adapter/resources/render-pass.ts +48 -54
  184. package/src/adapter/resources/render-pipeline.ts +22 -9
  185. package/src/adapter/resources/resource.ts +13 -10
  186. package/src/adapter/resources/sampler.ts +4 -3
  187. package/src/adapter/resources/shader.ts +19 -7
  188. package/src/adapter/resources/texture-view.ts +51 -0
  189. package/src/adapter/resources/texture.ts +28 -26
  190. package/src/adapter/resources/transform-feedback.ts +6 -3
  191. package/src/adapter/resources/vertex-array.ts +11 -3
  192. package/src/adapter/type-utils/decode-attribute-type.ts +24 -10
  193. package/src/adapter/type-utils/decode-data-type.ts +5 -1
  194. package/src/adapter/type-utils/decode-shader-types.ts +12 -9
  195. package/src/adapter/type-utils/decode-texture-format.ts +28 -12
  196. package/src/adapter/type-utils/decode-vertex-format.ts +4 -0
  197. package/src/adapter/type-utils/vertex-format-from-attribute.ts +4 -1
  198. package/src/adapter/type-utils/wgsl-utils.ts +6 -2
  199. package/src/adapter/types/accessor.ts +5 -2
  200. package/src/adapter/types/buffer-layout.ts +11 -8
  201. package/src/adapter/types/parameters.ts +98 -93
  202. package/src/adapter/types/shader-layout.ts +11 -2
  203. package/src/adapter/types/shader-types.ts +2 -1
  204. package/src/adapter/types/texture-formats.ts +130 -129
  205. package/src/adapter/types/types.ts +12 -6
  206. package/src/adapter/types/vertex-formats.ts +4 -5
  207. package/src/index.ts +30 -15
  208. package/src/init.ts +10 -4
  209. package/src/lib/compiler-log/compiler-message.ts +3 -2
  210. package/src/lib/compiler-log/format-compiler-log.ts +8 -3
  211. package/src/lib/compiler-log/get-shader-info.ts +2 -1
  212. package/src/lib/luma.ts +13 -8
  213. package/src/lib/uniforms/uniform-block.ts +7 -3
  214. package/src/lib/uniforms/uniform-buffer-layout.ts +16 -10
  215. package/src/lib/uniforms/uniform-store.ts +4 -1
  216. package/src/lib/uniforms/uniform.ts +12 -6
  217. package/src/types.ts +7 -3
  218. package/src/utils/array-equal.ts +2 -1
  219. package/src/utils/array-utils-flat.ts +9 -3
  220. package/src/utils/assert.ts +4 -0
  221. package/src/utils/cast.ts +4 -0
  222. package/src/utils/check-props.ts +9 -1
  223. package/src/utils/deep-equal.ts +4 -0
  224. package/src/utils/format-value.ts +9 -2
  225. package/src/utils/is-array.ts +4 -0
  226. package/src/utils/load-file.ts +5 -3
  227. package/src/utils/log.ts +4 -0
  228. package/src/utils/random.ts +4 -0
  229. package/src/utils/request-animation-frame.ts +4 -0
  230. package/src/utils/stats-manager.ts +6 -2
  231. package/src/utils/stub-methods.ts +10 -1
  232. package/src/utils/utils.ts +2 -10
  233. package/dist/adapter/attribute-utils/get-attribute-from-layouts.js.map +0 -1
  234. package/dist/adapter/canvas-context.js.map +0 -1
  235. package/dist/adapter/device.js.map +0 -1
  236. package/dist/adapter/resources/buffer.js.map +0 -1
  237. package/dist/adapter/resources/command-buffer.js.map +0 -1
  238. package/dist/adapter/resources/command-encoder.js.map +0 -1
  239. package/dist/adapter/resources/compute-pass.js.map +0 -1
  240. package/dist/adapter/resources/compute-pipeline.js.map +0 -1
  241. package/dist/adapter/resources/external-texture.js.map +0 -1
  242. package/dist/adapter/resources/framebuffer.js.map +0 -1
  243. package/dist/adapter/resources/render-pass.js.map +0 -1
  244. package/dist/adapter/resources/render-pipeline.js.map +0 -1
  245. package/dist/adapter/resources/resource.js.map +0 -1
  246. package/dist/adapter/resources/sampler.js.map +0 -1
  247. package/dist/adapter/resources/shader.js.map +0 -1
  248. package/dist/adapter/resources/texture.js.map +0 -1
  249. package/dist/adapter/resources/transform-feedback.js.map +0 -1
  250. package/dist/adapter/resources/vertex-array.js.map +0 -1
  251. package/dist/adapter/type-utils/decode-attribute-type.js.map +0 -1
  252. package/dist/adapter/type-utils/decode-data-type.js.map +0 -1
  253. package/dist/adapter/type-utils/decode-shader-types.js.map +0 -1
  254. package/dist/adapter/type-utils/decode-texture-format.js.map +0 -1
  255. package/dist/adapter/type-utils/decode-vertex-format.js.map +0 -1
  256. package/dist/adapter/type-utils/vertex-format-from-attribute.js.map +0 -1
  257. package/dist/adapter/type-utils/wgsl-utils.js.map +0 -1
  258. package/dist/adapter/types/accessor.js.map +0 -1
  259. package/dist/adapter/types/buffer-layout.js.map +0 -1
  260. package/dist/adapter/types/parameters.js.map +0 -1
  261. package/dist/adapter/types/shader-layout.js.map +0 -1
  262. package/dist/adapter/types/shader-types.js.map +0 -1
  263. package/dist/adapter/types/texture-formats.js.map +0 -1
  264. package/dist/adapter/types/types.js.map +0 -1
  265. package/dist/adapter/types/vertex-formats.js.map +0 -1
  266. package/dist/index.js.map +0 -1
  267. package/dist/init.js.map +0 -1
  268. package/dist/lib/compiler-log/compiler-message.js.map +0 -1
  269. package/dist/lib/compiler-log/format-compiler-log.js.map +0 -1
  270. package/dist/lib/compiler-log/get-shader-info.js.map +0 -1
  271. package/dist/lib/luma.js.map +0 -1
  272. package/dist/lib/uniforms/uniform-block.js.map +0 -1
  273. package/dist/lib/uniforms/uniform-buffer-layout.js.map +0 -1
  274. package/dist/lib/uniforms/uniform-store.js.map +0 -1
  275. package/dist/lib/uniforms/uniform.js.map +0 -1
  276. package/dist/types.js.map +0 -1
  277. package/dist/utils/array-equal.js.map +0 -1
  278. package/dist/utils/array-utils-flat.js.map +0 -1
  279. package/dist/utils/assert.js.map +0 -1
  280. package/dist/utils/cast.js.map +0 -1
  281. package/dist/utils/check-props.js.map +0 -1
  282. package/dist/utils/deep-equal.js.map +0 -1
  283. package/dist/utils/format-value.js.map +0 -1
  284. package/dist/utils/is-array.js.map +0 -1
  285. package/dist/utils/load-file.js.map +0 -1
  286. package/dist/utils/log.js.map +0 -1
  287. package/dist/utils/random.js.map +0 -1
  288. package/dist/utils/request-animation-frame.js.map +0 -1
  289. package/dist/utils/stats-manager.js.map +0 -1
  290. package/dist/utils/stub-methods.js.map +0 -1
  291. package/dist/utils/utils.js.map +0 -1
@@ -1,4 +1,7 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
2
5
  import {isBrowser} from '@probe.gl/env';
3
6
  import type {Device} from './device';
4
7
  import type {Framebuffer} from './resources/framebuffer';
@@ -120,7 +123,7 @@ export abstract class CanvasContext {
120
123
 
121
124
  // React to size changes
122
125
  if (this.canvas instanceof HTMLCanvasElement && props.autoResize) {
123
- this.resizeObserver = new ResizeObserver((entries) => {
126
+ this.resizeObserver = new ResizeObserver(entries => {
124
127
  for (const entry of entries) {
125
128
  if (entry.target === this.canvas) {
126
129
  this.update();
@@ -145,7 +148,7 @@ export abstract class CanvasContext {
145
148
 
146
149
  useDevicePixels = useDevicePixels === undefined ? this.props.useDevicePixels : useDevicePixels;
147
150
 
148
- if (!useDevicePixels || useDevicePixels as number <= 0) {
151
+ if (!useDevicePixels || (useDevicePixels as number) <= 0) {
149
152
  return 1;
150
153
  }
151
154
 
@@ -320,7 +323,7 @@ function getPageLoadPromise(): Promise<void> {
320
323
  if (isPageLoaded() || typeof window === 'undefined') {
321
324
  return Promise.resolve();
322
325
  }
323
- return new Promise((resolve) => {
326
+ return new Promise(resolve => {
324
327
  window.addEventListener('load', () => resolve());
325
328
  });
326
329
  }
@@ -387,7 +390,7 @@ function scalePixels(
387
390
  height: number;
388
391
  } {
389
392
  const point = pixel as [number, number];
390
-
393
+
391
394
  const x = scaleX(point[0], ratio, width);
392
395
  let y = scaleY(point[1], ratio, height, yInvert);
393
396
 
@@ -1,4 +1,7 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
2
5
  import {VERSION} from '../init';
3
6
  import {StatsManager, lumaStats} from '../utils/stats-manager';
4
7
  import {log} from '../utils/log';
@@ -19,40 +22,9 @@ import type {ComputePass, ComputePassProps} from './resources/compute-pass';
19
22
  import type {CommandEncoder, CommandEncoderProps} from './resources/command-encoder';
20
23
  import type {VertexArray, VertexArrayProps} from './resources/vertex-array';
21
24
  import type {TransformFeedback, TransformFeedbackProps} from './resources/transform-feedback';
25
+ import type {QuerySet, QuerySetProps} from './resources/query-set';
22
26
 
23
- /** Device properties */
24
- export type DeviceProps = {
25
- id?: string;
26
-
27
- type?: 'webgl' | 'webgl1' | 'webgl2' | 'webgpu' | 'best-available';
28
-
29
- // Common parameters
30
- canvas?: HTMLCanvasElement | OffscreenCanvas | string | null; // A canvas element or a canvas string id
31
- container?: HTMLElement | string | null;
32
- width?: number /** width is only used when creating a new canvas */;
33
- height?: number /** height is only used when creating a new canvas */;
34
-
35
- // WebGLDevice parameters
36
- webgl2?: boolean; // Set to false to not create a WebGL2 context (force webgl1)
37
- webgl1?: boolean; // set to false to not create a WebGL1 context (fails if webgl2 not available)
38
-
39
- // WebGLContext PARAMETERS - Can only be set on context creation...
40
- // alpha?: boolean; // Default render target has an alpha buffer.
41
- // depth?: boolean; // Default render target has a depth buffer of at least 16 bits.
42
- // stencil?: boolean; // Default render target has a stencil buffer of at least 8 bits.
43
- // antialias?: boolean; // Boolean that indicates whether or not to perform anti-aliasing.
44
- // premultipliedAlpha?: boolean; // Boolean that indicates that the page compositor will assume the drawing buffer contains colors with pre-multiplied alpha.
45
- // preserveDrawingBuffer?: boolean; // Default render target buffers will not be automatically cleared and will preserve their values until cleared or overwritten
46
- // failIfMajorPerformanceCaveat?: boolean; // Do not create if the system performance is low.
47
-
48
- // Unclear if these are still supported
49
- debug?: boolean; // Instrument context (at the expense of performance)
50
- manageState?: boolean; // Set to false to disable WebGL state management instrumentation
51
- break?: string[]; // TODO: types
52
-
53
- // @deprecated Attach to existing context
54
- gl?: WebGLRenderingContext | WebGL2RenderingContext | null;
55
- };
27
+ import {isTextureFormatCompressed} from './type-utils/decode-texture-format';
56
28
 
57
29
  /**
58
30
  * Identifies the GPU vendor and driver.
@@ -62,7 +34,7 @@ export type DeviceProps = {
62
34
  */
63
35
  export type DeviceInfo = {
64
36
  /** Type of device */
65
- type: 'webgl' | 'webgl2' | 'webgpu';
37
+ type: 'webgl' | 'webgpu';
66
38
  /** Vendor (name of GPU vendor, Apple, nVidia etc */
67
39
  vendor: string;
68
40
  /** Renderer (usually driver name) */
@@ -81,132 +53,198 @@ export type DeviceInfo = {
81
53
  fallback?: boolean;
82
54
  /** Shader language supported by device.createShader() */
83
55
  shadingLanguage: 'wgsl' | 'glsl';
84
- /** Highest supported shader language version (GLSL 3.00 = 300, GLSL 1.00 = 100) */
56
+ /** Highest supported shader language version: GLSL 3.00 = 300, WGSL 1.00 = 100 */
85
57
  shadingLanguageVersion: number;
86
58
  };
87
59
 
88
- /** Limits for a device */
89
- export type DeviceLimits = {
90
- readonly maxTextureDimension1D?: number;
91
- readonly maxTextureDimension2D?: number;
92
- readonly maxTextureDimension3D?: number;
93
- readonly maxTextureArrayLayers?: number;
94
- readonly maxBindGroups: number;
95
- readonly maxDynamicUniformBuffersPerPipelineLayout: number;
96
- readonly maxDynamicStorageBuffersPerPipelineLayout: number;
97
- readonly maxSampledTexturesPerShaderStage: number;
98
- readonly maxSamplersPerShaderStage: number;
99
- readonly maxStorageBuffersPerShaderStage: number;
100
- readonly maxStorageTexturesPerShaderStage: number;
101
- readonly maxUniformBuffersPerShaderStage: number;
102
- readonly maxUniformBufferBindingSize: number;
103
- readonly maxStorageBufferBindingSize?: number;
104
- readonly minUniformBufferOffsetAlignment?: number;
105
- readonly minStorageBufferOffsetAlignment?: number;
106
- readonly maxVertexBuffers?: number;
107
- readonly maxVertexAttributes: number;
108
- readonly maxVertexBufferArrayStride?: number;
109
- readonly maxInterStageShaderComponents?: number;
110
- readonly maxComputeWorkgroupStorageSize?: number;
111
- readonly maxComputeInvocationsPerWorkgroup?: number;
112
- readonly maxComputeWorkgroupSizeX?: number;
113
- readonly maxComputeWorkgroupSizeY?: number;
114
- readonly maxComputeWorkgroupSizeZ?: number;
115
- readonly maxComputeWorkgroupsPerDimension?: number;
116
- };
60
+ /** Limits for a device (max supported sizes of resources, max number of bindings etc) */
61
+ export abstract class DeviceLimits {
62
+ /** max number of TextureDimension1D */
63
+ abstract maxTextureDimension1D: number;
64
+ /** max number of TextureDimension2D */
65
+ abstract maxTextureDimension2D: number;
66
+ /** max number of TextureDimension3D */
67
+ abstract maxTextureDimension3D: number;
68
+ /** max number of TextureArrayLayers */
69
+ abstract maxTextureArrayLayers: number;
70
+ /** max number of BindGroups */
71
+ abstract maxBindGroups: number;
72
+ /** max number of DynamicUniformBuffers per PipelineLayout */
73
+ abstract maxDynamicUniformBuffersPerPipelineLayout: number;
74
+ /** max number of DynamicStorageBuffers per PipelineLayout */
75
+ abstract maxDynamicStorageBuffersPerPipelineLayout: number;
76
+ /** max number of SampledTextures per ShaderStage */
77
+ abstract maxSampledTexturesPerShaderStage: number;
78
+ /** max number of Samplers per ShaderStage */
79
+ abstract maxSamplersPerShaderStage: number;
80
+ /** max number of StorageBuffers per ShaderStage */
81
+ abstract maxStorageBuffersPerShaderStage: number;
82
+ /** max number of StorageTextures per ShaderStage */
83
+ abstract maxStorageTexturesPerShaderStage: number;
84
+ /** max number of UniformBuffers per ShaderStage */
85
+ abstract maxUniformBuffersPerShaderStage: number;
86
+ /** max number of UniformBufferBindingSize */
87
+ abstract maxUniformBufferBindingSize: number;
88
+ /** max number of StorageBufferBindingSize */
89
+ abstract maxStorageBufferBindingSize: number;
90
+ /** min UniformBufferOffsetAlignment */
91
+ abstract minUniformBufferOffsetAlignment: number;
92
+ /** min StorageBufferOffsetAlignment */
93
+ abstract minStorageBufferOffsetAlignment: number;
94
+ /** max number of VertexBuffers */
95
+ abstract maxVertexBuffers: number;
96
+ /** max number of VertexAttributes */
97
+ abstract maxVertexAttributes: number;
98
+ /** max number of VertexBufferArrayStride */
99
+ abstract maxVertexBufferArrayStride: number;
100
+ /** max number of InterStageShaderComponents */
101
+ abstract maxInterStageShaderComponents: number;
102
+ /** max number of ComputeWorkgroupStorageSize */
103
+ abstract maxComputeWorkgroupStorageSize: number;
104
+ /** max number of ComputeInvocations per Workgroup */
105
+ abstract maxComputeInvocationsPerWorkgroup: number;
106
+ /** max ComputeWorkgroupSizeX */
107
+ abstract maxComputeWorkgroupSizeX: number;
108
+ /** max ComputeWorkgroupSizeY */
109
+ abstract maxComputeWorkgroupSizeY: number;
110
+ /** max ComputeWorkgroupSizeZ */
111
+ abstract maxComputeWorkgroupSizeZ: number;
112
+ /** max ComputeWorkgroupsPerDimension */
113
+ abstract maxComputeWorkgroupsPerDimension: number;
114
+ }
115
+
116
+ /** Set-like class for features (lets apps check for WebGL / WebGPU extensions) */
117
+ export class DeviceFeatures {
118
+ protected features: Set<DeviceFeature>;
119
+
120
+ constructor(features: DeviceFeature[] = []) {
121
+ this.features = new Set<DeviceFeature>(features);
122
+ }
123
+
124
+ *[Symbol.iterator](): IterableIterator<DeviceFeature> {
125
+ yield* this.features;
126
+ }
127
+
128
+ has(feature: DeviceFeature): boolean {
129
+ return this.features.has(feature);
130
+ }
131
+ }
132
+
133
+ /** Device feature names */
134
+ export type DeviceFeature =
135
+ | WebGPUDeviceFeature
136
+ | WebGLDeviceFeature
137
+ | WebGLCompressedTextureFeatures;
117
138
 
118
139
  export type WebGPUDeviceFeature =
119
140
  | 'depth-clip-control'
141
+ | 'indirect-first-instance'
142
+ | 'timestamp-query'
143
+ | 'shader-f16'
120
144
  | 'depth24unorm-stencil8'
121
145
  | 'depth32float-stencil8'
122
- | 'timestamp-query'
123
- | 'indirect-first-instance'
146
+ | 'rg11b10ufloat-renderable' // Is the rg11b10ufloat texture format renderable?
147
+ | 'float32-filterable' // Is the float32 format filterable?
148
+ | 'bgra8unorm-storage' // Can the bgra8unorm texture format be used in storage buffers?
124
149
  | 'texture-compression-bc'
125
150
  | 'texture-compression-etc2'
126
151
  | 'texture-compression-astc';
127
-
128
- // obsolete...
129
- // 'depth-clamping' |
130
- // 'depth24unorm-stencil8' |
131
- // 'depth32float-stencil8' |
132
- // 'pipeline-statistics-query' |
133
- // 'timestamp-query' |
134
- // 'texture-compression-bc'
152
+ // | 'depth-clamping' // removed from the WebGPU spec...
153
+ // | 'pipeline-statistics-query' // removed from the WebGPU spec...
135
154
 
136
155
  export type WebGLDeviceFeature =
137
- | 'webgpu'
138
- | 'webgl2'
139
- | 'webgl'
156
+ // webgl extension features
157
+ | 'timer-query-webgl' // unify with WebGPU timestamp-query?
158
+ | 'compilation-status-async-webgl' // Non-blocking shader compile/link status query available
159
+ | 'provoking-vertex-webgl' // parameters.provokingVertex
160
+ | 'polygon-mode-webgl' // parameters.polygonMode and parameters.polygonOffsetLine
140
161
 
141
- // api support (unify with WebGPU timestamp-query?)
142
- | 'timer-query-webgl'
143
- | 'uniform-buffers-webgl'
144
- | 'uniforms-webgl'
162
+ // GLSL extension features
163
+ | 'shader-noperspective-interpolation-webgl' // Vertex outputs & fragment inputs can have a `noperspective` interpolation qualifier.
164
+ | 'shader-conservative-depth-webgl' // GLSL `gl_FragDepth` qualifiers `depth_unchanged` etc can enable early depth test
165
+ | 'shader-clip-cull-distance-webgl' // Makes gl_ClipDistance and gl_CullDistance available in shaders
166
+
167
+ // texture rendering
168
+ | 'float32-renderable-webgl'
169
+ | 'float16-renderable-webgl'
170
+ | 'rgb9e5ufloat_renderable-webgl'
171
+ | 'snorm8-renderable-webgl'
172
+ | 'norm16-renderable-webgl'
173
+ | 'snorm16-renderable-webgl'
145
174
 
146
175
  // texture filtering
147
- | 'texture-filter-linear-float32-webgl'
148
- | 'texture-filter-linear-float16-webgl'
149
- | 'texture-filter-anisotropic-webgl'
176
+ | 'float16-filterable-webgl'
177
+ | 'texture-filterable-anisotropic-webgl'
150
178
 
151
- // texture rendering
152
- | 'texture-renderable-float32-webgl'
153
- | 'texture-renderable-float16-webgl'
154
- | 'texture-renderable-rgba32float-webgl' // TODO - remove
179
+ // texture storage bindings
180
+ | 'bgra8unorm-storage'
155
181
 
156
182
  // texture blending
157
- | 'texture-blend-float-webgl1'
158
-
159
- // texture format support
160
- | 'texture-formats-norm16-webgl'
161
- | 'texture-formats-srgb-webgl1'
162
- | 'texture-formats-depth-webgl1'
163
- | 'texture-formats-float32-webgl1'
164
- | 'texture-formats-float16-webgl1'
165
-
166
- // api support
167
- | 'vertex-array-object-webgl1'
168
- | 'instanced-rendering-webgl1'
169
- | 'multiple-render-targets-webgl1'
170
- | 'index-uint32-webgl1'
171
- | 'blend-minmax-webgl1'
172
- | 'transform-feedback-webgl2'
173
-
174
- // glsl extensions
175
- | 'glsl-frag-data'
176
- | 'glsl-frag-depth'
177
- | 'glsl-derivatives'
178
- | 'glsl-texture-lod';
183
+ | 'texture-blend-float-webgl';
179
184
 
180
185
  type WebGLCompressedTextureFeatures =
181
186
  | 'texture-compression-bc5-webgl'
187
+ | 'texture-compression-bc7-webgl'
182
188
  | 'texture-compression-etc1-webgl'
183
189
  | 'texture-compression-pvrtc-webgl'
184
190
  | 'texture-compression-atc-webgl';
185
191
 
186
- /** Valid feature strings */
187
- export type DeviceFeature =
188
- | WebGPUDeviceFeature
189
- | WebGLDeviceFeature
190
- | WebGLCompressedTextureFeatures;
192
+ /** Device properties */
193
+ export type DeviceProps = {
194
+ id?: string;
195
+
196
+ type?: 'webgl' | 'webgpu' | 'best-available';
197
+
198
+ // Common parameters
199
+ canvas?: HTMLCanvasElement | OffscreenCanvas | string | null; // A canvas element or a canvas string id
200
+ container?: HTMLElement | string | null;
201
+ width?: number /** width is only used when creating a new canvas */;
202
+ height?: number /** height is only used when creating a new canvas */;
203
+
204
+ /** Request a Device with the highest limits supported by platform. */
205
+ requestMaximalLimits?: boolean;
206
+
207
+ // WebGLContext PARAMETERS - Can only be set on context creation...
208
+ // alpha?: boolean; // Default render target has an alpha buffer.
209
+ // depth?: boolean; // Default render target has a depth buffer of at least 16 bits.
210
+ // stencil?: boolean; // Default render target has a stencil buffer of at least 8 bits.
211
+ // antialias?: boolean; // Boolean that indicates whether or not to perform anti-aliasing.
212
+ // premultipliedAlpha?: boolean; // Boolean that indicates that the page compositor will assume the drawing buffer contains colors with pre-multiplied alpha.
213
+ // preserveDrawingBuffer?: boolean; // Default render target buffers will not be automatically cleared and will preserve their values until cleared or overwritten
214
+ // failIfMajorPerformanceCaveat?: boolean; // Do not create if the system performance is low.
215
+
216
+ onError?: (error: Error) => unknown;
217
+ /** Instrument context (at the expense of performance) */
218
+ debug?: boolean;
219
+ /** Initialize the SpectorJS WebGL debugger */
220
+ spector?: boolean;
221
+
222
+ // Unclear if these are still supported
223
+ manageState?: boolean; // Set to false to disable WebGL state management instrumentation
224
+ break?: string[]; // TODO: types
225
+
226
+ // @deprecated Attach to existing context
227
+ gl?: WebGL2RenderingContext | null;
228
+ };
191
229
 
192
230
  /**
193
231
  * WebGPU Device/WebGL context abstraction
194
232
  */
195
233
  export abstract class Device {
196
-
197
234
  static defaultProps: Required<DeviceProps> = {
198
235
  id: null!,
199
236
  type: 'best-available',
200
237
  canvas: null,
201
238
  container: null,
202
- webgl2: true, // Attempt to create a WebGL2 context
203
- webgl1: true, // Attempt to create a WebGL1 context (false to fail if webgl2 not available)
204
239
  manageState: true,
205
240
  width: 800, // width are height are only used by headless gl
206
241
  height: 600,
242
+
243
+ requestMaximalLimits: true,
207
244
  debug: Boolean(log.get('debug')), // Instrument context (at the expense of performance)
245
+ spector: Boolean(log.get('spector')), // Initialize the SpectorJS WebGL debugger
208
246
  break: [],
209
-
247
+
210
248
  // alpha: undefined,
211
249
  // depth: undefined,
212
250
  // stencil: undefined,
@@ -214,10 +252,12 @@ export abstract class Device {
214
252
  // premultipliedAlpha: undefined,
215
253
  // preserveDrawingBuffer: undefined,
216
254
  // failIfMajorPerformanceCaveat: undefined
217
-
218
- gl: null
255
+
256
+ gl: null,
257
+
258
+ // Callbacks
259
+ onError: (error: Error) => log.error(error.message)
219
260
  };
220
-
221
261
 
222
262
  get [Symbol.toStringTag](): string {
223
263
  return 'Device';
@@ -249,7 +289,7 @@ export abstract class Device {
249
289
  abstract info: DeviceInfo;
250
290
 
251
291
  /** Optional capability discovery */
252
- abstract get features(): Set<DeviceFeature>;
292
+ abstract features: DeviceFeatures;
253
293
 
254
294
  /** WebGPU style device limits */
255
295
  abstract get limits(): DeviceLimits;
@@ -263,6 +303,11 @@ export abstract class Device {
263
303
  /** Check if device supports rendering to a specific texture format */
264
304
  abstract isTextureFormatRenderable(format: TextureFormat): boolean;
265
305
 
306
+ /** Check if a specific texture format is GPU compressed */
307
+ isTextureFormatCompressed(format: TextureFormat): boolean {
308
+ return isTextureFormatCompressed(format);
309
+ }
310
+
266
311
  // Device loss
267
312
 
268
313
  /** `true` if device is already lost */
@@ -348,9 +393,11 @@ export abstract class Device {
348
393
  /** Get a renderpass that is set up to render to the primary CanvasContext */
349
394
  abstract getDefaultRenderPass(): RenderPass;
350
395
 
351
- /** Create a transform feedback (immutable set of output buffer bindings). WebGL 2 only. */
396
+ /** Create a transform feedback (immutable set of output buffer bindings). WebGL only. */
352
397
  abstract createTransformFeedback(props: TransformFeedbackProps): TransformFeedback;
353
398
 
399
+ abstract createQuerySet(props: QuerySetProps): QuerySet;
400
+
354
401
  createCommandEncoder(props: CommandEncoderProps = {}): CommandEncoder {
355
402
  throw new Error('not implemented');
356
403
  }
@@ -375,7 +422,7 @@ export abstract class Device {
375
422
  ): Uint8Array | Uint16Array | Float32Array {
376
423
  throw new Error('not implemented');
377
424
  }
378
-
425
+
379
426
  /** @deprecated - will be removed - should use command encoder */
380
427
  readPixelsToBufferWebGL(
381
428
  source: Framebuffer | Texture,
@@ -414,7 +461,14 @@ export abstract class Device {
414
461
  throw new Error('not implemented');
415
462
  }
416
463
 
417
- // Implementation
464
+ // IMPLEMENTATION
465
+
466
+ // Error Handling
467
+
468
+ /** Report unhandled device errors */
469
+ onError(error: Error) {
470
+ this.props.onError(error);
471
+ }
418
472
 
419
473
  protected _getBufferProps(props: BufferProps | ArrayBuffer | ArrayBufferView): BufferProps {
420
474
  if (props instanceof ArrayBuffer || ArrayBuffer.isView(props)) {
@@ -1,4 +1,6 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
2
4
 
3
5
  import type {Device} from '../device';
4
6
  import {Resource, ResourceProps} from './resource';
@@ -19,7 +21,7 @@ export type BufferProps = ResourceProps & {
19
21
 
20
22
  // TBD
21
23
  mappedAtCreation?: boolean;
22
- }
24
+ };
23
25
 
24
26
  /** Abstract GPU buffer */
25
27
  export abstract class Buffer extends Resource<BufferProps> {
@@ -49,7 +51,9 @@ export abstract class Buffer extends Resource<BufferProps> {
49
51
  static INDIRECT = 0x0100;
50
52
  static QUERY_RESOLVE = 0x0200;
51
53
 
52
- override get [Symbol.toStringTag](): string { return 'Buffer'; }
54
+ override get [Symbol.toStringTag](): string {
55
+ return 'Buffer';
56
+ }
53
57
 
54
58
  /** The usage with which this buffer was created */
55
59
  readonly usage: number;
@@ -82,7 +86,9 @@ export abstract class Buffer extends Resource<BufferProps> {
82
86
  abstract readAsync(byteOffset?: number, byteLength?: number): Promise<Uint8Array>;
83
87
 
84
88
  /** Read data synchronously. @note WebGL2 only */
85
- readSyncWebGL2(byteOffset?: number, byteLength?: number): Uint8Array { throw new Error('not implemented'); }
89
+ readSyncWebGL(byteOffset?: number, byteLength?: number): Uint8Array {
90
+ throw new Error('not implemented');
91
+ }
86
92
 
87
93
  // PROTECTED METHODS (INTENDED FOR USE BY OTHER FRAMEWORK CODE ONLY)
88
94
 
@@ -92,9 +98,16 @@ export abstract class Buffer extends Resource<BufferProps> {
92
98
  debugData: ArrayBuffer = new ArrayBuffer(0);
93
99
 
94
100
  /** This doesn't handle partial non-zero offset updates correctly */
95
- protected _setDebugData(data: ArrayBufferView | ArrayBuffer | null, byteOffset: number, byteLength: number): void {
101
+ protected _setDebugData(
102
+ data: ArrayBufferView | ArrayBuffer | null,
103
+ byteOffset: number,
104
+ byteLength: number
105
+ ): void {
96
106
  const buffer: ArrayBuffer | null = ArrayBuffer.isView(data) ? data.buffer : data;
97
- const debugDataLength = Math.min(data ? data.byteLength : byteLength, Buffer.DEBUG_DATA_MAX_LENGTH);
107
+ const debugDataLength = Math.min(
108
+ data ? data.byteLength : byteLength,
109
+ Buffer.DEBUG_DATA_MAX_LENGTH
110
+ );
98
111
  if (data === null) {
99
112
  this.debugData = new ArrayBuffer(debugDataLength);
100
113
  } else if (byteOffset === 0 && byteLength === data.byteLength) {
@@ -1,5 +1,8 @@
1
- // luma.gl, MIT license
2
- import { Device } from '../device';
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {Device} from '../device';
3
6
  import {Resource, ResourceProps} from './resource';
4
7
 
5
8
  // interface Queue {
@@ -17,8 +20,7 @@ import {Resource, ResourceProps} from './resource';
17
20
  // // ): void;
18
21
  // }
19
22
 
20
- export type CommandBufferProps = ResourceProps & {
21
- };
23
+ export type CommandBufferProps = ResourceProps & {};
22
24
 
23
25
  /**
24
26
  * Encodes commands to queue that can be executed later
@@ -27,7 +29,7 @@ export abstract class CommandBuffer extends Resource<CommandBufferProps> {
27
29
  static override defaultProps: Required<CommandBufferProps> = {
28
30
  ...Resource.defaultProps
29
31
  };
30
-
32
+
31
33
  override get [Symbol.toStringTag](): string {
32
34
  return 'CommandBuffer';
33
35
  }
@@ -1,15 +1,19 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
2
5
  import {Device} from '../device';
3
6
  import {Resource, ResourceProps} from './resource';
4
7
  import {Buffer} from './buffer';
5
8
  import {Texture} from './texture';
9
+ import {QuerySet} from './query-set';
6
10
 
7
11
  export type WriteBufferOptions = {
8
- buffer: Buffer,
9
- bufferOffset?: number,
10
- data: BufferSource,
11
- dataOffset?: number,
12
- size?: number
12
+ buffer: Buffer;
13
+ bufferOffset?: number;
14
+ data: BufferSource;
15
+ dataOffset?: number;
16
+ size?: number;
13
17
  };
14
18
 
15
19
  export type WriteTextureOptions = {
@@ -23,7 +27,7 @@ export type WriteTextureOptions = {
23
27
  bytesPerRow: number;
24
28
  rowsPerImage: number;
25
29
  size: [number, number, number] | number[];
26
- }
30
+ };
27
31
 
28
32
  export type CopyBufferToBufferOptions = {
29
33
  source: Buffer;
@@ -37,7 +41,7 @@ export type CopyBufferToTextureOptions = {
37
41
  source: Buffer;
38
42
  byteOffset?: number;
39
43
  destination: Texture;
40
- mipLevel?: number // = 0;
44
+ mipLevel?: number; // = 0;
41
45
  origin?: [number, number, number] | number[];
42
46
  aspect?: 'all' | 'stencil-only' | 'depth-only';
43
47
  bytesPerRow: number;
@@ -131,7 +135,7 @@ export abstract class CommandEncoder extends Resource<CommandEncoderProps> {
131
135
  ...Resource.defaultProps,
132
136
  measureExecutionTime: undefined
133
137
  };
134
-
138
+
135
139
  override get [Symbol.toStringTag](): string {
136
140
  return 'CommandEncoder';
137
141
  }
@@ -139,34 +143,41 @@ export abstract class CommandEncoder extends Resource<CommandEncoderProps> {
139
143
  constructor(device: Device, props: CommandEncoderProps) {
140
144
  super(device, props, CommandEncoder.defaultProps);
141
145
  }
142
-
143
- abstract finish(): void; // TODO - return the CommandBuffer?
144
146
 
145
- // beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;
146
- // beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;
147
- // finish(options?: {id?: string}): GPUCommandBuffer;
147
+ /** Completes recording of the commands sequence */
148
+ abstract finish(): void; // TODO - return the CommandBuffer?
148
149
 
150
+ /** Add a command that that copies data from a sub-region of a Buffer to a sub-region of another Buffer. */
149
151
  abstract copyBufferToBuffer(options: CopyBufferToBufferOptions): void;
150
152
 
153
+ /** Add a command that copies data from a sub-region of a GPUBuffer to a sub-region of one or multiple continuous texture subresources. */
151
154
  abstract copyBufferToTexture(options: CopyBufferToTextureOptions): void;
152
155
 
156
+ /** Add a command that copies data from a sub-region of one or multiple continuous texture subresources to a sub-region of a Buffer. */
153
157
  abstract copyTextureToBuffer(options: CopyTextureToBufferOptions): void;
154
158
 
159
+ /** Add a command that copies data from a sub-region of one or multiple contiguous texture subresources to another sub-region of one or multiple continuous texture subresources. */
155
160
  abstract copyTextureToTexture(options: CopyTextureToTextureOptions): void;
156
161
 
157
- pushDebugGroup(groupLabel: string): void {}
158
-
159
- popDebugGroup() {}
160
-
161
- insertDebugMarker(markerLabel: string): void {}
162
-
163
- // writeTimestamp(querySet: Query, queryIndex: number): void;
164
-
165
- // resolveQuerySet(options: {
166
- // querySet: GPUQuerySet,
167
- // firstQuery: number,
168
- // queryCount: number,
169
- // destination: Buffer,
170
- // destinationOffset?: number;
171
- // }): void;
162
+ /** Reads results from a query set into a GPU buffer. Values are 64 bits so byteLength must be querySet.props.count * 8 */
163
+ abstract resolveQuerySet(
164
+ querySet: QuerySet,
165
+ destination: Buffer,
166
+ options?: {
167
+ firstQuery?: number;
168
+ queryCount?: number;
169
+ destinationOffset?: number;
170
+ }
171
+ ): void;
172
+
173
+ /** Begins a labeled debug group containing subsequent commands */
174
+ abstract pushDebugGroup(groupLabel: string): void;
175
+ /** Ends the labeled debug group most recently started by pushDebugGroup() */
176
+ abstract popDebugGroup(): void;
177
+ /** Marks a point in a stream of commands with a label */
178
+ abstract insertDebugMarker(markerLabel: string): void;
179
+
180
+ // TODO - luma.gl has these on the device, should we align with WebGPU API?
181
+ // beginRenderPass(GPURenderPassDescriptor descriptor): GPURenderPassEncoder;
182
+ // beginComputePass(optional GPUComputePassDescriptor descriptor = {}): GPUComputePassEncoder;
172
183
  }