diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp index af0390723c..13ff4a99b4 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp @@ -492,17 +492,18 @@ void BufferCacheRuntime::UnifiedMemoryHostBarrier() { } void BufferCacheRuntime::UnifiedMemoryShaderWriteBarrier() { - const bool has_transform_feedback = device.IsExtTransformFeedbackSupported(); + VkAccessFlags src_access = VK_ACCESS_SHADER_WRITE_BIT; + VkPipelineStageFlags src_stages = vk::PIPELINE_STAGE_GRAPHICS_COMPUTE; + if (device.IsExtTransformFeedbackSupported()) { + src_access |= VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT; + src_stages |= VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT; + } const VkMemoryBarrier write_barrier{ .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER, .pNext = nullptr, - .srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT | - (has_transform_feedback ? VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT : 0), + .srcAccessMask = src_access, .dstAccessMask = VK_ACCESS_HOST_READ_BIT, }; - const VkPipelineStageFlags src_stages = - vk::PIPELINE_STAGE_GRAPHICS_COMPUTE | - (has_transform_feedback ? VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT : 0); scheduler.RequestOutsideRenderPassOperationContext(); scheduler.Record([write_barrier, src_stages](vk::CommandBuffer cmdbuf) { cmdbuf.PipelineBarrier(src_stages, VK_PIPELINE_STAGE_HOST_BIT, 0, write_barrier);