nv2a/vk: Add barrier after compute to staging buffer copy

This commit is contained in:
Matt Borgerson 2024-07-26 17:21:01 -07:00 committed by mborgerson
parent 89db9590f7
commit 9c43c0d702
1 changed files with 13 additions and 0 deletions

View File

@ -291,6 +291,19 @@ static void download_surface_to_buffer(NV2AState *d, SurfaceBinding *surface,
.size = packed_size,
};
vkCmdCopyBuffer(cmd, pack_buffer, copy_buffer, 1, &buffer_copy_region);
VkBufferMemoryBarrier barrier = {
.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT,
.dstAccessMask = VK_ACCESS_HOST_READ_BIT,
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.buffer = copy_buffer,
.size = VK_WHOLE_SIZE
};
vkCmdPipelineBarrier(cmd, VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_PIPELINE_STAGE_HOST_BIT, 0, 0, NULL, 1,
&barrier, 0, NULL);
}
size_t downloaded_image_size = surface->host_fmt.host_bytes_per_pixel *