protonscr

Black Myth: Wukong Benchmark Tool - VVL SYNC-HAZARD-READ-AFTER-WRITE

vkd3dclosed appid 3132990
HansKristian-Work/vkd3d-proton#2625 · opened 2025-09-20 by laurirasanen · updated 2025-09-21 · 1 comments · github · game page · search this game
Llaurirasanen 2025-09-20 github

Launching Black Myth: Wukong Benchmark Tool (3132990) with validation layers enabled spews out sync hazard coming from a discarded attachment.

SYNC-HAZARD-READ-AFTER-WRITE: vkCmdBeginRendering(): READ_AFTER_WRITE hazard detected. vkCmdBeginRendering reads pRenderingInfo.pColorAttachments[0] (VkImageView 0x8a500000008a5[ImageView (cookie 1460)], loadOp VK_ATTACHMENT_LOAD_OP_LOAD), which was previously written during an image layout transition initiated by vkCmdPipelineBarrier2[CommandList].
The current synchronization allows VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT accesses at VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT, but to prevent this hazard, it must allow VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT accesses at VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT.

The following patch makes VVL happy, but I'm not sure what the intended behavior here is. Especially given the comment about undefined reads...

diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index 39368500..6801f740 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -4025,11 +4025,11 @@ static void d3d12_command_list_discard_attachment_barrier(struct d3d12_command_l
     /* Ignore read access bits since reads will be undefined anyway */
     if ((list->type == D3D12_COMMAND_LIST_TYPE_DIRECT) &&
             (resource->desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET))
     {
         stages = VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT;
-        access = VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT;
+        access = VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT;
         layout = d3d12_resource_pick_layout(resource, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
     }
     else if ((list->type == D3D12_COMMAND_LIST_TYPE_DIRECT) &&
             (resource->desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL))
     {

Software information

  • Black Myth: Wukong Benchmark Tool (3132990)
  • VKD3D_DEBUG=trace VKD3D_CONFIG=vk_debug VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation PRESSURE_VESSEL_DEVEL=1 %command%

System information

  • GPU: AMD RX 6800 XT
  • Driver: Mesa 25.2.2-arch1.2
  • Wine version: proton-wine-10.0-2e (8b5ff79bcef)
  • VKD3D-Proton version: master (6c860bc1)
HHansKristian-Work maintainer 2025-09-20 github

Very theoretical, but sure I guess.