diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index cff21bcf1..56a70c7f7 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -268,6 +268,17 @@ void Rasterizer::DrawIndirect(bool is_indexed, VAddr arg_address, u32 offset, u3 std::tie(count_buffer, count_base) = buffer_cache.ObtainBuffer(count_address, 4, false); } + if (auto barrier = buffer->GetBarrier(vk::AccessFlagBits2::eIndirectCommandRead, + vk::PipelineStageFlagBits2::eDrawIndirect)) { + buffer_barriers.emplace_back(*barrier); + } + if (count_buffer) { + if (auto barrier = count_buffer->GetBarrier(vk::AccessFlagBits2::eIndirectCommandRead, + vk::PipelineStageFlagBits2::eDrawIndirect)) { + buffer_barriers.emplace_back(*barrier); + } + } + pipeline->BindResources(set_writes, buffer_barriers, push_data); UpdateDynamicState(pipeline, is_indexed); scheduler.BeginRendering(state); @@ -348,6 +359,11 @@ void Rasterizer::DispatchIndirect(VAddr address, u32 offset, u32 size) { const auto [buffer, base] = buffer_cache.ObtainBuffer(address + offset, size, false); + if (auto barrier = buffer->GetBarrier(vk::AccessFlagBits2::eIndirectCommandRead, + vk::PipelineStageFlagBits2::eDrawIndirect)) { + buffer_barriers.emplace_back(*barrier); + } + scheduler.EndRendering(); pipeline->BindResources(set_writes, buffer_barriers, push_data);