@luma.gl/core 9.2.6 → 9.3.0-alpha.11

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 (282) hide show
  1. package/dist/adapter/canvas-context.d.ts +6 -162
  2. package/dist/adapter/canvas-context.d.ts.map +1 -1
  3. package/dist/adapter/canvas-context.js +5 -419
  4. package/dist/adapter/canvas-context.js.map +1 -1
  5. package/dist/adapter/canvas-observer.d.ts +32 -0
  6. package/dist/adapter/canvas-observer.d.ts.map +1 -0
  7. package/dist/adapter/canvas-observer.js +90 -0
  8. package/dist/adapter/canvas-observer.js.map +1 -0
  9. package/dist/adapter/canvas-surface.d.ts +150 -0
  10. package/dist/adapter/canvas-surface.d.ts.map +1 -0
  11. package/dist/adapter/canvas-surface.js +392 -0
  12. package/dist/adapter/canvas-surface.js.map +1 -0
  13. package/dist/adapter/device.d.ts +81 -16
  14. package/dist/adapter/device.d.ts.map +1 -1
  15. package/dist/adapter/device.js +193 -11
  16. package/dist/adapter/device.js.map +1 -1
  17. package/dist/adapter/luma.d.ts.map +1 -1
  18. package/dist/adapter/luma.js +2 -1
  19. package/dist/adapter/luma.js.map +1 -1
  20. package/dist/adapter/presentation-context.d.ts +11 -0
  21. package/dist/adapter/presentation-context.d.ts.map +1 -0
  22. package/dist/adapter/presentation-context.js +12 -0
  23. package/dist/adapter/presentation-context.js.map +1 -0
  24. package/dist/adapter/resources/buffer.d.ts +1 -1
  25. package/dist/adapter/resources/buffer.d.ts.map +1 -1
  26. package/dist/adapter/resources/buffer.js +14 -6
  27. package/dist/adapter/resources/buffer.js.map +1 -1
  28. package/dist/adapter/resources/command-buffer.d.ts +3 -1
  29. package/dist/adapter/resources/command-buffer.d.ts.map +1 -1
  30. package/dist/adapter/resources/command-buffer.js +3 -1
  31. package/dist/adapter/resources/command-buffer.js.map +1 -1
  32. package/dist/adapter/resources/command-encoder.d.ts +30 -7
  33. package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
  34. package/dist/adapter/resources/command-encoder.js +68 -2
  35. package/dist/adapter/resources/command-encoder.js.map +1 -1
  36. package/dist/adapter/resources/compute-pipeline.d.ts +2 -2
  37. package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -1
  38. package/dist/adapter/resources/fence.d.ts +16 -0
  39. package/dist/adapter/resources/fence.d.ts.map +1 -0
  40. package/dist/adapter/resources/fence.js +17 -0
  41. package/dist/adapter/resources/fence.js.map +1 -0
  42. package/dist/adapter/resources/framebuffer.d.ts +1 -1
  43. package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
  44. package/dist/adapter/resources/framebuffer.js +15 -12
  45. package/dist/adapter/resources/framebuffer.js.map +1 -1
  46. package/dist/adapter/resources/query-set.d.ts +17 -1
  47. package/dist/adapter/resources/query-set.d.ts.map +1 -1
  48. package/dist/adapter/resources/query-set.js.map +1 -1
  49. package/dist/adapter/resources/render-pipeline.d.ts +28 -10
  50. package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
  51. package/dist/adapter/resources/render-pipeline.js +21 -2
  52. package/dist/adapter/resources/render-pipeline.js.map +1 -1
  53. package/dist/adapter/resources/resource.d.ts +13 -0
  54. package/dist/adapter/resources/resource.d.ts.map +1 -1
  55. package/dist/adapter/resources/resource.js +243 -14
  56. package/dist/adapter/resources/resource.js.map +1 -1
  57. package/dist/adapter/resources/shader.js +27 -25
  58. package/dist/adapter/resources/shader.js.map +1 -1
  59. package/dist/adapter/resources/shared-render-pipeline.d.ts +22 -0
  60. package/dist/adapter/resources/shared-render-pipeline.d.ts.map +1 -0
  61. package/dist/adapter/resources/shared-render-pipeline.js +25 -0
  62. package/dist/adapter/resources/shared-render-pipeline.js.map +1 -0
  63. package/dist/adapter/resources/texture-view.d.ts +1 -1
  64. package/dist/adapter/resources/texture-view.d.ts.map +1 -1
  65. package/dist/adapter/resources/texture.d.ts +168 -28
  66. package/dist/adapter/resources/texture.d.ts.map +1 -1
  67. package/dist/adapter/resources/texture.js +284 -25
  68. package/dist/adapter/resources/texture.js.map +1 -1
  69. package/dist/adapter/types/attachments.d.ts +1 -1
  70. package/dist/adapter/types/attachments.d.ts.map +1 -1
  71. package/dist/adapter/types/buffer-layout.d.ts +1 -1
  72. package/dist/adapter/types/buffer-layout.d.ts.map +1 -1
  73. package/dist/adapter/types/parameters.d.ts +3 -1
  74. package/dist/adapter/types/parameters.d.ts.map +1 -1
  75. package/dist/adapter/types/parameters.js +1 -0
  76. package/dist/adapter/types/parameters.js.map +1 -1
  77. package/dist/adapter/types/shader-layout.d.ts +10 -6
  78. package/dist/adapter/types/shader-layout.d.ts.map +1 -1
  79. package/dist/adapter/types/uniforms.d.ts +6 -0
  80. package/dist/adapter/types/uniforms.d.ts.map +1 -1
  81. package/dist/adapter-utils/bind-groups.d.ts +9 -0
  82. package/dist/adapter-utils/bind-groups.d.ts.map +1 -0
  83. package/dist/adapter-utils/bind-groups.js +41 -0
  84. package/dist/adapter-utils/bind-groups.js.map +1 -0
  85. package/dist/adapter-utils/format-compiler-log.d.ts.map +1 -1
  86. package/dist/adapter-utils/format-compiler-log.js +23 -15
  87. package/dist/adapter-utils/format-compiler-log.js.map +1 -1
  88. package/dist/adapter-utils/get-attribute-from-layouts.d.ts +2 -2
  89. package/dist/adapter-utils/get-attribute-from-layouts.d.ts.map +1 -1
  90. package/dist/adapter-utils/get-attribute-from-layouts.js +6 -6
  91. package/dist/adapter-utils/get-attribute-from-layouts.js.map +1 -1
  92. package/dist/dist.dev.js +2734 -644
  93. package/dist/dist.min.js +10 -9
  94. package/dist/factories/bind-group-factory.d.ts +20 -0
  95. package/dist/factories/bind-group-factory.d.ts.map +1 -0
  96. package/dist/factories/bind-group-factory.js +88 -0
  97. package/dist/factories/bind-group-factory.js.map +1 -0
  98. package/dist/factories/core-module-state.d.ts +7 -0
  99. package/dist/factories/core-module-state.d.ts.map +1 -0
  100. package/dist/{shadertypes/data-types/shader-types.js → factories/core-module-state.js} +1 -1
  101. package/dist/factories/core-module-state.js.map +1 -0
  102. package/dist/factories/pipeline-factory.d.ts +54 -0
  103. package/dist/factories/pipeline-factory.d.ts.map +1 -0
  104. package/dist/factories/pipeline-factory.js +270 -0
  105. package/dist/factories/pipeline-factory.js.map +1 -0
  106. package/dist/factories/shader-factory.d.ts +20 -0
  107. package/dist/factories/shader-factory.d.ts.map +1 -0
  108. package/dist/factories/shader-factory.js +84 -0
  109. package/dist/factories/shader-factory.js.map +1 -0
  110. package/dist/index.cjs +2447 -534
  111. package/dist/index.cjs.map +4 -4
  112. package/dist/index.d.ts +30 -14
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +19 -7
  115. package/dist/index.js.map +1 -1
  116. package/dist/portable/shader-block-writer.d.ts +51 -0
  117. package/dist/portable/shader-block-writer.d.ts.map +1 -0
  118. package/dist/portable/shader-block-writer.js +185 -0
  119. package/dist/portable/shader-block-writer.js.map +1 -0
  120. package/dist/portable/uniform-block.d.ts +1 -1
  121. package/dist/portable/uniform-block.d.ts.map +1 -1
  122. package/dist/portable/uniform-store.d.ts +55 -24
  123. package/dist/portable/uniform-store.d.ts.map +1 -1
  124. package/dist/portable/uniform-store.js +73 -25
  125. package/dist/portable/uniform-store.js.map +1 -1
  126. package/dist/shadertypes/data-types/data-type-decoder.d.ts +20 -0
  127. package/dist/shadertypes/data-types/data-type-decoder.d.ts.map +1 -0
  128. package/dist/shadertypes/data-types/data-type-decoder.js +79 -0
  129. package/dist/shadertypes/data-types/data-type-decoder.js.map +1 -0
  130. package/dist/shadertypes/data-types/data-types.d.ts +31 -12
  131. package/dist/shadertypes/data-types/data-types.d.ts.map +1 -1
  132. package/dist/shadertypes/data-types/decode-data-types.d.ts.map +1 -1
  133. package/dist/shadertypes/data-types/decode-data-types.js +4 -3
  134. package/dist/shadertypes/data-types/decode-data-types.js.map +1 -1
  135. package/dist/{image-utils → shadertypes/image-types}/image-types.d.ts +0 -6
  136. package/dist/shadertypes/image-types/image-types.d.ts.map +1 -0
  137. package/dist/shadertypes/image-types/image-types.js.map +1 -0
  138. package/dist/shadertypes/shader-types/shader-block-layout.d.ts +72 -0
  139. package/dist/shadertypes/shader-types/shader-block-layout.d.ts.map +1 -0
  140. package/dist/shadertypes/shader-types/shader-block-layout.js +209 -0
  141. package/dist/shadertypes/shader-types/shader-block-layout.js.map +1 -0
  142. package/dist/shadertypes/shader-types/shader-type-decoder.d.ts +41 -0
  143. package/dist/shadertypes/shader-types/shader-type-decoder.d.ts.map +1 -0
  144. package/dist/shadertypes/{data-types/decode-shader-types.js → shader-types/shader-type-decoder.js} +43 -4
  145. package/dist/shadertypes/shader-types/shader-type-decoder.js.map +1 -0
  146. package/dist/shadertypes/shader-types/shader-types.d.ts +101 -0
  147. package/dist/shadertypes/shader-types/shader-types.d.ts.map +1 -0
  148. package/dist/shadertypes/shader-types/shader-types.js +30 -0
  149. package/dist/shadertypes/shader-types/shader-types.js.map +1 -0
  150. package/dist/shadertypes/texture-types/pixel-utils.d.ts.map +1 -0
  151. package/dist/shadertypes/{textures → texture-types}/pixel-utils.js +4 -4
  152. package/dist/shadertypes/texture-types/pixel-utils.js.map +1 -0
  153. package/dist/shadertypes/texture-types/texture-format-decoder.d.ts +36 -0
  154. package/dist/shadertypes/texture-types/texture-format-decoder.d.ts.map +1 -0
  155. package/dist/shadertypes/{textures → texture-types}/texture-format-decoder.js +110 -38
  156. package/dist/shadertypes/texture-types/texture-format-decoder.js.map +1 -0
  157. package/dist/shadertypes/texture-types/texture-format-generics.d.ts +34 -0
  158. package/dist/shadertypes/texture-types/texture-format-generics.d.ts.map +1 -0
  159. package/dist/shadertypes/texture-types/texture-format-generics.js.map +1 -0
  160. package/dist/shadertypes/texture-types/texture-format-table.d.ts.map +1 -0
  161. package/dist/shadertypes/{textures → texture-types}/texture-format-table.js +12 -11
  162. package/dist/shadertypes/texture-types/texture-format-table.js.map +1 -0
  163. package/dist/shadertypes/{textures → texture-types}/texture-formats.d.ts +51 -17
  164. package/dist/shadertypes/texture-types/texture-formats.d.ts.map +1 -0
  165. package/dist/shadertypes/{textures → texture-types}/texture-formats.js +1 -0
  166. package/dist/shadertypes/texture-types/texture-formats.js.map +1 -0
  167. package/dist/shadertypes/texture-types/texture-layout.d.ts +5 -0
  168. package/dist/shadertypes/texture-types/texture-layout.d.ts.map +1 -0
  169. package/dist/shadertypes/texture-types/texture-layout.js +41 -0
  170. package/dist/shadertypes/texture-types/texture-layout.js.map +1 -0
  171. package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts +24 -0
  172. package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts.map +1 -0
  173. package/dist/shadertypes/vertex-types/vertex-format-decoder.js +144 -0
  174. package/dist/shadertypes/vertex-types/vertex-format-decoder.js.map +1 -0
  175. package/dist/shadertypes/vertex-types/vertex-formats.d.ts +50 -0
  176. package/dist/shadertypes/vertex-types/vertex-formats.d.ts.map +1 -0
  177. package/dist/shadertypes/vertex-types/vertex-formats.js.map +1 -0
  178. package/dist/utils/array-equal.d.ts +1 -1
  179. package/dist/utils/array-equal.d.ts.map +1 -1
  180. package/dist/utils/array-equal.js +15 -9
  181. package/dist/utils/array-equal.js.map +1 -1
  182. package/dist/utils/assert.d.ts +5 -0
  183. package/dist/utils/assert.d.ts.map +1 -0
  184. package/dist/utils/assert.js +17 -0
  185. package/dist/utils/assert.js.map +1 -0
  186. package/dist/utils/stats-manager.d.ts.map +1 -1
  187. package/dist/utils/stats-manager.js +61 -1
  188. package/dist/utils/stats-manager.js.map +1 -1
  189. package/package.json +6 -6
  190. package/src/adapter/canvas-context.ts +7 -556
  191. package/src/adapter/canvas-observer.ts +130 -0
  192. package/src/adapter/canvas-surface.ts +521 -0
  193. package/src/adapter/device.ts +311 -25
  194. package/src/adapter/luma.ts +1 -0
  195. package/src/adapter/presentation-context.ts +16 -0
  196. package/src/adapter/resources/buffer.ts +13 -5
  197. package/src/adapter/resources/command-buffer.ts +4 -2
  198. package/src/adapter/resources/command-encoder.ts +101 -10
  199. package/src/adapter/resources/compute-pipeline.ts +2 -2
  200. package/src/adapter/resources/fence.ts +32 -0
  201. package/src/adapter/resources/framebuffer.ts +16 -13
  202. package/src/adapter/resources/query-set.ts +17 -1
  203. package/src/adapter/resources/render-pipeline.ts +52 -16
  204. package/src/adapter/resources/resource.ts +289 -14
  205. package/src/adapter/resources/shader.ts +28 -28
  206. package/src/adapter/resources/shared-render-pipeline.ts +40 -0
  207. package/src/adapter/resources/texture-view.ts +1 -1
  208. package/src/adapter/resources/texture.ts +427 -49
  209. package/src/adapter/types/attachments.ts +1 -1
  210. package/src/adapter/types/buffer-layout.ts +1 -1
  211. package/src/adapter/types/parameters.ts +4 -1
  212. package/src/adapter/types/shader-layout.ts +15 -9
  213. package/src/adapter/types/uniforms.ts +12 -0
  214. package/src/adapter-utils/bind-groups.ts +71 -0
  215. package/src/adapter-utils/format-compiler-log.ts +23 -15
  216. package/src/adapter-utils/get-attribute-from-layouts.ts +8 -11
  217. package/src/factories/bind-group-factory.ts +157 -0
  218. package/src/factories/core-module-state.ts +11 -0
  219. package/src/factories/pipeline-factory.ts +328 -0
  220. package/src/factories/shader-factory.ts +103 -0
  221. package/src/index.ts +70 -26
  222. package/src/portable/shader-block-writer.ts +254 -0
  223. package/src/portable/uniform-block.ts +1 -1
  224. package/src/portable/uniform-store.ts +98 -40
  225. package/src/shadertypes/data-types/data-type-decoder.ts +105 -0
  226. package/src/shadertypes/data-types/data-types.ts +100 -48
  227. package/src/shadertypes/data-types/decode-data-types.ts +4 -3
  228. package/src/{image-utils → shadertypes/image-types}/image-types.ts +0 -7
  229. package/src/shadertypes/shader-types/shader-block-layout.ts +340 -0
  230. package/src/shadertypes/{data-types/decode-shader-types.ts → shader-types/shader-type-decoder.ts} +88 -14
  231. package/src/shadertypes/shader-types/shader-types.ts +207 -0
  232. package/src/shadertypes/{textures → texture-types}/pixel-utils.ts +4 -4
  233. package/src/shadertypes/{textures → texture-types}/texture-format-decoder.ts +167 -46
  234. package/src/shadertypes/{textures → texture-types}/texture-format-generics.ts +42 -48
  235. package/src/shadertypes/{textures → texture-types}/texture-format-table.ts +12 -11
  236. package/src/shadertypes/{textures → texture-types}/texture-formats.ts +73 -17
  237. package/src/shadertypes/texture-types/texture-layout.ts +60 -0
  238. package/src/shadertypes/vertex-types/vertex-format-decoder.ts +175 -0
  239. package/src/shadertypes/vertex-types/vertex-formats.ts +196 -0
  240. package/src/utils/array-equal.ts +21 -9
  241. package/src/utils/assert.ts +18 -0
  242. package/src/utils/stats-manager.ts +76 -2
  243. package/dist/image-utils/image-types.d.ts.map +0 -1
  244. package/dist/image-utils/image-types.js.map +0 -1
  245. package/dist/portable/uniform-buffer-layout.d.ts +0 -28
  246. package/dist/portable/uniform-buffer-layout.d.ts.map +0 -1
  247. package/dist/portable/uniform-buffer-layout.js +0 -96
  248. package/dist/portable/uniform-buffer-layout.js.map +0 -1
  249. package/dist/shadertypes/data-types/decode-shader-types.d.ts +0 -17
  250. package/dist/shadertypes/data-types/decode-shader-types.d.ts.map +0 -1
  251. package/dist/shadertypes/data-types/decode-shader-types.js.map +0 -1
  252. package/dist/shadertypes/data-types/shader-types.d.ts +0 -45
  253. package/dist/shadertypes/data-types/shader-types.d.ts.map +0 -1
  254. package/dist/shadertypes/data-types/shader-types.js.map +0 -1
  255. package/dist/shadertypes/textures/pixel-utils.d.ts.map +0 -1
  256. package/dist/shadertypes/textures/pixel-utils.js.map +0 -1
  257. package/dist/shadertypes/textures/texture-format-decoder.d.ts +0 -18
  258. package/dist/shadertypes/textures/texture-format-decoder.d.ts.map +0 -1
  259. package/dist/shadertypes/textures/texture-format-decoder.js.map +0 -1
  260. package/dist/shadertypes/textures/texture-format-generics.d.ts +0 -33
  261. package/dist/shadertypes/textures/texture-format-generics.d.ts.map +0 -1
  262. package/dist/shadertypes/textures/texture-format-generics.js.map +0 -1
  263. package/dist/shadertypes/textures/texture-format-table.d.ts.map +0 -1
  264. package/dist/shadertypes/textures/texture-format-table.js.map +0 -1
  265. package/dist/shadertypes/textures/texture-formats.d.ts.map +0 -1
  266. package/dist/shadertypes/textures/texture-formats.js.map +0 -1
  267. package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts +0 -18
  268. package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts.map +0 -1
  269. package/dist/shadertypes/vertex-arrays/decode-vertex-format.js +0 -100
  270. package/dist/shadertypes/vertex-arrays/decode-vertex-format.js.map +0 -1
  271. package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts +0 -27
  272. package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts.map +0 -1
  273. package/dist/shadertypes/vertex-arrays/vertex-formats.js.map +0 -1
  274. package/src/portable/uniform-buffer-layout.ts +0 -118
  275. package/src/shadertypes/data-types/shader-types.ts +0 -87
  276. package/src/shadertypes/vertex-arrays/decode-vertex-format.ts +0 -124
  277. package/src/shadertypes/vertex-arrays/vertex-formats.ts +0 -91
  278. /package/dist/{image-utils → shadertypes/image-types}/image-types.js +0 -0
  279. /package/dist/shadertypes/{textures → texture-types}/pixel-utils.d.ts +0 -0
  280. /package/dist/shadertypes/{textures → texture-types}/texture-format-generics.js +0 -0
  281. /package/dist/shadertypes/{textures → texture-types}/texture-format-table.d.ts +0 -0
  282. /package/dist/shadertypes/{vertex-arrays → vertex-types}/vertex-formats.js +0 -0
