Don't transition non-backbuffer images to PRESENT_SRC (Refs #185)

This commit is contained in:
baldurk
2016-02-23 00:13:05 +01:00
parent 07c4274165
commit da94c7a8c6
5 changed files with 22 additions and 0 deletions
+6
View File
@@ -51,6 +51,12 @@ VkAccessFlags MakeAccessMask(VkImageLayout layout)
return VkAccessFlags(0);
}
void ReplacePresentableImageLayout(VkImageLayout &layout)
{
if(layout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR)
layout = VK_IMAGE_LAYOUT_GENERAL;
}
int SampleCount(VkSampleCountFlagBits countFlag)
{
switch(countFlag)
+2
View File
@@ -55,6 +55,8 @@ VkPrimitiveTopology MakeVkPrimitiveTopology(PrimitiveTopology Topo);
// set conservative access bits for this image layout
VkAccessFlags MakeAccessMask(VkImageLayout layout);
void ReplacePresentableImageLayout(VkImageLayout &layout);
void DoPipelineBarrier(VkCommandBuffer cmd, uint32_t count, VkImageMemoryBarrier *barriers);
void DoPipelineBarrier(VkCommandBuffer cmd, uint32_t count, VkBufferMemoryBarrier *barriers);
void DoPipelineBarrier(VkCommandBuffer cmd, uint32_t count, VkMemoryBarrier *barriers);
+2
View File
@@ -663,6 +663,8 @@ bool WrappedVulkan::Serialise_BeginCaptureFrame(bool applyInitialState)
{
for(size_t i=0; i < imgBarriers.size(); i++)
{
ReplacePresentableImageLayout(imgBarriers[i].oldLayout);
ReplacePresentableImageLayout(imgBarriers[i].newLayout);
imgBarriers[i].srcAccessMask = MakeAccessMask(imgBarriers[i].oldLayout);
imgBarriers[i].dstAccessMask = MakeAccessMask(imgBarriers[i].newLayout);
}
@@ -1665,8 +1665,14 @@ bool WrappedVulkan::Serialise_vkCmdPipelineBarrier(
bufBarriers.push_back(bufMemBarriers[i]);
for(uint32_t i=0; i < imgCount; i++)
{
if(imgMemBarriers[i].image != VK_NULL_HANDLE)
{
imgBarriers.push_back(imgMemBarriers[i]);
ReplacePresentableImageLayout(imgBarriers.back().oldLayout);
ReplacePresentableImageLayout(imgBarriers.back().newLayout);
}
}
}
SAFE_DELETE_ARRAY(bufMemBarriers);
@@ -699,8 +699,14 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents(
bufBarriers.push_back(bufMemBarriers[i]);
for(uint32_t i=0; i < imgCount; i++)
{
if(imgBarriers[i].image != VK_NULL_HANDLE)
{
imgBarriers.push_back(imgMemBarriers[i]);
ReplacePresentableImageLayout(imgBarriers.back().oldLayout);
ReplacePresentableImageLayout(imgBarriers.back().newLayout);
}
}
}
SAFE_DELETE_ARRAY(bufMemBarriers);