indirect dispatch/draw buffer barrier (#4597)

This commit is contained in:
Kravickas 2026-06-21 10:02:09 +02:00 committed by GitHub
parent 664804ba74
commit 1155575ca4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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);