Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing synchronization in "subpasses" sample #455

Open
koplas opened this issue May 22, 2022 · 6 comments
Open

Missing synchronization in "subpasses" sample #455

koplas opened this issue May 22, 2022 · 6 comments
Labels
bug Something isn't working framework This is relevant to the framework validation

Comments

@koplas
Copy link

koplas commented May 22, 2022

The sample "subpasses" has missing synchronization, which leads to display artifacts.

To reproduce enable Synchronization Validation Layers and start the sample. Then switch the Render technique between "Subpasses" and "Renderpasses". Following validation errors are printed:

SYNC-HAZARD-READ_AFTER_WRITE(ERROR / SPEC): msgNum: 1287084845 - Validation Error: [ SYNC-HAZARD-READ_AFTER_WRITE ] Object 0: handle = 0x5581ee092cb0, name = RP with 1 subpasses:
	[0]: 
, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x4cb75b2d | vkCmdBeginRenderPass: Hazard READ_AFTER_WRITE in subpass 0 for attachment 1 aspect depth during load with loadOp VK_ATTACHMENT_LOAD_OP_LOAD. Access info (usage: SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 32, reset_no: 1045).
    Objects: 1
        [0] 0x5581ee092cb0, type: 18, name: RP with 1 subpasses:
	[0]: 

SYNC-HAZARD-READ_AFTER_WRITE(ERROR / SPEC): msgNum: 1287084845 - Validation Error: [ SYNC-HAZARD-READ_AFTER_WRITE ] Object 0: handle = 0x5581ee092cb0, name = RP with 1 subpasses:
	[0]: 
, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x4cb75b2d | vkCmdBeginRenderPass: Hazard READ_AFTER_WRITE in subpass 0 for attachment 2 aspect color during load with loadOp VK_ATTACHMENT_LOAD_OP_LOAD. Access info (usage: SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 33, reset_no: 1045).
    Objects: 1
        [0] 0x5581ee092cb0, type: 18, name: RP with 1 subpasses:
	[0]: 

SYNC-HAZARD-READ_AFTER_WRITE(ERROR / SPEC): msgNum: 1287084845 - Validation Error: [ SYNC-HAZARD-READ_AFTER_WRITE ] Object 0: handle = 0x5581ee092cb0, name = RP with 1 subpasses:
	[0]: 
, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x4cb75b2d | vkCmdBeginRenderPass: Hazard READ_AFTER_WRITE in subpass 0 for attachment 3 aspect color during load with loadOp VK_ATTACHMENT_LOAD_OP_LOAD. Access info (usage: SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 34, reset_no: 1045).
    Objects: 1
        [0] 0x5581ee092cb0, type: 18, name: RP with 1 subpasses:
	[0]: 

[info] Changing render technique
SYNC-HAZARD-READ_AFTER_WRITE(ERROR / SPEC): msgNum: 1287084845 - Validation Error: [ SYNC-HAZARD-READ_AFTER_WRITE ] Object 0: handle = 0x5581ee092cb0, name = RP with 1 subpasses:
	[0]: 
, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x4cb75b2d | vkCmdBeginRenderPass: Hazard READ_AFTER_WRITE in subpass 0 for attachment 1 aspect depth during load with loadOp VK_ATTACHMENT_LOAD_OP_LOAD. Access info (usage: SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 32, reset_no: 1050).
    Objects: 1
        [0] 0x5581ee092cb0, type: 18, name: RP with 1 subpasses:
	[0]: 

SYNC-HAZARD-READ_AFTER_WRITE(ERROR / SPEC): msgNum: 1287084845 - Validation Error: [ SYNC-HAZARD-READ_AFTER_WRITE ] Object 0: handle = 0x5581ee092cb0, name = RP with 1 subpasses:
	[0]: 
, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x4cb75b2d | vkCmdBeginRenderPass: Hazard READ_AFTER_WRITE in subpass 0 for attachment 2 aspect color during load with loadOp VK_ATTACHMENT_LOAD_OP_LOAD. Access info (usage: SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 33, reset_no: 1050).
    Objects: 1
        [0] 0x5581ee092cb0, type: 18, name: RP with 1 subpasses:
	[0]: 

SYNC-HAZARD-READ_AFTER_WRITE(ERROR / SPEC): msgNum: 1287084845 - Validation Error: [ SYNC-HAZARD-READ_AFTER_WRITE ] Object 0: handle = 0x5581ee092cb0, name = RP with 1 subpasses:
	[0]: 
, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x4cb75b2d | vkCmdBeginRenderPass: Hazard READ_AFTER_WRITE in subpass 0 for attachment 3 aspect color during load with loadOp VK_ATTACHMENT_LOAD_OP_LOAD. Access info (usage: SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 34, reset_no: 1050).
    Objects: 1
        [0] 0x5581ee092cb0, type: 18, name: RP with 1 subpasses:
	[0]: 

