diff --git a/packages/typegpu/src/tgsl/wgslGenerator.ts b/packages/typegpu/src/tgsl/wgslGenerator.ts index 11d6b703d6..900a51edc4 100644 --- a/packages/typegpu/src/tgsl/wgslGenerator.ts +++ b/packages/typegpu/src/tgsl/wgslGenerator.ts @@ -1029,7 +1029,7 @@ ${this.ctx.pre}else ${alternate}`; } if (statement[0] === NODE.block) { - return this.block(statement); + return `${this.ctx.pre}${this.block(statement)}`; } if (statement[0] === NODE.for) { diff --git a/packages/typegpu/tests/examples/individual/oklab.test.ts b/packages/typegpu/tests/examples/individual/oklab.test.ts index d76d7675d6..2d4a8f9dc7 100644 --- a/packages/typegpu/tests/examples/individual/oklab.test.ts +++ b/packages/typegpu/tests/examples/individual/oklab.test.ts @@ -97,7 +97,7 @@ describe('oklab example', () => { let k_m = ((-0.1055613458f * a) - (0.0638541728f * b)); let k_s = ((-0.0894841775f * a) - (1.291485548f * b)); var S = ((((k0 + (k1 * a)) + (k2 * b)) + ((k3 * a) * a)) + ((k4 * a) * b)); - { + { let l_ = (1f + (S * k_l)); let m_ = (1f + (S * k_m)); let s_ = (1f + (S * k_s)); @@ -143,7 +143,7 @@ describe('oklab example', () => { } else { t = ((cusp.C * (L0 - 1f)) / ((C1 * (cusp.L - 1f)) + (cusp.C * (L0 - L1)))); - { + { let dL = (L1 - L0); let dC = C1; let k_l = ((0.3963377774f * a) + (0.2158037573f * b)); @@ -152,7 +152,7 @@ describe('oklab example', () => { let l_dt = (dL + (dC * k_l)); let m_dt = (dL + (dC * k_m)); let s_dt = (dL + (dC * k_s)); - { + { let L = ((L0 * (1f - t)) + (t * L1)); let C = (t * C1); let l_ = (L + (C * k_l)); diff --git a/packages/typegpu/tests/tgsl/wgslGenerator.test.ts b/packages/typegpu/tests/tgsl/wgslGenerator.test.ts index 74f04f5a9b..3c35557242 100644 --- a/packages/typegpu/tests/tgsl/wgslGenerator.test.ts +++ b/packages/typegpu/tests/tgsl/wgslGenerator.test.ts @@ -1168,4 +1168,26 @@ describe('wgslGenerator', () => { - fn:testFn: Constants cannot be defined within TypeGPU function scope. To address this, move the constant definition outside the function scope.] `); }); + + it('generates correct indentation for nested blocks', () => { + const main = tgpu.fn([], d.i32)(() => { + let res = 0; + { + const f = 2; + res += f; + } + return res; + }); + + expect(tgpu.resolve([main])).toMatchInlineSnapshot(` + "fn main() -> i32 { + var res = 0; + { + const f = 2; + res += f; + } + return res; + }" + `); + }); });