From de3effb95330b6855ceb17d6ef232e2108874a6a Mon Sep 17 00:00:00 2001 From: Raphael Fakhri <153192858+RaphaelFakhri@users.noreply.github.com> Date: Sat, 24 Oct 2026 18:51:23 +0000 Subject: [PATCH 1/2] fix(tgpu-gen): Generate matrix and f16 vector schemas for templated WGSL types --- packages/tgpu-gen/gen.mjs | 6 ++++++ packages/tgpu-gen/tests/structs.test.ts | 26 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/packages/tgpu-gen/gen.mjs b/packages/tgpu-gen/gen.mjs index 33e560f8c4..fdeede7443 100644 --- a/packages/tgpu-gen/gen.mjs +++ b/packages/tgpu-gen/gen.mjs @@ -231,6 +231,12 @@ function typeToAlias(type, format) { if (['vec2', 'vec3', 'vec4'].includes(type) && ['i32', 'u32', 'f32'].includes(format)) { return type + format[0]; } + if (['vec2', 'vec3', 'vec4'].includes(type) && format === 'f16') { + return `${type}h`; + } + if (['mat2x2', 'mat3x3', 'mat4x4'].includes(type) && format === 'f32') { + return `${type}f`; + } } /** diff --git a/packages/tgpu-gen/tests/structs.test.ts b/packages/tgpu-gen/tests/structs.test.ts index a1f2526228..94fba76b62 100644 --- a/packages/tgpu-gen/tests/structs.test.ts +++ b/packages/tgpu-gen/tests/structs.test.ts @@ -80,6 +80,32 @@ export const Data = d.struct({ expect(generate(wgsl)).toContain(expected); }); + it('replaces f16 vector and matrix member types with predeclared aliases', () => { + const wgsl = ` +enable f16; + +struct Data { + a1: vec2, + a2: vec3, + a3: vec4, + a4: mat2x2, + a5: mat3x3, + a6: mat4x4, +};`; + + const expected = `\ +export const Data = d.struct({ + a1: d.vec2h, + a2: d.vec3h, + a3: d.vec4h, + a4: d.mat2x2f, + a5: d.mat3x3f, + a6: d.mat4x4f, +});`; + + expect(generate(wgsl)).toContain(expected); + }); + it('generates structs with nested structs', () => { const wgsl = ` struct TriangleData { From e1f07795249b94b0410afff9615e6daae8692ebf Mon Sep 17 00:00:00 2001 From: RaphaelFakhri <153192858+RaphaelFakhri@users.noreply.github.com> Date: Sun, 25 Oct 2026 22:56:11 +0000 Subject: [PATCH 2/2] fix(tgpu-gen): Generate bool vector schemas for templated WGSL types Map vec2, vec3 and vec4 to d.vec2b, d.vec3b and d.vec4b instead of d.undefined. --- packages/tgpu-gen/gen.mjs | 3 +++ packages/tgpu-gen/tests/structs.test.ts | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/packages/tgpu-gen/gen.mjs b/packages/tgpu-gen/gen.mjs index fdeede7443..5fee1d3215 100644 --- a/packages/tgpu-gen/gen.mjs +++ b/packages/tgpu-gen/gen.mjs @@ -234,6 +234,9 @@ function typeToAlias(type, format) { if (['vec2', 'vec3', 'vec4'].includes(type) && format === 'f16') { return `${type}h`; } + if (['vec2', 'vec3', 'vec4'].includes(type) && format === 'bool') { + return `${type}b`; + } if (['mat2x2', 'mat3x3', 'mat4x4'].includes(type) && format === 'f32') { return `${type}f`; } diff --git a/packages/tgpu-gen/tests/structs.test.ts b/packages/tgpu-gen/tests/structs.test.ts index 94fba76b62..a52f373539 100644 --- a/packages/tgpu-gen/tests/structs.test.ts +++ b/packages/tgpu-gen/tests/structs.test.ts @@ -106,6 +106,24 @@ export const Data = d.struct({ expect(generate(wgsl)).toContain(expected); }); + it('replaces bool vector member types with predeclared aliases', () => { + const wgsl = ` +struct Data { + a1: vec2, + a2: vec3, + a3: vec4, +};`; + + const expected = `\ +export const Data = d.struct({ + a1: d.vec2b, + a2: d.vec3b, + a3: d.vec4b, +});`; + + expect(generate(wgsl)).toContain(expected); + }); + it('generates structs with nested structs', () => { const wgsl = ` struct TriangleData {