@@ -5,9 +5,9 @@
5
5
  // import type {TypedArray} from '@math.gl/types';
6
6
  import {Device} from '../device';
7
7
  import {Resource, ResourceProps} from './resource';
8
+ import {QuerySet} from './query-set';
8
9
  import {Buffer} from './buffer';
9
10
  import {Texture} from './texture';
10
- import {QuerySet} from './query-set';
11
11
  import type {RenderPass, RenderPassProps} from './render-pass';
12
12
  import type {ComputePass, ComputePassProps} from './compute-pass';
13
13
  import type {CommandBuffer, CommandBufferProps} from './command-buffer';
@@ -27,11 +27,11 @@ export type CopyBufferToTextureOptions = {
27
27
  byteOffset?: number;
28
28
  destinationTexture: Texture;
29
29
  mipLevel?: number; // = 0;
30
- origin?: [number, number, number] | number[];
30
+ origin?: [number, number, number];
31
31
  aspect?: 'all' | 'stencil-only' | 'depth-only';
32
32
  bytesPerRow: number;
33
33
  rowsPerImage: number;
34
- size: [number, number, number] | number[];
34
+ size: [number, number, number];
35
35
  };
36
36
 
37
37
  export type CopyTextureToBufferOptions = {
@@ -49,7 +49,7 @@ export type CopyTextureToBufferOptions = {
49
49
  width?: number;
50
50
  height?: number;
51
51
  depthOrArrayLayers?: number;
52
- origin?: number[];
52
+ origin?: [number, number, number];
53
53
 
54
54
  /** Destination buffer */
55
55
  destinationBuffer: Buffer;
@@ -74,7 +74,7 @@ export type CopyTextureToTextureOptions = {
74
74
  /** Mip-map level of the texture to copy to/from. (Default 0) */
75
75
  mipLevel?: number;
76
76
  /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy from. */
77
- origin?: number[];
77
+ origin?: [number, number, number];
78
78
  /** Defines which aspects of the {@link GPUImageCopyTexture#texture} to copy to/from. */
79
79
  aspect?: 'all' | 'stencil-only' | 'depth-only';
80
80
 
@@ -83,7 +83,7 @@ export type CopyTextureToTextureOptions = {
83
83
  /** Mip-map level of the texture to copy to/from. (Default 0) */
84
84
  destinationMipLevel?: number;
85
85
  /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to. */
86
- destinationOrigin?: number[];
86
+ destinationOrigin?: [number, number, number];
87
87
  /** Defines which aspects of the {@link GPUImageCopyTexture#texture} to copy to/from. */
88
88
  destinationAspect?: 'all' | 'stencil-only' | 'depth-only';
89
89
 
@@ -113,7 +113,7 @@ export type ClearTextureOptions = {
113
113
  // size?: number;
114
114
  // };
115
115
 
116
- // export type WriteTextureOptions = {
116
+ // export type TextureWriteOptions = {
117
117
  // destination: Texture;
118
118
  // mipLevel?: number; // = 0;
119
119
  // origin?: [number, number, number] | number[];
@@ -128,18 +128,34 @@ export type ClearTextureOptions = {
128
128
 
129
129
  export type CommandEncoderProps = ResourceProps & {
130
130
  measureExecutionTime?: boolean;
131
+ timeProfilingQuerySet?: QuerySet | null;
132
+ };
133
+
134
+ type PassWithTimestamps = {
135
+ timestampQuerySet?: QuerySet;
136
+ beginTimestampIndex?: number;
137
+ endTimestampIndex?: number;
131
138
  };
132
139
 
133
140
  /**
134
- * Encodes commands to queue that can be executed later
141
+ * Records commands onto a single backend command encoder and can finish them into one command
142
+ * buffer. Resource helpers invoked through a CommandEncoder must record onto that encoder rather
143
+ * than allocating hidden encoders or submitting work eagerly.
135
144
  */
136
145
  export abstract class CommandEncoder extends Resource<CommandEncoderProps> {
137
146
  override get [Symbol.toStringTag](): string {
138
147
  return 'CommandEncoder';
139
148
  }
140
149
 
150
+ protected _timeProfilingQuerySet: QuerySet | null = null;
151
+ protected _timeProfilingSlotCount: number = 0;
152
+ _gpuTimeMs?: number;
153
+
141
154
  constructor(device: Device, props: CommandEncoderProps) {
142
155
  super(device, props, CommandEncoder.defaultProps);
156
+ this._timeProfilingQuerySet = props.timeProfilingQuerySet ?? null;
157
+ this._timeProfilingSlotCount = 0;
158
+ this._gpuTimeMs = undefined;
143
159
  }
144
160
 
145
161
  /** Completes recording of the commands sequence */
@@ -166,7 +182,7 @@ export abstract class CommandEncoder extends Resource<CommandEncoderProps> {
166
182
  /** Add a command that clears a texture mip level. */
167
183
  // abstract clearTexture(options: ClearTextureOptions): void;
168
184
 
169
- // abstract readTexture(options: ReadTextureOptions): Promise<TypedArray>;
185
+ // abstract readTexture(options: TextureReadOptions): Promise<TypedArray>;
170
186
 
171
187
  /** Reads results from a query set into a GPU buffer. Values are 64 bits so byteLength must be querySet.props.count * 8 */
172
188
  abstract resolveQuerySet(
@@ -179,6 +195,80 @@ export abstract class CommandEncoder extends Resource<CommandEncoderProps> {
179
195
  }
180
196
  ): void;
181
197
 
198
+ /**
199
+ * Reads all resolved timestamp pairs on the current profiler query set and caches the sum
200
+ * as milliseconds on this encoder.
201
+ */
202
+ async resolveTimeProfilingQuerySet(): Promise<void> {
203
+ this._gpuTimeMs = undefined;
204
+
205
+ if (!this._timeProfilingQuerySet) {
206
+ return;
207
+ }
208
+
209
+ const pairCount = Math.floor(this._timeProfilingSlotCount / 2);
210
+ if (pairCount <= 0) {
211
+ return;
212
+ }
213
+
214
+ const queryCount = pairCount * 2;
215
+ const results = await this._timeProfilingQuerySet.readResults({
216
+ firstQuery: 0,
217
+ queryCount
218
+ });
219
+
220
+ let totalDurationNanoseconds = 0n;
221
+ for (let queryIndex = 0; queryIndex < queryCount; queryIndex += 2) {
222
+ totalDurationNanoseconds += results[queryIndex + 1] - results[queryIndex];
223
+ }
224
+
225
+ this._gpuTimeMs = Number(totalDurationNanoseconds) / 1e6;
226
+ }
227
+
228
+ /** Returns the number of query slots consumed by automatic pass profiling on this encoder. */
229
+ getTimeProfilingSlotCount(): number {
230
+ return this._timeProfilingSlotCount;
231
+ }
232
+
233
+ getTimeProfilingQuerySet(): QuerySet | null {
234
+ return this._timeProfilingQuerySet;
235
+ }
236
+
237
+ /** Internal helper for auto-assigning timestamp slots to render/compute passes on this encoder. */
238
+ protected _applyTimeProfilingToPassProps<P extends PassWithTimestamps>(props?: P): P {
239
+ const passProps = (props || {}) as P;
240
+
241
+ if (!this._supportsTimestampQueries() || !this._timeProfilingQuerySet) {
242
+ return passProps;
243
+ }
244
+
245
+ if (
246
+ passProps.timestampQuerySet !== undefined ||
247
+ passProps.beginTimestampIndex !== undefined ||
248
+ passProps.endTimestampIndex !== undefined
249
+ ) {
250
+ return passProps;
251
+ }
252
+
253
+ const beginTimestampIndex = this._timeProfilingSlotCount;
254
+ if (beginTimestampIndex + 1 >= this._timeProfilingQuerySet.props.count) {
255
+ return passProps;
256
+ }
257
+
258
+ this._timeProfilingSlotCount += 2;
259
+
260
+ return {
261
+ ...passProps,
262
+ timestampQuerySet: this._timeProfilingQuerySet,
263
+ beginTimestampIndex,
264
+ endTimestampIndex: beginTimestampIndex + 1
265
+ };
266
+ }
267
+
268
+ protected _supportsTimestampQueries(): boolean {
269
+ return this.device.features.has('timestamp-query');
270
+ }
271
+
182
272
  /** Begins a labeled debug group containing subsequent commands */
183
273
  abstract pushDebugGroup(groupLabel: string): void;
184
274
  /** Ends the labeled debug group most recently started by pushDebugGroup() */
@@ -192,6 +282,7 @@ export abstract class CommandEncoder extends Resource<CommandEncoderProps> {
192
282
 
193
283
  static override defaultProps: Required<CommandEncoderProps> = {
194
284
  ...Resource.defaultProps,
195
- measureExecutionTime: undefined!
285
+ measureExecutionTime: undefined!,
286
+ timeProfilingQuerySet: undefined!
196
287
  };
197
288
  }
@@ -3,7 +3,7 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import {Resource, ResourceProps} from './resource';
6
- import type {ComputeShaderLayout, Binding} from '../types/shader-layout';
6
+ import type {ComputeShaderLayout, Bindings, BindingsByGroup} from '../types/shader-layout';
7
7
  import type {Device} from '../device';
8
8
  import type {Shader} from './shader';
9
9
 
@@ -43,7 +43,7 @@ export abstract class ComputePipeline extends Resource<ComputePipelineProps> {
43
43
  * @todo Use renderpass.setBindings() ?
44
44
  * @todo Do we want to expose BindGroups in the API and remove this?
45
45
  */
46
- abstract setBindings(bindings: Record<string, Binding>): void;
46
+ abstract setBindings(bindings: Bindings | BindingsByGroup): void;
47
47
 
48
48
  static override defaultProps: Required<ComputePipelineProps> = {
49
49
  ...Resource.defaultProps,
@@ -0,0 +1,32 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {Device} from '../device';
6
+ import {Resource, type ResourceProps} from './resource';
7
+
8
+ export type FenceProps = ResourceProps;
9
+
10
+ /** Synchronization primitive that resolves when GPU work is completed */
11
+ export abstract class Fence extends Resource<FenceProps> {
12
+ static override defaultProps: Required<FenceProps> = {
13
+ ...Resource.defaultProps
14
+ };
15
+
16
+ override get [Symbol.toStringTag](): string {
17
+ return 'Fence';
18
+ }
19
+
20
+ /** Promise that resolves when the fence is signaled */
21
+ abstract readonly signaled: Promise<void>;
22
+
23
+ constructor(device: Device, props: FenceProps = {}) {
24
+ super(device, props, Fence.defaultProps);
25
+ }
26
+
27
+ /** Destroy the fence and release any resources */
28
+ abstract override destroy(): void;
29
+
30
+ /** Check if the fence has been signaled */
31
+ abstract isSignaled(): boolean;
32
+ }
@@ -6,7 +6,7 @@ import type {
6
6
  TextureFormatColor,
7
7
  TextureFormatDepthStencil,
8
8
  TextureFormat
9
- } from '../../shadertypes/textures/texture-formats';
9
+ } from '../../shadertypes/texture-types/texture-formats';
10
10
  import type {Device} from '../device';
11
11
  import {Resource, ResourceProps} from './resource';
12
12
  import {Texture} from './texture';
@@ -56,7 +56,12 @@ export abstract class Framebuffer extends Resource<FramebufferProps> {
56
56
  const depthStencilAttachment =
57
57
  this.depthStencilAttachment && this.depthStencilAttachment.texture.clone(size);
58
58
 
59
- return this.device.createFramebuffer({...this.props, colorAttachments, depthStencilAttachment});
59
+ return this.device.createFramebuffer({
60
+ ...this.props,
61
+ ...size,
62
+ colorAttachments,
63
+ depthStencilAttachment
64
+ });
60
65
  }
61
66
 
62
67
  /**
@@ -146,17 +151,15 @@ export abstract class Framebuffer extends Resource<FramebufferProps> {
146
151
  * and destroys existing textures if owned
147
152
  */
148
153
  protected resizeAttachments(width: number, height: number): void {
149
- for (let i = 0; i < this.colorAttachments.length; ++i) {
150
- if (this.colorAttachments[i]) {
151
- const resizedTexture = this.colorAttachments[i].texture.clone({
152
- width,
153
- height
154
- });
155
- this.destroyAttachedResource(this.colorAttachments[i]);
156
- this.colorAttachments[i] = resizedTexture.view;
157
- this.attachResource(resizedTexture.view);
158
- }
159
- }
154
+ this.colorAttachments.forEach((colorAttachment, i) => {
155
+ const resizedTexture = colorAttachment.texture.clone({
156
+ width,
157
+ height
158
+ });
159
+ this.destroyAttachedResource(colorAttachment);
160
+ this.colorAttachments[i] = resizedTexture.view;
161
+ this.attachResource(resizedTexture.view);
162
+ });
160
163
 
161
164
  if (this.depthStencilAttachment) {
162
165
  const resizedTexture = this.depthStencilAttachment.texture.clone({
@@ -16,7 +16,8 @@ export type QuerySetProps = ResourceProps & {
16
16
  /**
17
17
  * The type of query set
18
18
  * occlusion - query the number of fragment samples that pass all the per-fragment tests for a set of drawing commands, including scissor, sample mask, alpha to coverage, stencil, and depth tests
19
- * timestamp - query the GPU timestamp counter at the start and end of render passes
19
+ * timestamp - query the GPU timestamp counter. Timestamp queries are available if the
20
+ * `timestamp-query` feature is present.
20
21
  */
21
22
  type: 'occlusion' | 'timestamp';
22
23
  /** The number of queries managed by the query set */
@@ -38,4 +39,19 @@ export abstract class QuerySet extends Resource<QuerySetProps> {
38
39
  type: undefined!,
39
40
  count: undefined!
40
41
  };
42
+
43
+ /**
44
+ * Returns true if the requested result has been captured and can be read without blocking.
45
+ * Backends may implement this conservatively.
46
+ */
47
+ abstract isResultAvailable(queryIndex?: number): boolean;
48
+
49
+ /** Reads query results as 64-bit values. */
50
+ abstract readResults(options?: {firstQuery?: number; queryCount?: number}): Promise<bigint[]>;
51
+
52
+ /**
53
+ * Reads a timestamp duration in milliseconds between a begin and end query index.
54
+ * Portable duration profiling requires adjacent indices that identify one logical pair.
55
+ */
56
+ abstract readTimestampDuration(beginIndex: number, endIndex: number): Promise<number>;
41
57
  }
@@ -3,15 +3,15 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import type {Device} from '../device';
6
- import type {UniformValue} from '../types/uniforms';
7
6
  import type {PrimitiveTopology, RenderPipelineParameters} from '../types/parameters';
8
- import type {ShaderLayout, Binding} from '../types/shader-layout';
7
+ import type {ShaderLayout, Bindings, BindingsByGroup} from '../types/shader-layout';
9
8
  import type {BufferLayout} from '../types/buffer-layout';
10
9
  import type {
11
10
  TextureFormatColor,
12
11
  TextureFormatDepthStencil
13
- } from '@luma.gl/core/shadertypes/textures/texture-formats';
12
+ } from '@luma.gl/core/shadertypes/texture-types/texture-formats';
14
13
  import type {Shader} from './shader';
14
+ import type {SharedRenderPipeline} from './shared-render-pipeline';
15
15
  import type {RenderPass} from './render-pass';
16
16
  import {Resource, ResourceProps} from './resource';
17
17
  import {VertexArray} from './vertex-array';
@@ -51,12 +51,22 @@ export type RenderPipelineProps = ResourceProps & {
51
51
  /** Parameters that are controlled by pipeline */
52
52
  parameters?: RenderPipelineParameters;
53
53
 
54
- // Dynamic bindings (TODO - pipelines should be immutable, move to RenderPass)
54
+ /** Transform feedback varyings captured when linking a WebGL render pipeline. WebGL only. */
55
+ varyings?: string[];
56
+ /** Transform feedback buffer mode used when linking a WebGL render pipeline. WebGL only. */
57
+ bufferMode?: number;
58
+
59
+ /** Some applications intentionally supply unused attributes and bindings, and want to disable warnings */
60
+ disableWarnings?: boolean;
61
+
62
+ /** Internal hook for backend-specific shared pipeline implementations. */
63
+ _sharedRenderPipeline?: SharedRenderPipeline;
55
64
 
65
+ // Dynamic bindings (TODO - pipelines should be immutable, move to RenderPass)
56
66
  /** Buffers, Textures, Samplers for the shader bindings */
57
- bindings?: Record<string, Binding>;
58
- /** @deprecated uniforms (WebGL only) */
59
- uniforms?: Record<string, UniformValue>;
67
+ bindings?: Bindings;
68
+ /** Bindings grouped by bind-group index */
69
+ bindGroups?: BindingsByGroup;
60
70
  };
61
71
 
62
72
  /**
@@ -78,19 +88,34 @@ export abstract class RenderPipeline extends Resource<RenderPipelineProps> {
78
88
  linkStatus: 'pending' | 'success' | 'error' = 'pending';
79
89
  /** The hash of the pipeline */
80
90
  hash: string = '';
91
+ /** Optional shared backend implementation */
92
+ sharedRenderPipeline: SharedRenderPipeline | null = null;
93
+
94
+ /** Whether shader or pipeline compilation/linking is still in progress */
95
+ get isPending(): boolean {
96
+ return (
97
+ this.linkStatus === 'pending' ||
98
+ this.vs.compilationStatus === 'pending' ||
99
+ this.fs?.compilationStatus === 'pending'
100
+ );
101
+ }
102
+
103
+ /** Whether shader or pipeline compilation/linking has failed */
104
+ get isErrored(): boolean {
105
+ return (
106
+ this.linkStatus === 'error' ||
107
+ this.vs.compilationStatus === 'error' ||
108
+ this.fs?.compilationStatus === 'error'
109
+ );
110
+ }
81
111
 
82
112
  constructor(device: Device, props: RenderPipelineProps) {
83
113
  super(device, props, RenderPipeline.defaultProps);
84
114
  this.shaderLayout = this.props.shaderLayout!;
85
115
  this.bufferLayout = this.props.bufferLayout || [];
116
+ this.sharedRenderPipeline = this.props._sharedRenderPipeline || null;
86
117
  }
87
118
 
88
- /** Set bindings (stored on pipeline and set before each call) */
89
- abstract setBindings(
90
- bindings: Record<string, Binding>,
91
- options?: {disableWarnings?: boolean}
92
- ): void;
93
-
94
119
  /** Draw call. Returns false if the draw call was aborted (due to resources still initializing) */
95
120
  abstract draw(options: {
96
121
  /** Render pass to draw into (targeting screen or framebuffer) */
@@ -118,6 +143,14 @@ export abstract class RenderPipeline extends Resource<RenderPipelineProps> {
118
143
  baseVertex?: number;
119
144
  /** Transform feedback. WebGL only. */
120
145
  transformFeedback?: TransformFeedback;
146
+ /** Bindings applied for this draw (textures, samplers, uniform buffers) */
147
+ bindings?: Bindings;
148
+ /** Bindings grouped by bind-group index */
149
+ bindGroups?: BindingsByGroup;
150
+ /** Optional stable cache keys for backend bind-group reuse */
151
+ _bindGroupCacheKeys?: Partial<Record<number, object>>;
152
+ /** WebGL-only uniforms */
153
+ uniforms?: Record<string, unknown>;
121
154
  }): boolean;
122
155
 
123
156
  static override defaultProps: Required<RenderPipelineProps> = {
@@ -139,8 +172,11 @@ export abstract class RenderPipeline extends Resource<RenderPipelineProps> {
139
172
  depthStencilAttachmentFormat: undefined!,
140
173
 
141
174
  parameters: {},
142
-
143
- bindings: {},
144
- uniforms: {}
175
+ varyings: undefined!,
176
+ bufferMode: undefined!,
177
+ disableWarnings: false,
178
+ _sharedRenderPipeline: undefined!,
179
+ bindings: undefined!,
180
+ bindGroups: undefined!
145
181
  };
146
182
  }