@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};\
|
|
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 = []; //
|
|
49
|
-
//
|
|
50
|
-
|
|
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.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
|
69
|
-
var
|
|
84
|
+
for (var _i2 = 0; _i2 < model.bufferEntries.length; _i2++) {
|
|
85
|
+
var _entry2 = model.bufferEntries[_i2];
|
|
70
86
|
|
|
71
|
-
if (
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
newEntries.push(
|
|
79
|
-
currOffset +=
|
|
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
|
|
92
|
-
var
|
|
107
|
+
for (var _i3 = 0; _i3 < model.bufferEntries.length; _i3++) {
|
|
108
|
+
var _entry3 = model.bufferEntries[_i3];
|
|
93
109
|
|
|
94
|
-
if (!
|
|
95
|
-
for (var
|
|
96
|
-
var
|
|
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 (!
|
|
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
|
|
115
|
-
var
|
|
130
|
+
for (var _i5 = 0; _i5 < model.bufferEntries.length; _i5++) {
|
|
131
|
+
var _entry5 = model.bufferEntries[_i5];
|
|
116
132
|
|
|
117
|
-
if (!
|
|
133
|
+
if (!_entry5.packed && _entry5.sizeInBytes % 8 === 0) {
|
|
118
134
|
var found = false;
|
|
119
135
|
|
|
120
|
-
for (var
|
|
121
|
-
var
|
|
136
|
+
for (var _i6 = 0; !found && _i6 < model.bufferEntries.length; _i6++) {
|
|
137
|
+
var _entry6 = model.bufferEntries[_i6];
|
|
122
138
|
|
|
123
|
-
if (!
|
|
124
|
-
for (var 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
|
|
181
|
-
model._bufferEntryNames.set(model.bufferEntries[
|
|
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 = ["
|
|
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>(
|
|
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({
|