From b7503c7fb428069f2b02554f57223ede93f88f87 Mon Sep 17 00:00:00 2001 From: cmhhelgeson <62450112+cmhhelgeson@users.noreply.github.com> Date: Wed, 6 Dec 2023 16:34:14 -0800 Subject: [PATCH 1/2] Update animometer to account for arbitrarily sized minUniformBufferOffsetAlignment --- src/sample/animometer/main.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/sample/animometer/main.ts b/src/sample/animometer/main.ts index f8772358..97a3c275 100644 --- a/src/sample/animometer/main.ts +++ b/src/sample/animometer/main.ts @@ -167,7 +167,16 @@ const init: SampleInit = async ({ canvas, pageState, gui }) => { function configure() { const numTriangles = settings.numTriangles; const uniformBytes = 5 * Float32Array.BYTES_PER_ELEMENT; - const alignedUniformBytes = Math.ceil(uniformBytes / 256) * 256; + const minBufferAllignment = device.limits.minUniformBufferOffsetAlignment; + let alignedUniformBytes = 0; + const blocks = Math.ceil(uniformBytes / minBufferAllignment); + if (uniformBytes < minBufferAllignment) { + alignedUniformBytes = blocks * minBufferAllignment; + } else { + // Number of minBufferAllignment Blocks occupied by our data + alignedUniformBytes = blocks * blocks * minBufferAllignment; + } + const alignedUniformFloats = alignedUniformBytes / Float32Array.BYTES_PER_ELEMENT; const uniformBuffer = device.createBuffer({ From 0006bb2c21eae9144a50234660cfd7b53af527fc Mon Sep 17 00:00:00 2001 From: cmhhelgeson <62450112+cmhhelgeson@users.noreply.github.com> Date: Wed, 6 Dec 2023 16:38:36 -0800 Subject: [PATCH 2/2] Fixed code, not sure what I was doing earlier --- src/sample/animometer/main.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/sample/animometer/main.ts b/src/sample/animometer/main.ts index 97a3c275..b250b73c 100644 --- a/src/sample/animometer/main.ts +++ b/src/sample/animometer/main.ts @@ -168,14 +168,8 @@ const init: SampleInit = async ({ canvas, pageState, gui }) => { const numTriangles = settings.numTriangles; const uniformBytes = 5 * Float32Array.BYTES_PER_ELEMENT; const minBufferAllignment = device.limits.minUniformBufferOffsetAlignment; - let alignedUniformBytes = 0; - const blocks = Math.ceil(uniformBytes / minBufferAllignment); - if (uniformBytes < minBufferAllignment) { - alignedUniformBytes = blocks * minBufferAllignment; - } else { - // Number of minBufferAllignment Blocks occupied by our data - alignedUniformBytes = blocks * blocks * minBufferAllignment; - } + const alignedUniformBytes = + Math.ceil(uniformBytes / minBufferAllignment) * minBufferAllignment; const alignedUniformFloats = alignedUniformBytes / Float32Array.BYTES_PER_ELEMENT;