@luma.gl/webgpu 9.0.0-alpha.14 → 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
@@ -1,244 +1,217 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
1
+ /// <reference types="@webgpu/types" />
2
2
  import { Device, CanvasContext, log, uid } from '@luma.gl/api';
3
- import WebGPUBuffer from './resources/webgpu-buffer';
4
- import WebGPUTexture from './resources/webgpu-texture';
5
- import WebGPUExternalTexture from './resources/webgpu-external-texture';
6
- import WebGPUSampler from './resources/webgpu-sampler';
7
- import WebGPUShader from './resources/webgpu-shader';
8
- import WebGPURenderPipeline from './resources/webgpu-render-pipeline';
9
- import WebGPUComputePipeline from './resources/webgpu-compute-pipeline';
10
- import WebGPURenderPass from './resources/webgpu-render-pass';
11
- import WebGPUComputePass from './resources/webgpu-compute-pass';
12
- import WebGPUCanvasContext from './webgpu-canvas-context';
13
- export default class WebGPUDevice extends Device {
14
- static isSupported() {
15
- return Boolean(typeof navigator !== 'undefined' && navigator.gpu);
16
- }
17
-
18
- static async create(props) {
19
- if (!navigator.gpu) {
20
- throw new Error('WebGPU not available. Open in Chrome Canary and turn on chrome://flags/#enable-unsafe-webgpu');
21
- }
22
-
23
- log.groupCollapsed(1, 'WebGPUDevice created')();
24
- const adapter = await navigator.gpu.requestAdapter({
25
- powerPreference: 'high-performance'
26
- });
27
-
28
- if (!adapter) {
29
- throw new Error('Failed to request WebGPU adapter');
30
- }
31
-
32
- log.probe(1, 'Adapter available')();
33
- const gpuDevice = await adapter.requestDevice({
34
- requiredFeatures: adapter.features
35
- });
36
- log.probe(1, 'GPUDevice available')();
37
-
38
- if (typeof props.canvas === 'string') {
39
- await CanvasContext.pageLoaded;
40
- log.probe(1, 'DOM is loaded')();
41
- }
42
-
43
- const device = new WebGPUDevice(gpuDevice, adapter, props);
44
- log.probe(1, 'Device created', device.info)();
45
- log.table(1, device.info)();
46
- log.groupEnd(1)();
47
- return device;
48
- }
49
-
50
- constructor(device, adapter, props) {
51
- super({ ...props,
52
- id: props.id || uid('webgpu-device')
53
- });
54
-
55
- _defineProperty(this, "handle", void 0);
56
-
57
- _defineProperty(this, "adapter", void 0);
58
-
59
- _defineProperty(this, "lost", void 0);
60
-
61
- _defineProperty(this, "canvasContext", null);
62
-
63
- _defineProperty(this, "commandEncoder", null);
64
-
65
- _defineProperty(this, "renderPass", null);
66
-
67
- _defineProperty(this, "_info", void 0);
68
-
69
- _defineProperty(this, "_isLost", false);
70
-
71
- _defineProperty(this, "features", void 0);
72
-
73
- this.handle = device;
74
- this.adapter = adapter;
75
- this._info = {
76
- type: 'webgpu',
77
- vendor: this.adapter.name,
78
- renderer: '',
79
- version: '',
80
- gpu: 'unknown',
81
- shadingLanguages: ['glsl', 'wgsl'],
82
- shadingLanguageVersions: {
83
- glsl: '450',
84
- wgsl: '100'
85
- },
86
- vendorMasked: '',
87
- rendererMasked: ''
88
- };
89
- this.lost = new Promise(async resolve => {
90
- const lostInfo = await this.handle.lost;
91
- this._isLost = true;
92
- resolve({
93
- reason: 'destroyed',
94
- message: lostInfo.message
95
- });
96
- });
97
-
98
- if (props.canvas) {
99
- this.canvasContext = new WebGPUCanvasContext(this, this.adapter, {
100
- canvas: props.canvas
101
- });
102
- }
103
-
104
- this.features = this._getFeatures();
105
- }
106
-
107
- destroy() {
108
- this.handle.destroy();
109
- }
110
-
111
- get info() {
112
- return this._info;
113
- }
114
-
115
- get limits() {
116
- return this.handle.limits;
117
- }
118
-
119
- isTextureFormatSupported(format) {
120
- return !format.includes('webgl');
121
- }
122
-
123
- isTextureFormatFilterable(format) {
124
- return this.isTextureFormatSupported(format);
125
- }
126
-
127
- isTextureFormatRenderable(format) {
128
- return this.isTextureFormatSupported(format);
129
- }
130
-
131
- get isLost() {
132
- return this._isLost;
133
- }
134
-
135
- _createBuffer(props) {
136
- return new WebGPUBuffer(this, props);
137
- }
138
-
139
- _createTexture(props) {
140
- return new WebGPUTexture(this, props);
141
- }
142
-
143
- createExternalTexture(props) {
144
- return new WebGPUExternalTexture(this, props);
145
- }
146
-
147
- createShader(props) {
148
- return new WebGPUShader(this, props);
149
- }
150
-
151
- createSampler(props) {
152
- return new WebGPUSampler(this, props);
153
- }
154
-
155
- createRenderPipeline(props) {
156
- return new WebGPURenderPipeline(this, props);
157
- }
158
-
159
- createFramebuffer(props) {
160
- throw new Error('Not implemented');
161
- }
162
-
163
- createComputePipeline(props) {
164
- return new WebGPUComputePipeline(this, props);
165
- }
166
-
167
- beginRenderPass(props) {
168
- this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
169
- return new WebGPURenderPass(this, props);
170
- }
171
-
172
- beginComputePass(props) {
173
- this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
174
- return new WebGPUComputePass(this, props);
175
- }
176
-
177
- createCanvasContext(props) {
178
- return new WebGPUCanvasContext(this, this.adapter, props);
179
- }
180
-
181
- getDefaultRenderPass() {
182
- var _this$canvasContext;
183
-
184
- this.renderPass = this.renderPass || this.beginRenderPass({
185
- framebuffer: (_this$canvasContext = this.canvasContext) === null || _this$canvasContext === void 0 ? void 0 : _this$canvasContext.getCurrentFramebuffer()
186
- });
187
- return this.renderPass;
188
- }
189
-
190
- submit() {
191
- var _this$renderPass, _this$commandEncoder;
192
-
193
- (_this$renderPass = this.renderPass) === null || _this$renderPass === void 0 ? void 0 : _this$renderPass.endPass();
194
- const commandBuffer = (_this$commandEncoder = this.commandEncoder) === null || _this$commandEncoder === void 0 ? void 0 : _this$commandEncoder.finish();
195
-
196
- if (commandBuffer) {
197
- this.handle.queue.submit([commandBuffer]);
198
- }
199
-
200
- this.commandEncoder = null;
201
- this.renderPass = null;
202
- }
203
-
204
- _getFeatures() {
205
- const features = new Set(this.handle.features);
206
-
207
- if (features.has('depth-clamping')) {
208
- features.delete('depth-clamping');
209
- features.add('depth-clip-control');
210
- }
211
-
212
- if (features.has('texture-compression-bc')) {
213
- features.add('texture-compression-bc5-webgl');
214
- }
215
-
216
- features.add('webgpu');
217
- features.add('timer-query-webgl');
218
- features.add('vertex-array-object-webgl1');
219
- features.add('instanced-rendering-webgl1');
220
- features.add('multiple-render-targets-webgl1');
221
- features.add('index-uint32-webgl1');
222
- features.add('blend-minmax-webgl1');
223
- features.add('texture-blend-float-webgl1');
224
- features.add('texture-formats-srgb-webgl1');
225
- features.add('texture-formats-depth-webgl1');
226
- features.add('texture-formats-float32-webgl1');
227
- features.add('texture-formats-float16-webgl1');
228
- features.add('texture-filter-linear-float32-webgl');
229
- features.add('texture-filter-linear-float16-webgl');
230
- features.add('texture-filter-anisotropic-webgl');
231
- features.add('texture-renderable-rgba32float-webgl');
232
- features.add('texture-renderable-float32-webgl');
233
- features.add('texture-renderable-float16-webgl');
234
- features.add('glsl-frag-data');
235
- features.add('glsl-frag-depth');
236
- features.add('glsl-derivatives');
237
- features.add('glsl-texture-lod');
238
- return features;
239
- }
240
-
3
+ import WebGPUBuffer from './resources/webgpu-buffer.js';
4
+ import WebGPUTexture from './resources/webgpu-texture.js';
5
+ import WebGPUExternalTexture from './resources/webgpu-external-texture.js';
6
+ import WebGPUSampler from './resources/webgpu-sampler.js';
7
+ import WebGPUShader from './resources/webgpu-shader.js';
8
+ import WebGPURenderPipeline from './resources/webgpu-render-pipeline.js';
9
+ import WebGPUComputePipeline from './resources/webgpu-compute-pipeline.js';
10
+ import WebGPURenderPass from './resources/webgpu-render-pass.js';
11
+ import WebGPUComputePass from './resources/webgpu-compute-pass.js';
12
+ import WebGPUCanvasContext from './webgpu-canvas-context.js';
13
+ // import {loadGlslangModule} from '../glsl/glslang.js';
14
+ /** WebGPU Device implementation */
15
+ class WebGPUDevice extends Device {
16
+ /** Check if WebGPU is available */
17
+ static isSupported() {
18
+ return Boolean(typeof navigator !== 'undefined' && navigator.gpu);
19
+ }
20
+ static async create(props) {
21
+ if (!navigator.gpu) {
22
+ throw new Error('WebGPU not available. Open in Chrome Canary and turn on chrome://flags/#enable-unsafe-webgpu');
23
+ }
24
+ log.groupCollapsed(1, 'WebGPUDevice created')();
25
+ const adapter = await navigator.gpu.requestAdapter({
26
+ powerPreference: 'high-performance'
27
+ // forceSoftware: false
28
+ });
29
+ if (!adapter) {
30
+ throw new Error('Failed to request WebGPU adapter');
31
+ }
32
+ log.probe(1, 'Adapter available')();
33
+ const gpuDevice = await adapter.requestDevice({
34
+ requiredFeatures: adapter.features
35
+ // TODO ensure we obtain best limits
36
+ // requiredLimits: adapter.limits
37
+ });
38
+ log.probe(1, 'GPUDevice available')();
39
+ if (typeof props.canvas === 'string') {
40
+ await CanvasContext.pageLoaded;
41
+ log.probe(1, 'DOM is loaded')();
42
+ }
43
+ const device = new WebGPUDevice(gpuDevice, adapter, props);
44
+ log.probe(1, 'Device created', device.info)();
45
+ log.table(1, device.info)();
46
+ log.groupEnd(1)();
47
+ return device;
48
+ }
49
+ constructor(device, adapter, props) {
50
+ super({ ...props, id: props.id || uid('webgpu-device') });
51
+ this.canvasContext = null;
52
+ this.commandEncoder = null;
53
+ this.renderPass = null;
54
+ this._isLost = false;
55
+ this.handle = device;
56
+ this.adapter = adapter;
57
+ this._info = {
58
+ type: 'webgpu',
59
+ vendor: this.adapter.__brand,
60
+ renderer: '',
61
+ version: '',
62
+ gpu: 'unknown',
63
+ shadingLanguages: ['glsl', 'wgsl'],
64
+ shadingLanguageVersions: {
65
+ glsl: '450',
66
+ wgsl: '100'
67
+ },
68
+ vendorMasked: '',
69
+ rendererMasked: ''
70
+ };
71
+ // "Context" loss handling
72
+ this.lost = new Promise(async (resolve) => {
73
+ const lostInfo = await this.handle.lost;
74
+ this._isLost = true;
75
+ resolve({ reason: 'destroyed', message: lostInfo.message });
76
+ });
77
+ // Note: WebGPU devices can be created without a canvas, for compute shader purposes
78
+ if (props.canvas) {
79
+ this.canvasContext = new WebGPUCanvasContext(this, this.adapter, { canvas: props.canvas });
80
+ }
81
+ this.features = this._getFeatures();
82
+ }
83
+ // TODO
84
+ // Load the glslang module now so that it is available synchronously when compiling shaders
85
+ // const {glsl = true} = props;
86
+ // this.glslang = glsl && await loadGlslangModule();
87
+ destroy() {
88
+ this.handle.destroy();
89
+ }
90
+ get info() {
91
+ return this._info;
92
+ }
93
+ get limits() {
94
+ return this.handle.limits;
95
+ }
96
+ isTextureFormatSupported(format) {
97
+ return !format.includes('webgl');
98
+ }
99
+ /** @todo implement proper check? */
100
+ isTextureFormatFilterable(format) {
101
+ return this.isTextureFormatSupported(format);
102
+ }
103
+ /** @todo implement proper check? */
104
+ isTextureFormatRenderable(format) {
105
+ return this.isTextureFormatSupported(format);
106
+ }
107
+ get isLost() {
108
+ return this._isLost;
109
+ }
110
+ _createBuffer(props) {
111
+ return new WebGPUBuffer(this, props);
112
+ }
113
+ _createTexture(props) {
114
+ return new WebGPUTexture(this, props);
115
+ }
116
+ createExternalTexture(props) {
117
+ return new WebGPUExternalTexture(this, props);
118
+ }
119
+ createShader(props) {
120
+ return new WebGPUShader(this, props);
121
+ }
122
+ createSampler(props) {
123
+ return new WebGPUSampler(this, props);
124
+ }
125
+ createRenderPipeline(props) {
126
+ return new WebGPURenderPipeline(this, props);
127
+ }
128
+ createFramebuffer(props) {
129
+ throw new Error('Not implemented');
130
+ }
131
+ createComputePipeline(props) {
132
+ return new WebGPUComputePipeline(this, props);
133
+ }
134
+ // WebGPU specifics
135
+ /**
136
+ * Allows a render pass to begin against a canvas context
137
+ * @todo need to support a "Framebuffer" equivalent (aka preconfigured RenderPassDescriptors?).
138
+ */
139
+ beginRenderPass(props) {
140
+ this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
141
+ return new WebGPURenderPass(this, props);
142
+ }
143
+ beginComputePass(props) {
144
+ this.commandEncoder = this.commandEncoder || this.handle.createCommandEncoder();
145
+ return new WebGPUComputePass(this, props);
146
+ }
147
+ createCanvasContext(props) {
148
+ return new WebGPUCanvasContext(this, this.adapter, props);
149
+ }
150
+ /**
151
+ * Gets default renderpass encoder.
152
+ * Creates a new encoder against default canvasContext if not already created
153
+ * @note Called internally by Model.
154
+ */
155
+ getDefaultRenderPass() {
156
+ this.renderPass =
157
+ this.renderPass ||
158
+ this.beginRenderPass({
159
+ framebuffer: this.canvasContext?.getCurrentFramebuffer()
160
+ });
161
+ return this.renderPass;
162
+ }
163
+ submit() {
164
+ this.renderPass?.end();
165
+ const commandBuffer = this.commandEncoder?.finish();
166
+ if (commandBuffer) {
167
+ this.handle.queue.submit([commandBuffer]);
168
+ }
169
+ this.commandEncoder = null;
170
+ this.renderPass = null;
171
+ }
172
+ _getFeatures() {
173
+ // WebGPU Features
174
+ const features = new Set(this.handle.features);
175
+ // Fixups for pre-standard names: https://github.com/webgpu-native/webgpu-headers/issues/133
176
+ // @ts-expect-error Chrome Canary v99
177
+ if (features.has('depth-clamping')) {
178
+ // @ts-expect-error Chrome Canary v99
179
+ features.delete('depth-clamping');
180
+ features.add('depth-clip-control');
181
+ }
182
+ // Add subsets
183
+ if (features.has('texture-compression-bc')) {
184
+ features.add('texture-compression-bc5-webgl');
185
+ }
186
+ features.add('webgpu');
187
+ features.add('timer-query-webgl');
188
+ // WEBGL1 SUPPORT
189
+ features.add('vertex-array-object-webgl1');
190
+ features.add('instanced-rendering-webgl1');
191
+ features.add('multiple-render-targets-webgl1');
192
+ features.add('index-uint32-webgl1');
193
+ features.add('blend-minmax-webgl1');
194
+ features.add('texture-blend-float-webgl1');
195
+ // TEXTURES, RENDERBUFFERS
196
+ features.add('texture-formats-srgb-webgl1');
197
+ // TEXTURES
198
+ features.add('texture-formats-depth-webgl1');
199
+ features.add('texture-formats-float32-webgl1');
200
+ features.add('texture-formats-float16-webgl1');
201
+ features.add('texture-filter-linear-float32-webgl');
202
+ features.add('texture-filter-linear-float16-webgl');
203
+ features.add('texture-filter-anisotropic-webgl');
204
+ // FRAMEBUFFERS, TEXTURES AND RENDERBUFFERS
205
+ features.add('texture-renderable-rgba32float-webgl');
206
+ features.add('texture-renderable-float32-webgl');
207
+ features.add('texture-renderable-float16-webgl');
208
+ // GLSL extensions
209
+ features.add('glsl-frag-data');
210
+ features.add('glsl-frag-depth');
211
+ features.add('glsl-derivatives');
212
+ features.add('glsl-texture-lod');
213
+ return features;
214
+ }
241
215
  }
242
-
243
- _defineProperty(WebGPUDevice, "type", 'webgpu');
244
- //# sourceMappingURL=webgpu-device.js.map
216
+ WebGPUDevice.type = 'webgpu';
217
+ export default WebGPUDevice;
@@ -1,2 +0,0 @@
1
-
2
- //# sourceMappingURL=webgpu-types.js.map
package/dist/bundle.js CHANGED
@@ -1,5 +1,4 @@
1
+ // @ts-nocheck
1
2
  const moduleExports = require('./index');
2
-
3
3
  globalThis.luma = globalThis.luma || {};
4
4
  module.exports = Object.assign(globalThis.luma, moduleExports);
5
- //# sourceMappingURL=bundle.js.map