From dbfd03c45c303d9461529d91f2874939a8a484b4 Mon Sep 17 00:00:00 2001 From: Iwo Plaza Date: Wed, 12 Feb 2025 17:18:30 +0000 Subject: [PATCH] chore(typegpu): Make tgpu.vertexLayout stable (#862) * chore(typegpu): Version bump to 0.4.1 --- .../components/stackblitz/openInStackBlitz.ts | 2 +- .../examples/simulation/boids-next/index.ts | 9 ++---- .../examples/simulation/boids/index.ts | 2 +- .../examples/simulation/confetti/index.ts | 4 +-- .../simulation/fluid-with-atomics/index.ts | 4 +-- .../examples/simulation/game-of-life/index.ts | 4 +-- packages/typegpu/package.json | 2 +- packages/typegpu/src/index.ts | 1 + packages/typegpu/tests/root.test.ts | 4 +-- packages/typegpu/tests/vertexLayout.test.ts | 28 ++++++++----------- 10 files changed, 26 insertions(+), 34 deletions(-) diff --git a/apps/typegpu-docs/src/components/stackblitz/openInStackBlitz.ts b/apps/typegpu-docs/src/components/stackblitz/openInStackBlitz.ts index c1077dfdc..a12769bec 100644 --- a/apps/typegpu-docs/src/components/stackblitz/openInStackBlitz.ts +++ b/apps/typegpu-docs/src/components/stackblitz/openInStackBlitz.ts @@ -61,7 +61,7 @@ ${example.htmlCode} }, "dependencies": { "@webgpu/types": "^0.1.44", - "typegpu": "^0.4.0" + "typegpu": "^0.4.1" } }`, }, diff --git a/apps/typegpu-docs/src/content/examples/simulation/boids-next/index.ts b/apps/typegpu-docs/src/content/examples/simulation/boids-next/index.ts index 2d3d986a6..26c678998 100644 --- a/apps/typegpu-docs/src/content/examples/simulation/boids-next/index.ts +++ b/apps/typegpu-docs/src/content/examples/simulation/boids-next/index.ts @@ -181,13 +181,8 @@ const colorPaletteBuffer = root const TriangleDataArray = (n: number) => d.arrayOf(TriangleData, n); -const vertexLayout = tgpu['~unstable'].vertexLayout((n: number) => - d.arrayOf(d.vec2f, n), -); -const instanceLayout = tgpu['~unstable'].vertexLayout( - TriangleDataArray, - 'instance', -); +const vertexLayout = tgpu.vertexLayout((n: number) => d.arrayOf(d.vec2f, n)); +const instanceLayout = tgpu.vertexLayout(TriangleDataArray, 'instance'); const renderPipeline = root['~unstable'] .withVertex(mainVert, { diff --git a/apps/typegpu-docs/src/content/examples/simulation/boids/index.ts b/apps/typegpu-docs/src/content/examples/simulation/boids/index.ts index e8ed7fe49..759994f42 100644 --- a/apps/typegpu-docs/src/content/examples/simulation/boids/index.ts +++ b/apps/typegpu-docs/src/content/examples/simulation/boids/index.ts @@ -273,7 +273,7 @@ const computeModule = root.device.createShaderModule({ }), }); -const vertexLayout = tgpu['~unstable'].vertexLayout((n: number) => +const vertexLayout = tgpu.vertexLayout((n: number) => d.arrayOf(d.location(0, d.vec2f), n), ); diff --git a/apps/typegpu-docs/src/content/examples/simulation/confetti/index.ts b/apps/typegpu-docs/src/content/examples/simulation/confetti/index.ts index 191bf7a25..c0f1ab74e 100644 --- a/apps/typegpu-docs/src/content/examples/simulation/confetti/index.ts +++ b/apps/typegpu-docs/src/content/examples/simulation/confetti/index.ts @@ -77,11 +77,11 @@ const particleDataStorage = particleDataBuffer.as('mutable'); // layouts -const geometryLayout = tgpu['~unstable'] +const geometryLayout = tgpu .vertexLayout((n: number) => d.arrayOf(ParticleGeometry, n), 'instance') .$name('geometry'); -const dataLayout = tgpu['~unstable'] +const dataLayout = tgpu .vertexLayout((n: number) => d.arrayOf(ParticleData, n), 'instance') .$name('data'); diff --git a/apps/typegpu-docs/src/content/examples/simulation/fluid-with-atomics/index.ts b/apps/typegpu-docs/src/content/examples/simulation/fluid-with-atomics/index.ts index a6db35240..31248fb72 100644 --- a/apps/typegpu-docs/src/content/examples/simulation/fluid-with-atomics/index.ts +++ b/apps/typegpu-docs/src/content/examples/simulation/fluid-with-atomics/index.ts @@ -341,11 +341,11 @@ const fragment = tgpu['~unstable'] return d.vec4f(0, 0, std.max(0.5, res), res); }); -const vertexInstanceLayout = tgpu['~unstable'].vertexLayout( +const vertexInstanceLayout = tgpu.vertexLayout( (n: number) => d.arrayOf(d.u32, n), 'instance', ); -const vertexLayout = tgpu['~unstable'].vertexLayout( +const vertexLayout = tgpu.vertexLayout( (n: number) => d.arrayOf(d.vec2f, n), 'vertex', ); diff --git a/apps/typegpu-docs/src/content/examples/simulation/game-of-life/index.ts b/apps/typegpu-docs/src/content/examples/simulation/game-of-life/index.ts index fad943f91..d00005266 100644 --- a/apps/typegpu-docs/src/content/examples/simulation/game-of-life/index.ts +++ b/apps/typegpu-docs/src/content/examples/simulation/game-of-life/index.ts @@ -83,12 +83,12 @@ const squareBuffer = root .createBuffer(d.arrayOf(d.u32, 8), [0, 0, 1, 0, 0, 1, 1, 1]) .$usage('vertex'); -const squareVertexLayout = tgpu['~unstable'].vertexLayout( +const squareVertexLayout = tgpu.vertexLayout( (n: number) => d.arrayOf(d.location(1, d.vec2u), n), 'vertex', ); -const cellsVertexLayout = tgpu['~unstable'].vertexLayout( +const cellsVertexLayout = tgpu.vertexLayout( (n: number) => d.arrayOf(d.location(0, d.u32), n), 'instance', ); diff --git a/packages/typegpu/package.json b/packages/typegpu/package.json index 86eed31c8..fdd9b275a 100644 --- a/packages/typegpu/package.json +++ b/packages/typegpu/package.json @@ -1,7 +1,7 @@ { "name": "typegpu", "private": true, - "version": "0.4.0", + "version": "0.4.1", "description": "A thin layer between JS and WebGPU/WGSL that improves development experience and allows for faster iteration.", "license": "MIT", "type": "module", diff --git a/packages/typegpu/src/index.ts b/packages/typegpu/src/index.ts index f97cc9fe8..9c9278252 100644 --- a/packages/typegpu/src/index.ts +++ b/packages/typegpu/src/index.ts @@ -21,6 +21,7 @@ import { bindGroupLayout } from './tgpuBindGroupLayout'; export const tgpu = { bindGroupLayout, + vertexLayout, init, initFromDevice, diff --git a/packages/typegpu/tests/root.test.ts b/packages/typegpu/tests/root.test.ts index 7dca5fc77..102a10e37 100644 --- a/packages/typegpu/tests/root.test.ts +++ b/packages/typegpu/tests/root.test.ts @@ -105,7 +105,7 @@ describe('TgpuRoot', () => { it('should return the correct GPUVertexBufferLayout for a simple vertex layout', ({ root, }) => { - const vertexLayout = tgpu['~unstable'].vertexLayout( + const vertexLayout = tgpu.vertexLayout( (n: number) => d.arrayOf(d.location(0, d.vec2u), n), 'vertex', ); @@ -132,7 +132,7 @@ describe('TgpuRoot', () => { something: d.location(2, d.u32), }); - const vertexLayout = tgpu['~unstable'].vertexLayout( + const vertexLayout = tgpu.vertexLayout( (n: number) => d.disarrayOf(VertexData, n), 'instance', ); diff --git a/packages/typegpu/tests/vertexLayout.test.ts b/packages/typegpu/tests/vertexLayout.test.ts index 9262a8183..421ec5d0f 100644 --- a/packages/typegpu/tests/vertexLayout.test.ts +++ b/packages/typegpu/tests/vertexLayout.test.ts @@ -78,7 +78,7 @@ describe('ArrayToContainedAttribs', () => { describe('tgpu.vertexLayout', () => { it('creates attributes from loose array of vec3f', () => { - const vertexLayout = tgpu['~unstable'].vertexLayout((count: number) => + const vertexLayout = tgpu.vertexLayout((count: number) => d.disarrayOf(d.vec3f, count), ); @@ -97,7 +97,7 @@ describe('tgpu.vertexLayout', () => { c: d.f32, // + 4 }); - const vertexLayout = tgpu['~unstable'].vertexLayout((count: number) => + const vertexLayout = tgpu.vertexLayout((count: number) => d.disarrayOf(VertexData, count), ); @@ -128,7 +128,7 @@ describe('tgpu.vertexLayout', () => { c: d.f32, // + 4 }); - const vertexLayout = tgpu['~unstable'].vertexLayout((count: number) => + const vertexLayout = tgpu.vertexLayout((count: number) => d.disarrayOf(VertexData, count), ); @@ -153,7 +153,7 @@ describe('tgpu.vertexLayout', () => { }); it('creates attributes from loose array with f16 variants', () => { - const vertexLayout = tgpu['~unstable'].vertexLayout((count: number) => + const vertexLayout = tgpu.vertexLayout((count: number) => d.disarrayOf(d.float16x4, count), ); @@ -169,9 +169,7 @@ describe('tgpu.vertexLayout', () => { describe('connectAttributesToShader', () => { it('connects a single f32 attribute', () => { const shaderInputLayout = d.f32; - const layout = tgpu['~unstable'].vertexLayout((n: number) => - d.arrayOf(d.f32, n), - ); + const layout = tgpu.vertexLayout((n: number) => d.arrayOf(d.f32, n)); const attrib = layout.attrib; expect(connectAttributesToShader(shaderInputLayout, attrib)).toEqual({ @@ -194,7 +192,7 @@ describe('connectAttributesToShader', () => { it('connects a single vec4f attribute (with custom shader location)', () => { const shaderInputLayout = d.location(3, d.vec4f); - const layout = tgpu['~unstable'].vertexLayout((n: number) => + const layout = tgpu.vertexLayout((n: number) => d.disarrayOf(d.unorm16x4, n), ); const attrib = layout.attrib; @@ -224,7 +222,7 @@ describe('connectAttributesToShader', () => { c: d.u32 /* should get @location(4) automatically */, }; - const layout = tgpu['~unstable'].vertexLayout((n: number) => + const layout = tgpu.vertexLayout((n: number) => d.disarrayOf( d.unstruct({ alpha: d.f32, // 4 bytes @@ -278,7 +276,7 @@ describe('connectAttributesToShader', () => { c: d.u32 /* should get @location(4) automatically */, }; - const alphaBetaLayout = tgpu['~unstable'].vertexLayout((n: number) => + const alphaBetaLayout = tgpu.vertexLayout((n: number) => d.disarrayOf( d.unstruct({ alpha: d.f32, // 4 bytes @@ -288,9 +286,7 @@ describe('connectAttributesToShader', () => { ), ); - const gammaLayout = tgpu['~unstable'].vertexLayout((n: number) => - d.arrayOf(d.u32, n), - ); + const gammaLayout = tgpu.vertexLayout((n: number) => d.arrayOf(d.u32, n)); const result = connectAttributesToShader(shaderInputLayout, { // purposefully out of order, which should be controlled by the shader input. @@ -335,7 +331,7 @@ describe('connectAttributesToShader', () => { it('connects a single vec4h attribute', () => { const shaderInputLayout = d.vec4h; - const layout = tgpu['~unstable'].vertexLayout((n: number) => + const layout = tgpu.vertexLayout((n: number) => d.disarrayOf(d.float16x4, n), ); const attrib = layout.attrib; @@ -366,7 +362,7 @@ describe('connectAttributesToShader', () => { d: d.f32, }; - const layout = tgpu['~unstable'].vertexLayout((n: number) => + const layout = tgpu.vertexLayout((n: number) => d.disarrayOf( d.unstruct({ alpha: d.f16, // 2 bytes @@ -421,7 +417,7 @@ describe('connectAttributesToShader', () => { it('throws when trying to use type that has no attribute representation', () => { expect(() => - tgpu['~unstable'].vertexLayout((n: number) => d.disarrayOf(d.vec3h, n)), + tgpu.vertexLayout((n: number) => d.disarrayOf(d.vec3h, n)), ).toThrow(); }); });