mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 09:30:44 +00:00
Vulkan: Add image subresource tracking for descriptor set records
Change-Id: Ic336b5e65435743729e85ed231ad114f556b3811
This commit is contained in:
committed by
Baldur Karlsson
parent
666e6730df
commit
accbca579c
@@ -933,11 +933,8 @@ void DescriptorSetBindingElement::AddBindRefs(VkResourceRecord *record, FrameRef
|
||||
}
|
||||
if(imageInfo.imageView != VK_NULL_HANDLE)
|
||||
{
|
||||
record->AddBindFrameRef(GetResID(imageInfo.imageView), eFrameRef_Read,
|
||||
GetRecord(imageInfo.imageView)->resInfo != NULL);
|
||||
record->AddBindFrameRef(GetRecord(imageInfo.imageView)->baseResource, ref);
|
||||
if(GetRecord(imageInfo.imageView)->baseResourceMem != ResourceId())
|
||||
record->AddBindFrameRef(GetRecord(imageInfo.imageView)->baseResourceMem, eFrameRef_Read);
|
||||
VkResourceRecord *view = GetRecord(imageInfo.imageView);
|
||||
record->AddImgFrameRef(view, ref);
|
||||
}
|
||||
if(imageInfo.sampler != VK_NULL_HANDLE)
|
||||
{
|
||||
|
||||
@@ -1346,4 +1346,4 @@ DECLARE_REFLECTION_ENUM(VkVertexInputRate);
|
||||
// win32 only enums
|
||||
#if ENABLED(RDOC_WIN32)
|
||||
DECLARE_REFLECTION_ENUM(VkFullScreenExclusiveEXT);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1016,6 +1016,7 @@ struct DescriptorSetData
|
||||
static const uint32_t SPARSE_REF_BIT = 0x80000000;
|
||||
std::map<ResourceId, rdcpair<uint32_t, FrameRefType> > bindFrameRefs;
|
||||
std::map<ResourceId, MemRefs> bindMemRefs;
|
||||
std::map<ResourceId, ImgRefs> bindImgRefs;
|
||||
};
|
||||
|
||||
struct PipelineLayoutData
|
||||
@@ -1410,6 +1411,39 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void AddImgFrameRef(VkResourceRecord *view, FrameRefType refType)
|
||||
{
|
||||
AddBindFrameRef(view->GetResourceID(), eFrameRef_Read,
|
||||
view->resInfo && view->resInfo->IsSparse());
|
||||
if(view->baseResourceMem != ResourceId())
|
||||
AddBindFrameRef(view->baseResourceMem, eFrameRef_Read, false);
|
||||
|
||||
rdcpair<uint32_t, FrameRefType> &p = descInfo->bindFrameRefs[view->baseResource];
|
||||
if((p.first & ~DescriptorSetData::SPARSE_REF_BIT) == 0)
|
||||
{
|
||||
descInfo->bindImgRefs.erase(view->baseResource);
|
||||
p.first = 1;
|
||||
p.second = eFrameRef_None;
|
||||
}
|
||||
else
|
||||
{
|
||||
p.first++;
|
||||
}
|
||||
|
||||
ImageRange imgRange;
|
||||
imgRange.aspectMask = view->viewRange.aspectMask;
|
||||
imgRange.baseMipLevel = view->viewRange.baseMipLevel;
|
||||
imgRange.levelCount = view->viewRange.levelCount;
|
||||
imgRange.baseArrayLayer = view->viewRange.baseArrayLayer;
|
||||
imgRange.layerCount = view->viewRange.layerCount;
|
||||
imgRange.viewType = view->viewRange.viewType();
|
||||
|
||||
FrameRefType maxRef = MarkImageReferenced(descInfo->bindImgRefs, view->baseResource,
|
||||
view->resInfo->imageInfo, imgRange, refType);
|
||||
|
||||
p.second = std::max(p.second, maxRef);
|
||||
}
|
||||
|
||||
void AddMemFrameRef(ResourceId mem, VkDeviceSize offset, VkDeviceSize size, FrameRefType refType)
|
||||
{
|
||||
if(mem == ResourceId())
|
||||
|
||||
@@ -864,6 +864,7 @@ VkResult WrappedVulkan::vkQueueSubmit(VkQueue queue, uint32_t submitCount,
|
||||
GetResourceManager()->MarkSparseMapReferenced(sparserecord->resInfo);
|
||||
}
|
||||
}
|
||||
GetResourceManager()->MergeReferencedImages(setrecord->descInfo->bindImgRefs);
|
||||
GetResourceManager()->MergeReferencedMemory(setrecord->descInfo->bindMemRefs);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user