SYNC-HAZARD-READ_AFTER_WRITE(ERROR / SPEC): msgNum: 1287084845 - Validation Error: [ SYNC-HAZARD-READ_AFTER_WRITE ] Object 0: handle = 0x5581ee092cb0, name = RP with 1 subpasses:
	[0]: 
, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x4cb75b2d | vkCmdBeginRenderPass: Hazard READ_AFTER_WRITE in subpass 0 for attachment 1 aspect depth during load with loadOp VK_ATTACHMENT_LOAD_OP_LOAD. Access info (usage: SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 32, reset_no: 1044).
    Objects: 1
        [0] 0x5581ee092cb0, type: 18, name: RP with 1 subpasses:
	[0]: 

SYNC-HAZARD-READ_AFTER_WRITE(ERROR / SPEC): msgNum: 1287084845 - Validation Error: [ SYNC-HAZARD-READ_AFTER_WRITE ] Object 0: handle = 0x5581ee092cb0, name = RP with 1 subpasses:
	[0]: 
, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x4cb75b2d | vkCmdBeginRenderPass: Hazard READ_AFTER_WRITE in subpass 0 for attachment 2 aspect color during load with loadOp VK_ATTACHMENT_LOAD_OP_LOAD. Access info (usage: SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 33, reset_no: 1044).
    Objects: 1
        [0] 0x5581ee092cb0, type: 18, name: RP with 1 subpasses:
	[0]: 

SYNC-HAZARD-READ_AFTER_WRITE(ERROR / SPEC): msgNum: 1287084845 - Validation Error: [ SYNC-HAZARD-READ_AFTER_WRITE ] Object 0: handle = 0x5581ee092cb0, name = RP with 1 subpasses:
	[0]: 
, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x4cb75b2d | vkCmdBeginRenderPass: Hazard READ_AFTER_WRITE in subpass 0 for attachment 3 aspect color during load with loadOp VK_ATTACHMENT_LOAD_OP_LOAD. Access info (usage: SYNC_COLOR_ATTACHMENT_OUTPUT_COLOR_ATTACHMENT_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 34, reset_no: 1044).
    Objects: 1
        [0] 0x5581ee092cb0, type: 18, name: RP with 1 subpasses:
	[0]: 

SYNC-HAZARD-READ_AFTER_WRITE(ERROR / SPEC): msgNum: 1287084845 - Validation Error: [ SYNC-HAZARD-READ_AFTER_WRITE ] Object 0: handle = 0x5581ee092cb0, name = RP with 1 subpasses:
	[0]: 
, type = VK_OBJECT_TYPE_RENDER_PASS; | MessageID = 0x4cb75b2d | vkCmdBeginRenderPass: Hazard READ_AFTER_WRITE in subpass 0 for attachment 1 aspect depth during load with loadOp VK_ATTACHMENT_LOAD_OP_LOAD. Access info (usage: SYNC_EARLY_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_READ, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ, command: vkCmdPipelineBarrier, seq_no: 32, reset_no: 1042).
    Objects: 1
        [0] 0x5581ee092cb0, type: 18, name: RP with 1 subpasses:
	[0]: 

Note: The display artifacts are visible only when the "Subpasses" option is selected.

renderpasses
subpasses

vulkaninfo.txt

@koplas koplas closed this as completed May 25, 2022
@koplas
Copy link
Author

koplas commented May 26, 2022

A subpass dependency as described in https://developer.arm.com/documentation/101897/0200/fragment-shading/multipass-rendering should fix this issue.

Code snippet:

VkSubpassDependency subpassDependency = {}; 
subpassDependency.srcSubpass = 0; 
subpassDependency.dstSubpass = 1; 
 
subpassDependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | 
                                 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | 
                                 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; 
 
subpassDependency.dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | 
                                 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | 
                                 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | 
                                 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; 
 
subpassDependency.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | 
                                  VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT 
 
subpassDependency.dstAccessMask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT | 
                                  VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | 
                                  VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | 
                                  VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | 
                                  VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; 
 
subpassDependency.dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;

@koplas koplas reopened this May 26, 2022
@SaschaWillems
Copy link
Collaborator

Thanks for raising this issue. I get the same sync validation messages and noticed that this also happens for other samples (e.g. MSAA). We probably should do a full sync run for all samples to ensure that they all validate clean against sync val.

@TomAtkinsonArm
Copy link
Contributor

May be too challenging to fix right now. Lets track it for future framework changes

@SaschaWillems
Copy link
Collaborator

We really need to fix this. This issue has been open for too long and is causing issues esp. for people using AMD hardware.

@energyc0
Copy link

I had an artifact like this when I was implementing SSAO. I was thinking it was a synchronization problem. The artifact didn`t disappear when I fixed synchronization. In the end it was all about dividing by zero in my fragment shader.

@SaschaWillems
Copy link
Collaborator

This is definitely a sync issue (see earlier comments and linked issues/PRs). I can reproduce it on my side.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working framework This is relevant to the framework validation
Projects
None yet
Development

No branches or pull requests

4 participants