@ludicon/spark.js 0.0.8 → 0.0.10
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.
- package/README.md +11 -6
- package/dist/spark.esm.js +76 -73
- package/dist/utils-CqE_M33R.js +4 -0
- package/package.json +3 -2
- package/src/three-gltf.js +53 -27
- package/dist/spark_bc3_rgba-Dnm92V6z.js +0 -4
- package/dist/spark_etc2_rgba-BRX5DwNI.js +0 -4
- package/dist/utils-CnL93Jcx.js +0 -4
package/README.md
CHANGED
|
@@ -64,7 +64,8 @@ npm run dev
|
|
|
64
64
|
|
|
65
65
|
This will open `http://localhost:5174/examples/index.thml` where you can browse the examples.
|
|
66
66
|
|
|
67
|
-
>
|
|
67
|
+
> [!NOTE]
|
|
68
|
+
> Browsers treat http://localhost as a secure context, so HTTPS is not required when testing locally on the same machine. However, to access the dev server from another device you must enable HTTPS for WebGPU features to work.
|
|
68
69
|
>
|
|
69
70
|
> To run the server with HTTPS, set the environment variable `HTTPS` to `true` before starting the server:
|
|
70
71
|
>
|
|
@@ -92,17 +93,20 @@ Load an image and encode it to a compressed GPU texture.
|
|
|
92
93
|
|
|
93
94
|
- A channel mask indicating the number of channels in your input: `"rgba"`, `"rgb"`, `"rg"` or `"r"`, the actual format is selected based on the device capabilities.
|
|
94
95
|
|
|
95
|
-
- An explicit WebGPU BC, ETC or ASTC format name, or an abbreviated form such as `"bc7"` or `"astc"`. Note
|
|
96
|
+
- An explicit WebGPU BC, ETC or ASTC format name, or an abbreviated form such as `"bc7"` or `"astc"`. Note: only 4x4 LDR formats are supported.
|
|
96
97
|
|
|
97
98
|
- If you specify `auto`, the input texture is analyzed to detect the necessary number of channels. This has some overhead, it's always recommended to specify the format through one of the other methods.
|
|
98
99
|
|
|
99
100
|
Default: `rgb`.
|
|
100
101
|
|
|
101
102
|
- **`alpha`**
|
|
102
|
-
Hint for the format selector. When
|
|
103
|
+
Hint for the automatic format selector. When no explicit format is provided, the format is assumed to be `"rgb"`. Supplying `alpha: true` will default to "rgba" instead.
|
|
104
|
+
|
|
105
|
+
- **`preferLowQuality`**
|
|
106
|
+
Hint for the automatic format selector. When the input format is `"rgb"` it chooses 8 bit per block formats like `"bc1"`` or `"etc2"` instead of `"bc7"`` or `"astc"`.
|
|
103
107
|
|
|
104
108
|
- **`mips`** or **`generateMipmaps`** (`boolean`)
|
|
105
|
-
Whether to generate mipmaps.
|
|
109
|
+
Whether to generate mipmaps. Mipmaps are generated with a basic box filter in linear space. Default: `false`.
|
|
106
110
|
|
|
107
111
|
- **`srgb`** (`boolean`)
|
|
108
112
|
Whether to encode the image using an as sRGB format. This also affects mipmap generation. The `srgb` mode can also be inferred from the `format`. Default: `false`.
|
|
@@ -115,7 +119,8 @@ Load an image and encode it to a compressed GPU texture.
|
|
|
115
119
|
|
|
116
120
|
#### Returns
|
|
117
121
|
|
|
118
|
-
- `Promise<GPUTexture>`
|
|
122
|
+
- `Promise<GPUTexture>`
|
|
123
|
+
A promise resolving to the encoded WebGPU texture.
|
|
119
124
|
|
|
120
125
|
|
|
121
126
|
## Integration with three.js
|
|
@@ -136,7 +141,7 @@ const material = new THREE.MeshBasicMaterial({ map: externalTex });
|
|
|
136
141
|
|
|
137
142
|
To facilitate the use of Spark when loading GLTF assets, import the provided helper:
|
|
138
143
|
|
|
139
|
-
```
|
|
144
|
+
```js
|
|
140
145
|
import { registerSparkLoader } from "@ludicon/spark.js/three-gltf";
|
|
141
146
|
```
|
|
142
147
|
|
package/dist/spark.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const modules = /* @__PURE__ */ Object.assign({ "./spark_astc_rgb.wgsl": () => import("./spark_astc_rgb-ylbf30mQ.js"), "./spark_astc_rgba.wgsl": () => import("./spark_astc_rgba-C4NuyfHw.js"), "./spark_bc1_rgb.wgsl": () => import("./spark_bc1_rgb-L0ZV40FW.js"), "./
|
|
1
|
+
const modules = /* @__PURE__ */ Object.assign({ "./spark_astc_rgb.wgsl": () => import("./spark_astc_rgb-ylbf30mQ.js"), "./spark_astc_rgba.wgsl": () => import("./spark_astc_rgba-C4NuyfHw.js"), "./spark_bc1_rgb.wgsl": () => import("./spark_bc1_rgb-L0ZV40FW.js"), "./spark_bc4_r.wgsl": () => import("./spark_bc4_r-B4cqoXVq.js"), "./spark_bc5_rg.wgsl": () => import("./spark_bc5_rg-boGe-kBy.js"), "./spark_bc7_rgb.wgsl": () => import("./spark_bc7_rgb-CYdL55pE.js"), "./spark_bc7_rgba.wgsl": () => import("./spark_bc7_rgba-BFgOyqos.js"), "./spark_eac_r.wgsl": () => import("./spark_eac_r-BFwH430b.js"), "./spark_eac_rg.wgsl": () => import("./spark_eac_rg--Gm5Gzmk.js"), "./spark_etc2_rgb.wgsl": () => import("./spark_etc2_rgb-CWjBHhHQ.js"), "./utils.wgsl": () => import("./utils-CqE_M33R.js") });
|
|
2
2
|
const shaders = Object.fromEntries(
|
|
3
3
|
Object.entries(modules).map(([path, module]) => {
|
|
4
4
|
const name = path.replace("./", "");
|
|
@@ -14,10 +14,10 @@ const SparkFormat = {
|
|
|
14
14
|
EAC_R: 4,
|
|
15
15
|
EAC_RG: 5,
|
|
16
16
|
ETC2_RGB: 6,
|
|
17
|
-
ETC2_RGBA: 7,
|
|
17
|
+
// ETC2_RGBA: 7,
|
|
18
18
|
// ETC2_RGBM: 8,
|
|
19
19
|
BC1_RGB: 9,
|
|
20
|
-
BC3_RGBA: 10,
|
|
20
|
+
// BC3_RGBA: 10,
|
|
21
21
|
// BC3_YCoCg: 11,
|
|
22
22
|
// BC3_RGBM: 12,
|
|
23
23
|
BC4_R: 13,
|
|
@@ -47,16 +47,14 @@ const SparkFormatName = [
|
|
|
47
47
|
"etc2-rgb",
|
|
48
48
|
// ETC2_RGB
|
|
49
49
|
/* 7 */
|
|
50
|
-
|
|
51
|
-
// ETC2_RGBA
|
|
50
|
+
null,
|
|
52
51
|
/* 8 */
|
|
53
52
|
null,
|
|
54
53
|
/* 9 */
|
|
55
54
|
"bc1-rgb",
|
|
56
55
|
// BC1_RGB
|
|
57
56
|
/* 10 */
|
|
58
|
-
|
|
59
|
-
// BC3_RGBA
|
|
57
|
+
null,
|
|
60
58
|
/* 11 */
|
|
61
59
|
null,
|
|
62
60
|
/* 12 */
|
|
@@ -97,16 +95,14 @@ const SparkShaderFiles = [
|
|
|
97
95
|
"spark_etc2_rgb.wgsl",
|
|
98
96
|
// ETC2_RGB
|
|
99
97
|
/* 7 */
|
|
100
|
-
|
|
101
|
-
// ETC2_RGBA
|
|
98
|
+
null,
|
|
102
99
|
/* 8 */
|
|
103
100
|
null,
|
|
104
101
|
/* 9 */
|
|
105
102
|
"spark_bc1_rgb.wgsl",
|
|
106
103
|
// BC1_RGB
|
|
107
104
|
/* 10 */
|
|
108
|
-
|
|
109
|
-
// BC3_RGBA
|
|
105
|
+
null,
|
|
110
106
|
/* 11 */
|
|
111
107
|
null,
|
|
112
108
|
/* 12 */
|
|
@@ -147,16 +143,14 @@ const SparkBlockSize = [
|
|
|
147
143
|
8,
|
|
148
144
|
// ETC2_RGB
|
|
149
145
|
/* 7 */
|
|
150
|
-
|
|
151
|
-
// ETC2_RGBA
|
|
146
|
+
0,
|
|
152
147
|
/* 8 */
|
|
153
148
|
0,
|
|
154
149
|
/* 9 */
|
|
155
150
|
8,
|
|
156
151
|
// BC1_RGB
|
|
157
152
|
/* 10 */
|
|
158
|
-
|
|
159
|
-
// BC3_RGBA
|
|
153
|
+
0,
|
|
160
154
|
/* 11 */
|
|
161
155
|
0,
|
|
162
156
|
/* 12 */
|
|
@@ -197,16 +191,14 @@ const SparkFormatRatio = [
|
|
|
197
191
|
8,
|
|
198
192
|
// ETC2_RGB
|
|
199
193
|
/* 7 */
|
|
200
|
-
|
|
201
|
-
// ETC2_RGBA
|
|
194
|
+
0,
|
|
202
195
|
/* 8 */
|
|
203
196
|
0,
|
|
204
197
|
/* 9 */
|
|
205
198
|
8,
|
|
206
199
|
// BC1_RGB
|
|
207
200
|
/* 10 */
|
|
208
|
-
|
|
209
|
-
// BC3_RGBA
|
|
201
|
+
0,
|
|
210
202
|
/* 11 */
|
|
211
203
|
0,
|
|
212
204
|
/* 12 */
|
|
@@ -232,9 +224,7 @@ const SparkFormatMap = Object.freeze({
|
|
|
232
224
|
"eac-r": SparkFormat.EAC_R,
|
|
233
225
|
"eac-rg": SparkFormat.EAC_RG,
|
|
234
226
|
"etc2-rgb": SparkFormat.ETC2_RGB,
|
|
235
|
-
"etc2-rgba": SparkFormat.ETC2_RGBA,
|
|
236
227
|
"bc1-rgb": SparkFormat.BC1_RGB,
|
|
237
|
-
"bc3-rgba": SparkFormat.BC3_RGBA,
|
|
238
228
|
"bc4-r": SparkFormat.BC4_R,
|
|
239
229
|
"bc5-rg": SparkFormat.BC5_RG,
|
|
240
230
|
"bc7-rgb": SparkFormat.BC7_RGB,
|
|
@@ -245,16 +235,12 @@ const SparkFormatMap = Object.freeze({
|
|
|
245
235
|
// webgpu aliases:
|
|
246
236
|
"bc1-rgba-unorm": SparkFormat.BC1_RGB,
|
|
247
237
|
"bc1-rgba-unorm-srgb": SparkFormat.BC1_RGB,
|
|
248
|
-
"bc3-rgba-unorm": SparkFormat.BC3_RGBA,
|
|
249
|
-
"bc3-rgba-unorm-srgb": SparkFormat.BC3_RGBA,
|
|
250
238
|
"bc4-r-unorm": SparkFormat.BC4_R,
|
|
251
239
|
"bc5-rg-unorm": SparkFormat.BC5_RG,
|
|
252
240
|
"bc7-rgba-unorm": SparkFormat.BC7_RGBA,
|
|
253
241
|
"bc7-rgba-unorm-srgb": SparkFormat.BC7_RGBA,
|
|
254
242
|
"etc2-rgb8unorm": SparkFormat.ETC2_RGB,
|
|
255
243
|
"etc2-rgb8unorm-srgb": SparkFormat.ETC2_RGB,
|
|
256
|
-
"etc2-rgba8unorm": SparkFormat.ETC2_RGBA,
|
|
257
|
-
"etc2-rgba8unorm-srgb": SparkFormat.ETC2_RGBA,
|
|
258
244
|
"eac-r11unorm": SparkFormat.EAC_R,
|
|
259
245
|
"eac-rg11unorm": SparkFormat.EAC_RG,
|
|
260
246
|
"astc-4x4-unorm": SparkFormat.ASTC_4x4_RGBA,
|
|
@@ -281,16 +267,14 @@ const SparkWebGPUFormats = [
|
|
|
281
267
|
"etc2-rgb8unorm",
|
|
282
268
|
// ETC2_RGB
|
|
283
269
|
/* 7 */
|
|
284
|
-
|
|
285
|
-
// ETC2_RGBA
|
|
270
|
+
null,
|
|
286
271
|
/* 8 */
|
|
287
272
|
null,
|
|
288
273
|
/* 9 */
|
|
289
274
|
"bc1-rgba-unorm",
|
|
290
275
|
// BC1_RGB
|
|
291
276
|
/* 10 */
|
|
292
|
-
|
|
293
|
-
// BC3_RGBA
|
|
277
|
+
null,
|
|
294
278
|
/* 11 */
|
|
295
279
|
null,
|
|
296
280
|
/* 12 */
|
|
@@ -331,16 +315,14 @@ const SparkFormatIsRGB = [
|
|
|
331
315
|
true,
|
|
332
316
|
// ETC2_RGB
|
|
333
317
|
/* 7 */
|
|
334
|
-
|
|
335
|
-
// ETC2_RGBA
|
|
318
|
+
null,
|
|
336
319
|
/* 8 */
|
|
337
320
|
null,
|
|
338
321
|
/* 9 */
|
|
339
322
|
true,
|
|
340
323
|
// BC1_RGB
|
|
341
324
|
/* 10 */
|
|
342
|
-
|
|
343
|
-
// BC3_RGBA
|
|
325
|
+
null,
|
|
344
326
|
/* 11 */
|
|
345
327
|
null,
|
|
346
328
|
/* 12 */
|
|
@@ -385,13 +367,12 @@ function detectWebGPUFormats(device) {
|
|
|
385
367
|
const formatMap = {
|
|
386
368
|
"texture-compression-bc": [
|
|
387
369
|
SparkFormat.BC1_RGB,
|
|
388
|
-
SparkFormat.BC3_RGBA,
|
|
389
370
|
SparkFormat.BC4_R,
|
|
390
371
|
SparkFormat.BC5_RG,
|
|
391
372
|
SparkFormat.BC7_RGB,
|
|
392
373
|
SparkFormat.BC7_RGBA
|
|
393
374
|
],
|
|
394
|
-
"texture-compression-etc2": [SparkFormat.ETC2_RGB, SparkFormat.
|
|
375
|
+
"texture-compression-etc2": [SparkFormat.ETC2_RGB, SparkFormat.EAC_R, SparkFormat.EAC_RG],
|
|
395
376
|
"texture-compression-astc": [SparkFormat.ASTC_4x4_RGB, SparkFormat.ASTC_4x4_RGBA]
|
|
396
377
|
};
|
|
397
378
|
for (const [feature, formats] of Object.entries(formatMap)) {
|
|
@@ -431,7 +412,8 @@ async function loadImageBitmap(url, opts = {}) {
|
|
|
431
412
|
const blob = await res.blob();
|
|
432
413
|
return createImageBitmap(blob, {
|
|
433
414
|
imageOrientation: opts.flipY ? "flipY" : "none",
|
|
434
|
-
colorSpaceConversion: opts.colorSpaceConversion ?? "none"
|
|
415
|
+
colorSpaceConversion: opts.colorSpaceConversion ?? "none",
|
|
416
|
+
premultiplyAlpha: "none"
|
|
435
417
|
});
|
|
436
418
|
}
|
|
437
419
|
function loadImage(url) {
|
|
@@ -470,8 +452,7 @@ class Spark {
|
|
|
470
452
|
#flipYPipeline;
|
|
471
453
|
#detectChannelCountPipeline;
|
|
472
454
|
#defaultSampler;
|
|
473
|
-
#
|
|
474
|
-
#noSrgbUniform;
|
|
455
|
+
#uniformBuffer = new Array(3);
|
|
475
456
|
#querySet;
|
|
476
457
|
#queryBuffer;
|
|
477
458
|
#queryReadbackBuffer;
|
|
@@ -509,9 +490,7 @@ class Spark {
|
|
|
509
490
|
"eac-r",
|
|
510
491
|
"eac-rg",
|
|
511
492
|
"etc2-rgb",
|
|
512
|
-
"etc2-rgba",
|
|
513
493
|
"bc1-rgb",
|
|
514
|
-
"bc3-rgba",
|
|
515
494
|
"bc4-r",
|
|
516
495
|
"bc5-rg",
|
|
517
496
|
"bc7-rgb",
|
|
@@ -639,6 +618,7 @@ class Spark {
|
|
|
639
618
|
const mipmaps = options.generateMipmaps || options.mips;
|
|
640
619
|
const { mipmapCount, outputSize, bufferRanges } = computeMipmapLayout(width, height, blockSize, mipmaps);
|
|
641
620
|
const srgb = (options.srgb || options.format?.endsWith("srgb")) && SparkFormatIsRGB[format];
|
|
621
|
+
const colorMode = srgb ? 1 : options.normal ? 2 : 0;
|
|
642
622
|
const webgpuFormat = SparkWebGPUFormats[format] + (srgb ? "-srgb" : "");
|
|
643
623
|
const viewFormats = srgb ? ["rgba8unorm", "rgba8unorm-srgb"] : ["rgba8unorm"];
|
|
644
624
|
const counter = this.#encodeCounter++;
|
|
@@ -681,7 +661,7 @@ class Spark {
|
|
|
681
661
|
{ texture: tmpTexture },
|
|
682
662
|
{ width: image.width, height: image.height }
|
|
683
663
|
);
|
|
684
|
-
this.#processInputTexture(commandEncoder, tmpTexture, inputTexture, width, height,
|
|
664
|
+
this.#processInputTexture(commandEncoder, tmpTexture, inputTexture, width, height, colorMode, options.flipY);
|
|
685
665
|
}
|
|
686
666
|
} else {
|
|
687
667
|
if (image instanceof GPUTexture) {
|
|
@@ -695,7 +675,7 @@ class Spark {
|
|
|
695
675
|
}
|
|
696
676
|
}
|
|
697
677
|
if (mipmaps) {
|
|
698
|
-
this.#generateMipmaps(commandEncoder, inputTexture, mipmapCount, width, height,
|
|
678
|
+
this.#generateMipmaps(commandEncoder, inputTexture, mipmapCount, width, height, colorMode);
|
|
699
679
|
}
|
|
700
680
|
commandEncoder.popDebugGroup?.();
|
|
701
681
|
console.timeEnd("create input texture #" + counter);
|
|
@@ -709,7 +689,8 @@ class Spark {
|
|
|
709
689
|
size: outputSize,
|
|
710
690
|
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC
|
|
711
691
|
});
|
|
712
|
-
|
|
692
|
+
const label = `dispatch compute shader '${SparkFormatName[format]}' #${counter}`;
|
|
693
|
+
console.time(label);
|
|
713
694
|
commandEncoder.pushDebugGroup?.("spark encode texture");
|
|
714
695
|
let args = {};
|
|
715
696
|
if (this.#querySet && typeof commandEncoder.writeTimestamp !== "function") {
|
|
@@ -777,7 +758,7 @@ class Spark {
|
|
|
777
758
|
}
|
|
778
759
|
commandEncoder.popDebugGroup?.();
|
|
779
760
|
this.#device.queue.submit([commandEncoder.finish()]);
|
|
780
|
-
console.timeEnd(
|
|
761
|
+
console.timeEnd(label);
|
|
781
762
|
tmpTexture?.destroy();
|
|
782
763
|
if (inputTexture != image) {
|
|
783
764
|
inputTexture?.destroy();
|
|
@@ -785,6 +766,24 @@ class Spark {
|
|
|
785
766
|
outputBuffer?.destroy();
|
|
786
767
|
return outputTexture;
|
|
787
768
|
}
|
|
769
|
+
/**
|
|
770
|
+
* Returns the size of the given image after compression with the given options. This is an approximation
|
|
771
|
+
* as it doesn't take into account the specific GPU memory layout.
|
|
772
|
+
*/
|
|
773
|
+
async estimateSize(image, options = {}) {
|
|
774
|
+
assert(this.#device, "Spark is not initialized");
|
|
775
|
+
assert(image instanceof Image || image instanceof ImageBitmap || image instanceof GPUTexture);
|
|
776
|
+
const format = this.#getPreferredFormat(options.format ?? "rgb", options.preferLowQuality);
|
|
777
|
+
if (format === void 0) {
|
|
778
|
+
throw new Error(`Unsupported format: ${options.format}`);
|
|
779
|
+
}
|
|
780
|
+
const width = Math.ceil(image.width / 4) * 4;
|
|
781
|
+
const height = Math.ceil(image.height / 4) * 4;
|
|
782
|
+
const blockSize = SparkBlockSize[format];
|
|
783
|
+
const mipmaps = options.generateMipmaps || options.mips;
|
|
784
|
+
const { outputSize } = computeMipmapLayout(width, height, blockSize, mipmaps);
|
|
785
|
+
return outputSize;
|
|
786
|
+
}
|
|
788
787
|
/**
|
|
789
788
|
* Returns the time (in milliseconds) it took to perform the most recent `encodeTexture()` call.
|
|
790
789
|
*
|
|
@@ -832,16 +831,13 @@ class Spark {
|
|
|
832
831
|
magFilter: "linear",
|
|
833
832
|
minFilter: "linear"
|
|
834
833
|
});
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
});
|
|
843
|
-
this.#device.queue.writeBuffer(this.#srgbUniform, 0, new Uint32Array([1]));
|
|
844
|
-
this.#device.queue.writeBuffer(this.#noSrgbUniform, 0, new Uint32Array([0]));
|
|
834
|
+
for (let i = 0; i < 3; i++) {
|
|
835
|
+
this.#uniformBuffer[i] = this.#device.createBuffer({
|
|
836
|
+
size: 4,
|
|
837
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
838
|
+
});
|
|
839
|
+
this.#device.queue.writeBuffer(this.#uniformBuffer[i], 0, new Uint32Array([i]));
|
|
840
|
+
}
|
|
845
841
|
if (this.#device.features.has("timestamp-query")) {
|
|
846
842
|
const webkitVersion = getSafariVersion();
|
|
847
843
|
const firefoxVersion = getFirefoxVersion();
|
|
@@ -867,7 +863,7 @@ class Spark {
|
|
|
867
863
|
if (preload) {
|
|
868
864
|
let formatsToLoad;
|
|
869
865
|
if (Array.isArray(preload)) {
|
|
870
|
-
formatsToLoad = preload.map((n) => this.#getPreferredFormat(n));
|
|
866
|
+
formatsToLoad = preload.map((n) => this.#getPreferredFormat(n, false));
|
|
871
867
|
} else {
|
|
872
868
|
formatsToLoad = this.#supportedFormats;
|
|
873
869
|
}
|
|
@@ -966,12 +962,25 @@ class Spark {
|
|
|
966
962
|
#isFormatSupported(format) {
|
|
967
963
|
return this.#supportedFormats.has(format);
|
|
968
964
|
}
|
|
969
|
-
#getPreferredFormat(format) {
|
|
965
|
+
#getPreferredFormat(format, preferLowQuality) {
|
|
970
966
|
const explicitFormat = SparkFormatMap[format];
|
|
971
967
|
if (explicitFormat != void 0 && this.#isFormatSupported(explicitFormat)) {
|
|
972
968
|
return explicitFormat;
|
|
973
969
|
}
|
|
974
|
-
const preferenceOrder = [
|
|
970
|
+
const preferenceOrder = preferLowQuality ? [
|
|
971
|
+
"bc4-r",
|
|
972
|
+
"eac-r",
|
|
973
|
+
"bc5-rg",
|
|
974
|
+
"eac-rg",
|
|
975
|
+
"bc1-rgb",
|
|
976
|
+
"etc2-rgb",
|
|
977
|
+
"bc7-rgb",
|
|
978
|
+
"astc-rgb",
|
|
979
|
+
"astc-4x4-rgb",
|
|
980
|
+
"bc7-rgba",
|
|
981
|
+
"astc-rgba",
|
|
982
|
+
"astc-4x4-rgba"
|
|
983
|
+
] : [
|
|
975
984
|
"bc4-r",
|
|
976
985
|
"eac-r",
|
|
977
986
|
"bc5-rg",
|
|
@@ -983,9 +992,7 @@ class Spark {
|
|
|
983
992
|
"etc2-rgb",
|
|
984
993
|
"bc7-rgba",
|
|
985
994
|
"astc-rgba",
|
|
986
|
-
"astc-4x4-rgba"
|
|
987
|
-
"bc3-rgba",
|
|
988
|
-
"etc2-rgba"
|
|
995
|
+
"astc-4x4-rgba"
|
|
989
996
|
];
|
|
990
997
|
for (const key of preferenceOrder) {
|
|
991
998
|
if (key.includes(format) && this.#isFormatSupported(SparkFormatMap[key])) {
|
|
@@ -1000,8 +1007,6 @@ class Spark {
|
|
|
1000
1007
|
if (options.alpha) {
|
|
1001
1008
|
if (this.#isFormatSupported(SparkFormat.BC7_RGBA)) return SparkFormat.BC7_RGBA;
|
|
1002
1009
|
if (this.#isFormatSupported(SparkFormat.ASTC_4x4_RGBA)) return SparkFormat.ASTC_4x4_RGBA;
|
|
1003
|
-
if (this.#isFormatSupported(SparkFormat.BC3_RGBA)) return SparkFormat.BC3_RGBA;
|
|
1004
|
-
if (this.#isFormatSupported(SparkFormat.ETC2_RGBA)) return SparkFormat.ETC2_RGBA;
|
|
1005
1010
|
} else if (options.srgb) {
|
|
1006
1011
|
if (this.#isFormatSupported(SparkFormat.BC7_RGB)) return SparkFormat.BC7_RGB;
|
|
1007
1012
|
if (this.#isFormatSupported(SparkFormat.ASTC_4x4_RGB)) return SparkFormat.ASTC_4x4_RGB;
|
|
@@ -1025,8 +1030,6 @@ class Spark {
|
|
|
1025
1030
|
if (channelCount == 4) {
|
|
1026
1031
|
if (this.#isFormatSupported(SparkFormat.BC7_RGBA)) return SparkFormat.BC7_RGBA;
|
|
1027
1032
|
if (this.#isFormatSupported(SparkFormat.ASTC_4x4_RGBA)) return SparkFormat.ASTC_4x4_RGBA;
|
|
1028
|
-
if (this.#isFormatSupported(SparkFormat.BC3_RGBA)) return SparkFormat.BC3_RGBA;
|
|
1029
|
-
if (this.#isFormatSupported(SparkFormat.ETC2_RGBA)) return SparkFormat.ETC2_RGBA;
|
|
1030
1033
|
} else if (channelCount == 3) {
|
|
1031
1034
|
if (this.#isFormatSupported(SparkFormat.BC7_RGB)) return SparkFormat.BC7_RGB;
|
|
1032
1035
|
if (this.#isFormatSupported(SparkFormat.ASTC_4x4_RGB)) return SparkFormat.ASTC_4x4_RGB;
|
|
@@ -1042,7 +1045,7 @@ class Spark {
|
|
|
1042
1045
|
}
|
|
1043
1046
|
throw new Error("No supported format found.");
|
|
1044
1047
|
}
|
|
1045
|
-
const format = this.#getPreferredFormat(options.format);
|
|
1048
|
+
const format = this.#getPreferredFormat(options.format, options.preferLowQuality);
|
|
1046
1049
|
if (format === void 0) {
|
|
1047
1050
|
throw new Error(`Unsupported format: ${options.format}`);
|
|
1048
1051
|
}
|
|
@@ -1115,7 +1118,7 @@ class Spark {
|
|
|
1115
1118
|
return 3;
|
|
1116
1119
|
}
|
|
1117
1120
|
// Apply scaling and flipY transform.
|
|
1118
|
-
async #processInputTexture(encoder, inputTexture, outputTexture, width, height,
|
|
1121
|
+
async #processInputTexture(encoder, inputTexture, outputTexture, width, height, colorMode, flipY) {
|
|
1119
1122
|
const pass = encoder.beginComputePass();
|
|
1120
1123
|
const pipeline = flipY ? this.#flipYPipeline : this.#resizePipeline;
|
|
1121
1124
|
pass.setPipeline(pipeline);
|
|
@@ -1127,7 +1130,7 @@ class Spark {
|
|
|
1127
1130
|
resource: inputTexture.createView({
|
|
1128
1131
|
baseMipLevel: 0,
|
|
1129
1132
|
mipLevelCount: 1,
|
|
1130
|
-
format:
|
|
1133
|
+
format: colorMode == 1 ? "rgba8unorm-srgb" : "rgba8unorm",
|
|
1131
1134
|
usage: GPUTextureUsage.TEXTURE_BINDING
|
|
1132
1135
|
})
|
|
1133
1136
|
},
|
|
@@ -1147,7 +1150,7 @@ class Spark {
|
|
|
1147
1150
|
},
|
|
1148
1151
|
{
|
|
1149
1152
|
binding: 3,
|
|
1150
|
-
resource: { buffer:
|
|
1153
|
+
resource: { buffer: this.#uniformBuffer[colorMode] }
|
|
1151
1154
|
}
|
|
1152
1155
|
]
|
|
1153
1156
|
});
|
|
@@ -1155,7 +1158,7 @@ class Spark {
|
|
|
1155
1158
|
pass.dispatchWorkgroups(Math.ceil(width / 8), Math.ceil(height / 8));
|
|
1156
1159
|
pass.end();
|
|
1157
1160
|
}
|
|
1158
|
-
async #generateMipmaps(encoder, texture, mipmapCount, width, height,
|
|
1161
|
+
async #generateMipmaps(encoder, texture, mipmapCount, width, height, colorMode) {
|
|
1159
1162
|
const pass = encoder.beginComputePass();
|
|
1160
1163
|
pass.setPipeline(this.#mipmapPipeline);
|
|
1161
1164
|
let w = width;
|
|
@@ -1163,11 +1166,11 @@ class Spark {
|
|
|
1163
1166
|
for (let i = 0; i < mipmapCount - 1; i++) {
|
|
1164
1167
|
w = Math.max(1, Math.floor(w / 2));
|
|
1165
1168
|
h = Math.max(1, Math.floor(h / 2));
|
|
1166
|
-
this.#generateMipLevel(pass, texture, i, i + 1, w, h,
|
|
1169
|
+
this.#generateMipLevel(pass, texture, i, i + 1, w, h, colorMode);
|
|
1167
1170
|
}
|
|
1168
1171
|
pass.end();
|
|
1169
1172
|
}
|
|
1170
|
-
#generateMipLevel(pass, texture, srcLevel, dstLevel, width, height,
|
|
1173
|
+
#generateMipLevel(pass, texture, srcLevel, dstLevel, width, height, colorMode) {
|
|
1171
1174
|
const bindGroup = this.#device.createBindGroup({
|
|
1172
1175
|
layout: this.#mipmapPipeline.getBindGroupLayout(0),
|
|
1173
1176
|
entries: [
|
|
@@ -1176,7 +1179,7 @@ class Spark {
|
|
|
1176
1179
|
resource: texture.createView({
|
|
1177
1180
|
baseMipLevel: srcLevel,
|
|
1178
1181
|
mipLevelCount: 1,
|
|
1179
|
-
format:
|
|
1182
|
+
format: colorMode == 1 ? "rgba8unorm-srgb" : "rgba8unorm",
|
|
1180
1183
|
usage: GPUTextureUsage.TEXTURE_BINDING
|
|
1181
1184
|
})
|
|
1182
1185
|
},
|
|
@@ -1196,7 +1199,7 @@ class Spark {
|
|
|
1196
1199
|
},
|
|
1197
1200
|
{
|
|
1198
1201
|
binding: 3,
|
|
1199
|
-
resource: { buffer:
|
|
1202
|
+
resource: { buffer: this.#uniformBuffer[colorMode] }
|
|
1200
1203
|
}
|
|
1201
1204
|
]
|
|
1202
1205
|
});
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const utils = "struct Params {\n colorMode: u32,\n};\n\n@group(0) @binding(0) var src : texture_2d<f32>;\n@group(0) @binding(1) var dst : texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var smp: sampler;\n@group(0) @binding(3) var<uniform> params: Params;\n\nfn linear_to_srgb_vec3(c: vec3<f32>) -> vec3<f32> {\n return select(\n 1.055 * pow(c, vec3<f32>(1.0 / 2.4)) - 0.055,\n c * 12.92,\n c <= vec3<f32>(0.0031308)\n );\n}\n\nfn linear_to_srgb_vec4(c: vec4<f32>) -> vec4<f32> {\n return vec4<f32>(linear_to_srgb_vec3(c.xyz), c.w);\n}\n\nfn normalize_vec4(c: vec4<f32>) -> vec4<f32> {\n return vec4<f32>(saturate(0.5 * normalize(2 * c.xyz - 1) + 0.5), c.w);\n}\n\n@compute @workgroup_size(8, 8)\nfn mipmap(@builtin(global_invocation_id) id : vec3<u32>) {\n let dstSize = textureDimensions(dst).xy;\n if (id.x >= dstSize.x || id.y >= dstSize.y) {\n return;\n }\n\n let size_rcp = vec2f(1.0) / vec2f(dstSize);\n\n // We are not doing this yet, but in some cases we want to take 4 samples in order to apply alpha weighting,\n // or to support non multiple of two textures.\n let uv0 = (vec2f(id.xy) + vec2f(0.25)) * size_rcp;\n let uv1 = uv0 + 0.5 * size_rcp;\n\n var color = vec4f(0.0);\n color += textureSampleLevel(src, smp, vec2f(uv0.x, uv0.y), 0);\n color += textureSampleLevel(src, smp, vec2f(uv1.x, uv0.y), 0);\n color += textureSampleLevel(src, smp, vec2f(uv0.x, uv1.y), 0);\n color += textureSampleLevel(src, smp, vec2f(uv1.x, uv1.y), 0);\n color *= 0.25; \n\n // This would be the single sample implementation:\n // let uv = (vec2f(id.xy) + vec2f(0.5)) * size_rcp;\n // var color = textureSampleLevel(src, smp, vec2f(uv.x, uv.y), 0);\n\n if (params.colorMode == 1) {\n color = linear_to_srgb_vec4(color);\n } else if (params.colorMode == 2) {\n color = normalize_vec4(color);\n }\n\n textureStore(dst, id.xy, color);\n}\n\n@compute @workgroup_size(8, 8)\nfn resize(@builtin(global_invocation_id) id : vec3<u32>) {\n let dstSize = textureDimensions(dst).xy;\n if (id.x >= dstSize.x || id.y >= dstSize.y) {\n return;\n }\n\n let uv = (vec2f(id.xy) + vec2f(0.5)) / vec2f(dstSize);\n var color = textureSampleLevel(src, smp, uv, 0);\n\n if (params.colorMode == 1) {\n color = linear_to_srgb_vec4(color);\n } else if (params.colorMode == 2) {\n color = normalize_vec4(color);\n }\n\n textureStore(dst, id.xy, color);\n}\n\n@compute @workgroup_size(8, 8)\nfn flipy(@builtin(global_invocation_id) id : vec3<u32>) {\n let dstSize = textureDimensions(dst).xy;\n if (id.x >= dstSize.x || id.y >= dstSize.y) {\n return;\n }\n\n let uv = (vec2f(f32(id.x), f32(dstSize.y - 1u - id.y)) + vec2f(0.5)) / vec2f(dstSize);\n var color = textureSampleLevel(src, smp, uv, 0);\n\n if (params.colorMode == 1) {\n color = linear_to_srgb_vec4(color);\n } else if (params.colorMode == 2) {\n color = normalize_vec4(color);\n }\n\n textureStore(dst, id.xy, color);\n}\n\n\n@group(0) @binding(1) var<storage, read_write> global_counters: array<atomic<u32>, 3>;\n\nvar<workgroup> local_opaque: atomic<u32>;\nvar<workgroup> local_grayscale: atomic<u32>;\nvar<workgroup> local_invalid_normals: atomic<u32>;\n\n@compute @workgroup_size(8, 8)\nfn detect_channel_count(@builtin(global_invocation_id) global_id: vec3<u32>,\n @builtin(local_invocation_index) local_id: u32) {\n \n if (local_id == 0u) {\n atomicStore(&local_opaque, 1u);\n atomicStore(&local_grayscale, 1u);\n atomicStore(&local_invalid_normals, 0u);\n }\n workgroupBarrier();\n\n let tex_size = textureDimensions(src);\n if (global_id.x < tex_size.x && global_id.y < tex_size.y) {\n\n let color = textureLoad(src, vec2<i32>(global_id.xy), 0);\n\n // Alpha check\n if (color.a < 1.0) {\n atomicStore(&local_opaque, 0u);\n }\n\n // Grayscale check\n if (color.r != color.g || color.g != color.b) {\n atomicStore(&local_grayscale, 0u);\n }\n\n // Normal check\n let n = color.rgb * 2.0 - vec3(1.0);\n let len = length(n);\n\n if (abs(len - 1.0) > 0.2 || n.z < -0.1) {\n atomicAdd(&local_invalid_normals, 1u);\n }\n }\n\n workgroupBarrier();\n\n if (local_id == 0u) {\n // If not opaque, write not-opaque flag.\n if (atomicLoad(&local_opaque) == 0u) {\n atomicStore(&global_counters[0], 1u);\n }\n\n // If not greyscale, write not greyscale flag.\n if (atomicLoad(&local_grayscale) == 0u) {\n atomicStore(&global_counters[1], 1u);\n }\n\n // Add number of texels that are not normal.\n atomicAdd(&global_counters[2], atomicLoad(&local_invalid_normals));\n }\n}\n\n\n// @@ Compute RMSE?\n\n\n";
|
|
2
|
+
export {
|
|
3
|
+
utils as default
|
|
4
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ludicon/spark.js",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"description": "Real-Time GPU Texture Codecs for the Web",
|
|
5
5
|
"main": "dist/spark.esm.js",
|
|
6
6
|
"module": "dist/spark.esm.js",
|
|
@@ -63,11 +63,12 @@
|
|
|
63
63
|
"npm-run-all": "^4.1.5",
|
|
64
64
|
"prettier": "^3.0.0",
|
|
65
65
|
"rimraf": "^5.0.0",
|
|
66
|
+
"rollup-plugin-summary": "^3.0.1",
|
|
66
67
|
"three": "^0.180.0",
|
|
67
68
|
"vite": "^7.0.0"
|
|
68
69
|
},
|
|
69
70
|
"peerDependencies": {
|
|
70
|
-
"three": "
|
|
71
|
+
"three": ">=0.180.0"
|
|
71
72
|
},
|
|
72
73
|
"peerDependenciesMeta": {
|
|
73
74
|
"three": {
|
package/src/three-gltf.js
CHANGED
|
@@ -11,17 +11,17 @@ const Channel = {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
class GLTFSparkPlugin {
|
|
14
|
-
constructor(name, parser, spark) {
|
|
14
|
+
constructor(name, parser, spark, options) {
|
|
15
15
|
this.name = name
|
|
16
16
|
this.parser = parser
|
|
17
17
|
|
|
18
18
|
this.loaders = {
|
|
19
|
-
["rgba"]: new SparkLoader(parser.fileLoader.manager, spark, "rgba"),
|
|
20
|
-
["rgba-srgb"]: new SparkLoader(parser.fileLoader.manager, spark, "rgba", THREE.SRGBColorSpace),
|
|
21
|
-
["rgb"]: new SparkLoader(parser.fileLoader.manager, spark, "rgb"),
|
|
22
|
-
["rgb-srgb"]: new SparkLoader(parser.fileLoader.manager, spark, "rgb", THREE.SRGBColorSpace),
|
|
23
|
-
["rg"]: new SparkLoader(parser.fileLoader.manager, spark, "rg"),
|
|
24
|
-
["r"]: new SparkLoader(parser.fileLoader.manager, spark, "r"),
|
|
19
|
+
["rgba"]: new SparkLoader(parser.fileLoader.manager, spark, options, "rgba"),
|
|
20
|
+
["rgba-srgb"]: new SparkLoader(parser.fileLoader.manager, spark, options, "rgba", THREE.SRGBColorSpace),
|
|
21
|
+
["rgb"]: new SparkLoader(parser.fileLoader.manager, spark, options, "rgb"),
|
|
22
|
+
["rgb-srgb"]: new SparkLoader(parser.fileLoader.manager, spark, options, "rgb", THREE.SRGBColorSpace),
|
|
23
|
+
["rg"]: new SparkLoader(parser.fileLoader.manager, spark, options, "rg"),
|
|
24
|
+
["r"]: new SparkLoader(parser.fileLoader.manager, spark, options, "r"),
|
|
25
25
|
[""]: new THREE.TextureLoader()
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -70,34 +70,58 @@ class GLTFSparkPlugin {
|
|
|
70
70
|
assignTexture(materialDef.pbrMetallicRoughness?.metallicRoughnessTexture?.index, Channel.G | Channel.B)
|
|
71
71
|
|
|
72
72
|
// KHR_materials_anisotropy - RG contains direction, B contains strength.
|
|
73
|
-
|
|
73
|
+
const anisotropyDef = materialDef.extensions?.KHR_materials_anisotropy
|
|
74
|
+
if (anisotropyDef) {
|
|
75
|
+
assignTexture(anisotropyDef.anisotropyTexture?.index, Channel.RGB)
|
|
76
|
+
}
|
|
74
77
|
|
|
75
78
|
// KHR_materials_clearcoat
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
const clearcoatDef = materialDef.extensions?.KHR_materials_clearcoat
|
|
80
|
+
if (clearcoatDef) {
|
|
81
|
+
assignTexture(clearcoatDef.clearcoatTexture?.index, Channel.RGB, THREE.SRGBColorSpace)
|
|
82
|
+
assignTexture(clearcoatDef.clearcoatRoughnessTexture?.index, Channel.R)
|
|
83
|
+
assignTexture(clearcoatDef.clearcoatNormalTexture?.index, Channel.RG, THREE.NoColorSpace, true)
|
|
84
|
+
}
|
|
79
85
|
|
|
80
86
|
// KHR_materials_diffuse_transmission
|
|
81
|
-
|
|
82
|
-
|
|
87
|
+
const diffuseTransmissionDef = materialDef.extensions?.KHR_materials_diffuse_transmission
|
|
88
|
+
if (diffuseTransmissionDef) {
|
|
89
|
+
assignTexture(diffuseTransmissionDef.diffuseTransmissionTexture?.index, Channel.A)
|
|
90
|
+
assignTexture(diffuseTransmissionDef.diffuseTransmissionColorTexture?.index, Channel.RGB, THREE.SRGBColorSpace)
|
|
91
|
+
}
|
|
83
92
|
|
|
84
93
|
// KHR_materials_iridescence
|
|
85
|
-
|
|
86
|
-
|
|
94
|
+
const iridescenceDef = materialDef.extensions?.KHR_materials_iridescence
|
|
95
|
+
if (iridescenceDef) {
|
|
96
|
+
assignTexture(iridescenceDef.iridescenceTexture?.index, Channel.R)
|
|
97
|
+
assignTexture(iridescenceDef.iridescenceThicknessTexture?.index, Channel.G)
|
|
98
|
+
}
|
|
87
99
|
|
|
88
100
|
// KHR_materials_sheen
|
|
89
|
-
|
|
90
|
-
|
|
101
|
+
const sheenDef = materialDef.extensions?.KHR_materials_sheen
|
|
102
|
+
if (sheenDef) {
|
|
103
|
+
assignTexture(sheenDef.sheenColorTexture?.index, Channel.RGB, THREE.SRGBColorSpace)
|
|
104
|
+
assignTexture(sheenDef.sheenRoughnessTextureIndex?.index, Channel.A)
|
|
105
|
+
}
|
|
91
106
|
|
|
92
107
|
// KHR_materials_specular
|
|
93
|
-
|
|
94
|
-
|
|
108
|
+
const specularDef = materialDef.extensions?.KHR_materials_specular
|
|
109
|
+
if (specularDef) {
|
|
110
|
+
assignTexture(specularDef.specularTexture?.index, Channel.RGB, THREE.SRGBColorSpace)
|
|
111
|
+
assignTexture(specularDef.specularColorTexture?.index, Channel.A)
|
|
112
|
+
}
|
|
95
113
|
|
|
96
114
|
// KHR_materials_transmission
|
|
97
|
-
|
|
115
|
+
const transmissionDef = materialDef.extensions?.KHR_materials_transmission
|
|
116
|
+
if (transmissionDef) {
|
|
117
|
+
assignTexture(transmissionDef.transmissionTexture?.index, Channel.R)
|
|
118
|
+
}
|
|
98
119
|
|
|
99
120
|
// KHR_materials_volume
|
|
100
|
-
|
|
121
|
+
const volumeDef = materialDef.extensions?.KHR_materials_volume
|
|
122
|
+
if (volumeDef) {
|
|
123
|
+
assignTexture(volumeDef.thicknessTexture?.index, Channel.G)
|
|
124
|
+
}
|
|
101
125
|
}
|
|
102
126
|
|
|
103
127
|
this.textureColorSpaces = textureColorSpaces
|
|
@@ -134,20 +158,22 @@ class GLTFSparkPlugin {
|
|
|
134
158
|
}
|
|
135
159
|
|
|
136
160
|
class SparkLoader extends THREE.TextureLoader {
|
|
137
|
-
constructor(manager, spark, format, colorSpace = THREE.NoColorSpace) {
|
|
161
|
+
constructor(manager, spark, options, format, colorSpace = THREE.NoColorSpace) {
|
|
138
162
|
super(manager)
|
|
139
163
|
this.spark = spark
|
|
140
164
|
this.format = format
|
|
141
165
|
this.colorSpace = colorSpace
|
|
166
|
+
this.options = options
|
|
142
167
|
}
|
|
143
168
|
|
|
144
169
|
load(url, onLoad, onProgress, onError) {
|
|
145
170
|
const format = this.format
|
|
146
171
|
const srgb = this.colorSpace === THREE.SRGBColorSpace
|
|
147
172
|
const mips = true
|
|
173
|
+
const normal = this.format == "rg"
|
|
148
174
|
|
|
149
175
|
this.spark
|
|
150
|
-
.encodeTexture(url, { format, srgb, mips })
|
|
176
|
+
.encodeTexture(url, { format, srgb, mips, normal, preferLowQuality: this.options.preferLowQuality })
|
|
151
177
|
.then(gpuTexture => {
|
|
152
178
|
const texture = new THREE.ExternalTexture(gpuTexture)
|
|
153
179
|
if (this.format == "rg" && "NormalRGPacking" in THREE) {
|
|
@@ -171,7 +197,7 @@ class SparkLoader extends THREE.TextureLoader {
|
|
|
171
197
|
}
|
|
172
198
|
}
|
|
173
199
|
|
|
174
|
-
export function registerSparkLoader(loader, spark) {
|
|
200
|
+
export function registerSparkLoader(loader, spark, options = {}) {
|
|
175
201
|
// Remove existing webp and avif plugins:
|
|
176
202
|
for (let i = 0; i < loader.pluginCallbacks.length; i++) {
|
|
177
203
|
const plugin = loader.pluginCallbacks[i](loader)
|
|
@@ -183,7 +209,7 @@ export function registerSparkLoader(loader, spark) {
|
|
|
183
209
|
}
|
|
184
210
|
|
|
185
211
|
// Install plugin for standard textures, and textures using webp and avif extensions.
|
|
186
|
-
loader.register(parser => new GLTFSparkPlugin("spark", parser, spark))
|
|
187
|
-
loader.register(parser => new GLTFSparkPlugin("EXT_texture_webp", parser, spark))
|
|
188
|
-
loader.register(parser => new GLTFSparkPlugin("EXT_texture_avif", parser, spark))
|
|
212
|
+
loader.register(parser => new GLTFSparkPlugin("spark", parser, spark, options))
|
|
213
|
+
loader.register(parser => new GLTFSparkPlugin("EXT_texture_webp", parser, spark, options))
|
|
214
|
+
loader.register(parser => new GLTFSparkPlugin("EXT_texture_avif", parser, spark, options))
|
|
189
215
|
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const spark_bc3_rgba = "enable f16;alias RTArr=array<vec4u>;struct _1{_0:RTArr,}@binding(1) @group(0) var _2:sampler;@binding(0) @group(0) var _3:texture_2d<f32>;var<private>x_2795:vec3u;var<private>x_2801:vec3u;@binding(2) @group(0) var<storage,read_write>x_2891:_1;const _4=vec2i(2i,0i);const _5=vec2i(0i,2i);const _6=vec2i(2i);const _7=array<f32,8u>(0.0f,0.140625f,0.28125f,0.421875f,0.578125f,0.71875f,0.859375f,1.0f);const _8=vec3h(1.0h);const _9=vec3h(0.85986328125h,1.7099609375h,0.429931640625h);const _a=array<u32,256u>(0u,0u,134283264u,134283264u,2049u,2049u,2049u,134285313u,134285313u,134285313u,268568577u,268568577u,134287362u,134287362u,134287362u,268570626u,268570626u,268570626u,402853890u,402853890u,402853890u,268572675u,537137154u,402855939u,402855939u,402855939u,537139203u,537139203u,537139203u,402857988u,402857988u,402857988u,537141252u,537141252u,537141252u,402860037u,671424516u,537143301u,537143301u,537143301u,671426565u,671426565u,671426565u,805709829u,805709829u,671428614u,671428614u,671428614u,805711878u,805711878u,805711878u,939995142u,939995142u,939995142u,805713927u,1074278406u,939997191u,939997191u,939997191u,1074280455u,1074280455u,1074280455u,939999240u,939999240u,939999240u,1074282504u,1074282504u,1074282504u,940001289u,1208565768u,1074284553u,1074284553u,1074284553u,1208567817u,1208567817u,1208567817u,1342851081u,1342851081u,1208569866u,1208569866u,1208569866u,1342853130u,1342853130u,1342853130u,1477136394u,1477136394u,1477136394u,1342855179u,1611419658u,1477138443u,1477138443u,1477138443u,1611421707u,1611421707u,1611421707u,1477140492u,1477140492u,1477140492u,1611423756u,1611423756u,1611423756u,1477142541u,1745707020u,1611425805u,1611425805u,1611425805u,1745709069u,1745709069u,1745709069u,1879992333u,1879992333u,1745711118u,1745711118u,1745711118u,1879994382u,1879994382u,1879994382u,2014277646u,2014277646u,2014277646u,1879996431u,2148560910u,2014279695u,2014279695u,2014279695u,2148562959u,2148562959u,2148562959u,2014281744u,2014281744u,2014281744u,2148565008u,2148565008u,2148565008u,2014283793u,2282848272u,2148567057u,2148567057u,2148567057u,2282850321u,2282850321u,2282850321u,2417133585u,2417133585u,2282852370u,2282852370u,2282852370u,2417135634u,2417135634u,2417135634u,2551418898u,2551418898u,2551418898u,2417137683u,2685702162u,2551420947u,2551420947u,2551420947u,2685704211u,2685704211u,2685704211u,2551422996u,2551422996u,2551422996u,2685706260u,2685706260u,2685706260u,2551425045u,2819989524u,2685708309u,2685708309u,2685708309u,2819991573u,2819991573u,2819991573u,2954274837u,2954274837u,2819993622u,2819993622u,2819993622u,2954276886u,2954276886u,2954276886u,3088560150u,3088560150u,3088560150u,2954278935u,3222843414u,3088562199u,3088562199u,3088562199u,3222845463u,3222845463u,3222845463u,3088564248u,3088564248u,3088564248u,3222847512u,3222847512u,3222847512u,3088566297u,3357130776u,3222849561u,3222849561u,3222849561u,3357132825u,3357132825u,3357132825u,3491416089u,3491416089u,3357134874u,3357134874u,3357134874u,3491418138u,3491418138u,3491418138u,3625701402u,3625701402u,3625701402u,3491420187u,3759984666u,3625703451u,3625703451u,3625703451u,3759986715u,3759986715u,3759986715u,3625705500u,3625705500u,3625705500u,3759988764u,3759988764u,3759988764u,3625707549u,3894272028u,3759990813u,3759990813u,3759990813u,3894274077u,3894274077u,3894274077u,4028557341u,4028557341u,3894276126u,3894276126u,3894276126u,4028559390u,4028559390u,4028559390u,4162842654u,4162842654u,4162842654u,4028561439u,4028561439u,4162844703u,4162844703u);fn _b(){var _c:array<u32,256u>;var _d:array<u32,256u>;var _e:array<u32,256u>;var _f:array<f32,8u>;var _g:array<f32,8u>;var _h:bool;var _i:bool;var _j:f16;var _k:f16;var _l:f16;var _m:f16;var _n:f16;var _o:f16;var _p:vec2u;var _q:vec2u;var _r:f16;var _s:f16;var _t:bool;var _u:f16;var _v:f16;var _w:bool;var _x:vec2u;var _y:vec2u;var _z:vec2u;var _10:vec2u;var _11:vec2u;switch(0u){default:{let _12=bitcast<vec2u>(vec2i(textureDimensions(_3,0i)));let _13=((_12.x+3u)/4u);let _14=x_2795;let _15=x_2795.xy;let _16=x_2795.x;let _17=(_16>=_13);_i=_17;if(!(_17)){_h=(_14.y>=((_12.y+3u)/4u));_i=_h;}if(_i){break;}let _18=(vec2f(1.0f)/vec2f(vec2i(textureDimensions(_3,0i))));let _19=((vec2f(bitcast<vec2i>((_15*vec2u(4u))))*_18)+_18);let _1a=vec4h(textureGather(0i,_3,_2,_19,vec2i()));let _1b=vec4h(textureGather(0i,_3,_2,_19,_4));let _1c=vec4h(textureGather(0i,_3,_2,_19,_5));let _1d=vec4h(textureGather(0i,_3,_2,_19,_6));let _1e=vec4h(textureGather(1i,_3,_2,_19,vec2i()));let _1f=vec4h(textureGather(1i,_3,_2,_19,_4));let _1g=vec4h(textureGather(1i,_3,_2,_19,_5));let _1h=vec4h(textureGather(1i,_3,_2,_19,_6));let _1i=vec4h(textureGather(2i,_3,_2,_19,vec2i()));let _1j=vec4h(textureGather(2i,_3,_2,_19,_4));let _1k=vec4h(textureGather(2i,_3,_2,_19,_5));let _1l=vec4h(textureGather(2i,_3,_2,_19,_6));let _1m=vec4h(textureGather(3i,_3,_2,_19,vec2i()));let _1n=vec4h(textureGather(3i,_3,_2,_19,_4));let _1o=vec4h(textureGather(3i,_3,_2,_19,_5));let _1p=vec4h(textureGather(3i,_3,_2,_19,_6));let _1q=_1m.w;let _1r=_1m.z;let _1s=_1n.w;let _1t=_1n.z;let _1u=_1m.x;let _1v=_1m.y;let _1w=_1n.x;let _1x=_1n.y;let _1y=_1o.w;let _1z=_1o.z;let _20=_1p.w;let _21=_1p.z;let _22=_1o.x;let _23=_1o.y;let _24=_1p.x;let _25=_1p.y;let _26=vec4h(_1a.w,_1e.w,_1i.w,_1q).xyz;let _27=vec4h(_1a.z,_1e.z,_1i.z,_1r).xyz;let _28=vec4h(_1b.w,_1f.w,_1j.w,_1s).xyz;let _29=vec4h(_1b.z,_1f.z,_1j.z,_1t).xyz;let _2a=vec4h(_1a.x,_1e.x,_1i.x,_1u).xyz;let _2b=vec4h(_1a.y,_1e.y,_1i.y,_1v).xyz;let _2c=vec4h(_1b.x,_1f.x,_1j.x,_1w).xyz;let _2d=vec4h(_1b.y,_1f.y,_1j.y,_1x).xyz;let _2e=vec4h(_1c.w,_1g.w,_1k.w,_1y).xyz;let _2f=vec4h(_1c.z,_1g.z,_1k.z,_1z).xyz;let _2g=vec4h(_1d.w,_1h.w,_1l.w,_20).xyz;let _2h=vec4h(_1d.z,_1h.z,_1l.z,_21).xyz;let _2i=vec4h(_1c.x,_1g.x,_1k.x,_22).xyz;let _2j=vec4h(_1c.y,_1g.y,_1k.y,_23).xyz;let _2k=vec4h(_1d.x,_1h.x,_1l.x,_24).xyz;let _2l=vec4h(_1d.y,_1h.y,_1l.y,_25).xyz;let _2m=min(min(min(min(min(min(min(min(min(min(min(min(min(min(min(min(1.0h,_1q),_1r),_1s),_1t),_1u),_1v),_1w),_1x),_1y),_1z),_20),_21),_22),_23),_24),_25);let _2n=max(max(max(max(max(max(max(max(max(max(max(max(max(max(max(max(0.0h,_1q),_1r),_1s),_1t),_1u),_1v),_1w),_1x),_1y),_1z),_20),_21),_22),_23),_24),_25);let _2o=(_2n-_2m);let _2p=(_2o*0.03125h);_k=_2p;if((_2o<0.0625h)){_j=max(0.0h,((2.0h*_2p)-0.0625h));_k=_j;}_m=_2m;if((_2m>0.0h)){_l=(_2m+_k);_m=_l;}_o=_2n;if((_m<1.0h)){_n=(_2n-_k);_o=_n;}let _2q=trunc(((_o*255.0h)+0.5h));let _2r=trunc(((_m*255.0h)+0.5h));let _2s=select(_2r,127.0h,((_2r==128.0h)|(_2r==126.0h)));let _2t=select(_2q,127.0h,((_2q==128.0h)|(_2q==126.0h)));switch(0u){default:{if((_2t==_2s)){_q=vec2u();break;}let _2u=(1.0h/(_2s-_2t));let _2v=(_2t*-(_2u));let _2w=(_2u*255.0h);let _2x=(0u|(u32(((clamp(((_1y*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(0i)));_p=vec2u(((((((((0u|(u32(((clamp(((_1q*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(0i)))|(u32(((clamp(((_1r*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(3i)))|(u32(((clamp(((_1s*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(6i)))|(u32(((clamp(((_1t*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(9i)))|(u32(((clamp(((_1u*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(12i)))|(u32(((clamp(((_1v*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(15i)))|(u32(((clamp(((_1w*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(18i)))|(u32(((clamp(((_1x*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(21i))),_2x);_p.y=(((((((_2x|(u32(((clamp(((_1z*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(3i)))|(u32(((clamp(((_20*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(6i)))|(u32(((clamp(((_21*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(9i)))|(u32(((clamp(((_22*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(12i)))|(u32(((clamp(((_23*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(15i)))|(u32(((clamp(((_24*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(18i)))|(u32(((clamp(((_25*_2w)+_2v),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(21i)));_q=_p;}}switch(0u){default:{let _2y=_q.x;_f=_7;let _2z=_f[((_2y>>bitcast<u32>(0i))&7u)];let _30=(1.0f-_2z);let _31=f32(_1q);_f=_7;let _32=_f[((_2y>>bitcast<u32>(3i))&7u)];let _33=(1.0f-_32);let _34=f32(_1r);_f=_7;let _35=_f[((_2y>>bitcast<u32>(6i))&7u)];let _36=(1.0f-_35);let _37=f32(_1s);_f=_7;let _38=_f[((_2y>>bitcast<u32>(9i))&7u)];let _39=(1.0f-_38);let _3a=f32(_1t);_f=_7;let _3b=_f[((_2y>>bitcast<u32>(12i))&7u)];let _3c=(1.0f-_3b);let _3d=f32(_1u);_f=_7;let _3e=_f[((_2y>>bitcast<u32>(15i))&7u)];let _3f=(1.0f-_3e);let _3g=f32(_1v);_f=_7;let _3h=_f[((_2y>>bitcast<u32>(18i))&7u)];let _3i=(1.0f-_3h);let _3j=f32(_1w);_f=_7;let _3k=_f[((_2y>>bitcast<u32>(21i))&7u)];let _3l=(1.0f-_3k);let _3m=f32(_1x);let _3n=_q.y;_g=_7;let _3o=_g[((_3n>>bitcast<u32>(0i))&7u)];let _3p=(1.0f-_3o);let _3q=f32(_1y);_g=_7;let _3r=_g[((_3n>>bitcast<u32>(3i))&7u)];let _3s=(1.0f-_3r);let _3t=f32(_1z);_g=_7;let _3u=_g[((_3n>>bitcast<u32>(6i))&7u)];let _3v=(1.0f-_3u);let _3w=f32(_20);_g=_7;let _3x=_g[((_3n>>bitcast<u32>(9i))&7u)];let _3y=(1.0f-_3x);let _3z=f32(_21);_g=_7;let _40=_g[((_3n>>bitcast<u32>(12i))&7u)];let _41=(1.0f-_40);let _42=f32(_22);_g=_7;let _43=_g[((_3n>>bitcast<u32>(15i))&7u)];let _44=(1.0f-_43);let _45=f32(_23);_g=_7;let _46=_g[((_3n>>bitcast<u32>(18i))&7u)];let _47=(1.0f-_46);let _48=f32(_24);_g=_7;let _49=_g[((_3n>>bitcast<u32>(21i))&7u)];let _4a=(1.0f-_49);let _4b=((((((((((((((((_30*_30)+(_33*_33))+(_36*_36))+(_39*_39))+(_3c*_3c))+(_3f*_3f))+(_3i*_3i))+(_3l*_3l))+(_3p*_3p))+(_3s*_3s))+(_3v*_3v))+(_3y*_3y))+(_41*_41))+(_44*_44))+(_47*_47))+(_4a*_4a));let _4c=((((((((((((((((_2z*_2z)+(_32*_32))+(_35*_35))+(_38*_38))+(_3b*_3b))+(_3e*_3e))+(_3h*_3h))+(_3k*_3k))+(_3o*_3o))+(_3r*_3r))+(_3u*_3u))+(_3x*_3x))+(_40*_40))+(_43*_43))+(_46*_46))+(_49*_49));let _4d=((((((((((((((((_30*_2z)+(_33*_32))+(_36*_35))+(_39*_38))+(_3c*_3b))+(_3f*_3e))+(_3i*_3h))+(_3l*_3k))+(_3p*_3o))+(_3s*_3r))+(_3v*_3u))+(_3y*_3x))+(_41*_40))+(_44*_43))+(_47*_46))+(_4a*_49));let _4e=f32(_25);let _4f=((((((((((((((((_30*_31)+(_33*_34))+(_36*_37))+(_39*_3a))+(_3c*_3d))+(_3f*_3g))+(_3i*_3j))+(_3l*_3m))+(_3p*_3q))+(_3s*_3t))+(_3v*_3w))+(_3y*_3z))+(_41*_42))+(_44*_45))+(_47*_48))+(_4a*_4e));let _4g=((((((((((((((((_2z*_31)+(_32*_34))+(_35*_37))+(_38*_3a))+(_3b*_3d))+(_3e*_3g))+(_3h*_3j))+(_3k*_3m))+(_3o*_3q))+(_3r*_3t))+(_3u*_3w))+(_3x*_3z))+(_40*_42))+(_43*_45))+(_46*_48))+(_49*_4e));let _4h=((_4b*_4c)-(_4d*_4d));if((abs(_4h)<0.00009999999747378752f)){_u=_2s;_v=_2t;_w=false;break;}let _4i=(1.0f/_4h);let _4j=trunc(((f16(clamp((((_4f*_4c)-(_4g*_4d))*_4i),0.0f,1.0f))*255.0h)+0.5h));let _4k=trunc(((f16(clamp((((_4g*_4b)-(_4f*_4d))*_4i),0.0f,1.0f))*255.0h)+0.5h));_r=select(_4k,127.0h,((_4k==128.0h)|(_4k==126.0h)));_s=select(_4j,127.0h,((_4j==128.0h)|(_4j==126.0h)));_t=(!((_s==_2t))|!((_r==_2s)));_u=_r;_v=_s;_w=_t;}}var _4l:vec2u;_y=_q;if(_w){switch(0u){default:{if((_v==_u)){_x=vec2u();break;}let _4m=(1.0h/(_u-_v));let _4n=(_v*-(_4m));let _4o=(_4m*255.0h);let _4p=(0u|(u32(((clamp(((_1y*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(0i)));_4l=vec2u(((((((((0u|(u32(((clamp(((_1q*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(0i)))|(u32(((clamp(((_1r*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(3i)))|(u32(((clamp(((_1s*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(6i)))|(u32(((clamp(((_1t*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(9i)))|(u32(((clamp(((_1u*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(12i)))|(u32(((clamp(((_1v*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(15i)))|(u32(((clamp(((_1w*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(18i)))|(u32(((clamp(((_1x*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(21i))),_4p);_4l.y=(((((((_4p|(u32(((clamp(((_1z*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(3i)))|(u32(((clamp(((_20*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(6i)))|(u32(((clamp(((_21*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(9i)))|(u32(((clamp(((_22*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(12i)))|(u32(((clamp(((_23*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(15i)))|(u32(((clamp(((_24*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(18i)))|(u32(((clamp(((_25*_4o)+_4n),0.0h,1.0h)*7.0h)+0.5h))<<bitcast<u32>(21i)));_x=_4l;}}_y=_x;}var _4q:f16;var _4r:f16;var _4s:f16;var _4t:f16;var _4u:vec3h;var _4v:vec3h;var _4w:vec3h;var _4x:vec3h;var _4y:bool;var _4z:u32;var _50:u32;var _51:u32;var _52:u32;let _53=_y.x;let _54=(((_53&7190235u)+2396745u)^(_53&9586980u));let _55=(_54^(((19173960u-(_54&14380470u))&19173960u)>>bitcast<u32>(3i)));let _56=_y.y;let _57=(((_56&7190235u)+2396745u)^(_56&9586980u));let _58=((u32(_v)|(u32(_u)<<bitcast<u32>(8i)))|(_55<<bitcast<u32>(16i)));let _59=((_55>>bitcast<u32>(16i))|((_57^(((19173960u-(_57&14380470u))&19173960u)>>bitcast<u32>(3i)))<<bitcast<u32>(8i)));switch(0u){default:{let _5a=(((((((((((((((_26+_27)+_28)+_29)+_2a)+_2b)+_2c)+_2d)+_2e)+_2f)+_2g)+_2h)+_2i)+_2j)+_2k)+_2l);let _5b=((_26*16.0h)-_5a);let _5c=_5b.x;let _5d=_5b.y;let _5e=_5b.z;let _5f=((_27*16.0h)-_5a);let _5g=_5f.x;let _5h=_5f.y;let _5i=_5f.z;let _5j=((_28*16.0h)-_5a);let _5k=_5j.x;let _5l=_5j.y;let _5m=_5j.z;let _5n=((_29*16.0h)-_5a);let _5o=_5n.x;let _5p=_5n.y;let _5q=_5n.z;let _5r=((_2a*16.0h)-_5a);let _5s=_5r.x;let _5t=_5r.y;let _5u=_5r.z;let _5v=((_2b*16.0h)-_5a);let _5w=_5v.x;let _5x=_5v.y;let _5y=_5v.z;let _5z=((_2c*16.0h)-_5a);let _60=_5z.x;let _61=_5z.y;let _62=_5z.z;let _63=((_2d*16.0h)-_5a);let _64=_63.x;let _65=_63.y;let _66=_63.z;let _67=((_2e*16.0h)-_5a);let _68=_67.x;let _69=_67.y;let _6a=_67.z;let _6b=((_2f*16.0h)-_5a);let _6c=_6b.x;let _6d=_6b.y;let _6e=_6b.z;let _6f=((_2g*16.0h)-_5a);let _6g=_6f.x;let _6h=_6f.y;let _6i=_6f.z;let _6j=((_2h*16.0h)-_5a);let _6k=_6j.x;let _6l=_6j.y;let _6m=_6j.z;let _6n=((_2i*16.0h)-_5a);let _6o=_6n.x;let _6p=_6n.y;let _6q=_6n.z;let _6r=((_2j*16.0h)-_5a);let _6s=_6r.x;let _6t=_6r.y;let _6u=_6r.z;let _6v=((_2k*16.0h)-_5a);let _6w=_6v.x;let _6x=_6v.y;let _6y=_6v.z;let _6z=((_2l*16.0h)-_5a);let _70=_6z.x;let _71=((((((((((((((((_5c*_5c)+(_5g*_5g))+(_5k*_5k))+(_5o*_5o))+(_5s*_5s))+(_5w*_5w))+(_60*_60))+(_64*_64))+(_68*_68))+(_6c*_6c))+(_6g*_6g))+(_6k*_6k))+(_6o*_6o))+(_6s*_6s))+(_6w*_6w))+(_70*_70));let _72=_6z.y;let _73=_6z.z;let _74=((((((((((((((((_5d*_5d)+(_5h*_5h))+(_5l*_5l))+(_5p*_5p))+(_5t*_5t))+(_5x*_5x))+(_61*_61))+(_65*_65))+(_69*_69))+(_6d*_6d))+(_6h*_6h))+(_6l*_6l))+(_6p*_6p))+(_6t*_6t))+(_6x*_6x))+(_72*_72));let _75=((((((((((((((((_5e*_5e)+(_5i*_5i))+(_5m*_5m))+(_5q*_5q))+(_5u*_5u))+(_5y*_5y))+(_62*_62))+(_66*_66))+(_6a*_6a))+(_6e*_6e))+(_6i*_6i))+(_6m*_6m))+(_6q*_6q))+(_6u*_6u))+(_6y*_6y))+(_73*_73));let _76=select(1.0h,0.015625h,(max(max(_71,_74),_75)>64.0h));let _77=(_71*_76);let _78=(((((((((((((((((_5c*_5d)+(_5g*_5h))+(_5k*_5l))+(_5o*_5p))+(_5s*_5t))+(_5w*_5x))+(_60*_61))+(_64*_65))+(_68*_69))+(_6c*_6d))+(_6g*_6h))+(_6k*_6l))+(_6o*_6p))+(_6s*_6t))+(_6w*_6x))+(_70*_72))*_76);let _79=(((((((((((((((((_5c*_5e)+(_5g*_5i))+(_5k*_5m))+(_5o*_5q))+(_5s*_5u))+(_5w*_5y))+(_60*_62))+(_64*_66))+(_68*_6a))+(_6c*_6e))+(_6g*_6i))+(_6k*_6m))+(_6o*_6q))+(_6s*_6u))+(_6w*_6y))+(_70*_73))*_76);let _7a=(_74*_76);let _7b=(((((((((((((((((_5d*_5e)+(_5h*_5i))+(_5l*_5m))+(_5p*_5q))+(_5t*_5u))+(_5x*_5y))+(_61*_62))+(_65*_66))+(_69*_6a))+(_6d*_6e))+(_6h*_6i))+(_6l*_6m))+(_6p*_6q))+(_6t*_6u))+(_6x*_6y))+(_72*_73))*_76);let _7c=(_75*_76);let _7d=(vec3h(_77,_7a,_7c)+vec3h(0.0001220703125h));let _7e=vec3h((vec3f(_7d)*(1.0f/f32(max(max(_7d.x,_7d.y),_7d.z)))));let _7f=_7e.x;_4r=_7f;if((_78<0.0h)){_4q=-(_7f);_4r=_4q;}let _7g=_7e.z;_4t=_7g;if((_7b<0.0h)){_4s=-(_7g);_4t=_4s;}let _7h=_7e.y;let _7i=(((_4r*_77)+(_7h*_78))+(_4t*_79));let _7j=(((_4r*_78)+(_7h*_7a))+(_4t*_7b));let _7k=(((_4r*_79)+(_7h*_7b))+(_4t*_7c));let _7l=max(max(abs(_7i),abs(_7j)),abs(_7k));let _7m=vec3h((vec3f(f32(_7i),f32(_7j),f32(_7k))*(1.0f/f32(select(_7l,1.0h,(_7l==0.0h))))));let _7n=_7m.x;let _7o=_7m.y;let _7p=_7m.z;let _7q=(((_7n*_77)+(_7o*_78))+(_7p*_79));let _7r=(((_7n*_78)+(_7o*_7a))+(_7p*_7b));let _7s=(((_7n*_79)+(_7o*_7b))+(_7p*_7c));let _7t=max(max(abs(_7q),abs(_7r)),abs(_7s));let _7u=(_7t==0.0h);let _7v=select(vec3h((vec3f(f32(_7q),f32(_7r),f32(_7s))*(1.0f/f32(select(_7t,1.0h,_7u))))),_8,vec3<bool>(_7u));let _7w=(_5a*0.0625h);let _7x=(_7v*_9);let _7y=(1.0h/dot(_7x,_7x));let _7z=((_7x*_7y)*_9);let _80=dot(_26,_7z);let _81=dot(_27,_7z);let _82=(_81<_80);let _83=select(1u,0u,_82);let _84=select(_80,_81,_82);let _85=(_81>_80);let _86=select(1u,0u,_85);let _87=select(_80,_81,_85);let _88=dot(_28,_7z);let _89=(_88<_84);let _8a=select(select(_83,(_83+1u),(_81==_84)),0u,_89);let _8b=select(_84,_88,_89);let _8c=(_88>_87);let _8d=select(select(_86,(_86+1u),(_81==_87)),0u,_8c);let _8e=select(_87,_88,_8c);let _8f=dot(_29,_7z);let _8g=(_8f<_8b);let _8h=select(select(_8a,(_8a+1u),(_88==_8b)),0u,_8g);let _8i=select(_8b,_8f,_8g);let _8j=(_8f>_8e);let _8k=select(select(_8d,(_8d+1u),(_88==_8e)),0u,_8j);let _8l=select(_8e,_8f,_8j);let _8m=dot(_2a,_7z);let _8n=(_8m<_8i);let _8o=select(select(_8h,(_8h+1u),(_8f==_8i)),0u,_8n);let _8p=select(_8i,_8m,_8n);let _8q=(_8m>_8l);let _8r=select(select(_8k,(_8k+1u),(_8f==_8l)),0u,_8q);let _8s=select(_8l,_8m,_8q);let _8t=dot(_2b,_7z);let _8u=(_8t<_8p);let _8v=select(select(_8o,(_8o+1u),(_8m==_8p)),0u,_8u);let _8w=select(_8p,_8t,_8u);let _8x=(_8t>_8s);let _8y=select(select(_8r,(_8r+1u),(_8m==_8s)),0u,_8x);let _8z=select(_8s,_8t,_8x);let _90=dot(_2c,_7z);let _91=(_90<_8w);let _92=select(select(_8v,(_8v+1u),(_8t==_8w)),0u,_91);let _93=select(_8w,_90,_91);let _94=(_90>_8z);let _95=select(select(_8y,(_8y+1u),(_8t==_8z)),0u,_94);let _96=select(_8z,_90,_94);let _97=dot(_2d,_7z);let _98=(_97<_93);let _99=select(select(_92,(_92+1u),(_90==_93)),0u,_98);let _9a=select(_93,_97,_98);let _9b=(_97>_96);let _9c=select(select(_95,(_95+1u),(_90==_96)),0u,_9b);let _9d=select(_96,_97,_9b);let _9e=dot(_2e,_7z);let _9f=(_9e<_9a);let _9g=select(select(_99,(_99+1u),(_97==_9a)),0u,_9f);let _9h=select(_9a,_9e,_9f);let _9i=(_9e>_9d);let _9j=select(select(_9c,(_9c+1u),(_97==_9d)),0u,_9i);let _9k=select(_9d,_9e,_9i);let _9l=dot(_2f,_7z);let _9m=(_9l<_9h);let _9n=select(select(_9g,(_9g+1u),(_9e==_9h)),0u,_9m);let _9o=select(_9h,_9l,_9m);let _9p=(_9l>_9k);let _9q=select(select(_9j,(_9j+1u),(_9e==_9k)),0u,_9p);let _9r=select(_9k,_9l,_9p);let _9s=dot(_2g,_7z);let _9t=(_9s<_9o);let _9u=select(select(_9n,(_9n+1u),(_9l==_9o)),0u,_9t);let _9v=select(_9o,_9s,_9t);let _9w=(_9s>_9r);let _9x=select(select(_9q,(_9q+1u),(_9l==_9r)),0u,_9w);let _9y=select(_9r,_9s,_9w);let _9z=dot(_2h,_7z);let _a0=(_9z<_9v);let _a1=select(select(_9u,(_9u+1u),(_9s==_9v)),0u,_a0);let _a2=select(_9v,_9z,_a0);let _a3=(_9z>_9y);let _a4=select(select(_9x,(_9x+1u),(_9s==_9y)),0u,_a3);let _a5=select(_9y,_9z,_a3);let _a6=dot(_2i,_7z);let _a7=(_a6<_a2);let _a8=select(select(_a1,(_a1+1u),(_9z==_a2)),0u,_a7);let _a9=select(_a2,_a6,_a7);let _aa=(_a6>_a5);let _ab=select(select(_a4,(_a4+1u),(_9z==_a5)),0u,_aa);let _ac=select(_a5,_a6,_aa);let _ad=dot(_2j,_7z);let _ae=(_ad<_a9);let _af=select(select(_a8,(_a8+1u),(_a6==_a9)),0u,_ae);let _ag=select(_a9,_ad,_ae);let _ah=(_ad>_ac);let _ai=select(select(_ab,(_ab+1u),(_a6==_ac)),0u,_ah);let _aj=select(_ac,_ad,_ah);let _ak=dot(_2k,_7z);let _al=(_ak<_ag);let _am=select(select(_af,(_af+1u),(_ad==_ag)),0u,_al);let _an=select(_ag,_ak,_al);let _ao=(_ak>_aj);let _ap=select(select(_ai,(_ai+1u),(_ad==_aj)),0u,_ao);let _aq=select(_aj,_ak,_ao);let _ar=dot(_2l,_7z);let _as=(_ar<_an);let _at=select(select(_am,(_am+1u),(_ak==_an)),0u,_as);let _au=select(_an,_ar,_as);let _av=(_ar>_aq);let _aw=select(select(_ap,(_ap+1u),(_ak==_aq)),0u,_av);let _ax=select(_aq,_ar,_av);let _ay=dot(_7w,_7z);let _az=(_au-_ay);let _b0=(_ax-_ay);let _b1=(((_b0-_az)*0.0625h)*(1.0h-clamp((f16(((select(_at,(_at+1u),(_ar==_au))+select(_aw,(_aw+1u),(_ar==_ax)))-2u))*0.0714111328125h),0.0h,1.0h)));let _b2=(_az+_b1);let _b3=(_b0-_b1);let _b4=max(0.0h,(((((0.6357421875h*0.03125h)*_7y)+(0.36376953125h*0.03125h))-(_b3-_b2))*0.5h));let _b5=clamp(((_7v*(_b2-_b4))+_7w),vec3h(),_8);let _b6=clamp(((_7v*(_b3+_b4))+_7w),vec3h(),_8);let _b7=_b5.x;let _b8=(trunc((_b7*31.0h))*8.25h);let _b9=trunc(_b8);let _ba=min(255.0h,trunc((_b8+8.25h)));let _bb=_b5.y;let _bc=(trunc((_bb*63.0h))*4.0625h);let _bd=min(255.0h,trunc(_bc));let _be=min(255.0h,trunc((_bc+4.0625h)));let _bf=_b5.z;let _bg=(trunc((_bf*31.0h))*8.25h);let _bh=trunc(_bg);let _bi=min(255.0h,trunc((_bg+8.25h)));let _bj=vec3h(select(_b9,_ba,((255.0h*_b7)>(0.5h*(_b9+_ba)))),select(_bd,_be,((255.0h*_bb)>(0.5h*(_bd+_be)))),select(_bh,_bi,((255.0h*_bf)>(0.5h*(_bh+_bi)))));let _bk=_b6.x;let _bl=(trunc((_bk*31.0h))*8.25h);let _bm=trunc(_bl);let _bn=min(255.0h,trunc((_bl+8.25h)));let _bo=_b6.y;let _bp=(trunc((_bo*63.0h))*4.0625h);let _bq=min(255.0h,trunc(_bp));let _br=min(255.0h,trunc((_bp+4.0625h)));let _bs=_b6.z;let _bt=(trunc((_bs*31.0h))*8.25h);let _bu=trunc(_bt);let _bv=min(255.0h,trunc((_bt+8.25h)));let _bw=vec3h(select(_bm,_bn,((255.0h*_bk)>(0.5h*(_bm+_bn)))),select(_bq,_br,((255.0h*_bo)>(0.5h*(_bq+_br)))),select(_bu,_bv,((255.0h*_bs)>(0.5h*(_bu+_bv)))));let _bx=(((_bw-_bj)*_9)*0.0039215087890625h);let _by=((_bx*(1.0h/dot(_bx,_bx)))*_9);let _bz=(dot(_bj,_by)*0.0039215087890625h);let _c0=((((((((((((((((0u|(u32(((3.0h*clamp((dot(_26,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(0i)))|(u32(((3.0h*clamp((dot(_27,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(2i)))|(u32(((3.0h*clamp((dot(_28,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(4i)))|(u32(((3.0h*clamp((dot(_29,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(6i)))|(u32(((3.0h*clamp((dot(_2a,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(8i)))|(u32(((3.0h*clamp((dot(_2b,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(10i)))|(u32(((3.0h*clamp((dot(_2c,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(12i)))|(u32(((3.0h*clamp((dot(_2d,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(14i)))|(u32(((3.0h*clamp((dot(_2e,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(16i)))|(u32(((3.0h*clamp((dot(_2f,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(18i)))|(u32(((3.0h*clamp((dot(_2g,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(20i)))|(u32(((3.0h*clamp((dot(_2h,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(22i)))|(u32(((3.0h*clamp((dot(_2i,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(24i)))|(u32(((3.0h*clamp((dot(_2j,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(26i)))|(u32(((3.0h*clamp((dot(_2k,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(28i)))|(u32(((3.0h*clamp((dot(_2l,_by)-_bz),0.0h,1.0h))+0.5h))<<bitcast<u32>(30i)));switch(0u){default:{if(((_c0^(_c0<<bitcast<u32>(2i)))<4u)){_4w=_bw;_4x=_bj;_4y=false;break;}let _c1=(_c0>>bitcast<u32>(1i));let _c2=f16(bitcast<i32>(countOneBits(((1431655765u&~(_c1))&_c0))));let _c3=(1431655765u&_c1);let _c4=f16(bitcast<i32>(countOneBits((_c3&~(_c0)))));let _c5=f16(bitcast<i32>(countOneBits((_c3&_c0))));let _c6=(((3.0h*_c5)+(2.0h*_c4))+_c2);let _c7=(((9.0h*_c5)+(4.0h*_c4))+_c2);let _c8=((144.0h-(6.0h*_c6))+_c7);let _c9=((3.0h*_c6)-_c7);let _ca=(((((((((((((((((_26*f16(((_c0>>bitcast<u32>(0i))&3u)))+(_27*f16(((_c0>>bitcast<u32>(2i))&3u))))+(_28*f16(((_c0>>bitcast<u32>(4i))&3u))))+(_29*f16(((_c0>>bitcast<u32>(6i))&3u))))+(_2a*f16(((_c0>>bitcast<u32>(8i))&3u))))+(_2b*f16(((_c0>>bitcast<u32>(10i))&3u))))+(_2c*f16(((_c0>>bitcast<u32>(12i))&3u))))+(_2d*f16(((_c0>>bitcast<u32>(14i))&3u))))+(_2e*f16(((_c0>>bitcast<u32>(16i))&3u))))+(_2f*f16(((_c0>>bitcast<u32>(18i))&3u))))+(_2g*f16(((_c0>>bitcast<u32>(20i))&3u))))+(_2h*f16(((_c0>>bitcast<u32>(22i))&3u))))+(_2i*f16(((_c0>>bitcast<u32>(24i))&3u))))+(_2j*f16(((_c0>>bitcast<u32>(26i))&3u))))+(_2k*f16(((_c0>>bitcast<u32>(28i))&3u))))+(_2l*f16(((_c0>>bitcast<u32>(30i))&3u))))*3.0h);let _cb=((_5a*9.0h)-_ca);let _cc=(1.0f/f32(((_c8*_c7)-(_c9*_c9))));let _cd=f16((f32(_c9)*_cc));let _ce=clamp(((_cb*f16((f32(_c7)*_cc)))-(_ca*_cd)),vec3h(),_8);let _cf=clamp(((_ca*f16((f32(_c8)*_cc)))-(_cb*_cd)),vec3h(),_8);let _cg=_ce.x;let _ch=(trunc((_cg*31.0h))*8.25h);let _ci=trunc(_ch);let _cj=min(255.0h,trunc((_ch+8.25h)));let _ck=_ce.y;let _cl=(trunc((_ck*63.0h))*4.0625h);let _cm=min(255.0h,trunc(_cl));let _cn=min(255.0h,trunc((_cl+4.0625h)));let _co=_ce.z;let _cp=(trunc((_co*31.0h))*8.25h);let _cq=trunc(_cp);let _cr=min(255.0h,trunc((_cp+8.25h)));_4u=vec3h(select(_ci,_cj,((255.0h*_cg)>(0.5h*(_ci+_cj)))),select(_cm,_cn,((255.0h*_ck)>(0.5h*(_cm+_cn)))),select(_cq,_cr,((255.0h*_co)>(0.5h*(_cq+_cr)))));let _cs=_cf.x;let _ct=(trunc((_cs*31.0h))*8.25h);let _cu=trunc(_ct);let _cv=min(255.0h,trunc((_ct+8.25h)));let _cw=_cf.y;let _cx=(trunc((_cw*63.0h))*4.0625h);let _cy=min(255.0h,trunc(_cx));let _cz=min(255.0h,trunc((_cx+4.0625h)));let _d0=_cf.z;let _d1=(trunc((_d0*31.0h))*8.25h);let _d2=trunc(_d1);let _d3=min(255.0h,trunc((_d1+8.25h)));_4v=vec3h(select(_cu,_cv,((255.0h*_cs)>(0.5h*(_cu+_cv)))),select(_cy,_cz,((255.0h*_cw)>(0.5h*(_cy+_cz)))),select(_d2,_d3,((255.0h*_d0)>(0.5h*(_d2+_d3)))));_4w=_4v;_4x=_4u;_4y=true;}}_50=_c0;if(_4y){let _d4=(((_4w-_4x)*_9)*0.0039215087890625h);let _d5=((_d4*(1.0h/dot(_d4,_d4)))*_9);let _d6=(dot(_4x,_d5)*0.0039215087890625h);_4z=((((((((((((((((0u|(u32(((3.0h*clamp((dot(_26,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(0i)))|(u32(((3.0h*clamp((dot(_27,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(2i)))|(u32(((3.0h*clamp((dot(_28,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(4i)))|(u32(((3.0h*clamp((dot(_29,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(6i)))|(u32(((3.0h*clamp((dot(_2a,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(8i)))|(u32(((3.0h*clamp((dot(_2b,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(10i)))|(u32(((3.0h*clamp((dot(_2c,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(12i)))|(u32(((3.0h*clamp((dot(_2d,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(14i)))|(u32(((3.0h*clamp((dot(_2e,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(16i)))|(u32(((3.0h*clamp((dot(_2f,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(18i)))|(u32(((3.0h*clamp((dot(_2g,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(20i)))|(u32(((3.0h*clamp((dot(_2h,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(22i)))|(u32(((3.0h*clamp((dot(_2i,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(24i)))|(u32(((3.0h*clamp((dot(_2j,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(26i)))|(u32(((3.0h*clamp((dot(_2k,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(28i)))|(u32(((3.0h*clamp((dot(_2l,_d5)-_d6),0.0h,1.0h))+0.5h))<<bitcast<u32>(30i)));_50=_4z;}if(((_50^(_50<<bitcast<u32>(2i)))<4u)){let _d7=(_5a*15.9375h);_c=_a;let _d8=_c[i32(_d7.x)];_d=_a;let _d9=_d[i32(_d7.z)];_e=array<u32,256u>(0u,0u,32u,2097184u,2097184u,2097184u,2097216u,4194368u,4194368u,4194368u,4194400u,6291552u,6291552u,6291552u,6291584u,8388736u,8388736u,8388736u,8388768u,10485920u,10485920u,10485920u,10485952u,12583104u,12583104u,12583104u,12583136u,14680288u,14680288u,14680288u,14680320u,16777472u,16777472u,16777472u,16777504u,18874656u,18874656u,18874656u,18874688u,20971840u,20971840u,20971840u,20971872u,23069024u,23069024u,23069024u,23069056u,25166208u,25166208u,25166208u,25166240u,27263392u,27263392u,27263392u,27263424u,29360576u,29360576u,29360576u,29360608u,31457760u,31457760u,31457760u,31457792u,31457792u,33554944u,33554944u,33554944u,33554976u,35652128u,35652128u,35652128u,35652160u,37749312u,37749312u,37749312u,37749344u,39846496u,39846496u,39846496u,39846528u,41943680u,41943680u,41943680u,41943712u,44040864u,44040864u,44040864u,44040896u,46138048u,46138048u,46138048u,46138080u,48235232u,48235232u,48235232u,48235264u,50332416u,50332416u,50332416u,50332448u,52429600u,52429600u,52429600u,52429632u,54526784u,54526784u,54526784u,54526816u,56623968u,56623968u,56623968u,56624000u,58721152u,58721152u,58721152u,58721184u,60818336u,60818336u,60818336u,60818368u,62915520u,62915520u,62915520u,62915552u,65012704u,65012704u,65012704u,65012736u,65012736u,67109888u,67109888u,67109888u,67109920u,69207072u,69207072u,69207072u,69207104u,71304256u,71304256u,71304256u,71304288u,73401440u,73401440u,73401440u,73401472u,75498624u,75498624u,75498624u,75498656u,77595808u,77595808u,77595808u,77595840u,79692992u,79692992u,79692992u,79693024u,81790176u,81790176u,81790176u,81790208u,83887360u,83887360u,83887360u,83887392u,85984544u,85984544u,85984544u,85984576u,88081728u,88081728u,88081728u,88081760u,90178912u,90178912u,90178912u,90178944u,92276096u,92276096u,92276096u,92276128u,94373280u,94373280u,94373280u,94373312u,96470464u,96470464u,96470464u,96470496u,98567648u,98567648u,98567648u,98567680u,98567680u,100664832u,100664832u,100664832u,100664864u,102762016u,102762016u,102762016u,102762048u,104859200u,104859200u,104859200u,104859232u,106956384u,106956384u,106956384u,106956416u,109053568u,109053568u,109053568u,109053600u,111150752u,111150752u,111150752u,111150784u,113247936u,113247936u,113247936u,113247968u,115345120u,115345120u,115345120u,115345152u,117442304u,117442304u,117442304u,117442336u,119539488u,119539488u,119539488u,119539520u,121636672u,121636672u,121636672u,121636704u,123733856u,123733856u,123733856u,123733888u,125831040u,125831040u,125831040u,125831072u,127928224u,127928224u,127928224u,127928256u,130025408u,130025408u,130025408u,130025440u,132122592u,132122592u);_z=vec2u((((_d8&4160813056u)|(_d9&2031647u))|_e[i32(_d7.y)]),2863311530u);_11=_z;break;}let _da=((((u32(_4x.x)>>bitcast<u32>(3i))<<bitcast<u32>(11i))|((u32(_4x.y)>>bitcast<u32>(2i))<<bitcast<u32>(5i)))|(u32(_4x.z)>>bitcast<u32>(3i)));let _db=((((u32(_4w.x)>>bitcast<u32>(3i))<<bitcast<u32>(11i))|((u32(_4w.y)>>bitcast<u32>(2i))<<bitcast<u32>(5i)))|(u32(_4w.z)>>bitcast<u32>(3i)));let _dc=(_da<_db);_52=_50;if(_dc){_51=~(_50);_52=_51;}let _dd=((_52&2863311530u)>>bitcast<u32>(1i));_10=vec2u((select(_da,_db,_dc)|(select(_db,_da,_dc)<<bitcast<u32>(16i))),((((_52&1431655765u)^_dd)<<bitcast<u32>(1i))|_dd));_11=_10;}}x_2891._0[((_14.y*((_13+15u)&4294967280u))+_16)]=vec4u(_58,_59,_11.x,_11.y);}}return;}@compute @workgroup_size(16i, 16i, 1i) fn main(@builtin(global_invocation_id) _de:vec3u,@builtin(local_invocation_id) _df:vec3u,@builtin(workgroup_id) _dg:vec3u){x_2795=_de;x_2801=_df;_b();}";
|
|
2
|
-
export {
|
|
3
|
-
spark_bc3_rgba as default
|
|
4
|
-
};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const spark_etc2_rgba = "enable f16;alias RTArr=array<vec4u>;struct _1{_0:RTArr,}@binding(1) @group(0) var _2:sampler;@binding(0) @group(0) var _3:texture_2d<f32>;var<private>x_3160:vec3u;var<private>x_3167:vec3u;@binding(2) @group(0) var<storage,read_write>x_3257:_1;const _4=vec2i(2i,0i);const _5=vec2i(0i,2i);const _6=vec2i(2i);const _7=array<u32,4u>(28143u,14526u,26814u,27070u);const _8=mat3x3h(vec3h(0.4873046875h,-0.3125h,-0.0124969482421875h),vec3h(-0.3125h,0.4873046875h,-0.0124969482421875h),vec3h(-0.0124969482421875h,-0.0124969482421875h,0.287353515625h));const _9=vec3h(1.0h);const _a=array<f32,7u>(5.0f,11.0f,19.0f,27.5f,39.0f,52.0f,69.5f);const _b=array<u32,8u>(2050u,4357u,7433u,10765u,15378u,20504u,27169u,46895u);fn _c(){var _d:array<u32,8u>;var _e:array<f32,7u>;var _f:array<f32,7u>;var _g:array<u32,4u>;var _h:array<u32,4u>;var _i:array<f16,16u>;var _j:array<f32,4u>;var _k:array<u32,4u>;var _l:array<u32,4u>;var _m:array<u32,4u>;var _n:array<f16,16u>;var _o:bool;var _p:bool;var _q:f16;var _r:f16;var _s:f16;var _t:i32;var _u:f16;var _v:f16;var _w:vec2u;var _x:u32;var _y:i32;var _z:f16;var _10:f16;var _11:f16;var _12:f16;var _13:f16;var _14:f16;var _15:f16;var _16:f16;var _17:f16;var _18:f16;var _19:f16;var _1a:f16;var _1b:f16;var _1c:f16;var _1d:f16;var _1e:f16;var _1f:f16;var _1g:f16;var _1h:f16;var _1i:f16;var _1j:f16;var _1k:f16;var _1l:f16;var _1m:f16;var _1n:f16;var _1o:f16;var _1p:f16;var _1q:f16;var _1r:f16;var _1s:f16;var _1t:f16;var _1u:f16;var _1v:vec2u;var _1w:vec2u;var _1x:vec2u;switch(0u){default:{let _1y=bitcast<vec2u>(vec2i(textureDimensions(_3,0i)));let _1z=((_1y.x+3u)/4u);let _20=x_3160;let _21=x_3160.xy;let _22=x_3160.x;let _23=(_22>=_1z);_p=_23;if(!(_23)){_o=(_20.y>=((_1y.y+3u)/4u));_p=_o;}if(_p){break;}let _24=(vec2f(1.0f)/vec2f(vec2i(textureDimensions(_3,0i))));let _25=((vec2f(bitcast<vec2i>((_21*vec2u(4u))))*_24)+_24);let _26=vec4h(textureGather(0i,_3,_2,_25,vec2i()));let _27=vec4h(textureGather(0i,_3,_2,_25,_4));let _28=vec4h(textureGather(0i,_3,_2,_25,_5));let _29=vec4h(textureGather(0i,_3,_2,_25,_6));let _2a=_26.w;let _2b=_26.z;let _2c=_27.w;let _2d=_27.z;let _2e=_26.x;let _2f=_26.y;let _2g=_27.x;let _2h=_27.y;let _2i=_28.w;let _2j=_28.z;let _2k=_29.w;let _2l=_29.z;let _2m=_28.x;let _2n=_28.y;let _2o=_29.x;let _2p=_29.y;let _2q=vec4h(textureGather(1i,_3,_2,_25,vec2i()));let _2r=vec4h(textureGather(1i,_3,_2,_25,_4));let _2s=vec4h(textureGather(1i,_3,_2,_25,_5));let _2t=vec4h(textureGather(1i,_3,_2,_25,_6));let _2u=_2q.w;let _2v=_2q.z;let _2w=_2r.w;let _2x=_2r.z;let _2y=_2q.x;let _2z=_2q.y;let _30=_2r.x;let _31=_2r.y;let _32=_2s.w;let _33=_2s.z;let _34=_2t.w;let _35=_2t.z;let _36=_2s.x;let _37=_2s.y;let _38=_2t.x;let _39=_2t.y;let _3a=vec4h(textureGather(2i,_3,_2,_25,vec2i()));let _3b=vec4h(textureGather(2i,_3,_2,_25,_4));let _3c=vec4h(textureGather(2i,_3,_2,_25,_5));let _3d=vec4h(textureGather(2i,_3,_2,_25,_6));let _3e=_3a.w;let _3f=_3a.z;let _3g=_3b.w;let _3h=_3b.z;let _3i=_3a.x;let _3j=_3a.y;let _3k=_3b.x;let _3l=_3b.y;let _3m=_3c.w;let _3n=_3c.z;let _3o=_3d.w;let _3p=_3d.z;let _3q=_3c.x;let _3r=_3c.y;let _3s=_3d.x;let _3t=_3d.y;let _3u=vec4h(textureGather(3i,_3,_2,_25,vec2i()));let _3v=vec4h(textureGather(3i,_3,_2,_25,_4));let _3w=vec4h(textureGather(3i,_3,_2,_25,_5));let _3x=vec4h(textureGather(3i,_3,_2,_25,_6));let _3y=_3u.w;let _3z=_3u.z;let _40=_3v.w;let _41=_3v.z;let _42=_3u.x;let _43=_3u.y;let _44=_3v.x;let _45=_3v.y;let _46=_3w.w;let _47=_3w.z;let _48=_3x.w;let _49=_3x.z;let _4a=_3w.x;let _4b=_3w.y;let _4c=_3x.x;let _4d=_3x.y;let _4e=vec4h(_2a,_2u,_3e,_3y).xyz;let _4f=vec4h(_2b,_2v,_3f,_3z).xyz;let _4g=vec4h(_2c,_2w,_3g,_40).xyz;let _4h=vec4h(_2d,_2x,_3h,_41).xyz;let _4i=vec4h(_2e,_2y,_3i,_42).xyz;let _4j=vec4h(_2f,_2z,_3j,_43).xyz;let _4k=vec4h(_2g,_30,_3k,_44).xyz;let _4l=vec4h(_2h,_31,_3l,_45).xyz;let _4m=vec4h(_2i,_32,_3m,_46).xyz;let _4n=vec4h(_2j,_33,_3n,_47).xyz;let _4o=vec4h(_2k,_34,_3o,_48).xyz;let _4p=vec4h(_2l,_35,_3p,_49).xyz;let _4q=vec4h(_2m,_36,_3q,_4a).xyz;let _4r=vec4h(_2n,_37,_3r,_4b).xyz;let _4s=vec4h(_2o,_38,_3s,_4c).xyz;let _4t=vec4h(_2p,_39,_3t,_4d).xyz;let _4u=array<f16,16u>(_3y,_3z,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_4a,_4b,_4c,_4d);_n=_4u;_i=_4u;let _4v=_i[0i];_q=_4v;_r=_4v;_s=_4v;_t=1i;loop{var _4w:f16;var _4x:f16;var _4y:f16;var _4z:i32;if((_t<16i)){}else{break;}continuing{let _50=_i[_t];_4w=min(_s,_50);_4x=max(_r,_50);_4y=(_q+_50);_4z=(_t+1i);_q=_4y;_r=_4x;_s=_4w;_t=_4z;}}let _51=(_s*255.0h);let _52=(_r*255.0h);let _53=(_52-_51);let _54=(_51+_52);let _55=(_q*15.9375h);_u=65504.0h;_v=0.0h;_w=vec2u();_x=0u;_y=0i;loop{var _56:u32;var _57:u32;var _58:f16;var _59:f16;var _5a:u32;var _5b:u32;var _5c:f16;var _5d:f16;var _5e:u32;var _5f:u32;var _5g:f16;var _5h:f16;var _5i:u32;var _5j:u32;var _5k:f16;var _5l:f16;var _5m:u32;var _5n:u32;var _5o:f16;var _5p:f16;var _5q:u32;var _5r:u32;var _5s:f16;var _5t:f16;var _5u:u32;var _5v:u32;var _5w:f16;var _5x:f16;var _5y:u32;var _5z:u32;var _60:f16;var _61:f16;var _62:u32;var _63:u32;var _64:f16;var _65:f16;var _66:u32;var _67:u32;var _68:f16;var _69:f16;var _6a:u32;var _6b:u32;var _6c:f16;var _6d:f16;var _6e:u32;var _6f:u32;var _6g:f16;var _6h:f16;var _6i:u32;var _6j:u32;var _6k:f16;var _6l:f16;var _6m:u32;var _6n:u32;var _6o:f16;var _6p:f16;var _6q:u32;var _6r:u32;var _6s:f16;var _6t:f16;var _6u:u32;var _6v:u32;var _6w:f16;var _6x:f16;var _6y:u32;var _6z:u32;var _70:i32;if((_y<4i)){}else{break;}_j=array<f32,4u>(0.05432900041341781616f,0.04129000008106231689f,0.05432900041341781616f,0.05432900041341781616f);let _71=clamp(trunc((_53*f16(_j[_y]))),1.0h,15.0h);let _72=trunc((0.5h*(_71+_54)));let _73=(2.0h/_71);let _74=(255.0h*_73);let _75=(30.0h-(_72*_73));let _76=(_71*0.00390625h);let _77=((_72*0.00390625h)+0.001953125h);_k=array<u32,4u>(4289374800u,2857717760u,2857717760u,2861912064u);let _78=_k[_y];_l=array<u32,4u>(1073741823u,1073741738u,1073741822u,1073741823u);let _79=_l[_y];_h=_7;let _7a=~(_h[_y]);let _7b=_n[0i];let _7c=clamp(u32(((_7b*_74)+_75)),0u,59u);let _7d=select(0u,1u,(_7c>28u));let _7e=(_7c-29u);let _7f=(_7d==0u);if(_7f){_56=~(_7e);_57=_56;}else{_57=_7e;}let _7g=((select(_78,_79,(_57>15u))>>((2u*_57)&31u))&3u);let _7h=f16(((_7a>>(4u*_7g))&15u));if(_7f){_58=(-1.0h-_7h);_59=_58;}else{_59=_7h;}let _7i=(0u|((_7g|(_7d<<2u))<<bitcast<u32>(21i)));let _7j=(clamp(((_59*_76)+_77),0.0h,1.0h)-_7b);let _7k=(_7j*_7j);let _7l=_n[4i];let _7m=clamp(u32(((_7l*_74)+_75)),0u,59u);let _7n=select(0u,1u,(_7m>28u));let _7o=(_7m-29u);let _7p=(_7n==0u);if(_7p){_5a=~(_7o);_5b=_5a;}else{_5b=_7o;}let _7q=((select(_78,_79,(_5b>15u))>>((2u*_5b)&31u))&3u);let _7r=f16(((_7a>>(4u*_7q))&15u));if(_7p){_5c=(-1.0h-_7r);_5d=_5c;}else{_5d=_7r;}let _7s=(_7i|((_7q|(_7n<<2u))<<bitcast<u32>(18i)));let _7t=(clamp(((_5d*_76)+_77),0.0h,1.0h)-_7l);let _7u=(_7k+(_7t*_7t));let _7v=_n[8i];let _7w=clamp(u32(((_7v*_74)+_75)),0u,59u);let _7x=select(0u,1u,(_7w>28u));let _7y=(_7w-29u);let _7z=(_7x==0u);if(_7z){_5e=~(_7y);_5f=_5e;}else{_5f=_7y;}let _80=((select(_78,_79,(_5f>15u))>>((2u*_5f)&31u))&3u);let _81=f16(((_7a>>(4u*_80))&15u));if(_7z){_5g=(-1.0h-_81);_5h=_5g;}else{_5h=_81;}let _82=(_7s|((_80|(_7x<<2u))<<bitcast<u32>(15i)));let _83=(clamp(((_5h*_76)+_77),0.0h,1.0h)-_7v);let _84=(_7u+(_83*_83));let _85=_n[12i];let _86=clamp(u32(((_85*_74)+_75)),0u,59u);let _87=select(0u,1u,(_86>28u));let _88=(_86-29u);let _89=(_87==0u);if(_89){_5i=~(_88);_5j=_5i;}else{_5j=_88;}let _8a=((select(_78,_79,(_5j>15u))>>((2u*_5j)&31u))&3u);let _8b=f16(((_7a>>(4u*_8a))&15u));if(_89){_5k=(-1.0h-_8b);_5l=_5k;}else{_5l=_8b;}let _8c=(_82|((_8a|(_87<<2u))<<bitcast<u32>(12i)));let _8d=(clamp(((_5l*_76)+_77),0.0h,1.0h)-_85);let _8e=(_84+(_8d*_8d));let _8f=_n[1i];let _8g=clamp(u32(((_8f*_74)+_75)),0u,59u);let _8h=select(0u,1u,(_8g>28u));let _8i=(_8g-29u);let _8j=(_8h==0u);if(_8j){_5m=~(_8i);_5n=_5m;}else{_5n=_8i;}let _8k=((select(_78,_79,(_5n>15u))>>((2u*_5n)&31u))&3u);let _8l=f16(((_7a>>(4u*_8k))&15u));if(_8j){_5o=(-1.0h-_8l);_5p=_5o;}else{_5p=_8l;}let _8m=(_8c|((_8k|(_8h<<2u))<<bitcast<u32>(9i)));let _8n=(clamp(((_5p*_76)+_77),0.0h,1.0h)-_8f);let _8o=(_8e+(_8n*_8n));let _8p=_n[5i];let _8q=clamp(u32(((_8p*_74)+_75)),0u,59u);let _8r=select(0u,1u,(_8q>28u));let _8s=(_8q-29u);let _8t=(_8r==0u);if(_8t){_5q=~(_8s);_5r=_5q;}else{_5r=_8s;}let _8u=((select(_78,_79,(_5r>15u))>>((2u*_5r)&31u))&3u);let _8v=f16(((_7a>>(4u*_8u))&15u));if(_8t){_5s=(-1.0h-_8v);_5t=_5s;}else{_5t=_8v;}let _8w=(_8m|((_8u|(_8r<<2u))<<bitcast<u32>(6i)));let _8x=(clamp(((_5t*_76)+_77),0.0h,1.0h)-_8p);let _8y=(_8o+(_8x*_8x));let _8z=_n[9i];let _90=clamp(u32(((_8z*_74)+_75)),0u,59u);let _91=select(0u,1u,(_90>28u));let _92=(_90-29u);let _93=(_91==0u);if(_93){_5u=~(_92);_5v=_5u;}else{_5v=_92;}let _94=((select(_78,_79,(_5v>15u))>>((2u*_5v)&31u))&3u);let _95=f16(((_7a>>(4u*_94))&15u));if(_93){_5w=(-1.0h-_95);_5x=_5w;}else{_5x=_95;}let _96=(_8w|((_94|(_91<<2u))<<bitcast<u32>(3i)));let _97=(clamp(((_5x*_76)+_77),0.0h,1.0h)-_8z);let _98=(_8y+(_97*_97));let _99=_n[13i];let _9a=clamp(u32(((_99*_74)+_75)),0u,59u);let _9b=select(0u,1u,(_9a>28u));let _9c=(_9a-29u);let _9d=(_9b==0u);if(_9d){_5y=~(_9c);_5z=_5y;}else{_5z=_9c;}let _9e=((select(_78,_79,(_5z>15u))>>((2u*_5z)&31u))&3u);let _9f=f16(((_7a>>(4u*_9e))&15u));if(_9d){_60=(-1.0h-_9f);_61=_60;}else{_61=_9f;}let _9g=(_96|((_9e|(_9b<<2u))<<bitcast<u32>(0i)));let _9h=(clamp(((_61*_76)+_77),0.0h,1.0h)-_99);let _9i=(_98+(_9h*_9h));let _9j=_n[2i];let _9k=clamp(u32(((_9j*_74)+_75)),0u,59u);let _9l=select(0u,1u,(_9k>28u));let _9m=(_9k-29u);let _9n=(_9l==0u);if(_9n){_62=~(_9m);_63=_62;}else{_63=_9m;}let _9o=((select(_78,_79,(_63>15u))>>((2u*_63)&31u))&3u);let _9p=f16(((_7a>>(4u*_9o))&15u));if(_9n){_64=(-1.0h-_9p);_65=_64;}else{_65=_9p;}let _9q=(0u|((_9o|(_9l<<2u))<<bitcast<u32>(21i)));let _9r=vec2u(_9g,_9q);let _9s=(clamp(((_65*_76)+_77),0.0h,1.0h)-_9j);let _9t=(_9i+(_9s*_9s));let _9u=_n[6i];let _9v=clamp(u32(((_9u*_74)+_75)),0u,59u);let _9w=select(0u,1u,(_9v>28u));let _9x=(_9v-29u);let _9y=(_9w==0u);if(_9y){_66=~(_9x);_67=_66;}else{_67=_9x;}let _9z=((select(_78,_79,(_67>15u))>>((2u*_67)&31u))&3u);let _a0=f16(((_7a>>(4u*_9z))&15u));if(_9y){_68=(-1.0h-_a0);_69=_68;}else{_69=_a0;}let _a1=(_9q|((_9z|(_9w<<2u))<<bitcast<u32>(18i)));let _a2=(clamp(((_69*_76)+_77),0.0h,1.0h)-_9u);let _a3=(_9t+(_a2*_a2));let _a4=_n[10i];let _a5=clamp(u32(((_a4*_74)+_75)),0u,59u);let _a6=select(0u,1u,(_a5>28u));let _a7=(_a5-29u);let _a8=(_a6==0u);if(_a8){_6a=~(_a7);_6b=_6a;}else{_6b=_a7;}let _a9=((select(_78,_79,(_6b>15u))>>((2u*_6b)&31u))&3u);let _aa=f16(((_7a>>(4u*_a9))&15u));if(_a8){_6c=(-1.0h-_aa);_6d=_6c;}else{_6d=_aa;}let _ab=(_a1|((_a9|(_a6<<2u))<<bitcast<u32>(15i)));let _ac=(clamp(((_6d*_76)+_77),0.0h,1.0h)-_a4);let _ad=(_a3+(_ac*_ac));let _ae=_n[14i];let _af=clamp(u32(((_ae*_74)+_75)),0u,59u);let _ag=select(0u,1u,(_af>28u));let _ah=(_af-29u);let _ai=(_ag==0u);if(_ai){_6e=~(_ah);_6f=_6e;}else{_6f=_ah;}let _aj=((select(_78,_79,(_6f>15u))>>((2u*_6f)&31u))&3u);let _ak=f16(((_7a>>(4u*_aj))&15u));if(_ai){_6g=(-1.0h-_ak);_6h=_6g;}else{_6h=_ak;}let _al=(_ab|((_aj|(_ag<<2u))<<bitcast<u32>(12i)));let _am=(clamp(((_6h*_76)+_77),0.0h,1.0h)-_ae);let _an=(_ad+(_am*_am));let _ao=_n[3i];let _ap=clamp(u32(((_ao*_74)+_75)),0u,59u);let _aq=select(0u,1u,(_ap>28u));let _ar=(_ap-29u);let _as=(_aq==0u);if(_as){_6i=~(_ar);_6j=_6i;}else{_6j=_ar;}let _at=((select(_78,_79,(_6j>15u))>>((2u*_6j)&31u))&3u);let _au=f16(((_7a>>(4u*_at))&15u));if(_as){_6k=(-1.0h-_au);_6l=_6k;}else{_6l=_au;}let _av=(_al|((_at|(_aq<<2u))<<bitcast<u32>(9i)));let _aw=(clamp(((_6l*_76)+_77),0.0h,1.0h)-_ao);let _ax=(_an+(_aw*_aw));let _ay=_n[7i];let _az=clamp(u32(((_ay*_74)+_75)),0u,59u);let _b0=select(0u,1u,(_az>28u));let _b1=(_az-29u);let _b2=(_b0==0u);if(_b2){_6m=~(_b1);_6n=_6m;}else{_6n=_b1;}let _b3=((select(_78,_79,(_6n>15u))>>((2u*_6n)&31u))&3u);let _b4=f16(((_7a>>(4u*_b3))&15u));if(_b2){_6o=(-1.0h-_b4);_6p=_6o;}else{_6p=_b4;}let _b5=(_av|((_b3|(_b0<<2u))<<bitcast<u32>(6i)));let _b6=(clamp(((_6p*_76)+_77),0.0h,1.0h)-_ay);let _b7=(_ax+(_b6*_b6));let _b8=_n[11i];let _b9=clamp(u32(((_b8*_74)+_75)),0u,59u);let _ba=select(0u,1u,(_b9>28u));let _bb=(_b9-29u);let _bc=(_ba==0u);if(_bc){_6q=~(_bb);_6r=_6q;}else{_6r=_bb;}let _bd=((select(_78,_79,(_6r>15u))>>((2u*_6r)&31u))&3u);let _be=f16(((_7a>>(4u*_bd))&15u));if(_bc){_6s=(-1.0h-_be);_6t=_6s;}else{_6t=_be;}let _bf=(_b5|((_bd|(_ba<<2u))<<bitcast<u32>(3i)));let _bg=(clamp(((_6t*_76)+_77),0.0h,1.0h)-_b8);let _bh=(_b7+(_bg*_bg));let _bi=_n[15i];let _bj=clamp(u32(((_bi*_74)+_75)),0u,59u);let _bk=select(0u,1u,(_bj>28u));let _bl=(_bj-29u);let _bm=(_bk==0u);if(_bm){_6u=~(_bl);_6v=_6u;}else{_6v=_bl;}let _bn=((select(_78,_79,(_6v>15u))>>((2u*_6v)&31u))&3u);let _bo=f16(((_7a>>(4u*_bn))&15u));if(_bm){_6w=(-1.0h-_bo);_6x=_6w;}else{_6x=_bo;}var _bp=_9r;_bp.y=(_bf|((_bn|(_bk<<2u))<<bitcast<u32>(0i)));let _bq=_bp;let _br=(clamp(((_6x*_76)+_77),0.0h,1.0h)-_bi);let _bs=(_bh+(_br*_br));let _bt=(_bs<_u);_6z=_x;if(_bt){_6y=bitcast<u32>(_y);_6z=_6y;}continuing{_70=(_y+1i);_u=select(_u,_bs,_bt);_v=select(_v,_71,_bt);_w=select(_w,_bq,vec2<bool>(_bt));_x=_6z;_y=_70;}}_g=_7;let _bu=~(_g[bitcast<i32>(_x)]);let _bv=_w.x;let _bw=f16(((_bu>>(4u*(_bv&3u)))&15u));if(((_bv&4u)==0u)){_z=(-1.0h-_bw);_10=_z;}else{_10=_bw;}let _bx=(_bv>>bitcast<u32>(3i));let _by=f16(((_bu>>(4u*(_bx&3u)))&15u));if(((_bx&4u)==0u)){_11=(-1.0h-_by);_12=_11;}else{_12=_by;}let _bz=(_10+_12);let _c0=(_bx>>bitcast<u32>(3i));let _c1=f16(((_bu>>(4u*(_c0&3u)))&15u));if(((_c0&4u)==0u)){_13=(-1.0h-_c1);_14=_13;}else{_14=_c1;}let _c2=(_bz+_14);let _c3=(_c0>>bitcast<u32>(3i));let _c4=f16(((_bu>>(4u*(_c3&3u)))&15u));if(((_c3&4u)==0u)){_15=(-1.0h-_c4);_16=_15;}else{_16=_c4;}let _c5=(_c2+_16);let _c6=(_c3>>bitcast<u32>(3i));let _c7=f16(((_bu>>(4u*(_c6&3u)))&15u));if(((_c6&4u)==0u)){_17=(-1.0h-_c7);_18=_17;}else{_18=_c7;}let _c8=(_c5+_18);let _c9=(_c6>>bitcast<u32>(3i));let _ca=f16(((_bu>>(4u*(_c9&3u)))&15u));if(((_c9&4u)==0u)){_19=(-1.0h-_ca);_1a=_19;}else{_1a=_ca;}let _cb=(_c8+_1a);let _cc=(_c9>>bitcast<u32>(3i));let _cd=f16(((_bu>>(4u*(_cc&3u)))&15u));if(((_cc&4u)==0u)){_1b=(-1.0h-_cd);_1c=_1b;}else{_1c=_cd;}let _ce=(_cb+_1c);let _cf=(_cc>>bitcast<u32>(3i));let _cg=f16(((_bu>>(4u*(_cf&3u)))&15u));if(((_cf&4u)==0u)){_1d=(-1.0h-_cg);_1e=_1d;}else{_1e=_cg;}let _ch=(_ce+_1e);let _ci=_w.y;let _cj=f16(((_bu>>(4u*(_ci&3u)))&15u));if(((_ci&4u)==0u)){_1f=(-1.0h-_cj);_1g=_1f;}else{_1g=_cj;}let _ck=(_ch+_1g);let _cl=(_ci>>bitcast<u32>(3i));let _cm=f16(((_bu>>(4u*(_cl&3u)))&15u));if(((_cl&4u)==0u)){_1h=(-1.0h-_cm);_1i=_1h;}else{_1i=_cm;}let _cn=(_ck+_1i);let _co=(_cl>>bitcast<u32>(3i));let _cp=f16(((_bu>>(4u*(_co&3u)))&15u));if(((_co&4u)==0u)){_1j=(-1.0h-_cp);_1k=_1j;}else{_1k=_cp;}let _cq=(_cn+_1k);let _cr=(_co>>bitcast<u32>(3i));let _cs=f16(((_bu>>(4u*(_cr&3u)))&15u));if(((_cr&4u)==0u)){_1l=(-1.0h-_cs);_1m=_1l;}else{_1m=_cs;}let _ct=(_cq+_1m);let _cu=(_cr>>bitcast<u32>(3i));let _cv=f16(((_bu>>(4u*(_cu&3u)))&15u));if(((_cu&4u)==0u)){_1n=(-1.0h-_cv);_1o=_1n;}else{_1o=_cv;}let _cw=(_ct+_1o);let _cx=(_cu>>bitcast<u32>(3i));let _cy=f16(((_bu>>(4u*(_cx&3u)))&15u));if(((_cx&4u)==0u)){_1p=(-1.0h-_cy);_1q=_1p;}else{_1q=_cy;}let _cz=(_cw+_1q);let _d0=(_cx>>bitcast<u32>(3i));let _d1=f16(((_bu>>(4u*(_d0&3u)))&15u));if(((_d0&4u)==0u)){_1r=(-1.0h-_d1);_1s=_1r;}else{_1s=_d1;}let _d2=(_cz+_1s);let _d3=(_d0>>bitcast<u32>(3i));let _d4=f16(((_bu>>(4u*(_d3&3u)))&15u));if(((_d3&4u)==0u)){_1t=(-1.0h-_d4);_1u=_1t;}else{_1u=_d4;}var _d5:vec3h;var _d6:vec3h;var _d7:f16;var _d8:f16;var _d9:vec3h;var _da:vec3h;var _db:f16;var _dc:f16;var _dd:vec3h;var _de:vec3h;var _df:f16;var _dg:f16;var _dh:vec2u;var _di:u32;var _dj:u32;var _dk:u32;var _dl:u32;var _dm:i32;var _dn:i32;var _do:i32;var _dp:i32;var _dq:u32;var _dr:u32;var _ds:u32;var _dt:u32;var _du:u32;var _dv:u32;var _dw:i32;var _dx:i32;var _dy:i32;var _dz:i32;var _e0:f16;var _e1:f16;var _e2:u32;var _e3:u32;var _e4:u32;var _e5:u32;var _e6:u32;var _e7:u32;var _e8:i32;var _e9:i32;var _ea:i32;var _eb:i32;var _ec:f16;var _ed:f16;var _ee:f16;var _ef:f16;var _eg:u32;var _eh:u32;var _ei:u32;var _ej:u32;var _ek:u32;var _el:u32;var _em:i32;var _en:i32;var _eo:i32;var _ep:i32;var _eq:f16;var _er:f16;var _es:f16;var _et:f16;var _eu:u32;var _ev:u32;var _ew:u32;var _ex:u32;var _ey:u32;var _ez:u32;var _f0:i32;var _f1:i32;var _f2:i32;var _f3:i32;var _f4:f16;var _f5:f16;var _f6:f16;var _f7:f16;var _f8:u32;var _f9:u32;var _fa:u32;var _fb:u32;var _fc:u32;var _fd:u32;var _fe:i32;var _ff:i32;var _fg:i32;var _fh:i32;var _fi:f16;var _fj:f16;var _fk:f16;var _fl:f16;var _fm:u32;var _fn:u32;var _fo:u32;var _fp:u32;var _fq:u32;var _fr:u32;var _fs:i32;var _ft:i32;var _fu:i32;var _fv:i32;var _fw:f16;var _fx:f16;var _fy:f16;var _fz:f16;var _g0:u32;var _g1:u32;var _g2:u32;var _g3:u32;var _g4:u32;var _g5:u32;var _g6:i32;var _g7:i32;var _g8:i32;var _g9:i32;var _ga:f16;var _gb:f16;var _gc:f16;var _gd:f16;var _ge:u32;var _gf:u32;var _gg:u32;var _gh:u32;var _gi:u32;var _gj:u32;var _gk:i32;var _gl:i32;var _gm:i32;var _gn:i32;var _go:f16;var _gp:f16;var _gq:f16;var _gr:f16;var _gs:u32;var _gt:u32;var _gu:u32;var _gv:u32;var _gw:u32;var _gx:u32;var _gy:i32;var _gz:i32;var _h0:i32;var _h1:i32;var _h2:f16;var _h3:f16;var _h4:f16;var _h5:f16;var _h6:u32;var _h7:u32;var _h8:u32;var _h9:u32;var _ha:u32;var _hb:u32;var _hc:i32;var _hd:i32;var _he:i32;var _hf:i32;var _hg:f16;var _hh:f16;var _hi:f16;var _hj:f16;var _hk:u32;var _hl:u32;var _hm:u32;var _hn:u32;var _ho:u32;var _hp:u32;var _hq:i32;var _hr:i32;var _hs:i32;var _ht:i32;var _hu:f16;var _hv:f16;var _hw:f16;var _hx:f16;var _hy:u32;var _hz:u32;var _i0:u32;var _i1:u32;var _i2:u32;var _i3:u32;var _i4:i32;var _i5:i32;var _i6:i32;var _i7:i32;var _i8:f16;var _i9:f16;var _ia:f16;var _ib:f16;var _ic:u32;var _id:u32;var _ie:u32;var _if:u32;var _ig:u32;var _ih:u32;var _ii:i32;var _ij:i32;var _ik:i32;var _il:i32;var _im:f16;var _in:f16;var _io:f16;var _ip:f16;var _iq:u32;var _ir:u32;var _is:u32;var _it:u32;var _iu:u32;var _iv:u32;var _iw:i32;var _ix:i32;var _iy:i32;var _iz:i32;var _j0:f16;var _j1:f16;var _j2:f16;var _j3:f16;var _j4:u32;var _j5:u32;var _j6:u32;var _j7:u32;var _j8:u32;var _j9:u32;var _ja:i32;var _jb:i32;var _jc:i32;var _jd:i32;var _je:f16;var _jf:f16;var _jg:f16;var _jh:f16;var _ji:u32;var _jj:u32;var _jk:u32;var _jl:u32;var _jm:u32;var _jn:u32;var _jo:u32;var _jp:u32;var _jq:u32;var _jr:u32;var _js:u32;var _jt:u32;var _ju:u32;var _jv:u32;var _jw:u32;var _jx:u32;var _jy:u32;var _jz:u32;var _k0:u32;var _k1:u32;var _k2:u32;var _k3:u32;var _k4:u32;var _k5:u32;var _k6:u32;var _k7:u32;var _k8:u32;var _k9:u32;var _ka:u32;var _kb:u32;var _kc:u32;var _kd:u32;var _ke:u32;var _kf:u32;var _kg:u32;var _kh:u32;var _ki:u32;var _kj:u32;var _kk:u32;var _kl:u32;var _km:u32;var _kn:u32;var _ko:u32;var _kp:u32;var _kq:u32;var _kr:u32;var _ks:u32;var _kt:u32;var _ku:u32;var _kv:u32;var _kw:u32;var _kx:u32;var _ky:u32;var _kz:u32;var _l0:u32;var _l1:u32;var _l2:u32;var _l3:u32;var _l4:u32;var _l5:u32;var _l6:u32;var _l7:u32;var _l8:u32;var _l9:u32;var _la:u32;var _lb:u32;var _lc:u32;var _ld:u32;var _le:u32;var _lf:u32;var _lg:u32;var _lh:u32;var _li:u32;var _lj:u32;var _lk:u32;var _ll:u32;var _lm:u32;var _ln:u32;var _lo:u32;var _lp:u32;var _lq:u32;var _lr:u32;var _ls:u32;var _lt:u32;var _lu:u32;var _lv:u32;var _lw:u32;var _lx:u32;var _ly:u32;var _lz:u32;var _m0:u32;var _m1:u32;var _m2:u32;_m=array<u32,4u>(13u,2u,9u,11u);let _m3=(((u32(clamp(((f32(_55)-f32((((_d2+_1u)*_v)*0.0625h)))+0.5f),0.0f,255.0f))|((u32(_v)<<bitcast<u32>(12i))|(_m[_x]<<bitcast<u32>(8i))))|(_bv&16711680u))|((_bv&65280u)<<bitcast<u32>(16i)));let _m4=((((_bv&255u)|((_ci&16711680u)>>bitcast<u32>(8i)))|((_ci&65280u)<<bitcast<u32>(8i)))|((_ci&255u)<<bitcast<u32>(24i)));switch(0u){default:{let _m5=(((_4e+_4f)+_4i)+_4j);let _m6=(((_4g+_4h)+_4k)+_4l);let _m7=(((_4m+_4n)+_4q)+_4r);let _m8=(((_4o+_4p)+_4s)+_4t);let _m9=((_2a+_2u)+_3e);let _ma=((_2b+_2v)+_3f);let _mb=((_2c+_2w)+_3g);let _mc=((_2d+_2x)+_3h);let _md=((_2e+_2y)+_3i);let _me=((_2f+_2z)+_3j);let _mf=((_2g+_30)+_3k);let _mg=((_2h+_31)+_3l);let _mh=((_2i+_32)+_3m);let _mi=((_2j+_33)+_3n);let _mj=((_2k+_34)+_3o);let _mk=((_2l+_35)+_3p);let _ml=((_2m+_36)+_3q);let _mm=((_2n+_37)+_3r);let _mn=((_2o+_38)+_3s);let _mo=((_2p+_39)+_3t);let _mp=min(min(_m9,_ma),min(_md,_me));let _mq=min(min(_mb,_mc),min(_mf,_mg));let _mr=min(min(_mh,_mi),min(_ml,_mm));let _ms=min(min(_mj,_mk),min(_mn,_mo));let _mt=max(max(_m9,_ma),max(_md,_me));let _mu=max(max(_mb,_mc),max(_mf,_mg));let _mv=max(max(_mh,_mi),max(_ml,_mm));let _mw=max(max(_mj,_mk),max(_mn,_mo));let _mx=min(_mp,_mq);let _my=min(_mr,_ms);let _mz=min(_mp,_mr);let _n0=min(_mq,_ms);let _n1=select(0u,1u,(((max(_mp,_mq)-_mx)+(max(_mr,_ms)-_my))<((max(_mp,_mr)-_mz)+(max(_mq,_ms)-_n0))));let _n2=(_n1!=0u);let _n3=select(2i,8i,_n2);if(_n2){_d5=(_m5+_m6);_d6=(_m8+_m7);_d7=max(_mt,_mu);_d8=max(_mv,_mw);_dd=_d6;_de=_d5;_df=_d8;_dg=_d7;}else{_d9=(_m5+_m7);_da=(_m8+_m6);_db=max(_mt,_mv);_dc=max(_mu,_mw);_dd=_da;_de=_d9;_df=_dc;_dg=_db;}var _n4:f16;var _n5:vec2u;var _n6:vec2u;var _n7:vec2u;var _n8:vec2u;let _n9=select(_n0,_my,_n2);let _na=select(_mz,_mx,_n2);_n4=(max(_dg,_df)-min(_na,_n9));switch(0u){default:{if((_n4>=1.0h)){_1v=vec2u();break;}var _nb:f16;var _nc:f16;var _nd:f16;var _ne:f16;var _nf:f16;var _ng:f16;var _nh:f16;var _ni:f16;var _nj:f16;var _nk:f16;var _nl:f16;var _nm:f16;var _nn:f16;var _no:f16;var _np:f16;var _nq:f16;var _nr:f16;var _ns:f16;var _nt:f16;var _nu:f16;_nb=(f16(0i)/4.0h);let _nv=(1.0h-_nb);_nc=(_nv-_nb);let _nw=(_4e*_nb);_nd=(f16(1i)/4.0h);let _nx=(1.0h-_nd);_ne=(_nx-_nb);_nf=(f16(2i)/4.0h);let _ny=(1.0h-_nf);_ng=(_ny-_nb);_nh=(f16(3i)/4.0h);let _nz=(1.0h-_nh);_ni=(_nz-_nb);_nj=(_nv-_nd);_nk=(_nx-_nd);let _o0=(_4j*_nd);_nl=(_ny-_nd);_nm=(_nz-_nd);_nn=(_nv-_nf);_no=(_nx-_nf);_np=(_ny-_nf);let _o1=(_4o*_nf);_nq=(_nz-_nf);_nr=(_nv-_nh);_ns=(_nx-_nh);_nt=(_ny-_nh);_nu=(_nz-_nh);let _o2=(_4t*_nh);let _o3=(((((((((((((((_nw+(_4f*_nd))+(_4g*_nf))+(_4h*_nh))+(_4i*_nb))+_o0)+(_4k*_nf))+(_4l*_nh))+(_4m*_nb))+(_4n*_nd))+_o1)+(_4p*_nh))+(_4q*_nb))+(_4r*_nd))+(_4s*_nf))+_o2);let _o4=(((((((((((((((_nw+(_4f*_nb))+(_4g*_nb))+(_4h*_nb))+(_4i*_nd))+_o0)+(_4k*_nd))+(_4l*_nd))+(_4m*_nf))+(_4n*_nf))+_o1)+(_4p*_nf))+(_4q*_nh))+(_4r*_nh))+(_4s*_nh))+_o2);let _o5=((((((((((((((((_4e*_nc)+(_4f*_ne))+(_4g*_ng))+(_4h*_ni))+(_4i*_nj))+(_4j*_nk))+(_4k*_nl))+(_4l*_nm))+(_4m*_nn))+(_4n*_no))+(_4o*_np))+(_4p*_nq))+(_4q*_nr))+(_4r*_ns))+(_4s*_nt))+(_4t*_nu));let _o6=clamp((_8*vec3h(_o3.x,_o4.x,_o5.x)),vec3h(),_9);let _o7=clamp((_8*vec3h(_o3.y,_o4.y,_o5.y)),vec3h(),_9);let _o8=clamp((_8*vec3h(_o3.z,_o4.z,_o5.z)),vec3h(),_9);if((_n4>=0.0313720703125h)){let _o9=vec3h(_o6.x,_o7.x,_o8.x);let _oa=vec3h(_o6.y,_o7.y,_o8.y);let _ob=vec3h(_o6.z,_o7.z,_o8.z);let _oc=(_o9*_nb);let _od=(_oa*_nb);let _oe=(((_oc+_od)+(_ob*_nc))-_4e);let _of=(_o9*_nd);let _og=(((_of+_od)+(_ob*_ne))-_4f);let _oh=(_o9*_nf);let _oi=(((_oh+_od)+(_ob*_ng))-_4g);let _oj=(_o9*_nh);let _ok=(((_oj+_od)+(_ob*_ni))-_4h);let _ol=(_oa*_nd);let _om=(((_oc+_ol)+(_ob*_nj))-_4i);let _on=(((_of+_ol)+(_ob*_nk))-_4j);let _oo=(((_oh+_ol)+(_ob*_nl))-_4k);let _op=(((_oj+_ol)+(_ob*_nm))-_4l);let _oq=(_oa*_nf);let _or=(((_oc+_oq)+(_ob*_nn))-_4m);let _os=(((_of+_oq)+(_ob*_no))-_4n);let _ot=(((_oh+_oq)+(_ob*_np))-_4o);let _ou=(((_oj+_oq)+(_ob*_nq))-_4p);let _ov=(_oa*_nh);let _ow=(((_oc+_ov)+(_ob*_nr))-_4q);let _ox=(((_of+_ov)+(_ob*_ns))-_4r);let _oy=(((_oh+_ov)+(_ob*_nt))-_4s);let _oz=(((_oj+_ov)+(_ob*_nu))-_4t);if(((((((((((((((((dot(_oe,_oe)+dot(_og,_og))+dot(_oi,_oi))+dot(_ok,_ok))+dot(_om,_om))+dot(_on,_on))+dot(_oo,_oo))+dot(_op,_op))+dot(_or,_or))+dot(_os,_os))+dot(_ot,_ot))+dot(_ou,_ou))+dot(_ow,_ow))+dot(_ox,_ox))+dot(_oy,_oy))+dot(_oz,_oz))>0.01279449462890625h)){_1v=vec2u();break;}}let _p0=u32(((f32(_o6.x)*63.0f)+0.5f));let _p1=u32(((f32(_o6.z)*63.0f)+0.5f));let _p2=u32(((f32(_o7.z)*127.0f)+0.5f));let _p3=u32(((f32(_o8.z)*63.0f)+0.5f));let _p4=((_p0&1u)|((_p0<<bitcast<u32>(1i))&124u));let _p5=(_p3&24u);let _p6=(((_p4|((((_p3&7u)<<bitcast<u32>(7i))|(_p5<<bitcast<u32>(8i)))|((_p3&32u)<<bitcast<u32>(11i))))|(((_p2&63u)<<bitcast<u32>(17i))|((_p2&64u)<<bitcast<u32>(18i))))|(_p1<<bitcast<u32>(25i)));var _p7=vec2u(_p4,(((u32(((f32(_o8.y)*63.0f)+0.5f))|(u32(((f32(_o7.y)*127.0f)+0.5f))<<bitcast<u32>(6i)))|(u32(((f32(_o6.y)*63.0f)+0.5f))<<bitcast<u32>(13i)))|((u32(((f32(_o8.x)*63.0f)+0.5f))|(u32(((f32(_o7.x)*127.0f)+0.5f))<<bitcast<u32>(6i)))<<bitcast<u32>(19i))));_p7.x=_p6;let _p8=_p7;_n6=_p7;if(((_p1&32u)==0u)){_n5=_p8;_n5.x=(_p6|2147483648u);_n6=_n5;}_n8=_n6;if(((_p2&32u)==0u)){_n7=_n6;_n7.x=(_n6.x|8388608u);_n8=_n7;}let _p9=(_n8.x|select(57346u,1026u,((3i-bitcast<i32>(((_p3&6u)>>bitcast<u32>(1i))))>=bitcast<i32>((_p5>>bitcast<u32>(3i))))));let _pa=_n8.y;_dh=vec2u((((((_p9>>bitcast<u32>(8i))&65280u)|((_p9>>bitcast<u32>(24i))&255u))|((_p9<<bitcast<u32>(8i))&16711680u))|((_p9<<bitcast<u32>(24i))&4278190080u)),(((((_pa>>bitcast<u32>(8i))&65280u)|((_pa>>bitcast<u32>(24i))&255u))|((_pa<<bitcast<u32>(8i))&16711680u))|((_pa<<bitcast<u32>(24i))&4278190080u)));_1v=_dh;}}if((_1v.x!=0u)){_1x=_1v;break;}var _pb:f16;var _pc:u32;_pb=((_dg-_na)*85.0h);if((_pb<27.0h)){_dj=0u;}else{var _pd:u32;if((_pb<50.0h)){_di=1u;}else{var _pe:u32;if((_pb<77.0h)){_pc=2u;}else{var _pf:u32;if((_pb<111.0h)){_pd=3u;}else{if((_pb<152.0h)){_pe=4u;}else{_pf=select(6u,5u,(_pb<202.0h));_pe=_pf;}_pd=_pe;}_pc=_pd;}_di=_pc;}_dj=_di;}var _pg:f16;var _ph:u32;_f=_a;let _pi=(f16(_f[_dj])*0.0117645263671875h);_pg=((_df-_n9)*85.0h);if((_pg<27.0h)){_dl=0u;}else{var _pj:u32;if((_pg<50.0h)){_dk=1u;}else{var _pk:u32;if((_pg<77.0h)){_ph=2u;}else{var _pl:u32;if((_pg<111.0h)){_pj=3u;}else{if((_pg<152.0h)){_pk=4u;}else{_pl=select(6u,5u,(_pg<202.0h));_pk=_pl;}_pj=_pk;}_ph=_pj;}_dk=_ph;}_dl=_dk;}_e=_a;let _pm=(f16(_e[_dl])*0.0117645263671875h);let _pn=((_dg+_na)*0.5h);let _po=((_df+_n9)*0.5h);let _pp=(_m9-_pn);let _pq=select(0u,1u,(_pp<0.0h));let _pr=select(0u,1u,(abs(_pp)>_pi));let _ps=(0u|((_pr<<bitcast<u32>(0i))|(_pq<<bitcast<u32>(16i))));_d=_b;let _pt=bitcast<i32>(_d[_dj]);_dn=_pt;if((_pr!=0u)){_dm=(_pt>>bitcast<u32>(8i));_dn=_dm;}let _pu=(_dn&255i);_dp=_pu;if((_pq!=0u)){_do=-(_pu);_dp=_do;}let _pv=f16(_dp);let _pw=((1i&_n3)!=0i);if(_pw){let _px=(_ma-_po);_dq=select(0u,1u,(_px<0.0h));_dr=select(0u,1u,(abs(_px)>_pm));_du=_dq;_dv=_dr;}else{let _py=(_ma-_pn);_ds=select(0u,1u,(_py<0.0h));_dt=select(0u,1u,(abs(_py)>_pi));_du=_ds;_dv=_dt;}let _pz=(_ps|((_dv<<bitcast<u32>(4i))|(_du<<bitcast<u32>(20i))));_d=_b;let _q0=bitcast<i32>(_d[select(_dj,_dl,_pw)]);_dx=_q0;if((_dv!=0u)){_dw=(_q0>>bitcast<u32>(8i));_dx=_dw;}let _q1=(_dx&255i);_dz=_q1;if((_du!=0u)){_dy=-(_q1);_dz=_dy;}let _q2=f16(_dz);if(_pw){_e1=_pv;}else{_e0=(_pv+_q2);_e1=_e0;}let _q3=select(0.0h,_q2,_pw);let _q4=((2i&_n3)!=0i);if(_q4){let _q5=(_mb-_po);_e2=select(0u,1u,(_q5<0.0h));_e3=select(0u,1u,(abs(_q5)>_pm));_e6=_e2;_e7=_e3;}else{let _q6=(_mb-_pn);_e4=select(0u,1u,(_q6<0.0h));_e5=select(0u,1u,(abs(_q6)>_pi));_e6=_e4;_e7=_e5;}let _q7=(_pz|((_e7<<bitcast<u32>(8i))|(_e6<<bitcast<u32>(24i))));_d=_b;let _q8=bitcast<i32>(_d[select(_dj,_dl,_q4)]);_e9=_q8;if((_e7!=0u)){_e8=(_q8>>bitcast<u32>(8i));_e9=_e8;}let _q9=(_e9&255i);_eb=_q9;if((_e6!=0u)){_ea=-(_q9);_eb=_ea;}let _qa=f16(_eb);if(_q4){_ec=(_q3+_qa);_ee=_ec;_ef=_e1;}else{_ed=(_e1+_qa);_ee=_q3;_ef=_ed;}let _qb=((3i&_n3)!=0i);if(_qb){let _qc=(_mc-_po);_eg=select(0u,1u,(_qc<0.0h));_eh=select(0u,1u,(abs(_qc)>_pm));_ek=_eg;_el=_eh;}else{let _qd=(_mc-_pn);_ei=select(0u,1u,(_qd<0.0h));_ej=select(0u,1u,(abs(_qd)>_pi));_ek=_ei;_el=_ej;}let _qe=(_q7|((_el<<bitcast<u32>(12i))|(_ek<<bitcast<u32>(28i))));_d=_b;let _qf=bitcast<i32>(_d[select(_dj,_dl,_qb)]);_en=_qf;if((_el!=0u)){_em=(_qf>>bitcast<u32>(8i));_en=_em;}let _qg=(_en&255i);_ep=_qg;if((_ek!=0u)){_eo=-(_qg);_ep=_eo;}let _qh=f16(_ep);if(_qb){_eq=(_ee+_qh);_es=_eq;_et=_ef;}else{_er=(_ef+_qh);_es=_ee;_et=_er;}let _qi=((4i&_n3)!=0i);if(_qi){let _qj=(_md-_po);_eu=select(0u,1u,(_qj<0.0h));_ev=select(0u,1u,(abs(_qj)>_pm));_ey=_eu;_ez=_ev;}else{let _qk=(_md-_pn);_ew=select(0u,1u,(_qk<0.0h));_ex=select(0u,1u,(abs(_qk)>_pi));_ey=_ew;_ez=_ex;}let _ql=(_qe|((_ez<<bitcast<u32>(1i))|(_ey<<bitcast<u32>(17i))));_d=_b;let _qm=bitcast<i32>(_d[select(_dj,_dl,_qi)]);_f1=_qm;if((_ez!=0u)){_f0=(_qm>>bitcast<u32>(8i));_f1=_f0;}let _qn=(_f1&255i);_f3=_qn;if((_ey!=0u)){_f2=-(_qn);_f3=_f2;}let _qo=f16(_f3);if(_qi){_f4=(_es+_qo);_f6=_f4;_f7=_et;}else{_f5=(_et+_qo);_f6=_es;_f7=_f5;}let _qp=((5i&_n3)!=0i);if(_qp){let _qq=(_me-_po);_f8=select(0u,1u,(_qq<0.0h));_f9=select(0u,1u,(abs(_qq)>_pm));_fc=_f8;_fd=_f9;}else{let _qr=(_me-_pn);_fa=select(0u,1u,(_qr<0.0h));_fb=select(0u,1u,(abs(_qr)>_pi));_fc=_fa;_fd=_fb;}let _qs=(_ql|((_fd<<bitcast<u32>(5i))|(_fc<<bitcast<u32>(21i))));_d=_b;let _qt=bitcast<i32>(_d[select(_dj,_dl,_qp)]);_ff=_qt;if((_fd!=0u)){_fe=(_qt>>bitcast<u32>(8i));_ff=_fe;}let _qu=(_ff&255i);_fh=_qu;if((_fc!=0u)){_fg=-(_qu);_fh=_fg;}let _qv=f16(_fh);if(_qp){_fi=(_f6+_qv);_fk=_fi;_fl=_f7;}else{_fj=(_f7+_qv);_fk=_f6;_fl=_fj;}let _qw=((6i&_n3)!=0i);if(_qw){let _qx=(_mf-_po);_fm=select(0u,1u,(_qx<0.0h));_fn=select(0u,1u,(abs(_qx)>_pm));_fq=_fm;_fr=_fn;}else{let _qy=(_mf-_pn);_fo=select(0u,1u,(_qy<0.0h));_fp=select(0u,1u,(abs(_qy)>_pi));_fq=_fo;_fr=_fp;}let _qz=(_qs|((_fr<<bitcast<u32>(9i))|(_fq<<bitcast<u32>(25i))));_d=_b;let _r0=bitcast<i32>(_d[select(_dj,_dl,_qw)]);_ft=_r0;if((_fr!=0u)){_fs=(_r0>>bitcast<u32>(8i));_ft=_fs;}let _r1=(_ft&255i);_fv=_r1;if((_fq!=0u)){_fu=-(_r1);_fv=_fu;}let _r2=f16(_fv);if(_qw){_fw=(_fk+_r2);_fy=_fw;_fz=_fl;}else{_fx=(_fl+_r2);_fy=_fk;_fz=_fx;}let _r3=((7i&_n3)!=0i);if(_r3){let _r4=(_mg-_po);_g0=select(0u,1u,(_r4<0.0h));_g1=select(0u,1u,(abs(_r4)>_pm));_g4=_g0;_g5=_g1;}else{let _r5=(_mg-_pn);_g2=select(0u,1u,(_r5<0.0h));_g3=select(0u,1u,(abs(_r5)>_pi));_g4=_g2;_g5=_g3;}let _r6=(_qz|((_g5<<bitcast<u32>(13i))|(_g4<<bitcast<u32>(29i))));_d=_b;let _r7=bitcast<i32>(_d[select(_dj,_dl,_r3)]);_g7=_r7;if((_g5!=0u)){_g6=(_r7>>bitcast<u32>(8i));_g7=_g6;}let _r8=(_g7&255i);_g9=_r8;if((_g4!=0u)){_g8=-(_r8);_g9=_g8;}let _r9=f16(_g9);if(_r3){_ga=(_fy+_r9);_gc=_ga;_gd=_fz;}else{_gb=(_fz+_r9);_gc=_fy;_gd=_gb;}let _ra=((8i&_n3)!=0i);if(_ra){let _rb=(_mh-_po);_ge=select(0u,1u,(_rb<0.0h));_gf=select(0u,1u,(abs(_rb)>_pm));_gi=_ge;_gj=_gf;}else{let _rc=(_mh-_pn);_gg=select(0u,1u,(_rc<0.0h));_gh=select(0u,1u,(abs(_rc)>_pi));_gi=_gg;_gj=_gh;}let _rd=(_r6|((_gj<<bitcast<u32>(2i))|(_gi<<bitcast<u32>(18i))));_d=_b;let _re=bitcast<i32>(_d[select(_dj,_dl,_ra)]);_gl=_re;if((_gj!=0u)){_gk=(_re>>bitcast<u32>(8i));_gl=_gk;}let _rf=(_gl&255i);_gn=_rf;if((_gi!=0u)){_gm=-(_rf);_gn=_gm;}let _rg=f16(_gn);if(_ra){_go=(_gc+_rg);_gq=_go;_gr=_gd;}else{_gp=(_gd+_rg);_gq=_gc;_gr=_gp;}let _rh=((9i&_n3)!=0i);if(_rh){let _ri=(_mi-_po);_gs=select(0u,1u,(_ri<0.0h));_gt=select(0u,1u,(abs(_ri)>_pm));_gw=_gs;_gx=_gt;}else{let _rj=(_mi-_pn);_gu=select(0u,1u,(_rj<0.0h));_gv=select(0u,1u,(abs(_rj)>_pi));_gw=_gu;_gx=_gv;}let _rk=(_rd|((_gx<<bitcast<u32>(6i))|(_gw<<bitcast<u32>(22i))));_d=_b;let _rl=bitcast<i32>(_d[select(_dj,_dl,_rh)]);_gz=_rl;if((_gx!=0u)){_gy=(_rl>>bitcast<u32>(8i));_gz=_gy;}let _rm=(_gz&255i);_h1=_rm;if((_gw!=0u)){_h0=-(_rm);_h1=_h0;}let _rn=f16(_h1);if(_rh){_h2=(_gq+_rn);_h4=_h2;_h5=_gr;}else{_h3=(_gr+_rn);_h4=_gq;_h5=_h3;}let _ro=((10i&_n3)!=0i);if(_ro){let _rp=(_mj-_po);_h6=select(0u,1u,(_rp<0.0h));_h7=select(0u,1u,(abs(_rp)>_pm));_ha=_h6;_hb=_h7;}else{let _rq=(_mj-_pn);_h8=select(0u,1u,(_rq<0.0h));_h9=select(0u,1u,(abs(_rq)>_pi));_ha=_h8;_hb=_h9;}let _rr=(_rk|((_hb<<bitcast<u32>(10i))|(_ha<<bitcast<u32>(26i))));_d=_b;let _rs=bitcast<i32>(_d[select(_dj,_dl,_ro)]);_hd=_rs;if((_hb!=0u)){_hc=(_rs>>bitcast<u32>(8i));_hd=_hc;}let _rt=(_hd&255i);_hf=_rt;if((_ha!=0u)){_he=-(_rt);_hf=_he;}let _ru=f16(_hf);if(_ro){_hg=(_h4+_ru);_hi=_hg;_hj=_h5;}else{_hh=(_h5+_ru);_hi=_h4;_hj=_hh;}let _rv=((11i&_n3)!=0i);if(_rv){let _rw=(_mk-_po);_hk=select(0u,1u,(_rw<0.0h));_hl=select(0u,1u,(abs(_rw)>_pm));_ho=_hk;_hp=_hl;}else{let _rx=(_mk-_pn);_hm=select(0u,1u,(_rx<0.0h));_hn=select(0u,1u,(abs(_rx)>_pi));_ho=_hm;_hp=_hn;}let _ry=(_rr|((_hp<<bitcast<u32>(14i))|(_ho<<bitcast<u32>(30i))));_d=_b;let _rz=bitcast<i32>(_d[select(_dj,_dl,_rv)]);_hr=_rz;if((_hp!=0u)){_hq=(_rz>>bitcast<u32>(8i));_hr=_hq;}let _s0=(_hr&255i);_ht=_s0;if((_ho!=0u)){_hs=-(_s0);_ht=_hs;}let _s1=f16(_ht);if(_rv){_hu=(_hi+_s1);_hw=_hu;_hx=_hj;}else{_hv=(_hj+_s1);_hw=_hi;_hx=_hv;}let _s2=((12i&_n3)!=0i);if(_s2){let _s3=(_ml-_po);_hy=select(0u,1u,(_s3<0.0h));_hz=select(0u,1u,(abs(_s3)>_pm));_i2=_hy;_i3=_hz;}else{let _s4=(_ml-_pn);_i0=select(0u,1u,(_s4<0.0h));_i1=select(0u,1u,(abs(_s4)>_pi));_i2=_i0;_i3=_i1;}let _s5=(_ry|((_i3<<bitcast<u32>(3i))|(_i2<<bitcast<u32>(19i))));_d=_b;let _s6=bitcast<i32>(_d[select(_dj,_dl,_s2)]);_i5=_s6;if((_i3!=0u)){_i4=(_s6>>bitcast<u32>(8i));_i5=_i4;}let _s7=(_i5&255i);_i7=_s7;if((_i2!=0u)){_i6=-(_s7);_i7=_i6;}let _s8=f16(_i7);if(_s2){_i8=(_hw+_s8);_ia=_i8;_ib=_hx;}else{_i9=(_hx+_s8);_ia=_hw;_ib=_i9;}let _s9=((13i&_n3)!=0i);if(_s9){let _sa=(_mm-_po);_ic=select(0u,1u,(_sa<0.0h));_id=select(0u,1u,(abs(_sa)>_pm));_ig=_ic;_ih=_id;}else{let _sb=(_mm-_pn);_ie=select(0u,1u,(_sb<0.0h));_if=select(0u,1u,(abs(_sb)>_pi));_ig=_ie;_ih=_if;}let _sc=(_s5|((_ih<<bitcast<u32>(7i))|(_ig<<bitcast<u32>(23i))));_d=_b;let _sd=bitcast<i32>(_d[select(_dj,_dl,_s9)]);_ij=_sd;if((_ih!=0u)){_ii=(_sd>>bitcast<u32>(8i));_ij=_ii;}let _se=(_ij&255i);_il=_se;if((_ig!=0u)){_ik=-(_se);_il=_ik;}let _sf=f16(_il);if(_s9){_im=(_ia+_sf);_io=_im;_ip=_ib;}else{_in=(_ib+_sf);_io=_ia;_ip=_in;}let _sg=((14i&_n3)!=0i);if(_sg){let _sh=(_mn-_po);_iq=select(0u,1u,(_sh<0.0h));_ir=select(0u,1u,(abs(_sh)>_pm));_iu=_iq;_iv=_ir;}else{let _si=(_mn-_pn);_is=select(0u,1u,(_si<0.0h));_it=select(0u,1u,(abs(_si)>_pi));_iu=_is;_iv=_it;}let _sj=(_sc|((_iv<<bitcast<u32>(11i))|(_iu<<bitcast<u32>(27i))));_d=_b;let _sk=bitcast<i32>(_d[select(_dj,_dl,_sg)]);_ix=_sk;if((_iv!=0u)){_iw=(_sk>>bitcast<u32>(8i));_ix=_iw;}let _sl=(_ix&255i);_iz=_sl;if((_iu!=0u)){_iy=-(_sl);_iz=_iy;}let _sm=f16(_iz);if(_sg){_j0=(_io+_sm);_j2=_j0;_j3=_ip;}else{_j1=(_ip+_sm);_j2=_io;_j3=_j1;}let _sn=((15i&_n3)!=0i);if(_sn){let _so=(_mo-_po);_j4=select(0u,1u,(_so<0.0h));_j5=select(0u,1u,(abs(_so)>_pm));_j8=_j4;_j9=_j5;}else{let _sp=(_mo-_pn);_j6=select(0u,1u,(_sp<0.0h));_j7=select(0u,1u,(abs(_sp)>_pi));_j8=_j6;_j9=_j7;}let _sq=(_sj|((_j9<<bitcast<u32>(15i))|(_j8<<bitcast<u32>(31i))));_d=_b;let _sr=bitcast<i32>(_d[select(_dj,_dl,_sn)]);_jb=_sr;if((_j9!=0u)){_ja=(_sr>>bitcast<u32>(8i));_jb=_ja;}let _ss=(_jb&255i);_jd=_ss;if((_j8!=0u)){_jc=-(_ss);_jd=_jc;}let _st=f16(_jd);if(_sn){_je=(_j2+_st);_jg=_je;_jh=_j3;}else{_jf=(_j3+_st);_jg=_j2;_jh=_jf;}var _su:vec3h;var _sv:f16;var _sw:vec3h;var _sx:vec3h;var _sy:vec3h;var _sz:vec3h;var _t0:vec3h;var _t1:vec3h;let _t2=clamp(((_de-vec3h((_jh*0.0039215087890625h)))*0.125h),vec3h(),_9);let _t3=clamp(((_dd-vec3h((_jg*0.0039215087890625h)))*0.125h),vec3h(),_9);let _t4=_t2.x;let _t5=trunc((round((_t4*31.0h))*8.25h));let _t6=_t2.y;let _t7=trunc((round((_t6*31.0h))*8.25h));let _t8=_t2.z;let _t9=trunc((round((_t8*31.0h))*8.25h));let _ta=_t3.x;let _tb=trunc((round((_ta*31.0h))*8.25h));let _tc=_t3.y;let _td=trunc((round((_tc*31.0h))*8.25h));let _te=_t3.z;let _tf=trunc((round((_te*31.0h))*8.25h));_su=trunc(((vec3h(_tb,_td,_tf)-vec3h(_t5,_t7,_t9))*0.125h));_sv=_su.x;let _tg=(max(max(abs(_sv),abs(_su.y)),abs(_su.z))<4.0h);if(_tg){_sx=_su;if((_sv<0.0h)){_sw=_su;_sw.x=(_sv+8.0h);_sx=_sw;}let _th=_sx.y;_sz=_sx;if((_th<0.0h)){_sy=_sx;_sy.y=(_th+8.0h);_sz=_sy;}let _ti=_sz.z;_t1=_sz;if((_ti<0.0h)){_t0=_sz;_t0.z=(_ti+8.0h);_t1=_t0;}_ji=((((u32(_t9)&248u)|((u32(_t7)&248u)<<bitcast<u32>(8i)))|((u32(_t5)&248u)<<bitcast<u32>(16i)))|(((u32(_t1.z)&7u)|((u32(_t1.y)&7u)<<bitcast<u32>(8i)))|((u32(_t1.x)&7u)<<bitcast<u32>(16i))));_jk=_ji;}else{_jj=((((u32(trunc((round((_t8*15.0h))*17.0h)))&240u)|((u32(trunc((round((_t6*15.0h))*17.0h)))&240u)<<bitcast<u32>(8i)))|((u32(trunc((round((_t4*15.0h))*17.0h)))&240u)<<bitcast<u32>(16i)))|((((u32(trunc((round((_te*15.0h))*17.0h)))&240u)>>bitcast<u32>(4i))|((u32(trunc((round((_tc*15.0h))*17.0h)))&240u)<<bitcast<u32>(4i)))|((u32(trunc((round((_ta*15.0h))*17.0h)))&240u)<<bitcast<u32>(12i))));_jk=_jj;}let _tj=select(0u,1u,_tg);let _tk=(((_t5+_t7)+_t9)*0.0039215087890625h);let _tl=(((_tb+_td)+_tf)*0.0039215087890625h);let _tm=(_m9-_tk);let _tn=(_sq|((select(0u,1u,(abs(_tm)>_pi))<<bitcast<u32>(0i))|(select(0u,1u,(_tm<0.0h))<<bitcast<u32>(16i))));if(_pw){let _to=(_ma-_tl);_jl=select(0u,1u,(_to<0.0h));_jm=select(0u,1u,(abs(_to)>_pm));_jp=_jl;_jq=_jm;}else{let _tp=(_ma-_tk);_jn=select(0u,1u,(_tp<0.0h));_jo=select(0u,1u,(abs(_tp)>_pi));_jp=_jn;_jq=_jo;}let _tq=(_tn|((_jq<<bitcast<u32>(4i))|(_jp<<bitcast<u32>(20i))));if(_q4){let _tr=(_mb-_tl);_jr=select(0u,1u,(_tr<0.0h));_js=select(0u,1u,(abs(_tr)>_pm));_jv=_jr;_jw=_js;}else{let _ts=(_mb-_tk);_jt=select(0u,1u,(_ts<0.0h));_ju=select(0u,1u,(abs(_ts)>_pi));_jv=_jt;_jw=_ju;}let _tt=(_tq|((_jw<<bitcast<u32>(8i))|(_jv<<bitcast<u32>(24i))));if(_qb){let _tu=(_mc-_tl);_jx=select(0u,1u,(_tu<0.0h));_jy=select(0u,1u,(abs(_tu)>_pm));_k1=_jx;_k2=_jy;}else{let _tv=(_mc-_tk);_jz=select(0u,1u,(_tv<0.0h));_k0=select(0u,1u,(abs(_tv)>_pi));_k1=_jz;_k2=_k0;}let _tw=(_tt|((_k2<<bitcast<u32>(12i))|(_k1<<bitcast<u32>(28i))));if(_qi){let _tx=(_md-_tl);_k3=select(0u,1u,(_tx<0.0h));_k4=select(0u,1u,(abs(_tx)>_pm));_k7=_k3;_k8=_k4;}else{let _ty=(_md-_tk);_k5=select(0u,1u,(_ty<0.0h));_k6=select(0u,1u,(abs(_ty)>_pi));_k7=_k5;_k8=_k6;}let _tz=(_tw|((_k8<<bitcast<u32>(1i))|(_k7<<bitcast<u32>(17i))));if(_qp){let _u0=(_me-_tl);_k9=select(0u,1u,(_u0<0.0h));_ka=select(0u,1u,(abs(_u0)>_pm));_kd=_k9;_ke=_ka;}else{let _u1=(_me-_tk);_kb=select(0u,1u,(_u1<0.0h));_kc=select(0u,1u,(abs(_u1)>_pi));_kd=_kb;_ke=_kc;}let _u2=(_tz|((_ke<<bitcast<u32>(5i))|(_kd<<bitcast<u32>(21i))));if(_qw){let _u3=(_mf-_tl);_kf=select(0u,1u,(_u3<0.0h));_kg=select(0u,1u,(abs(_u3)>_pm));_kj=_kf;_kk=_kg;}else{let _u4=(_mf-_tk);_kh=select(0u,1u,(_u4<0.0h));_ki=select(0u,1u,(abs(_u4)>_pi));_kj=_kh;_kk=_ki;}let _u5=(_u2|((_kk<<bitcast<u32>(9i))|(_kj<<bitcast<u32>(25i))));if(_r3){let _u6=(_mg-_tl);_kl=select(0u,1u,(_u6<0.0h));_km=select(0u,1u,(abs(_u6)>_pm));_kp=_kl;_kq=_km;}else{let _u7=(_mg-_tk);_kn=select(0u,1u,(_u7<0.0h));_ko=select(0u,1u,(abs(_u7)>_pi));_kp=_kn;_kq=_ko;}let _u8=(_u5|((_kq<<bitcast<u32>(13i))|(_kp<<bitcast<u32>(29i))));if(_ra){let _u9=(_mh-_tl);_kr=select(0u,1u,(_u9<0.0h));_ks=select(0u,1u,(abs(_u9)>_pm));_kv=_kr;_kw=_ks;}else{let _ua=(_mh-_tk);_kt=select(0u,1u,(_ua<0.0h));_ku=select(0u,1u,(abs(_ua)>_pi));_kv=_kt;_kw=_ku;}let _ub=(_u8|((_kw<<bitcast<u32>(2i))|(_kv<<bitcast<u32>(18i))));if(_rh){let _uc=(_mi-_tl);_kx=select(0u,1u,(_uc<0.0h));_ky=select(0u,1u,(abs(_uc)>_pm));_l1=_kx;_l2=_ky;}else{let _ud=(_mi-_tk);_kz=select(0u,1u,(_ud<0.0h));_l0=select(0u,1u,(abs(_ud)>_pi));_l1=_kz;_l2=_l0;}let _ue=(_ub|((_l2<<bitcast<u32>(6i))|(_l1<<bitcast<u32>(22i))));if(_ro){let _uf=(_mj-_tl);_l3=select(0u,1u,(_uf<0.0h));_l4=select(0u,1u,(abs(_uf)>_pm));_l7=_l3;_l8=_l4;}else{let _ug=(_mj-_tk);_l5=select(0u,1u,(_ug<0.0h));_l6=select(0u,1u,(abs(_ug)>_pi));_l7=_l5;_l8=_l6;}let _uh=(_ue|((_l8<<bitcast<u32>(10i))|(_l7<<bitcast<u32>(26i))));if(_rv){let _ui=(_mk-_tl);_l9=select(0u,1u,(_ui<0.0h));_la=select(0u,1u,(abs(_ui)>_pm));_ld=_l9;_le=_la;}else{let _uj=(_mk-_tk);_lb=select(0u,1u,(_uj<0.0h));_lc=select(0u,1u,(abs(_uj)>_pi));_ld=_lb;_le=_lc;}let _uk=(_uh|((_le<<bitcast<u32>(14i))|(_ld<<bitcast<u32>(30i))));if(_s2){let _ul=(_ml-_tl);_lf=select(0u,1u,(_ul<0.0h));_lg=select(0u,1u,(abs(_ul)>_pm));_lj=_lf;_lk=_lg;}else{let _um=(_ml-_tk);_lh=select(0u,1u,(_um<0.0h));_li=select(0u,1u,(abs(_um)>_pi));_lj=_lh;_lk=_li;}let _un=(_uk|((_lk<<bitcast<u32>(3i))|(_lj<<bitcast<u32>(19i))));if(_s9){let _uo=(_mm-_tl);_ll=select(0u,1u,(_uo<0.0h));_lm=select(0u,1u,(abs(_uo)>_pm));_lp=_ll;_lq=_lm;}else{let _up=(_mm-_tk);_ln=select(0u,1u,(_up<0.0h));_lo=select(0u,1u,(abs(_up)>_pi));_lp=_ln;_lq=_lo;}let _uq=(_un|((_lq<<bitcast<u32>(7i))|(_lp<<bitcast<u32>(23i))));if(_sg){let _ur=(_mn-_tl);_lr=select(0u,1u,(_ur<0.0h));_ls=select(0u,1u,(abs(_ur)>_pm));_lv=_lr;_lw=_ls;}else{let _us=(_mn-_tk);_lt=select(0u,1u,(_us<0.0h));_lu=select(0u,1u,(abs(_us)>_pi));_lv=_lt;_lw=_lu;}let _ut=(_uq|((_lw<<bitcast<u32>(11i))|(_lv<<bitcast<u32>(27i))));if(_sn){let _uu=(_mo-_tl);_lx=select(0u,1u,(_uu<0.0h));_ly=select(0u,1u,(abs(_uu)>_pm));_m1=_lx;_m2=_ly;}else{let _uv=(_mo-_tk);_lz=select(0u,1u,(_uv<0.0h));_m0=select(0u,1u,(abs(_uv)>_pi));_m1=_lz;_m2=_m0;}let _uw=(_ut|((_m2<<bitcast<u32>(15i))|(_m1<<bitcast<u32>(31i))));_1w=vec2u((((((((_dj<<bitcast<u32>(29i))|(_dl<<bitcast<u32>(26i)))|(_tj<<bitcast<u32>(25i)))|(_n1<<bitcast<u32>(24i)))|((_jk&255u)<<bitcast<u32>(16i)))|(_jk&65280u))|(_jk>>bitcast<u32>(16i))),(((((_uw>>bitcast<u32>(8i))&65280u)|((_uw>>bitcast<u32>(24i))&255u))|((_uw<<bitcast<u32>(8i))&16711680u))|((_uw<<bitcast<u32>(24i))&4278190080u)));_1x=_1w;}}x_3257._0[((_20.y*((_1z+15u)&4294967280u))+_22)]=vec4u(_m3,_m4,_1x.x,_1x.y);}}return;}@compute @workgroup_size(16i, 16i, 1i) fn main(@builtin(global_invocation_id) _ux:vec3u,@builtin(local_invocation_id) _uy:vec3u,@builtin(workgroup_id) _uz:vec3u){x_3160=_ux;x_3167=_uy;_c();}";
|
|
2
|
-
export {
|
|
3
|
-
spark_etc2_rgba as default
|
|
4
|
-
};
|
package/dist/utils-CnL93Jcx.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const utils = "struct Params {\n to_srgb: u32,\n};\n\n@group(0) @binding(0) var src : texture_2d<f32>;\n@group(0) @binding(1) var dst : texture_storage_2d<rgba8unorm, write>;\n@group(0) @binding(2) var smp: sampler;\n@group(0) @binding(3) var<uniform> params: Params;\n\nfn linear_to_srgb_vec3(c: vec3<f32>) -> vec3<f32> {\n return select(\n 1.055 * pow(c, vec3<f32>(1.0 / 2.4)) - 0.055,\n c * 12.92,\n c <= vec3<f32>(0.0031308)\n );\n}\n\nfn linear_to_srgb_vec4(c: vec4<f32>) -> vec4<f32> {\n return vec4<f32>(linear_to_srgb_vec3(c.xyz), c.w);\n}\n\n@compute @workgroup_size(8, 8)\nfn mipmap(@builtin(global_invocation_id) id : vec3<u32>) {\n let dstSize = textureDimensions(dst).xy;\n if (id.x >= dstSize.x || id.y >= dstSize.y) {\n return;\n }\n\n let size_rcp = vec2f(1.0) / vec2f(dstSize);\n let uv0 = vec2f(id.xy) * size_rcp;\n let uv1 = uv0 + size_rcp;\n\n var color = vec4f(0.0);\n color += textureSampleLevel(src, smp, vec2f(uv0.x, uv0.y), 0);\n color += textureSampleLevel(src, smp, vec2f(uv1.x, uv0.y), 0);\n color += textureSampleLevel(src, smp, vec2f(uv0.x, uv1.y), 0);\n color += textureSampleLevel(src, smp, vec2f(uv1.x, uv1.y), 0);\n color *= 0.25; \n\n if (params.to_srgb != 0) {\n color = linear_to_srgb_vec4(color);\n }\n\n textureStore(dst, id.xy, color);\n}\n\n@compute @workgroup_size(8, 8)\nfn resize(@builtin(global_invocation_id) id : vec3<u32>) {\n let dstSize = textureDimensions(dst).xy;\n if (id.x >= dstSize.x || id.y >= dstSize.y) {\n return;\n }\n\n let uv = (vec2f(id.xy) + vec2f(0.5)) / vec2f(dstSize);\n var color = textureSampleLevel(src, smp, uv, 0);\n\n if (params.to_srgb != 0) {\n color = linear_to_srgb_vec4(color);\n }\n\n textureStore(dst, id.xy, color);\n}\n\n@compute @workgroup_size(8, 8)\nfn flipy(@builtin(global_invocation_id) id : vec3<u32>) {\n let dstSize = textureDimensions(dst).xy;\n if (id.x >= dstSize.x || id.y >= dstSize.y) {\n return;\n }\n\n let uv = (vec2f(f32(id.x), f32(dstSize.y - 1u - id.y)) + vec2f(0.5)) / vec2f(dstSize);\n var color = textureSampleLevel(src, smp, uv, 0);\n\n if (params.to_srgb != 0) {\n color = linear_to_srgb_vec4(color);\n }\n\n textureStore(dst, id.xy, color);\n}\n\n\n@group(0) @binding(1) var<storage, read_write> global_counters: array<atomic<u32>, 3>;\n\nvar<workgroup> local_opaque: atomic<u32>;\nvar<workgroup> local_grayscale: atomic<u32>;\nvar<workgroup> local_invalid_normals: atomic<u32>;\n\n@compute @workgroup_size(8, 8)\nfn detect_channel_count(@builtin(global_invocation_id) global_id: vec3<u32>,\n @builtin(local_invocation_index) local_id: u32) {\n \n if (local_id == 0u) {\n atomicStore(&local_opaque, 1u);\n atomicStore(&local_grayscale, 1u);\n atomicStore(&local_invalid_normals, 0u);\n }\n workgroupBarrier();\n\n let tex_size = textureDimensions(src);\n if (global_id.x < tex_size.x && global_id.y < tex_size.y) {\n\n let color = textureLoad(src, vec2<i32>(global_id.xy), 0);\n\n // Alpha check\n if (color.a < 1.0) {\n atomicStore(&local_opaque, 0u);\n }\n\n // Grayscale check\n if (color.r != color.g || color.g != color.b) {\n atomicStore(&local_grayscale, 0u);\n }\n\n // Normal check\n let n = color.rgb * 2.0 - vec3(1.0);\n let len = length(n);\n\n if (abs(len - 1.0) > 0.2 || n.z < -0.1) {\n atomicAdd(&local_invalid_normals, 1u);\n }\n }\n\n workgroupBarrier();\n\n if (local_id == 0u) {\n // If not opaque, write not-opaque flag.\n if (atomicLoad(&local_opaque) == 0u) {\n atomicStore(&global_counters[0], 1u);\n }\n\n // If not greyscale, write not greyscale flag.\n if (atomicLoad(&local_grayscale) == 0u) {\n atomicStore(&global_counters[1], 1u);\n }\n\n // Add number of texels that are not normal.\n atomicAdd(&global_counters[2], atomicLoad(&local_invalid_normals));\n }\n}\n\n\n// @@ Compute RMSE?\n\n\n";
|
|
2
|
-
export {
|
|
3
|
-
utils as default
|
|
4
|
-
};
|