[dxvk] Fix graphics UAV barriers

We broke this when replacing gfxBarriers with execBarriers,
since starting a render pass instance clears queued up barriers.
This commit is contained in:
Philip Rebohle 2022-07-12 14:26:52 +02:00
parent 59475fb053
commit 5ff6f3a2ca
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
1 changed files with 13 additions and 6 deletions

View File

@ -5234,18 +5234,25 @@ namespace dxvk {
return false;
}
if (m_state.gp.flags.any(DxvkGraphicsPipelineFlag::HasStorageDescriptors,
DxvkGraphicsPipelineFlag::HasTransformFeedback)) {
this->commitGraphicsBarriers<Indexed, Indirect, false>();
this->commitGraphicsBarriers<Indexed, Indirect, true>();
}
if (m_flags.test(DxvkContextFlag::GpDirtyFramebuffer))
this->updateFramebuffer();
if (!m_flags.test(DxvkContextFlag::GpRenderPassBound))
this->startRenderPass();
if (m_state.gp.flags.any(
DxvkGraphicsPipelineFlag::HasStorageDescriptors,
DxvkGraphicsPipelineFlag::HasTransformFeedback)) {
this->commitGraphicsBarriers<Indexed, Indirect, false>();
// This can only happen if the render pass was active before,
// so we'll never strat the render pass twice in one draw
if (!m_flags.test(DxvkContextFlag::GpRenderPassBound))
this->startRenderPass();
this->commitGraphicsBarriers<Indexed, Indirect, true>();
}
if (m_flags.test(DxvkContextFlag::GpDirtyIndexBuffer) && Indexed) {
if (unlikely(!this->updateIndexBufferBinding()))
return false;