diff --git a/base/VulkanTools.cpp b/base/VulkanTools.cpp index c48da525..d102740f 100644 --- a/base/VulkanTools.cpp +++ b/base/VulkanTools.cpp @@ -228,6 +228,35 @@ namespace vks setImageLayout(cmdbuffer, image, aspectMask, oldImageLayout, newImageLayout, subresourceRange); } + void insertImageMemoryBarrier( + VkCommandBuffer cmdbuffer, + VkImage image, + VkAccessFlags srcAccessMask, + VkAccessFlags dstAccessMask, + VkImageLayout oldImageLayout, + VkImageLayout newImageLayout, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkImageSubresourceRange subresourceRange) + { + VkImageMemoryBarrier imageMemoryBarrier = vks::initializers::imageMemoryBarrier(); + imageMemoryBarrier.srcAccessMask = srcAccessMask; + imageMemoryBarrier.dstAccessMask = dstAccessMask; + imageMemoryBarrier.oldLayout = oldImageLayout; + imageMemoryBarrier.newLayout = newImageLayout; + imageMemoryBarrier.image = image; + imageMemoryBarrier.subresourceRange = subresourceRange; + + vkCmdPipelineBarrier( + cmdbuffer, + srcStageMask, + dstStageMask, + 0, + 0, nullptr, + 0, nullptr, + 1, &imageMemoryBarrier); + } + void exitFatal(std::string message, std::string caption) { #ifdef _WIN32 diff --git a/base/VulkanTools.h b/base/VulkanTools.h index 2c96d75b..ae822d05 100644 --- a/base/VulkanTools.h +++ b/base/VulkanTools.h @@ -92,6 +92,18 @@ namespace vks VkPipelineStageFlags srcStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); + /** @brief Inser an image memory barrier into the command buffer */ + void insertImageMemoryBarrier( + VkCommandBuffer cmdbuffer, + VkImage image, + VkAccessFlags srcAccessMask, + VkAccessFlags dstAccessMask, + VkImageLayout oldImageLayout, + VkImageLayout newImageLayout, + VkPipelineStageFlags srcStageMask, + VkPipelineStageFlags dstStageMask, + VkImageSubresourceRange subresourceRange); + // Display error message and exit on fatal error void exitFatal(std::string message, std::string caption);