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>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41436>
This commit is contained in:
Jose Maria Casanova Crespo 2026-05-08 11:21:12 +02:00
parent 7d3b62e13d
commit 8bd7f1d44b

View file

@ -1862,7 +1862,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;
}