vulkan/wsi: amend barriers for blit dst buffer
For non-external blit dst buffer, it's bliting the wsi image to a buffer with mapping populated by vkMapMemory, and it's shared via xcb_put_image for x11 or memcpy into a shared wl_buffer backed by shm. So we need additional host stage and host access bit to ensure proper cache flush. There's no queue family ownership transfer needed. Reviewed-by: Hans-Kristian Arntzen <post@arntzen-software.no> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35034>
This commit is contained in:
@@ -1984,12 +1984,24 @@ wsi_cmd_blit_image_to_buffer(VkCommandBuffer cmd_buffer,
|
||||
img_mem_barrier.dstAccessMask = 0;
|
||||
img_mem_barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
|
||||
img_mem_barrier.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
|
||||
|
||||
const VkBufferMemoryBarrier buf_mem_barrier = {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
|
||||
.pNext = NULL,
|
||||
.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT,
|
||||
.dstAccessMask = VK_ACCESS_HOST_READ_BIT,
|
||||
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
||||
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
||||
.buffer = image->blit.buffer,
|
||||
.offset = 0,
|
||||
.size = VK_WHOLE_SIZE,
|
||||
};
|
||||
wsi->CmdPipelineBarrier(cmd_buffer,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,
|
||||
VK_PIPELINE_STAGE_HOST_BIT,
|
||||
0,
|
||||
0, NULL,
|
||||
0, NULL,
|
||||
1, &buf_mem_barrier,
|
||||
1, &img_mem_barrier);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user