@kitware/vtk.js 21.6.0 → 21.6.1

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.
@@ -178,7 +178,7 @@ function vtkWebGPUStorageBuffer(publicAPI, model) {
178
178
  lines.push(" ".concat(entry.name, ": ").concat(entry.type, ";"));
179
179
  }
180
180
 
181
- lines.push("\n};\n[[block]] struct ".concat(model.name, "Struct\n{\n values: array<").concat(model.name, "StructEntry>;\n};\n[[binding(").concat(binding, "), group(").concat(group, ")]] var<storage, read> ").concat(model.name, ": ").concat(model.name, "Struct;\n"));
181
+ lines.push("\n};\nstruct ".concat(model.name, "Struct\n{\n values: array<").concat(model.name, "StructEntry>;\n};\n[[binding(").concat(binding, "), group(").concat(group, ")]] var<storage, read> ").concat(model.name, ": ").concat(model.name, "Struct;\n"));
182
182
  return lines.join('\n');
183
183
  };
184
184
 
@@ -45,18 +45,34 @@ function vtkWebGPUUniformBuffer(publicAPI, model) {
45
45
  }
46
46
 
47
47
  var currOffset = 0;
48
- var newEntries = []; // pack anything whose size is a multiple of 16 bytes first
49
- // this includes a couple types that don't require 16 byte alignment
50
- // such as mat2x2<f32> but that is OK
48
+ var newEntries = []; // compute the max alignment, this is required as WebGPU defines a UBO to have
49
+ // a size that is a multiple of the maxAlignment
50
+
51
+ var maxAlignment = 4;
51
52
 
