Vulkan/CommandBuffer: Add PipelineBarrier wrapper
Former-commit-id: 1f19b8428dabb90db9a28a5bfaa3a0c64c8b3004 [formerly a6dc98a271e1c95c6c6816cf99e2aa73347e1619] Former-commit-id: 539ac00717edd99126aaaa7765c1490a00ca35f5
This commit is contained in:
parent
296680d32a
commit
9d85ba6b1c
|
|
@ -35,6 +35,10 @@ namespace Nz
|
||||||
|
|
||||||
inline void Free();
|
inline void Free();
|
||||||
|
|
||||||
|
inline void PipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, const VkImageMemoryBarrier& imageMemoryBarrier);
|
||||||
|
inline void PipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, const VkMemoryBarrier& memoryBarrier, const VkBufferMemoryBarrier& bufferMemoryBarrier, const VkImageMemoryBarrier& imageMemoryBarrier);
|
||||||
|
inline void PipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, UInt32 memoryBarrierCount, const VkMemoryBarrier* memoryBarriers, UInt32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* bufferMemoryBarriers, UInt32 imageMemoryBarrierCount, const VkImageMemoryBarrier* imageMemoryBarriers);
|
||||||
|
|
||||||
inline VkResult GetLastErrorCode() const;
|
inline VkResult GetLastErrorCode() const;
|
||||||
|
|
||||||
CommandBuffer& operator=(const CommandBuffer&) = delete;
|
CommandBuffer& operator=(const CommandBuffer&) = delete;
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,21 @@ namespace Nz
|
||||||
m_pool->GetDevice()->vkFreeCommandBuffers(*m_pool->GetDevice(), *m_pool, 1, &m_handle);
|
m_pool->GetDevice()->vkFreeCommandBuffers(*m_pool->GetDevice(), *m_pool, 1, &m_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void CommandBuffer::PipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, const VkImageMemoryBarrier& imageMemoryBarrier)
|
||||||
|
{
|
||||||
|
return PipelineBarrier(srcStageMask, dstStageMask, dependencyFlags, 0, nullptr, 0, nullptr, 1, &imageMemoryBarrier);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void CommandBuffer::PipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, const VkMemoryBarrier& memoryBarrier, const VkBufferMemoryBarrier& bufferMemoryBarrier, const VkImageMemoryBarrier& imageMemoryBarrier)
|
||||||
|
{
|
||||||
|
return PipelineBarrier(srcStageMask, dstStageMask, dependencyFlags, 1, &memoryBarrier, 1, &bufferMemoryBarrier, 1, &imageMemoryBarrier);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void CommandBuffer::PipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, UInt32 memoryBarrierCount, const VkMemoryBarrier* memoryBarriers, UInt32 bufferMemoryBarrierCount, const VkBufferMemoryBarrier* bufferMemoryBarriers, UInt32 imageMemoryBarrierCount, const VkImageMemoryBarrier* imageMemoryBarriers)
|
||||||
|
{
|
||||||
|
m_pool->GetDevice()->vkCmdPipelineBarrier(m_handle, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, memoryBarriers, bufferMemoryBarrierCount, bufferMemoryBarriers, imageMemoryBarrierCount, imageMemoryBarriers);
|
||||||
|
}
|
||||||
|
|
||||||
inline VkResult CommandBuffer::GetLastErrorCode() const
|
inline VkResult CommandBuffer::GetLastErrorCode() const
|
||||||
{
|
{
|
||||||
return m_lastErrorCode;
|
return m_lastErrorCode;
|
||||||
|
|
|
||||||
|
|
@ -261,23 +261,23 @@ namespace Nz
|
||||||
|
|
||||||
VkImage image = m_swapchain.GetBuffer(i).image;
|
VkImage image = m_swapchain.GetBuffer(i).image;
|
||||||
|
|
||||||
// Barriers
|
|
||||||
VkImageMemoryBarrier presentToDrawBarrier = {
|
|
||||||
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType
|
|
||||||
nullptr, // const void* pNext
|
|
||||||
VK_ACCESS_MEMORY_READ_BIT, // VkAccessFlags srcAccessMask
|
|
||||||
VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags dstAccessMask
|
|
||||||
VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout
|
|
||||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, // VkImageLayout newLayout
|
|
||||||
VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex
|
|
||||||
VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex
|
|
||||||
image, // VkImage image
|
|
||||||
imageRange // VkImageSubresourceRange subresourceRange
|
|
||||||
};
|
|
||||||
|
|
||||||
imageData.presentToDrawCmd.Begin(0);
|
imageData.presentToDrawCmd.Begin(0);
|
||||||
|
{
|
||||||
|
VkImageMemoryBarrier presentToDrawBarrier = {
|
||||||
|
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType
|
||||||
|
nullptr, // const void* pNext
|
||||||
|
VK_ACCESS_MEMORY_READ_BIT, // VkAccessFlags srcAccessMask
|
||||||
|
VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags dstAccessMask
|
||||||
|
VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout
|
||||||
|
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout newLayout
|
||||||
|
VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex
|
||||||
|
VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex
|
||||||
|
image, // VkImage image
|
||||||
|
imageRange // VkImageSubresourceRange subresourceRange
|
||||||
|
};
|
||||||
|
|
||||||
m_device->vkCmdPipelineBarrier(imageData.presentToDrawCmd, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &presentToDrawBarrier);
|
imageData.presentToDrawCmd.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, presentToDrawBarrier);
|
||||||
|
}
|
||||||
|
|
||||||
if (!imageData.presentToDrawCmd.End())
|
if (!imageData.presentToDrawCmd.End())
|
||||||
{
|
{
|
||||||
|
|
@ -285,22 +285,23 @@ namespace Nz
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
VkImageMemoryBarrier drawToPresentBarrier = {
|
|
||||||
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType
|
|
||||||
nullptr, // const void* pNext
|
|
||||||
VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags srcAccessMask
|
|
||||||
VK_ACCESS_MEMORY_READ_BIT, // VkAccessFlags dstAccessMask
|
|
||||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, // VkImageLayout oldLayout
|
|
||||||
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // VkImageLayout newLayout
|
|
||||||
VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex
|
|
||||||
VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex
|
|
||||||
image, // VkImage image
|
|
||||||
imageRange // VkImageSubresourceRange subresourceRange
|
|
||||||
};
|
|
||||||
|
|
||||||
imageData.drawToPresentCmd.Begin(0);
|
imageData.drawToPresentCmd.Begin(0);
|
||||||
|
{
|
||||||
|
VkImageMemoryBarrier drawToPresentBarrier = {
|
||||||
|
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType
|
||||||
|
nullptr, // const void* pNext
|
||||||
|
VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags srcAccessMask
|
||||||
|
VK_ACCESS_MEMORY_READ_BIT, // VkAccessFlags dstAccessMask
|
||||||
|
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout oldLayout
|
||||||
|
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, // VkImageLayout newLayout
|
||||||
|
VK_QUEUE_FAMILY_IGNORED, // uint32_t srcQueueFamilyIndex
|
||||||
|
VK_QUEUE_FAMILY_IGNORED, // uint32_t dstQueueFamilyIndex
|
||||||
|
image, // VkImage image
|
||||||
|
imageRange // VkImageSubresourceRange subresourceRange
|
||||||
|
};
|
||||||
|
|
||||||
m_device->vkCmdPipelineBarrier(imageData.drawToPresentCmd, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, 0, nullptr, 0, nullptr, 1, &drawToPresentBarrier);
|
imageData.drawToPresentCmd.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, drawToPresentBarrier);
|
||||||
|
}
|
||||||
|
|
||||||
if (!imageData.drawToPresentCmd.End())
|
if (!imageData.drawToPresentCmd.End())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue