vk: Handle WAW and RAW hazards when performing "flush" operations

This commit is contained in:
kd-11 2026-04-07 01:12:25 +03:00 committed by Ani
parent 8ab0ceaa67
commit 59468f1e1e

View File

@ -100,7 +100,7 @@ namespace vk
auto dma_sync_region = valid_range;
dma_mapping_handle dma_mapping = { 0, nullptr };
auto dma_sync = [&dma_sync_region, &dma_mapping](bool load, bool force = false)
auto dma_sync = [&](bool load, bool force = false)
{
if (dma_mapping.second && !force)
{
@ -335,6 +335,14 @@ namespace vk
vkCmdCopyImageToBuffer(cmd, src->value, src->current_layout, dma_mapping.second->value, 1, &region);
}
// Post-transfer barrier on dma layer
vk::insert_buffer_memory_barrier(
cmd, dma_mapping.second->value,
dma_mapping.first, dma_sync_region.length(),
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT
);
src->pop_layout(cmd);
VkBufferMemoryBarrier2KHR mem_barrier =