mirror of
https://github.com/opus-tango/IntroductionToVulkan.git
synced 2026-03-20 12:05:20 +00:00
Changed queue family indices to VK_QUEUE_FAMILY_IGNORED in image memory barriers when there is no transfer of ownership (src and dst families are identical).
This commit is contained in:
@@ -709,8 +709,8 @@ namespace ApiWithoutSecrets {
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags dstAccessMask
|
||||
VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, // VkImageLayout newLayout
|
||||
Vulkan.PresentQueueFamilyIndex, // uint32_t srcQueueFamilyIndex
|
||||
Vulkan.PresentQueueFamilyIndex, // uint32_t dstQueueFamilyIndex
|
||||
VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex
|
||||
VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex
|
||||
swap_chain_images[i], // VkImage image
|
||||
image_subresource_range // VkImageSubresourceRange subresourceRange
|
||||
};
|
||||
@@ -722,8 +722,8 @@ namespace ApiWithoutSecrets {
|
||||
VK_ACCESS_MEMORY_READ_BIT, // VkAccessFlags dstAccessMask
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, // VkImageLayout oldLayout
|
||||
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // VkImageLayout newLayout
|
||||
Vulkan.PresentQueueFamilyIndex, // uint32_t srcQueueFamilyIndex
|
||||
Vulkan.PresentQueueFamilyIndex, // uint32_t dstQueueFamilyIndex
|
||||
VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex
|
||||
VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex
|
||||
swap_chain_images[i], // VkImage image
|
||||
image_subresource_range // VkImageSubresourceRange subresourceRange
|
||||
};
|
||||
|
||||
@@ -27,8 +27,8 @@ namespace ApiWithoutSecrets {
|
||||
VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp
|
||||
VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp stencilLoadOp
|
||||
VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp stencilStoreOp
|
||||
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // VkImageLayout initialLayout;
|
||||
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR // VkImageLayout finalLayout
|
||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout initialLayout;
|
||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL // VkImageLayout finalLayout
|
||||
}
|
||||
};
|
||||
|
||||
@@ -548,21 +548,21 @@ namespace ApiWithoutSecrets {
|
||||
1 // uint32_t layerCount
|
||||
};
|
||||
|
||||
if( GetPresentQueue().Handle != GetGraphicsQueue().Handle ) {
|
||||
uint32_t present_queue_family_index = (GetPresentQueue().Handle != GetGraphicsQueue().Handle) ? GetPresentQueue().FamilyIndex : VK_QUEUE_FAMILY_IGNORED;
|
||||
uint32_t graphics_queue_family_index = (GetPresentQueue().Handle != GetGraphicsQueue().Handle) ? GetGraphicsQueue().FamilyIndex : VK_QUEUE_FAMILY_IGNORED;
|
||||
VkImageMemoryBarrier barrier_from_present_to_draw = {
|
||||
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType
|
||||
nullptr, // const void *pNext
|
||||
VK_ACCESS_MEMORY_READ_BIT, // VkAccessFlags srcAccessMask
|
||||
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask
|
||||
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // VkImageLayout oldLayout
|
||||
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // VkImageLayout newLayout
|
||||
GetPresentQueue().FamilyIndex, // uint32_t srcQueueFamilyIndex
|
||||
GetGraphicsQueue().FamilyIndex, // uint32_t dstQueueFamilyIndex
|
||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout
|
||||
present_queue_family_index, // uint32_t srcQueueFamilyIndex
|
||||
graphics_queue_family_index, // uint32_t dstQueueFamilyIndex
|
||||
image, // VkImage image
|
||||
image_subresource_range // VkImageSubresourceRange subresourceRange
|
||||
};
|
||||
vkCmdPipelineBarrier( command_buffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, 0, 0, nullptr, 0, nullptr, 1, &barrier_from_present_to_draw );
|
||||
}
|
||||
|
||||
VkClearValue clear_value = {
|
||||
{ 1.0f, 0.8f, 0.4f, 0.0f }, // VkClearColorValue color
|
||||
@@ -618,21 +618,19 @@ namespace ApiWithoutSecrets {
|
||||
|
||||
vkCmdEndRenderPass( command_buffer );
|
||||
|
||||
if( GetGraphicsQueue().Handle != GetPresentQueue().Handle ) {
|
||||
VkImageMemoryBarrier barrier_from_draw_to_present = {
|
||||
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType
|
||||
nullptr, // const void *pNext
|
||||
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags srcAccessMask
|
||||
VK_ACCESS_MEMORY_READ_BIT, // VkAccessFlags dstAccessMask
|
||||
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // VkImageLayout oldLayout
|
||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout oldLayout
|
||||
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // VkImageLayout newLayout
|
||||
GetGraphicsQueue().FamilyIndex, // uint32_t srcQueueFamilyIndex
|
||||
GetPresentQueue().FamilyIndex, // uint32_t dstQueueFamilyIndex
|
||||
graphics_queue_family_index, // uint32_t srcQueueFamilyIndex
|
||||
present_queue_family_index, // uint32_t dstQueueFamilyIndex
|
||||
image, // VkImage image
|
||||
image_subresource_range // VkImageSubresourceRange subresourceRange
|
||||
};
|
||||
vkCmdPipelineBarrier( command_buffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, nullptr, 0, nullptr, 1, &barrier_from_draw_to_present );
|
||||
}
|
||||
|
||||
if( vkEndCommandBuffer( command_buffer ) != VK_SUCCESS ) {
|
||||
std::cout << "Could not record command buffer!" << std::endl;
|
||||
|
||||
Reference in New Issue
Block a user