52
53
  for (var i = 0; i < model.bufferEntries.length; i++) {
53
54
  var entry = model.bufferEntries[i];
54
55
 
55
- if (entry.packed === false && entry.sizeInBytes % 16 === 0) {
56
- entry.packed = true;
57
- entry.offset = currOffset;
58
- newEntries.push(entry);
59
- currOffset += entry.sizeInBytes;
56
+ if (entry.sizeInBytes % 16 === 0) {
57
+ maxAlignment = Math.max(16, maxAlignment);
58
+ }
59
+
60
+ if (entry.sizeInBytes % 8 === 0) {
61
+ maxAlignment = Math.max(8, maxAlignment);
62
+ }
63
+ } // pack anything whose size is a multiple of 16 bytes first
64
+ // this includes a couple types that don't require 16 byte alignment
65
+ // such as mat2x2<f32> but that is OK
66
+
67
+
68
+ for (var _i = 0; _i < model.bufferEntries.length; _i++) {
69
+ var _entry = model.bufferEntries[_i];
70
+
71
+ if (_entry.packed === false && _entry.sizeInBytes % 16 === 0) {
72
+ _entry.packed = true;
73
+ _entry.offset = currOffset;
74
+ newEntries.push(_entry);
75
+ currOffset += _entry.sizeInBytes;
60
76
  }
61
77
  } // now it gets tough, we have the following common types (f32, i32, u32)
62
78
  // - vec2<f32> 8 byte size, 8 byte alignment
@@ -65,18 +81,18 @@ function vtkWebGPUUniformBuffer(publicAPI, model) {
65
81
  // try adding 12 byte, 4 byte pairs
66
82
 
67
83
 
68
- for (var _i = 0; _i < model.bufferEntries.length; _i++) {
69
- var _entry = model.bufferEntries[_i];
84
+ for (var _i2 = 0; _i2 < model.bufferEntries.length; _i2++) {
85
+ var _entry2 = model.bufferEntries[_i2];
70
86
 
71
- if (_entry.packed === false && _entry.sizeInBytes === 12) {
87
+ if (_entry2.packed === false && _entry2.sizeInBytes === 12) {
72
88
  for (var i2 = 0; i2 < model.bufferEntries.length; i2++) {
73
89
  var entry2 = model.bufferEntries[i2];
74
90
 
75
91
  if (entry2.packed === false && entry2.sizeInBytes === 4) {
76
- _entry.packed = true;
77
- _entry.offset = currOffset;
78
- newEntries.push(_entry);
79
- currOffset += _entry.sizeInBytes;
92
+ _entry2.packed = true;
93
+ _entry2.offset = currOffset;
94
+ newEntries.push(_entry2);
95
+ currOffset += _entry2.sizeInBytes;
80
96
  entry2.packed = true;
81
97
  entry2.offset = currOffset;
82
98
  newEntries.push(entry2);
@@ -88,22 +104,22 @@ function vtkWebGPUUniformBuffer(publicAPI, model) {
88
104
  } // try adding 8 byte, 8 byte pairs
89
105
 
90
106
 
91
- for (var _i2 = 0; _i2 < model.bufferEntries.length; _i2++) {
92
- var _entry2 = model.bufferEntries[_i2];
107
+ for (var _i3 = 0; _i3 < model.bufferEntries.length; _i3++) {
108
+ var _entry3 = model.bufferEntries[_i3];
93
109
 
94
- if (!_entry2.packed && _entry2.sizeInBytes % 8 === 0) {
95
- for (var _i3 = _i2 + 1; _i3 < model.bufferEntries.length; _i3++) {
96
- var _entry3 = model.bufferEntries[_i3];
110
+ if (!_entry3.packed && _entry3.sizeInBytes % 8 === 0) {
111
+ for (var _i4 = _i3 + 1; _i4 < model.bufferEntries.length; _i4++) {
112
+ var _entry4 = model.bufferEntries[_i4];
97
113
 
98
- if (!_entry3.packed && _entry3.sizeInBytes % 8 === 0) {
99
- _entry2.packed = true;
100
- _entry2.offset = currOffset;
101
- newEntries.push(_entry2);
102
- currOffset += _entry2.sizeInBytes;
114
+ if (!_entry4.packed && _entry4.sizeInBytes % 8 === 0) {
103
115
  _entry3.packed = true;
104
116
  _entry3.offset = currOffset;
105
117
  newEntries.push(_entry3);
106
118
  currOffset += _entry3.sizeInBytes;
119
+ _entry4.packed = true;
120
+ _entry4.offset = currOffset;
121
+ newEntries.push(_entry4);
122
+ currOffset += _entry4.sizeInBytes;
107
123
  break;
108
124
  }
109
125
  }
@@ -111,28 +127,28 @@ function vtkWebGPUUniformBuffer(publicAPI, model) {
111
127
  } // try adding 8 byte, 4 byte 4 byte triplets
112
128
 
113
129
 
114
- for (var _i4 = 0; _i4 < model.bufferEntries.length; _i4++) {
115
- var _entry4 = model.bufferEntries[_i4];
130
+ for (var _i5 = 0; _i5 < model.bufferEntries.length; _i5++) {
131
+ var _entry5 = model.bufferEntries[_i5];
116
132
 
117
- if (!_entry4.packed && _entry4.sizeInBytes % 8 === 0) {
133
+ if (!_entry5.packed && _entry5.sizeInBytes % 8 === 0) {
118
134
  var found = false;
119
135
 
120
- for (var _i5 = 0; !found && _i5 < model.bufferEntries.length; _i5++) {
121
- var _entry5 = model.bufferEntries[_i5];
136
+ for (var _i6 = 0; !found && _i6 < model.bufferEntries.length; _i6++) {
137
+ var _entry6 = model.bufferEntries[_i6];
122
138
 
123
- if (!_entry5.packed && _entry5.sizeInBytes === 4) {
124
- for (var i3 = _i5 + 1; i3 < model.bufferEntries.length; i3++) {
139
+ if (!_entry6.packed && _entry6.sizeInBytes === 4) {
140
+ for (var i3 = _i6 + 1; i3 < model.bufferEntries.length; i3++) {
125
141
  var entry3 = model.bufferEntries[i3];
126
142
 
127
143
  if (!entry3.packed && entry3.sizeInBytes === 4) {
128
- _entry4.packed = true;
129
- _entry4.offset = currOffset;
130
- newEntries.push(_entry4);
131
- currOffset += _entry4.sizeInBytes;
132
144
  _entry5.packed = true;
133
145
  _entry5.offset = currOffset;
134
146
  newEntries.push(_entry5);
135
147
  currOffset += _entry5.sizeInBytes;
148
+ _entry6.packed = true;
149
+ _entry6.offset = currOffset;
150
+ newEntries.push(_entry6);
151
+ currOffset += _entry6.sizeInBytes;
136
152
  entry3.packed = true;
137
153
  entry3.offset = currOffset;
138
154
  newEntries.push(entry3);
@@ -149,27 +165,27 @@ function vtkWebGPUUniformBuffer(publicAPI, model) {
149
165
  // in a failed UBO
150
166
 
151
167
 
152
- for (var _i6 = 0; _i6 < model.bufferEntries.length; _i6++) {
153
- var _entry6 = model.bufferEntries[_i6];
154
-
155
- if (!_entry6.packed && _entry6.sizeInBytes > 4) {
156
- _entry6.packed = true;
157
- _entry6.offset = currOffset;
158
- newEntries.push(_entry6);
159
- currOffset += _entry6.sizeInBytes;
160
- }
161
- } // finally add remaining 4 byte items
162
-
163
-
164
168
  for (var _i7 = 0; _i7 < model.bufferEntries.length; _i7++) {
165
169
  var _entry7 = model.bufferEntries[_i7];
166
170
 
167
- if (!_entry7.packed) {
171
+ if (!_entry7.packed && _entry7.sizeInBytes > 4) {
168
172
  _entry7.packed = true;
169
173
  _entry7.offset = currOffset;
170
174
  newEntries.push(_entry7);
171
175
  currOffset += _entry7.sizeInBytes;
172
176
  }
177
+ } // finally add remaining 4 byte items
178
+
179
+
180
+ for (var _i8 = 0; _i8 < model.bufferEntries.length; _i8++) {
181
+ var _entry8 = model.bufferEntries[_i8];
182
+
183
+ if (!_entry8.packed) {
184
+ _entry8.packed = true;
185
+ _entry8.offset = currOffset;
186
+ newEntries.push(_entry8);
187
+ currOffset += _entry8.sizeInBytes;
188
+ }
173
189
  } // update entries and entryNames
174
190
 
175
191
 
@@ -177,11 +193,12 @@ function vtkWebGPUUniformBuffer(publicAPI, model) {
177
193
 
178
194
  model._bufferEntryNames.clear();
179
195
 
180
- for (var _i8 = 0; _i8 < model.bufferEntries.length; _i8++) {
181
- model._bufferEntryNames.set(model.bufferEntries[_i8].name, _i8);
196
+ for (var _i9 = 0; _i9 < model.bufferEntries.length; _i9++) {
197
+ model._bufferEntryNames.set(model.bufferEntries[_i9].name, _i9);
182
198
  }
183
199
 
184
200
  model.sizeInBytes = currOffset;
201
+ model.sizeInBytes = maxAlignment * Math.ceil(model.sizeInBytes / maxAlignment);
185
202
  model.sortDirty = false;
186
203
  };
187
204
 
@@ -284,7 +301,7 @@ function vtkWebGPUUniformBuffer(publicAPI, model) {
284
301
  publicAPI.getShaderCode = function (binding, group) {
285
302
  // sort the entries
286
303
  publicAPI.sortBufferEntries();
287
- var lines = ["[[block]] struct ".concat(model.name, "Struct\n{")];
304
+ var lines = ["struct ".concat(model.name, "Struct\n{")];
288
305
 
289
306
  for (var i = 0; i < model.bufferEntries.length; i++) {
290
307
  var entry = model.bufferEntries[i];
@@ -218,7 +218,7 @@ function vtkWebGPUVolumePass(publicAPI, model) {
218
218
  fDesc.addOutput('vec4<f32>', 'outColor1');
219
219
  fDesc.addOutput('vec4<f32>', 'outColor2');
220
220
  var code = fDesc.getCode();
221
- code = vtkWebGPUShaderCache.substitute(code, '//VTK::RenderEncoder::Impl', ['output.outColor1 = vec4<f32>(stopval, 0.0, 0.0, 0.0);', 'output.outColor2 = vec4<f32>(input.fragPos.z, 0.0, 0.0, 0.0);']).result;
221
+ code = vtkWebGPUShaderCache.substitute(code, '//VTK::RenderEncoder::Impl', ['output.outColor1 = vec4<f32>(input.fragPos.z, 0.0, 0.0, 0.0);', 'output.outColor2 = vec4<f32>(stopval, 0.0, 0.0, 0.0);']).result;
222
222
  fDesc.setCode(code);
223
223
  });
224
224
  model.depthRangeEncoder.setDescription({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitware/vtk.js",
3
- "version": "21.6.0",
3
+ "version": "21.6.1",
4
4
  "description": "Visualization Toolkit for the Web",
5
5
  "keywords": [
6
6
  "3d",