From 18f17c555d51caee83f15983c2620f463fbaddd1 Mon Sep 17 00:00:00 2001 From: Yulong Wang <7679871+fs-eire@users.noreply.github.com> Date: Sat, 20 May 2023 00:21:18 -0700 Subject: [PATCH] [js/webgpu] fix buffer size when download (#15990) ### Description fix buffer size when download. buffer size should always be padded to multiple of 4. resolved issue described in #15796 > ![Image](https://user-images.githubusercontent.com/26504141/239093785-9417dffc-6f00-47b2-956d-402b43bdb0a9.png) --- js/web/lib/wasm/jsep/webgpu/gpu-data-manager.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/web/lib/wasm/jsep/webgpu/gpu-data-manager.ts b/js/web/lib/wasm/jsep/webgpu/gpu-data-manager.ts index 076ec8ca7b..fed7e8412a 100644 --- a/js/web/lib/wasm/jsep/webgpu/gpu-data-manager.ts +++ b/js/web/lib/wasm/jsep/webgpu/gpu-data-manager.ts @@ -195,12 +195,13 @@ class GpuDataManagerImpl implements GpuDataManager { const commandEncoder = this.backend.getCommandEncoder(); this.backend.endComputePass(); + const bufferSize = calcNormalizedBufferSize(cachedData.originalSize); const gpuReadBuffer = this.backend.device.createBuffer( // eslint-disable-next-line no-bitwise - {size: cachedData.originalSize, usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ}); + {size: bufferSize, usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ}); commandEncoder.copyBufferToBuffer( cachedData.gpuData.buffer /* source buffer */, 0 /* source offset */, gpuReadBuffer /* destination buffer */, - 0 /* destination offset */, cachedData.originalSize /* size */ + 0 /* destination offset */, bufferSize /* size */ ); this.backend.flush();