VkResourceRecord::resInfo presence no longer indicates sparse bindings

This VkResourceRecord::resInfo being non-null was previously used as an
indicator that VkBuffer or VkImage resources had sparse bindings. Now,
`resInfo->IsSparse()` must also be true for the resource to be
considered as having sparse bindings.

Change-Id: Ia8a93ecb3248a682f71fcf6455d0d583ca129679
This commit is contained in:
Benson Joeris
2019-06-13 12:59:05 -04:00
committed by Baldur Karlsson
parent 5556eb3c93
commit e66acc5429
4 changed files with 13 additions and 9 deletions
+4 -2
View File
@@ -924,7 +924,8 @@ void DescriptorSetBindingElement::AddBindRefs(VkResourceRecord *record, FrameRef
if(texelBufferView != VK_NULL_HANDLE)
{
VkResourceRecord *bufView = GetRecord(texelBufferView);
record->AddBindFrameRef(bufView->GetResourceID(), eFrameRef_Read, bufView->resInfo != NULL);
record->AddBindFrameRef(bufView->GetResourceID(), eFrameRef_Read,
bufView->resInfo && bufView->resInfo->IsSparse());
if(bufView->baseResource != ResourceId())
record->AddBindFrameRef(bufView->baseResource, eFrameRef_Read);
if(bufView->baseResourceMem != ResourceId())
@@ -945,7 +946,8 @@ void DescriptorSetBindingElement::AddBindRefs(VkResourceRecord *record, FrameRef
if(bufferInfo.buffer != VK_NULL_HANDLE)
{
VkResourceRecord *buf = GetRecord(bufferInfo.buffer);
record->AddBindFrameRef(GetResID(bufferInfo.buffer), eFrameRef_Read, buf->resInfo != NULL);
record->AddBindFrameRef(GetResID(bufferInfo.buffer), eFrameRef_Read,
buf->resInfo && buf->resInfo->IsSparse());
if(buf->baseResource != ResourceId())
record->AddMemFrameRef(buf->baseResource, buf->memOffset, buf->memSize, ref);
}
+2 -2
View File
@@ -3069,7 +3069,7 @@ void VkResourceRecord::MarkBufferFrameReferenced(VkResourceRecord *buf, VkDevice
{
size = buf->memSize;
}
if(buf->resInfo)
if(buf->resInfo && buf->resInfo->IsSparse())
cmdInfo->sparse.insert(buf->resInfo);
if(buf->baseResource != ResourceId())
MarkMemoryFrameReferenced(buf->baseResource, buf->memOffset + offset, size, refType);
@@ -3179,7 +3179,7 @@ void VkResourceRecord::MarkBufferViewFrameReferenced(VkResourceRecord *bufView,
if(bufView->baseResource != ResourceId())
MarkResourceFrameReferenced(bufView->baseResource, eFrameRef_Read);
if(bufView->resInfo)
if(bufView->resInfo && bufView->resInfo->IsSparse())
cmdInfo->sparse.insert(bufView->resInfo);
if(bufView->baseResourceMem != ResourceId())
MarkMemoryFrameReferenced(bufView->baseResourceMem, bufView->memOffset, bufView->memSize,
@@ -1597,7 +1597,7 @@ void WrappedVulkan::vkCmdBeginRenderPass2KHR(VkCommandBuffer commandBuffer,
record->MarkResourceFrameReferenced(att->baseResource, eFrameRef_ReadBeforeWrite);
if(att->baseResourceMem != ResourceId())
record->MarkResourceFrameReferenced(att->baseResourceMem, eFrameRef_Read);
if(att->resInfo)
if(att->resInfo && att->resInfo->IsSparse())
record->cmdInfo->sparse.insert(att->resInfo);
record->cmdInfo->dirtied.insert(att->baseResource);
}
@@ -2099,8 +2099,9 @@ void WrappedVulkan::vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage
record->MarkResourceFrameReferenced(GetResID(image), eFrameRef_PartialWrite);
record->MarkResourceFrameReferenced(GetRecord(image)->baseResource, eFrameRef_Read);
record->cmdInfo->dirtied.insert(GetResID(image));
if(GetRecord(image)->resInfo)
record->cmdInfo->sparse.insert(GetRecord(image)->resInfo);
VkResourceRecord *imageRecord = GetRecord(image);
if(imageRecord->resInfo && imageRecord->resInfo->IsSparse())
record->cmdInfo->sparse.insert(imageRecord->resInfo);
}
}
@@ -2207,8 +2208,9 @@ void WrappedVulkan::vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, V
record->MarkResourceFrameReferenced(GetResID(image), eFrameRef_PartialWrite);
record->MarkResourceFrameReferenced(GetRecord(image)->baseResource, eFrameRef_Read);
record->cmdInfo->dirtied.insert(GetResID(image));
if(GetRecord(image)->resInfo)
record->cmdInfo->sparse.insert(GetRecord(image)->resInfo);
VkResourceRecord *imageRecord = GetRecord(image);
if(imageRecord->resInfo && imageRecord->resInfo->IsSparse())
record->cmdInfo->sparse.insert(imageRecord->resInfo);
}
}