KhronosGroup / Vulkan-ValidationLayers

Vulkan Validation Layers (VVL)
https://vulkan.lunarg.com/doc/sdk/latest/linux/khronos_validation_layer.html
Other
754 stars 403 forks source link

False positive in sync validation for swapchain image #7455

Closed HansKristian-Work closed 7 months ago

HansKristian-Work commented 8 months ago

Environment:

Describe the Issue

Trivial use of swapchain images triggers false positive sync val errors. The frame in question only renders a single render pass to swapchain with appropriate semaphores in between. To reproduce:

#!/bin/bash

git clone https://github.com/Themaister/Granite
cd Granite
git submodule update --init
mkdir build
cd build
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Debug
ninja gltf-viewer-simple
./tests/gltf-viewer-simple ~/git/glTF-Sample-Models/2.0/Suzanne/glTF/Suzanne.gltf # From KhronosGroup/glTF-Sample-Models

Expected behavior

No errors

Valid Usage ID

[ERROR]: [Vulkan]: Validation Error: Validation Error: [ SYNC-HAZARD-WRITE-RACING-WRITE ] Object 0: handle = 0x601067a25280, type = VK_OBJECT_TYPE_QUEUE; | MessageID = 0x743c6069 | vkQueueSubmit2():  Hazard WRITE_RACING_WRITE for entry 0, VkCommandBuffer 0x60106949c5a0[], Submitted access info (submitted_usage: SYNC_IMAGE_LAYOUT_TRANSITION, command: vkCmdBeginRenderPass, seq_no: 1, renderpass: VkRenderPass 0x17f18f00000003cb[], reset_no: 793). Access info (prior_usage: SYNC_PRESENT_ENGINE_SYNCVAL_PRESENT_PRESENTED_SYNCVAL, write_barriers: 0, queue: VkQueue 0x601067a25280[], submit: 143, batch: 0, batch_tag: 3229, vkQueuePresentKHR present_tag:3229, pSwapchains[0]: VkSwapchainKHR 0x948cf100000003cd[], image_index: 1image: VkImage 0xdd1b7300000003cf[backbuffer]).
[ERROR]: [Vulkan]: Validation Error: Validation Error: [ SYNC-HAZARD-READ-RACING-WRITE ] Object 0: handle = 0x601067a25280, type = VK_OBJECT_TYPE_QUEUE; | MessageID = 0x29910a35 | vkQueueSubmit2():  Hazard READ_RACING_WRITE for entry 0, VkCommandBuffer 0x60106949c5a0[], Submitted access info (submitted_usage: SYNC_VERTEX_ATTRIBUTE_INPUT_VERTEX_ATTRIBUTE_READ, command: vkCmdDrawIndexed, seq_no: 6, reset_no: 793). Access info (prior_usage: SYNC_COPY_TRANSFER_WRITE, write_barriers: SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ|SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT|SYNC_COMPUTE_SHADER_ACCELERATION_STRUCTURE_READ|SYNC_COMPUTE_SHADER_DESCRIPTOR_BUFFER_READ_EXT|SYNC_COMPUTE_SHADER_SHADER_BINDING_TABLE_READ|SYNC_COMPUTE_SHADER_SHADER_SAMPLED_READ|SYNC_COMPUTE_SHADER_SHADER_STORAGE_READ|SYNC_COMPUTE_SHADER_SHADER_STORAGE_WRITE|SYNC_COMPUTE_SHADER_UNIFORM_READ|SYNC_HOST_HOST_READ|SYNC_HOST_HOST_WRITE|SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_READ_NV|SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_WRITE_NV|SYNC_CONDITIONAL_RENDERING_EXT_CONDITIONAL_RENDERING_READ_EXT|SYNC_RAY_TRACING_SHADER_ACCELERATION_STRUCTURE_READ|SYNC_RAY_TRACING_SHADER_DESCRIPTOR_BUFFER_READ_EXT|SYNC_RAY_TRACING_SHADER_SHADER_BINDING_TABLE_READ|SYNC_RAY_TRACING_SHADER_SHADER_SAMPLED_READ|SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_READ|SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_WRITE|SYNC_RAY_TRACING_SHADER_UNIFORM_READ|SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_READ|SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_WRITE|SYNC_ACCELERATION_STRUCTURE_BUILD_INDIRECT_COMMAND_READ|SYNC_ACCELERATION_STRUCTURE_BUILD_MICROMAP_READ_EXT|SYNC_ACCELERATION_STRUCTURE_BUILD_SHADER_STORAGE_READ|SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_READ|SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_WRITE|SYNC_ACCELERATION_STRUCTURE_COPY_ACCELERATION_STRUCTURE_READ|SYNC_ACCELERATION_STRUCTURE_COPY_ACCELERATION_STRUCTURE_WRITE|SYNC_ACCELERATION_STRUCTURE_COPY_TRANSFER_READ|SYNC_ACCELERATION_STRUCTURE_COPY_TRANSFER_WRITE|SYNC_MICROMAP_BUILD_EXT_MICROMAP_READ_EXT|SYNC_MICROMAP_BUILD_EXT_MICROMAP_WRITE_EXT|SYNC_MICROMAP_BUILD_EXT_SHADER_STORAGE_READ|SYNC_MICROMAP_BUILD_EXT_TRANSFER_READ|SYNC_MICROMAP_BUILD_EXT_TRANSFER_WRITE|SYNC_COPY_TRANSFER_READ|SYNC_COPY_TRANSFER_WRITE|SYNC_RESOLVE_TRANSFER_READ|SYNC_RESOLVE_TRANSFER_WRITE|SYNC_BLIT_TRANSFER_READ|SYNC_BLIT_TRANSFER_WRITE|SYNC_CLEAR_TRANSFER_WRITE, queue: VkQueue 0x601067446d30[], submit: 20, batch: 0, batch_tag: 49, command: vkCmdCopyBuffer, command_buffer: VkCommandBuffer 0x601068915570[], seq_no: 1, reset_no: 1).
[ERROR]: [Vulkan]: Validation Error: Validation Error: [ SYNC-HAZARD-WRITE-RACING-WRITE ] Object 0: handle = 0x601067a25280, type = VK_OBJECT_TYPE_QUEUE; | MessageID = 0x743c6069 | vkQueuePresentKHR():  Hazard WRITE_RACING_WRITE for present pSwapchains[0] , swapchain VkSwapchainKHR 0x948cf100000003cd[], image index 1 VkImage 0xdd1b7300000003cf[backbuffer], Access info (usage: SYNC_PRESENT_ENGINE_SYNCVAL_PRESENT_PRESENTED_SYNCVAL, prior_usage: SYNC_PRESENT_ENGINE_SYNCVAL_PRESENT_PRESENTED_SYNCVAL, write_barriers: 0, queue: VkQueue 0x601067a25280[], submit: 143, batch: 0, batch_tag: 3229, vkQueuePresentKHR present_tag:3229, pSwapchains[0]: VkSwapchainKHR 0x948cf100000003cd[], image_index: 1image: VkImage 0xdd1b7300000003cf[backbuffer]).
[ERROR]: [Vulkan]: Validation Error: Validation Error: [ SYNC-HAZARD-WRITE-RACING-WRITE ] Object 0: handle = 0x601067a25280, type = VK_OBJECT_TYPE_QUEUE; | MessageID = 0x743c6069 | vkQueueSubmit2():  Hazard WRITE_RACING_WRITE for entry 0, VkCommandBuffer 0x6010694a48d0[], Submitted access info (submitted_usage: SYNC_IMAGE_LAYOUT_TRANSITION, command: vkCmdBeginRenderPass, seq_no: 1, renderpass: VkRenderPass 0x17f18f00000003cb[], reset_no: 795). Access info (prior_usage: SYNC_PRESENT_ENGINE_SYNCVAL_PRESENT_PRESENTED_SYNCVAL, write_barriers: 0, queue: VkQueue 0x601067a25280[], submit: 145, batch: 0, batch_tag: 3279, vkQueuePresentKHR present_tag:3279, pSwapchains[0]: VkSwapchainKHR 0x948cf100000003cd[], image_index: 2image: VkImage 0x9ffe0c00000003d0[backbuffer]).
[ERROR]: [Vulkan]: Validation Error: Validation Error: [ SYNC-HAZARD-READ-RACING-WRITE ] Object 0: handle = 0x601067a25280, type = VK_OBJECT_TYPE_QUEUE; | MessageID = 0x29910a35 | vkQueueSubmit2():  Hazard READ_RACING_WRITE for entry 0, VkCommandBuffer 0x6010694a48d0[], Submitted access info (submitted_usage: SYNC_VERTEX_ATTRIBUTE_INPUT_VERTEX_ATTRIBUTE_READ, command: vkCmdDrawIndexed, seq_no: 10, reset_no: 795). Access info (prior_usage: SYNC_COPY_TRANSFER_WRITE, write_barriers: SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ|SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT|SYNC_COMPUTE_SHADER_ACCELERATION_STRUCTURE_READ|SYNC_COMPUTE_SHADER_DESCRIPTOR_BUFFER_READ_EXT|SYNC_COMPUTE_SHADER_SHADER_BINDING_TABLE_READ|SYNC_COMPUTE_SHADER_SHADER_SAMPLED_READ|SYNC_COMPUTE_SHADER_SHADER_STORAGE_READ|SYNC_COMPUTE_SHADER_SHADER_STORAGE_WRITE|SYNC_COMPUTE_SHADER_UNIFORM_READ|SYNC_HOST_HOST_READ|SYNC_HOST_HOST_WRITE|SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_READ_NV|SYNC_COMMAND_PREPROCESS_NV_COMMAND_PREPROCESS_WRITE_NV|SYNC_CONDITIONAL_RENDERING_EXT_CONDITIONAL_RENDERING_READ_EXT|SYNC_RAY_TRACING_SHADER_ACCELERATION_STRUCTURE_READ|SYNC_RAY_TRACING_SHADER_DESCRIPTOR_BUFFER_READ_EXT|SYNC_RAY_TRACING_SHADER_SHADER_BINDING_TABLE_READ|SYNC_RAY_TRACING_SHADER_SHADER_SAMPLED_READ|SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_READ|SYNC_RAY_TRACING_SHADER_SHADER_STORAGE_WRITE|SYNC_RAY_TRACING_SHADER_UNIFORM_READ|SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_READ|SYNC_ACCELERATION_STRUCTURE_BUILD_ACCELERATION_STRUCTURE_WRITE|SYNC_ACCELERATION_STRUCTURE_BUILD_INDIRECT_COMMAND_READ|SYNC_ACCELERATION_STRUCTURE_BUILD_MICROMAP_READ_EXT|SYNC_ACCELERATION_STRUCTURE_BUILD_SHADER_STORAGE_READ|SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_READ|SYNC_ACCELERATION_STRUCTURE_BUILD_TRANSFER_WRITE|SYNC_ACCELERATION_STRUCTURE_COPY_ACCELERATION_STRUCTURE_READ|SYNC_ACCELERATION_STRUCTURE_COPY_ACCELERATION_STRUCTURE_WRITE|SYNC_ACCELERATION_STRUCTURE_COPY_TRANSFER_READ|SYNC_ACCELERATION_STRUCTURE_COPY_TRANSFER_WRITE|SYNC_MICROMAP_BUILD_EXT_MICROMAP_READ_EXT|SYNC_MICROMAP_BUILD_EXT_MICROMAP_WRITE_EXT|SYNC_MICROMAP_BUILD_EXT_SHADER_STORAGE_READ|SYNC_MICROMAP_BUILD_EXT_TRANSFER_READ|SYNC_MICROMAP_BUILD_EXT_TRANSFER_WRITE|SYNC_COPY_TRANSFER_READ|SYNC_COPY_TRANSFER_WRITE|SYNC_RESOLVE_TRANSFER_READ|SYNC_RESOLVE_TRANSFER_WRITE|SYNC_BLIT_TRANSFER_READ|SYNC_BLIT_TRANSFER_WRITE|SYNC_CLEAR_TRANSFER_WRITE, queue: VkQueue 0x601067446d30[], submit: 20, batch: 0, batch_tag: 49, command: vkCmdCopyBuffer, command_buffer: VkCommandBuffer 0x601068915570[], seq_no: 1, reset_no: 1).
[ERROR]: [Vulkan]: Validation Error: Validation Error: [ SYNC-HAZARD-WRITE-RACING-WRITE ] Object 0: handle = 0x601067a25280, type = VK_OBJECT_TYPE_QUEUE; | MessageID = 0x743c6069 | vkQueuePresentKHR():  Hazard WRITE_RACING_WRITE for present pSwapchains[0] , swapchain VkSwapchainKHR 0x948cf100000003cd[], image index 2 VkImage 0x9ffe0c00000003d0[backbuffer], Access info (usage: SYNC_PRESENT_ENGINE_SYNCVAL_PRESENT_PRESENTED_SYNCVAL, prior_usage: SYNC_PRESENT_ENGINE_SYNCVAL_PRESENT_PRESENTED_SYNCVAL, write_barriers: 0, queue: VkQueue 0x601067a25280[], submit: 145, batch: 0, batch_tag: 3279, vkQueuePresentKHR present_tag:3279, pSwapchains[0]: VkSwapchainKHR 0x948cf100000003cd[], image_index: 2image: VkImage 0x9ffe0c00000003d0[backbuffer]).
[ERROR]: [Vulkan]: Validation Error: Validation Error: [ SYNC-HAZARD-WRITE-RACI

is spammed.

artem-lunarg commented 8 months ago

@HansKristian-Work I can reproduce the issue. It happens because submit synchronization validation is enabled by default, starting with the latest sdk. If you want, you can turn it off in vkconfig (or programmatically) and leave only regular synchronization validation which does not produce errors. Meanwhile, I will investigate the issue.

artem-lunarg commented 7 months ago

@HansKristian-Work this was fixed in the latest code but only when binary semaphores are used (I used ext.vk12_features.timelineSemaphore = VK_FALSE; in context.cpp for testing).

Timeline semaphores are not supported by syncval at the moment (listed as known limitation here https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/docs/synchronization_usage.md#known-limitations) so when timelines are enabled gltf-viewer-simple will not spam but still will report one or few error messages and latency-test will continue to spam.

I will create a separate issue for timeline semaphore support that will use the above two Granite's samples as a repro case.