Vulkan Overlay: Don't try to change the image layout to present twice

The render pass already does the transition.
The pipeline barrier is still needed to transfer the queue family ownership.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3740>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3740>
pull/131/head
Georg Lehmann 4 years ago committed by jackun
parent efed107af6
commit 1eca184157
No known key found for this signature in database
GPG Key ID: 119DB3F1D05A9ED3

@ -1706,28 +1706,33 @@ static struct overlay_draw *render_swapchain_display(struct swapchain_data *data
device_data->vtable.CmdEndRenderPass(draw->command_buffer); device_data->vtable.CmdEndRenderPass(draw->command_buffer);
/* Bounce the image to display back to present layout. */ if (device_data->graphic_queue->family_index != present_queue->family_index)
imb.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; {
imb.pNext = nullptr; /* Transfer the image back to the present queue family
imb.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; * image layout was already changed to present by the render pass
imb.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; */
imb.oldLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; imb.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
imb.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; imb.pNext = nullptr;
imb.image = data->images[image_index]; imb.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
imb.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; imb.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
imb.subresourceRange.baseMipLevel = 0; imb.oldLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
imb.subresourceRange.levelCount = 1; imb.newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
imb.subresourceRange.baseArrayLayer = 0; imb.image = data->images[image_index];
imb.subresourceRange.layerCount = 1; imb.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
imb.srcQueueFamilyIndex = device_data->graphic_queue->family_index; imb.subresourceRange.baseMipLevel = 0;
imb.dstQueueFamilyIndex = present_queue->family_index; imb.subresourceRange.levelCount = 1;
device_data->vtable.CmdPipelineBarrier(draw->command_buffer, imb.subresourceRange.baseArrayLayer = 0;
VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, imb.subresourceRange.layerCount = 1;
VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, imb.srcQueueFamilyIndex = device_data->graphic_queue->family_index;
0, /* dependency flags */ imb.dstQueueFamilyIndex = present_queue->family_index;
0, nullptr, /* memory barriers */ device_data->vtable.CmdPipelineBarrier(draw->command_buffer,
0, nullptr, /* buffer memory barriers */ VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
1, &imb); /* image memory barriers */ VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
0, /* dependency flags */
0, nullptr, /* memory barriers */
0, nullptr, /* buffer memory barriers */
1, &imb); /* image memory barriers */
}
device_data->vtable.EndCommandBuffer(draw->command_buffer); device_data->vtable.EndCommandBuffer(draw->command_buffer);

Loading…
Cancel
Save