diff --git a/third_party/dawn/src/dawn/native/d3d12/CommandBufferD3D12.cpp b/third_party/dawn/src/dawn/native/d3d12/CommandBufferD3D12.cpp --- a/third_party/dawn/src/dawn/native/d3d12/CommandBufferD3D12.cpp +++ b/third_party/dawn/src/dawn/native/d3d12/CommandBufferD3D12.cpp @@ -1366,12 +1366,13 @@ WriteBufferCmd* write = mCommands.NextCommand(); const uint64_t offset = write->offset; const uint64_t size = write->size; + // Always consume the kAdditionalData marker to keep the iterator in sync. + uint8_t* data = mCommands.NextData(size); if (size == 0) { continue; } Buffer* dstBuffer = ToBackend(write->buffer.Get()); - uint8_t* data = mCommands.NextData(size); DAWN_TRY(device->GetDynamicUploader()->WithUploadReservation( size, kCopyBufferToBufferOffsetAlignment, diff --git a/third_party/dawn/src/dawn/native/metal/CommandBufferMTL.mm b/third_party/dawn/src/dawn/native/metal/CommandBufferMTL.mm --- a/third_party/dawn/src/dawn/native/metal/CommandBufferMTL.mm +++ b/third_party/dawn/src/dawn/native/metal/CommandBufferMTL.mm @@ -1508,12 +1508,13 @@ WriteBufferCmd* write = mCommands.NextCommand(); const uint64_t offset = write->offset; const uint64_t size = write->size; + // Always consume the kAdditionalData marker to keep the iterator in sync. + uint8_t* data = mCommands.NextData(size); if (size == 0) { continue; } Buffer* dstBuffer = ToBackend(write->buffer.Get()); - uint8_t* data = mCommands.NextData(size); Device* device = ToBackend(GetDevice()); DAWN_TRY(device->GetDynamicUploader()->WithUploadReservation( diff --git a/third_party/dawn/src/dawn/native/opengl/CommandBufferGL.cpp b/third_party/dawn/src/dawn/native/opengl/CommandBufferGL.cpp --- a/third_party/dawn/src/dawn/native/opengl/CommandBufferGL.cpp +++ b/third_party/dawn/src/dawn/native/opengl/CommandBufferGL.cpp @@ -1136,12 +1136,13 @@ WriteBufferCmd* write = mCommands.NextCommand(); uint64_t offset = write->offset; uint64_t size = write->size; + // Always consume the kAdditionalData marker to keep the iterator in sync. + uint8_t* data = mCommands.NextData(size); if (size == 0) { continue; } Buffer* dstBuffer = ToBackend(write->buffer.Get()); - uint8_t* data = mCommands.NextData(size); DAWN_TRY(dstBuffer->EnsureDataInitializedAsDestination(offset, size)); DAWN_GL_TRY(gl, BindBuffer(GL_ARRAY_BUFFER, dstBuffer->GetHandle())); diff --git a/third_party/dawn/src/dawn/native/vulkan/CommandBufferVk.cpp b/third_party/dawn/src/dawn/native/vulkan/CommandBufferVk.cpp --- a/third_party/dawn/src/dawn/native/vulkan/CommandBufferVk.cpp +++ b/third_party/dawn/src/dawn/native/vulkan/CommandBufferVk.cpp @@ -1300,12 +1300,13 @@ WriteBufferCmd* write = mCommands.NextCommand(); const uint64_t offset = write->offset; const uint64_t size = write->size; + // Always consume the kAdditionalData marker to keep the iterator in sync. + uint8_t* data = mCommands.NextData(size); if (size == 0) { continue; } Buffer* dstBuffer = ToBackend(write->buffer.Get()); - uint8_t* data = mCommands.NextData(size); DAWN_TRY(device->GetDynamicUploader()->WithUploadReservation( size, kCopyBufferToBufferOffsetAlignment,