You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Compile with command autoninja -C out/LinuxDebug angle_end2end_tests
Run test with command out/LinuxDebug/angle_end2end_tests --gtest_filter="LineLoopIndirectTest.UShortIndexIndirectBuffer/ES3_1_Vulkan" --verbose --local-output
Observe that the test failed with this validation error:
The renderdoc capture shows that VVL thinks there is a missing execution barrier on the VkBuffer:
VkBuffer used as index buffer for vkCmdDrawIndexed()
--- VVL thinks there is a missing execution barrier---
VkBuffer used as dest buffer for vkCmdCopyImageToBuffer()
However, the two buffers are suballocated. Even they belong to the same big VkBuffer, they are actually pointing to different memories.
We think that using VK_KHR_Synchronization2 exposed this issue in VVL. Before we use VK_KHR_Synchronization2, the srcStageMask and dstStageMask are shared between VkMemoryBarrier, VkBufferMemoryBarier, and VkImageMemoryBarrier. in the vkCmdPipelineBarrier () call. Between the vkCmdDrawIndex() and vkCmdCopyImageToBuffer(), even if only image barrier is needed, the srcStageMask and dstStageMask values also apply to the VkMemoryBarrier and VkBufferMemoryBarrier, and it fulfills VVL's validation on buffer execution barrier (even there is no execution barrier needed on buffer because they are suballocated and point to different memories). After switching to VK_KHR_Synchronization2, the srcStageMask and dstStageMask are packed within the VkMemoryBarrier2, VkBufferMemoryBarier2, VkImageMemoryBarrier2. So now if VkMemoryBarrier2 is null, there is no execution barrier applied to VkBuffer, and VVL incorrectly thinks that there is a missing execution barrier on the buffer.
The text was updated successfully, but these errors were encountered:
I wonder if #3605 was fixed by #8141, we indeed did not compute offsets correctly for dynamic descriptors (but I did not look closely at these issues yet, so could be a wrong suggestion). This issue should be something different because it is based on the latest code.
I wonder if #3605 was fixed by #8141, we indeed did not compute offsets correctly for dynamic descriptors (but I did not look closely at these issues yet, so could be a wrong suggestion). This issue should be something different because it is based on the latest code.
Environment:
Describe the Issue
To reproduce:
https://chromium-review.googlesource.com/c/angle/angle/+/5832709/4 (patchset 4)
https://chromium-review.googlesource.com/c/angle/angle/+/5832710/10 (patchset 10)
gn args out/LinuxDebug
autoninja -C out/LinuxDebug angle_end2end_tests
out/LinuxDebug/angle_end2end_tests --gtest_filter="LineLoopIndirectTest.UShortIndexIndirectBuffer/ES3_1_Vulkan" --verbose --local-output
Observe that the test failed with this validation error:
Expected behavior
Test should pass without the SYNC-HAZARD-WRITE-AFTER-READ validation error.
Valid Usage ID
If applicable, please include the validation messages encountered leading up to the issue
Additional context
The renderdoc capture shows that VVL thinks there is a missing execution barrier on the VkBuffer:
VkBuffer used as index buffer for vkCmdDrawIndexed()
--- VVL thinks there is a missing execution barrier---
VkBuffer used as dest buffer for vkCmdCopyImageToBuffer()
However, the two buffers are suballocated. Even they belong to the same big VkBuffer, they are actually pointing to different memories.
We think that using
VK_KHR_Synchronization2
exposed this issue in VVL. Before we useVK_KHR_Synchronization2
, thesrcStageMask
anddstStageMask
are shared betweenVkMemoryBarrier
,VkBufferMemoryBarier
, andVkImageMemoryBarrier
. in thevkCmdPipelineBarrier ()
call. Between thevkCmdDrawIndex()
andvkCmdCopyImageToBuffer()
, even if only image barrier is needed, thesrcStageMask
anddstStageMask
values also apply to theVkMemoryBarrier
andVkBufferMemoryBarrier
, and it fulfills VVL's validation on buffer execution barrier (even there is no execution barrier needed on buffer because they are suballocated and point to different memories). After switching toVK_KHR_Synchronization2
, thesrcStageMask
anddstStageMask
are packed within theVkMemoryBarrier2
,VkBufferMemoryBarier2
,VkImageMemoryBarrier2
. So now ifVkMemoryBarrier2
is null, there is no execution barrier applied to VkBuffer, and VVL incorrectly thinks that there is a missing execution barrier on the buffer.The text was updated successfully, but these errors were encountered: