Skip to content

Instantly share code, notes, and snippets.

@thevaber
Last active January 26, 2024 23:24
Show Gist options
  • Save thevaber/11db6c208ba7072c81e1dee1dfcd1c32 to your computer and use it in GitHub Desktop.
Save thevaber/11db6c208ba7072c81e1dee1dfcd1c32 to your computer and use it in GitHub Desktop.
/*
Validation Error: [ SYNC-HAZARD-WRITE-RACING-WRITE ] Object 0: handle = 0x20d2c56dda0, type = VK_OBJECT_TYPE_QUEUE; | MessageID = 0x743c6069 | vkQueueSubmit():
Hazard WRITE_RACING_WRITE for entry 0, VkCommandBuffer 0x20d32948210[],
Submitted access info (submitted_usage: SYNC_COPY_TRANSFER_WRITE, command: vkCmdCopyBufferToImage, seq_no: 1, reset_no: 2).
Access info (prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION,
write_barriers: SYNC_DRAW_INDIRECT_INDIRECT_COMMAND_READ|SYNC_DRAW_INDIRECT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT|SYNC_VERTEX_SHADER_ACCELERATION_STRUCTURE_READ|SYNC_VERTEX_SHADER_DESCRIPTOR_BUFFER_READ_EXT|SYNC_VERTEX_SHADER_SHADER_BINDING_TABLE_READ|SYNC_VERTEX_SHADER_SHADER_SAMPLED_READ|SYNC_VERTEX_SHADER_SHADER_STORAGE_READ|SYNC_VERTEX_SHADER_SHADER_STORAGE_WRITE|SYNC_VERTEX_SHADER_UNIFORM_READ|SYNC_TESSELLATION_CONTROL_SHADER_ACCELERATION_STRUCTURE_READ|SYNC_TESSELLATION_CONTROL_SHADER_DESCRIPTOR_BUFFER_READ_EXT|SYNC_TESSELLATION_CONTROL_SHADER_SHADER_BINDING_TABLE_READ|SYNC_TESSELLATION_CONTROL_SHADER_SHADER_SAMPLED_READ|SYNC_TESSELLATION_CONTROL_SHADER_SHADER_STORAGE_READ|SYNC_TESSELLATION_CONTROL_SHADER_SHADER_STORAGE_WRITE|SYNC_TESSELLATION_CONTROL_SHADER_UNIFORM_READ|SYNC_TESSELLATION_EVALUATION_SHADER_ACCELERATION_STRUCTURE_READ|SYNC_TESSELLATION_EVALUATION_SHADER_DESCRIPTOR_BUFFER_READ_EXT|SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_BINDING_TABLE_READ|SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_SAMPLED_READ|SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_STORAGE_READ|SYNC_TESSELLATION_EVALUATION_SHADER_SHADER_STORAGE_WRITE|SYNC_TESSELLATION_EVALUATION_SHADER_UNIFORM_READ|SYNC_GEOMETRY_SHADER_ACCELERATION_STRUCTURE_READ|SYNC_GEOMETRY_SHADER_DESCRIPTOR_BUFFER_READ_EXT|SYNC_GEOMETRY_SHADER_SHADER_BINDING_TABLE_READ|SYNC_GEOMETRY_SHADER_SHADER_SAMPLED_READ|SYNC_GEOMETRY_SHADER_SHADER_STORAGE_READ|SYNC_GEOMETRY_SHADER_SHADER_STORAGE_WRITE|SYNC_GEOMETRY_SHADER_UNIFORM_READ|SYNC_FRAGMENT_SHADER_ACCELERATION_STRUCTURE_READ|SYNC_FRAGMENT_SHADER_COLOR_ATTACHMENT_READ|SYNC_FRAGMENT_SHADER_DEPTH_STENCIL_ATTACHMENT_READ|SYNC_FRAGMENT_SHADER_DESCRIPTOR_BUFFER_READ_EXT|SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ|SYNC_FRAGMENT_SHADER_SHADER_BINDING_TABLE_READ|SYNC_FRAGMENT_SHADER_SHADER_SAMPLED_READ|SYNC_FRAGMENT_SHADER_SHADER_STORAGE_READ|SYNC_FRAGMENT_SHADER_SHADER_STORAGE_WRITE|SYNC_FRAGMENT_SHADER_UNIFORM_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_READ_NONCOHERENT_EXT|SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_WRITE|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_TASK_SHADER_EXT_ACCELERATION_STRUCTURE_READ|SYNC_TASK_SHADER_EXT_DESCRIPTOR_BUFFER_READ_EXT|SYNC_TASK_SHADER_EXT_SHADER_BINDING_TABLE_READ|SYNC_TASK_SHADER_EXT_SHADER_SAMPLED_READ|SYNC_TASK_SHADER_EXT_SHADER_STORAGE_READ|SYNC_TASK_SHADER_EXT_SHADER_STORAGE_WRITE|SYNC_TASK_SHADER_EXT_UNIFORM_READ|SYNC_MESH_SHADER_EXT_ACCELERATION_STRUCTURE_READ|SYNC_MESH_SHADER_EXT_DESCRIPTOR_BUFFER_READ_EXT|SYNC_MESH_SHADER_EXT_SHADER_BINDING_TABLE_READ|SYNC_MESH_SHADER_EXT_SHADER_SAMPLED_READ|SYNC_MESH_SHADER_EXT_SHADER_STORAGE_READ|SYNC_MESH_SHADER_EXT_SHADER_STORAGE_WRITE|SYNC_MESH_SHADER_EXT_UNIFORM_READ|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_FRAGMENT_SHADING_RATE_ATTACHMENT_FRAGMENT_SHADING_RATE_ATTACHMENT_READ|SYNC_FRAGMENT_DENSITY_PROCESS_EXT_FRAGMENT_DENSITY_MAP_READ_EXT|SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_COUNTER_READ_EXT|SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_COUNTER_WRITE_EXT|SYNC_TRANSFORM_FEEDBACK_EXT_TRANSFORM_FEEDBACK_WRITE_EXT|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|SYNC_INDEX_INPUT_INDEX_READ|SYNC_VERTEX_ATTRIBUTE_INPUT_VERTEX_ATTRIBUTE_READ|SYNC_SUBPASS_SHADER_HUAWEI_ACCELERATION_STRUCTURE_READ|SYNC_SUBPASS_SHADER_HUAWEI_DESCRIPTOR_BUFFER_READ_EXT|SYNC_SUBPASS_SHADER_HUAWEI_INPUT_ATTACHMENT_READ|SYNC_SUBPASS_SHADER_HUAWEI_SHADER_BINDING_TABLE_READ|SYNC_SUBPASS_SHADER_HUAWEI_SHADER_SAMPLED_READ|SYNC_SUBPASS_SHADER_HUAWEI_SHADER_STORAGE_READ|SYNC_SUBPASS_SHADER_HUAWEI_SHADER_STORAGE_WRITE|SYNC_SUBPASS_SHADER_HUAWEI_UNIFORM_READ|SYNC_INVOCATION_MASK_HUAWEI_INVOCATION_MASK_READ_HUAWEI|SYNC_CLUSTER_CULLING_SHADER_HUAWEI_ACCELERATION_STRUCTURE_READ|SYNC_CLUSTER_CULLING_SHADER_HUAWEI_DESCRIPTOR_BUFFER_READ_EXT|SYNC_CLUSTER_CULLING_SHADER_HUAWEI_SHADER_BINDING_TABLE_READ|SYNC_CLUSTER_CULLING_SHADER_HUAWEI_SHADER_SAMPLED_READ|SYNC_CLUSTER_CULLING_SHADER_HUAWEI_SHADER_STORAGE_READ|SYNC_CLUSTER_CULLING_SHADER_HUAWEI_SHADER_STORAGE_WRITE|SYNC_CLUSTER_CULLING_SHADER_HUAWEI_UNIFORM_READ,
queue: VkQueue 0x20d2c56dda0[], submit: 0, batch: 0, batch_tag: 1,
command: vkCmdPipelineBarrier2KHR, command_buffer: VkCommandBuffer 0x20d32942a30[], seq_no: 1, VkImage 0xdcc8fd0000000012[], reset_no: 2).
*/
TEST_F(PositiveSyncVal, TestTwoQueuesImageLayoutTransition) {
SetTargetApiVersion(VK_API_VERSION_1_2);
AddRequiredExtensions(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME);
AddRequiredFeature(vkt::Feature::synchronization2);
RETURN_IF_SKIP(InitSyncValFramework());
RETURN_IF_SKIP(InitState());
QSTestContext test(m_device);
if (!test.Valid()) {
GTEST_SKIP() << "Test requires a valid queue object.";
}
VkImageObj image(m_device);
image.Init(64, 64, 1, VK_FORMAT_R8_UNORM, VK_IMAGE_USAGE_TRANSFER_DST_BIT);
vkt::Buffer buffer(*m_device, 64 * 64, VK_BUFFER_USAGE_TRANSFER_SRC_BIT);
VkBufferImageCopy region = {};
region.bufferRowLength = 64;
region.bufferImageHeight = 64;
region.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
region.imageSubresource.layerCount = 1;
region.imageExtent.height = 64;
region.imageExtent.width = 64;
region.imageExtent.depth = 1;
test.BeginA();
VkImageMemoryBarrier2KHR image_barrier = vku::InitStructHelper();
image_barrier.srcStageMask = VK_PIPELINE_STAGE_2_NONE;
image_barrier.dstStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT;
image_barrier.srcAccessMask = VK_ACCESS_2_NONE;
image_barrier.dstAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR;
image_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
image_barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
image_barrier.image = image;
image_barrier.subresourceRange = {VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1};
VkDependencyInfoKHR dep_info = vku::InitStructHelper();
dep_info.imageMemoryBarrierCount = 1;
dep_info.pImageMemoryBarriers = &image_barrier;
vk::CmdPipelineBarrier2KHR(test.h_cba, &dep_info);
test.End();
test.BeginB();
test.End();
test.BeginC();
vk::CmdCopyBufferToImage(test.h_cbc, buffer, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region);
test.End();
test.Submit0Signal(test.cba); // A
// If this submit is missing, or if it happens after submit C, or if this submit doesn't wait for the semaphore, then the validation error does not happen
test.Submit1Wait(test.cbb, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); // B
test.Submit0(test.cbc); // C
test.DeviceWait();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment