Skip to content

Commit

Permalink
Fix barriers in dynamic rendering fragment density tests
Browse files Browse the repository at this point in the history
Added additional barrier to ensure work on subsampled image is
complete before copy to output image.

Manual cherry-pick from vulkan-cts-1.3.1

Affects: dEQP-VK.dynamic_rendering.primary_cmd_buff.fragment_density_map*
	 dEQP-VK.dynamic_rendering.complete_secondary_cmd_buff.fragment_density_map*
	 dEQP-VK.dynamic_rendering.partial_secondary_cmd_buff.fragment_density_map*

Components: Vulkan

VK-GL-CTS Issue: 3796

Change-Id: I8d2276f6517cea7cd173a8f9b3bd7d40cebf3e6d
  • Loading branch information
mikbyr01 authored and mnetsch committed Nov 17, 2022
1 parent 210e49e commit 4524897
Showing 1 changed file with 19 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2295,6 +2295,15 @@ void FragmentDensityMapTestInstance::createCommandBufferForDynamicRendering(cons
));
cbImageBarrier[1].image = *m_colorResolvedImage;

const VkImageMemoryBarrier subsampledImageBarrier = makeImageMemoryBarrier(
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT , // VkAccessFlags srcAccessMask;
VK_ACCESS_SHADER_READ_BIT, // VkAccessFlags dstAccessMask;
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout oldLayout;
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, // VkImageLayout newLayout;
*m_colorImage, // VkImage image;
colorSubresourceRange // VkImageSubresourceRange subresourceRange;
);

const VkImageMemoryBarrier outputImageBarrier = makeImageMemoryBarrier(
VK_ACCESS_NONE_KHR, // VkAccessFlags srcAccessMask;
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask;
Expand Down Expand Up @@ -2559,7 +2568,7 @@ void FragmentDensityMapTestInstance::createCommandBufferForDynamicRendering(cons
0, 0, DE_NULL, 0, DE_NULL, 1, &densityMapImageBarrier);
}

// barier that will change layout of color and resolve attachments
// barrier that will change layout of color and resolve attachments
vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_NONE_KHR, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
0, 0, DE_NULL, 0, DE_NULL, 1 + isColorImageMultisampled, cbImageBarrier.data());

Expand Down Expand Up @@ -2588,6 +2597,10 @@ void FragmentDensityMapTestInstance::createCommandBufferForDynamicRendering(cons
}
}

// barrier that ensures writing to colour image has completed.
vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
0, 0, DE_NULL, 0, DE_NULL, 1u, &subsampledImageBarrier);

// barrier that will change layout of output image
vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_NONE_KHR, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
0, 0, DE_NULL, 0, DE_NULL, 1, &outputImageBarrier);
Expand Down Expand Up @@ -2625,7 +2638,7 @@ void FragmentDensityMapTestInstance::createCommandBufferForDynamicRendering(cons
0, 0, DE_NULL, 0, DE_NULL, 1, &densityMapImageBarrier);
}

// barier that will change layout of color and resolve attachments
// barrier that will change layout of color and resolve attachments
vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_NONE_KHR, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
0, 0, DE_NULL, 0, DE_NULL, 1 + isColorImageMultisampled, cbImageBarrier.data());

Expand All @@ -2642,6 +2655,10 @@ void FragmentDensityMapTestInstance::createCommandBufferForDynamicRendering(cons
vk.cmdEndRendering(*m_cmdBuffer);
}

// barrier that ensures writing to colour image has completed.
vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
0, 0, DE_NULL, 0, DE_NULL, 1u, &subsampledImageBarrier);

// barrier that will change layout of output image
vk.cmdPipelineBarrier(*m_cmdBuffer, VK_PIPELINE_STAGE_NONE_KHR, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
0, 0, DE_NULL, 0, DE_NULL, 1, &outputImageBarrier);
Expand Down

0 comments on commit 4524897

Please sign in to comment.