Browse Source

[vulkan] Added buffer memory barrier to keep track of previous buffer's active transfer

vk-experiments7
CamilleLaVey 4 weeks ago
parent
commit
95e42257f7
  1. 17
      src/video_core/renderer_vulkan/vk_compute_pass.cpp

17
src/video_core/renderer_vulkan/vk_compute_pass.cpp

@ -1159,6 +1159,23 @@ void BlockLinearUnswizzle3DPass::UnswizzleChunk(
return;
}
if (!is_first_chunk) {
const VkBufferMemoryBarrier reuse_barrier{
.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
.pNext = nullptr,
.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT,
.dstAccessMask = VK_ACCESS_SHADER_WRITE_BIT,
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.buffer = out_buffer,
.offset = 0,
.size = VK_WHOLE_SIZE,
};
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, nullptr,
reuse_barrier, nullptr);
}
device.GetLogical().UpdateDescriptorSet(set, *descriptor_template, descriptor_data);
cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, *pipeline);
cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_COMPUTE, *layout, 0, set, {});

Loading…
Cancel
Save