[Vk] Improve Stencil Handling and Fix Read-After-Write Hazard #235

Merged
Shinmegumi merged 1 commit from wildcard/eden:fixRAWsyncerror into master 2025-08-23 20:04:48 +02:00
Member
  1. Improves stencil handling:

    • Adds surface type detection to distinguish between color, depth, stencil, and depth-stencil formats
    • Only enables stencil load/store operations for surfaces that actually contain stencil data
    • Avoids unnecessary stencil operations for non-stencil formats (DONT_CARE)
  2. Fixes read-after-write (RAW) synchronization hazards:

    • Adds a subpass self-dependency (subpass 0 → subpass 0)
    • Synchronizes color/depth writes with subsequent shader reads
    • Uses VK_DEPENDENCY_BY_REGION_BIT for efficient synchronization
    • Covers all possible relevant stages,
      • src: Color output + Early/Late fragment tests
      • dst: Fragment shader
      • Access: Write → Read transitions
      here is what hazard looks like [1147.550616] Render.Vulkan video_core/vulkan_common/vulkan_debug_callback.cpp:DebugUtilCallback:55: Validation Error: [ SYNC-HAZARD-READ-AFTER-WRITE ] Object 0: handle = 0x7409630000000192, type = VK_OBJECT_TYPE_IMAGE_VIEW; | MessageID = 0xe4d96472 | vkCmdDrawIndexed: Hazard READ_AFTER_WRITE for VkImageView 0x7409630000000192[], in VkCommandBuffer 0xb400007cb003ea70[], and VkPipeline 0x44d3470000000213[], VkDescriptorSet 0x0[], type: VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, imageLayout: VK_IMAGE_LAYOUT_GENERAL, binding #2, index 0. Access info (usage: SYNC_FRAGMENT_SHADER_SHADER_SAMPLED_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_COLOR_ATTACHMENT_READ|SYNC_FRAGMENT_SHADER_DEPTH_STENCIL_ATTACHMENT_READ|SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ|SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ|SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE|SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ|SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE|SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ|SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE|SYNC_SUBPASS_SHADER_HUAWEI_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 45, reset_no: 129).
1. Improves stencil handling: - Adds surface type detection to distinguish between color, depth, stencil, and depth-stencil formats - Only enables stencil load/store operations for surfaces that actually contain stencil data - Avoids unnecessary stencil operations for non-stencil formats (DONT_CARE) 2. Fixes read-after-write (RAW) synchronization hazards: - Adds a subpass self-dependency (subpass 0 → subpass 0) - Synchronizes color/depth writes with subsequent shader reads - Uses VK_DEPENDENCY_BY_REGION_BIT for efficient synchronization - Covers all possible relevant stages, • src: Color output + Early/Late fragment tests • dst: Fragment shader • Access: Write → Read transitions here is what hazard looks like [1147.550616] Render.Vulkan <Critical> video_core/vulkan_common/vulkan_debug_callback.cpp:DebugUtilCallback:55: Validation Error: [ SYNC-HAZARD-READ-AFTER-WRITE ] Object 0: handle = 0x7409630000000192, type = VK_OBJECT_TYPE_IMAGE_VIEW; | MessageID = 0xe4d96472 | vkCmdDrawIndexed: Hazard READ_AFTER_WRITE for VkImageView 0x7409630000000192[], in VkCommandBuffer 0xb400007cb003ea70[], and VkPipeline 0x44d3470000000213[], VkDescriptorSet 0x0[], type: VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, imageLayout: VK_IMAGE_LAYOUT_GENERAL, binding #2, index 0. Access info (usage: SYNC_FRAGMENT_SHADER_SHADER_SAMPLED_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_COLOR_ATTACHMENT_READ|SYNC_FRAGMENT_SHADER_DEPTH_STENCIL_ATTACHMENT_READ|SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ|SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ|SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE|SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ|SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE|SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ|SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE|SYNC_SUBPASS_SHADER_HUAWEI_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 45, reset_no: 129).
Shinmegumi force-pushed fixRAWsyncerror from cb48dcc858
All checks were successful
eden-license / license-header (pull_request) Successful in 15s
to 8cb82b8919
All checks were successful
eden-license / license-header (pull_request) Successful in 19s
2025-08-12 17:13:26 +02:00
Compare
Shinmegumi force-pushed fixRAWsyncerror from 8cb82b8919
All checks were successful
eden-license / license-header (pull_request) Successful in 19s
to d3558b794d
All checks were successful
eden-license / license-header (pull_request) Successful in 20s
2025-08-13 15:40:48 +02:00
Compare
crueter approved these changes 2025-08-15 01:20:14 +02:00
Dismissed
crueter left a comment
Owner

looks good pending further testing

looks good pending further testing
crueter force-pushed fixRAWsyncerror from d3558b794d
All checks were successful
eden-license / license-header (pull_request) Successful in 20s
to 5310112818
Some checks failed
eden-license / license-header (pull_request) Failing after 25s
2025-08-15 01:21:16 +02:00
Compare
crueter force-pushed fixRAWsyncerror from 5310112818
Some checks failed
eden-license / license-header (pull_request) Failing after 25s
to df1b42948c
All checks were successful
eden-license / license-header (pull_request) Successful in 1m44s
2025-08-15 01:22:11 +02:00
Compare
crueter dismissed crueter's review 2025-08-15 01:22:11 +02:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

Shinmegumi force-pushed fixRAWsyncerror from df1b42948c
All checks were successful
eden-license / license-header (pull_request) Successful in 1m44s
to f35018782d
All checks were successful
eden-license / license-header (pull_request) Successful in 30s
2025-08-15 20:17:20 +02:00
Compare
Shinmegumi force-pushed fixRAWsyncerror from f35018782d
All checks were successful
eden-license / license-header (pull_request) Successful in 30s
to 4fca9d7a68
All checks were successful
eden-license / license-header (pull_request) Successful in 26s
2025-08-23 20:04:19 +02:00
Compare
Shinmegumi approved these changes 2025-08-23 20:04:41 +02:00
godpow referenced this pull request from a commit 2025-10-28 04:51:29 +01:00
Sign in to join this conversation.
No description provided.