From 0d8184910c784c655e47866487bcd44b1f601746 Mon Sep 17 00:00:00 2001 From: Aleksander Katan Date: Mon, 29 Sep 2025 12:14:18 +0200 Subject: [PATCH 1/3] Fix big int handling --- packages/typegpu-color/src/oklab.ts | 2 +- packages/typegpu/src/tgsl/generationHelpers.ts | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/typegpu-color/src/oklab.ts b/packages/typegpu-color/src/oklab.ts index c85c7453c..56f37235f 100644 --- a/packages/typegpu-color/src/oklab.ts +++ b/packages/typegpu-color/src/oklab.ts @@ -170,7 +170,7 @@ const findGamutIntersection = tgpu.fn( [f32, f32, f32, f32, f32, LC], f32, )((a, b, L1, C1, L0, cusp) => { - const FLT_MAX = f32(3.40282346e38); + const FLT_MAX = 3.40282346e38; // Find the intersection for upper and lower half separately let t = f32(0); diff --git a/packages/typegpu/src/tgsl/generationHelpers.ts b/packages/typegpu/src/tgsl/generationHelpers.ts index 6022c4525..d8aabfa25 100644 --- a/packages/typegpu/src/tgsl/generationHelpers.ts +++ b/packages/typegpu/src/tgsl/generationHelpers.ts @@ -168,6 +168,9 @@ export function getTypeForIndexAccess( } export function numericLiteralToSnippet(value: number): Snippet { + if (Math.abs(value) >= 2 ** 63) { + return snip(value, abstractFloat); + } // WGSL AbstractInt uses 64-bit precision, but JS numbers are only safe up to 2^53 - 1. // Warn when values exceed this range to prevent precision loss. if (Number.isInteger(value)) { From 0ff84bb912201620dfd5374831c5d5213e1c7a41 Mon Sep 17 00:00:00 2001 From: Aleksander Katan Date: Mon, 29 Sep 2025 12:16:16 +0200 Subject: [PATCH 2/3] Update test --- packages/typegpu/tests/examples/individual/oklab.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typegpu/tests/examples/individual/oklab.test.ts b/packages/typegpu/tests/examples/individual/oklab.test.ts index dcb3b2f5d..2966c9a85 100644 --- a/packages/typegpu/tests/examples/individual/oklab.test.ts +++ b/packages/typegpu/tests/examples/individual/oklab.test.ts @@ -136,7 +136,7 @@ describe('oklab example', () => { } fn findGamutIntersection_13(a: f32, b: f32, L1: f32, C1: f32, L0: f32, cusp: LC_12) -> f32 { - var FLT_MAX = 3.4028234663852886e+38f; + var FLT_MAX = 3.40282346e+38; var t = 0f; if (((((L1 - L0) * cusp.C) - ((cusp.L - L0) * C1)) <= 0)) { t = ((cusp.C * L0) / ((C1 * cusp.L) + (cusp.C * (L0 - L1)))); From a3e9c1c01c919a9c5eeb786bb55a92f2200ff1f6 Mon Sep 17 00:00:00 2001 From: Aleksander Katan Date: Tue, 30 Sep 2025 10:42:08 +0200 Subject: [PATCH 3/3] > instead of >= --- packages/typegpu/src/tgsl/generationHelpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typegpu/src/tgsl/generationHelpers.ts b/packages/typegpu/src/tgsl/generationHelpers.ts index d8aabfa25..08cb5d1a3 100644 --- a/packages/typegpu/src/tgsl/generationHelpers.ts +++ b/packages/typegpu/src/tgsl/generationHelpers.ts @@ -168,7 +168,7 @@ export function getTypeForIndexAccess( } export function numericLiteralToSnippet(value: number): Snippet { - if (Math.abs(value) >= 2 ** 63) { + if (Math.abs(value) > 2 ** 63) { return snip(value, abstractFloat); } // WGSL AbstractInt uses 64-bit precision, but JS numbers are only safe up to 2^53 - 1.