From 9dfaca4cd85d737e6913bd1918e73d770b2b0e23 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sun, 25 Jan 2026 18:54:43 +0300 Subject: [PATCH] vk: Fix WAW hazard when preparing copy commands for texture uploads using scratch --- rpcs3/Emu/RSX/VK/VKTexture.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/rpcs3/Emu/RSX/VK/VKTexture.cpp b/rpcs3/Emu/RSX/VK/VKTexture.cpp index a57378384a..bc6aabf2d4 100644 --- a/rpcs3/Emu/RSX/VK/VKTexture.cpp +++ b/rpcs3/Emu/RSX/VK/VKTexture.cpp @@ -1183,6 +1183,13 @@ namespace vk { ensure(scratch_buf); + // WAW hazard - complete previous work before executing any transfers + insert_buffer_memory_barrier( + cmd2, scratch_buf->value, 0, scratch_offset, + VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, + VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT, + VK_ACCESS_TRANSFER_WRITE_BIT); + if (upload_commands.size() > 1) { auto range_ptr = buffer_copies.data(); @@ -1197,8 +1204,11 @@ namespace vk vkCmdCopyBuffer(cmd2, upload_buffer->value, scratch_buf->value, static_cast(buffer_copies.size()), buffer_copies.data()); } - insert_buffer_memory_barrier(cmd2, scratch_buf->value, 0, scratch_offset, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, - VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT); + insert_buffer_memory_barrier( + cmd2, scratch_buf->value, 0, scratch_offset, + VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, + VK_ACCESS_TRANSFER_WRITE_BIT, + VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT); } // Swap and deswizzle if requested