mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-13 05:20:45 +00:00
Special treatment of UNDEFINED layout for external images
- Preserve the initial contents of UNDEFINED images if they are external - Don't consider a pipeline barrier from UNDEFINED a resource discard for external images Change-Id: Ife30e7c542a66668d681d492363a25745238119e
This commit is contained in:
committed by
Baldur Karlsson
parent
49e764e2c1
commit
56ee544a28
@@ -228,7 +228,7 @@ bool WrappedVulkan::Prepare_InitialState(WrappedVkRes *res)
|
||||
allUndef = false;
|
||||
}
|
||||
|
||||
if(allUndef)
|
||||
if(allUndef && !imageInfo.isExternal)
|
||||
{
|
||||
RDCDEBUG("Ignoring init states for %s as it never left undefined", ToStr(im->id).c_str());
|
||||
return true;
|
||||
|
||||
@@ -902,6 +902,7 @@ struct ImageInfo
|
||||
uint16_t levelCount = 0;
|
||||
uint16_t sampleCount = 0;
|
||||
bool storage = false;
|
||||
bool isExternal = false;
|
||||
bool isAHB = false;
|
||||
VkExtent3D extent = {0, 0, 0};
|
||||
VkImageType imageType = VK_IMAGE_TYPE_2D;
|
||||
|
||||
@@ -4675,9 +4675,13 @@ bool WrappedVulkan::Serialise_vkCmdPipelineBarrier(
|
||||
const VkImageMemoryBarrier &b = pImageMemoryBarriers[i];
|
||||
if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED)
|
||||
{
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].resourceUsage.push_back(make_rdcpair(
|
||||
GetResID(b.image), EventUsage(m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID,
|
||||
ResourceUsage::Discard)));
|
||||
VulkanCreationInfo::Image &imgInfo = m_CreationInfo.m_Image[GetResID(b.image)];
|
||||
if(!imgInfo.external)
|
||||
{
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].resourceUsage.push_back(make_rdcpair(
|
||||
GetResID(b.image), EventUsage(m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID,
|
||||
ResourceUsage::Discard)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4706,7 +4710,9 @@ bool WrappedVulkan::Serialise_vkCmdPipelineBarrier(
|
||||
for(uint32_t i = 0; i < imageMemoryBarrierCount; i++)
|
||||
{
|
||||
const VkImageMemoryBarrier &b = pImageMemoryBarriers[i];
|
||||
if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED)
|
||||
VulkanCreationInfo::Image &imgInfo = m_CreationInfo.m_Image[GetResID(b.image)];
|
||||
if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED &&
|
||||
!imgInfo.external)
|
||||
{
|
||||
VkImageLayout newLayout = b.newLayout;
|
||||
SanitiseNewImageLayout(newLayout);
|
||||
@@ -4928,9 +4934,13 @@ bool WrappedVulkan::Serialise_vkCmdPipelineBarrier2(SerialiserType &ser,
|
||||
if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED &&
|
||||
b.newLayout != VK_IMAGE_LAYOUT_UNDEFINED)
|
||||
{
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].resourceUsage.push_back(make_rdcpair(
|
||||
GetResID(b.image), EventUsage(m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID,
|
||||
ResourceUsage::Discard)));
|
||||
VulkanCreationInfo::Image &imgInfo = m_CreationInfo.m_Image[GetResID(b.image)];
|
||||
if(!imgInfo.external)
|
||||
{
|
||||
m_BakedCmdBufferInfo[m_LastCmdBufferID].resourceUsage.push_back(make_rdcpair(
|
||||
GetResID(b.image), EventUsage(m_BakedCmdBufferInfo[m_LastCmdBufferID].curEventID,
|
||||
ResourceUsage::Discard)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4980,8 +4990,9 @@ bool WrappedVulkan::Serialise_vkCmdPipelineBarrier2(SerialiserType &ser,
|
||||
for(uint32_t i = 0; i < DependencyInfo.imageMemoryBarrierCount; i++)
|
||||
{
|
||||
const VkImageMemoryBarrier2 &b = DependencyInfo.pImageMemoryBarriers[i];
|
||||
VulkanCreationInfo::Image &imgInfo = m_CreationInfo.m_Image[GetResID(b.image)];
|
||||
if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED &&
|
||||
b.newLayout != VK_IMAGE_LAYOUT_UNDEFINED)
|
||||
b.newLayout != VK_IMAGE_LAYOUT_UNDEFINED && !imgInfo.external)
|
||||
{
|
||||
GetDebugManager()->FillWithDiscardPattern(
|
||||
commandBuffer, DiscardType::UndefinedTransition, b.image, b.newLayout,
|
||||
|
||||
@@ -2915,6 +2915,7 @@ VkResult WrappedVulkan::vkCreateImage(VkDevice device, const VkImageCreateInfo *
|
||||
next->sType == VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID)
|
||||
{
|
||||
isExternal = true;
|
||||
resInfo.imageInfo.isExternal = true;
|
||||
|
||||
// we can't call vkGetImageMemoryRequirements on AHB-backed images until they are bound
|
||||
if(next->sType == VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO)
|
||||
|
||||
Reference in New Issue
Block a user