Last active
January 25, 2024 20:36
-
-
Save thevaber/9ebe2d371e5e2ef134bba60fd6aed750 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* The validation error message: | |
Validation Error: [ SYNC-HAZARD-WRITE-RACING-WRITE ] Object 0: handle = 0x29862255390, name = Upload 0, type = VK_OBJECT_TYPE_QUEUE; | MessageID = 0x743c6069 | vkQueueSubmit2KHR(): | |
Hazard WRITE_RACING_WRITE for entry 0, VkCommandBuffer 0x2986403e690[], | |
Submitted access info (submitted_usage: SYNC_COPY_TRANSFER_WRITE, command: vkCmdCopyBufferToImage, seq_no: 1, reset_no: 1). | |
Access info (prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_HOST_HOST_READ|SYNC_HOST_HOST_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_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 0x29862255390[Upload 0], submit: 0, batch: 0, batch_tag: 1, command: vkCmdPipelineBarrier2KHR, command_buffer: VkCommandBuffer 0x2986403b390[], seq_no: 1, VkImage 0x51820000000007b[], reset_no: 1). | |
*/ | |
VkSemaphore semaphore = fresh binary semaphore; | |
//// image layout transition in queue A | |
VkCommandBuffer cmd_a = begin command buffer; | |
vkCmdPipelineBarrier2KHR(cmd_a, &(VkDependencyInfo) { | |
.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO, | |
.imageMemoryBarrierCount = 1, | |
.pImageMemoryBarriers = &(VkImageMemoryBarrier2) { | |
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2, | |
.srcStageMask = VK_PIPELINE_STAGE_2_NONE, | |
.srcAccessMask = VK_ACCESS_2_NONE, | |
.dstStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT, | |
.dstAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR, | |
.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED, | |
.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | |
.image = image, | |
.subresourceRange = { | |
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, | |
.levelCount = 1, | |
.layerCount = 1, | |
}, | |
}, | |
}); | |
vkEndCommandBuffer(cmd_a); | |
vkQueueSubmit2KHR(queue_a, 1, &(VkSubmitInfo2) { | |
.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO_2, | |
.commandBufferInfoCount = 1, | |
.pCommandBufferInfos = &(VkCommandBufferSubmitInfo) { | |
.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO, | |
.commandBuffer = cmd_a, | |
}, | |
.signalSemaphoreInfoCount = 1, | |
.pSignalSemaphoreInfos = &(VkSemaphoreSubmitInfo) { | |
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO, | |
.semaphore = semaphore, | |
.stageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, | |
}, | |
}, NULL); | |
//// nothing in queue B, but waiting for binary semaphore of the first queue submit | |
// if this submit is missing, or if it happens after the second queue A submit, or if this submit doesn't wait for the semaphore, then the validation error does not happen | |
VkCommandBuffer cmd_b = begin command buffer; | |
vkEndCommandBuffer(cmd_b); // no commands at all | |
vkQueueSubmit2KHR(queue_B, 1, &(VkSubmitInfo2) { | |
.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO_2, | |
.commandBufferInfoCount = 1, | |
.pCommandBufferInfos = &(VkCommandBufferSubmitInfo) { | |
.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO, | |
.commandBuffer = cmd_b, | |
}, | |
.waitSemaphoreInfoCount = 1, | |
.pWaitSemaphoreInfos = &(VkSemaphoreSubmitInfo) { | |
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO, | |
.semaphore = semaphore, | |
.stageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, | |
}, | |
}, NULL); | |
//// copy buffer to image in queue A | |
VkCommandBuffer cmd_c = begin command buffer; | |
vkCmdCopyBufferToImage(cmd_c, src_buffer, images[0]->image, | |
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, | |
1, &(VkBufferImageCopy) { | |
.bufferRowLength = 1024, | |
.bufferImageHeight = 1024, | |
.imageSubresource = { | |
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, | |
.layerCount = 1, | |
}, | |
.imageExtent = { | |
.width = 1024, | |
.height = 1024, | |
.depth = 1, | |
}, | |
}); | |
vkEndCommandBuffer(cmd_c); | |
vkQueueSubmit2KHR(queue_a, 1, &(VkSubmitInfo2) { | |
.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO_2, | |
.commandBufferInfoCount = 1, | |
.pCommandBufferInfos = &(VkCommandBufferSubmitInfo) { | |
.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO, | |
.commandBuffer = cmd_c, | |
}, | |
}, NULL); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment