From fc3e117f8d6bda8cbe6a3978e34d9e13b308bc57 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Fri, 7 Aug 2026 19:41:51 +1000 Subject: [PATCH] VulkanDevice: Synchronize compute image accesses Use the compute storage-image layout for dispatches and include compute shader stages when transitioning sampled images. --- src/util/vulkan_device.cpp | 2 +- src/util/vulkan_texture.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/util/vulkan_device.cpp b/src/util/vulkan_device.cpp index afd294172..c3180eaf6 100644 --- a/src/util/vulkan_device.cpp +++ b/src/util/vulkan_device.cpp @@ -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()); } diff --git a/src/util/vulkan_texture.cpp b/src/util/vulkan_texture.cpp index 4e2b6620b..1c4fd7542 100644 --- a/src/util/vulkan_texture.cpp +++ b/src/util/vulkan_texture.cpp @@ -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: