VulkanDevice: Synchronize compute image accesses

Use the compute storage-image layout for dispatches and include compute shader
stages when transitioning sampled images.
pull/3782/head
Stenzek 2 months ago
parent bbac943b5c
commit fc3e117f8d
No known key found for this signature in database

@ -3334,7 +3334,7 @@ void VulkanDevice::PreDispatchCheck()
if (rt->GetState() == GPUTexture::State::Cleared)
rt->CommitClear(m_current_command_buffer);
rt->SetState(GPUTexture::State::Dirty);
rt->TransitionToLayout(m_current_command_buffer, VulkanTexture::Layout::ReadWriteImage);
rt->TransitionToLayout(m_current_command_buffer, VulkanTexture::Layout::ComputeReadWriteImage);
rt->SetUseFenceCounter(GetCurrentFenceCounter());
}

@ -550,7 +550,7 @@ void VulkanTexture::TransitionSubresourcesToLayout(VkCommandBuffer command_buffe
case Layout::ShaderReadOnly:
// Image was being used as a shader resource, make sure all reads have finished.
barrier.srcAccessMask = VK_ACCESS_SHADER_READ_BIT;
srcStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
srcStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
break;
case Layout::ClearDst:
@ -625,7 +625,7 @@ void VulkanTexture::TransitionSubresourcesToLayout(VkCommandBuffer command_buffe
case Layout::ShaderReadOnly:
barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
break;
case Layout::ClearDst:

Loading…
Cancel
Save