Skip to content

Synchronization Errors in Hello Triangle Tutorial #366

Description

@john01dav

I originally encountered this problem due to actual symptoms of incorrect synchronization in a more realistic program than the hello triangle example, but when downloading the hello triangle app I am able to show synchronization errors due to the synchronization validation failing.

I added this code to the 15_hello_triangle.cpp file:

VkValidationFeatureEnableEXT enabled[] = {
    VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT,
    VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT,
    VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT,
    VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT,
    VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT,
};
VkValidationFeaturesEXT validationFeatures;
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo{};
if (enableValidationLayers) {
    createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
    createInfo.ppEnabledLayerNames = validationLayers.data();

    populateDebugMessengerCreateInfo(debugCreateInfo);
    createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;

    validationFeatures.sType = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT;
    validationFeatures.pNext = nullptr;
    validationFeatures.pEnabledValidationFeatures = enabled;
    validationFeatures.enabledValidationFeatureCount = 5;
    validationFeatures.disabledValidationFeatureCount = 0;
    debugCreateInfo.pNext = &validationFeatures;
} else {
    createInfo.enabledLayerCount = 0;

    createInfo.pNext = nullptr;
}

Then, when running, there are validation errors:

validation layer: Validation Error: [ SYNC-HAZARD-WRITE-AFTER-WRITE ] Object 0: handle = 0xd000000000d, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x5c0ec5d6 | vkCmdBeginRenderPass: Hazard WRITE_AFTER_WRITE vs. layout transition in subpass 0 for attachment 0 aspect color during load with loadOp VK_ATTACHMENT_LOAD_OP_CLEAR.
validation layer: Validation Error: [ SYNC-HAZARD-WRITE-AFTER-WRITE ] Object 0: handle = 0xd000000000d, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x5c0ec5d6 | vkCmdEndRenderPass: Hazard WRITE_AFTER_WRITE vs. store/resolve operations in subpass 0 for attachment 0 final image layout transition (old_layout: VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, new_layout: VK_IMAGE_LAYOUT_PRESENT_SRC_KHR).

Actual issues occur on Nvidia + Wayland when you make the GPU very busy:
flickering.webm

There seems to be something wrong with the synchronization in the tutorial that propagated into my program, but I don't understand synchronization well enough to say what. Also, it may be a good idea to enable synchronization and other extended validation in the tutorial, or at least show users how. I had no idea that this feature existed until recently.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions