v3dv: include mem_offset in vkCmdFillBuffer destination

v3dv_CmdFillBuffer was passing only the user-supplied dstOffset to
meta_fill_buffer, ignoring the destination VkBuffer's mem_offset.
When several VkBuffers share one VkDeviceMemory at different offsets
(sub-allocation) the fill landed on whichever VkBuffer was
bound at offset 0 of the memory object instead of the requested one.

Fixes: 5ed78d91fe ("v3dv: implement vkCmdFillBuffer")
Assisted-by: Claude Opus 4.7
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
(cherry picked from commit 8bd7f1d44b)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41540>
This commit is contained in:
Jose Maria Casanova Crespo 2026-05-08 11:21:12 +02:00 committed by Eric Engestrom
parent a9ef72f485
commit 5be3b1c081
2 changed files with 2 additions and 2 deletions

View file

@ -1394,7 +1394,7 @@
"description": "v3dv: include mem_offset in vkCmdFillBuffer destination",
"nominated": true,
"nomination_type": 2,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "5ed78d91fed6ba269c524703174032b7a71f8a93",
"notes": null

View file

@ -1851,7 +1851,7 @@ v3dv_CmdFillBuffer(VkCommandBuffer commandBuffer,
}
v3d_X((&cmd_buffer->device->devinfo), meta_fill_buffer)
(cmd_buffer, bo, dstOffset, size, data);
(cmd_buffer, bo, dst_buffer->mem_offset + dstOffset, size, data);
cmd_buffer->state.is_transfer = false;
}