From 348fb914cbc7f6034077d0b2753be1d7a25c805a Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 13 Jan 2022 14:30:59 +0000 Subject: [PATCH] Protect against write-after-write hazards when applying initial states --- renderdoc/driver/vulkan/vk_initstate.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_initstate.cpp b/renderdoc/driver/vulkan/vk_initstate.cpp index 1fc4603b0..fa9a9e00d 100644 --- a/renderdoc/driver/vulkan/vk_initstate.cpp +++ b/renderdoc/driver/vulkan/vk_initstate.cpp @@ -1989,8 +1989,9 @@ void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, const VkInitialConten ImageBarrierSequence setupBarriers; state->DiscardContents(); - state->Transition(m_QueueFamilyIdx, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0, - VK_ACCESS_TRANSFER_WRITE_BIT, setupBarriers, GetImageTransitionInfo()); + state->Transition(m_QueueFamilyIdx, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, setupBarriers, + GetImageTransitionInfo()); InlineSetupImageBarriers(cmd, setupBarriers); m_setupImageBarriers.Merge(setupBarriers); @@ -2020,8 +2021,9 @@ void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, const VkInitialConten ImageBarrierSequence setupBarriers; // , cleanupBarriers; state->DiscardContents(); - state->Transition(m_QueueFamilyIdx, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0, - VK_ACCESS_TRANSFER_WRITE_BIT, setupBarriers, GetImageTransitionInfo()); + state->Transition(m_QueueFamilyIdx, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, setupBarriers, + GetImageTransitionInfo()); InlineSetupImageBarriers(cmd, setupBarriers); m_setupImageBarriers.Merge(setupBarriers); @@ -2068,7 +2070,8 @@ void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, const VkInitialConten ImageBarrierSequence setupBarriers; // , cleanupBarriers; state->DiscardContents(); - state->Transition(m_QueueFamilyIdx, VK_IMAGE_LAYOUT_GENERAL, 0, + state->Transition(m_QueueFamilyIdx, VK_IMAGE_LAYOUT_GENERAL, + VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, setupBarriers, GetImageTransitionInfo()); InlineSetupImageBarriers(cmd, setupBarriers); @@ -2281,8 +2284,9 @@ void WrappedVulkan::Apply_InitialState(WrappedVkRes *live, const VkInitialConten VkMarkerRegion::Begin(StringFormat::Fmt("Initial state for %s", ToStr(orig).c_str()), cmd); ImageBarrierSequence setupBarriers; - state->Transition(m_QueueFamilyIdx, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 0, - VK_ACCESS_TRANSFER_WRITE_BIT, setupBarriers, GetImageTransitionInfo()); + state->Transition(m_QueueFamilyIdx, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, setupBarriers, + GetImageTransitionInfo()); InlineSetupImageBarriers(cmd, setupBarriers); m_setupImageBarriers.Merge(setupBarriers);