mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Pass resource record into AddBindRefs when available
* This avoids a redundant call to GetResourceRecord when the caller already has it directly available.
This commit is contained in:
@@ -1105,41 +1105,55 @@ void DescriptorSetSlot::RemoveBindRefs(std::set<ResourceId> &ids, VulkanResource
|
||||
imageInfo.sampler = ResourceId();
|
||||
}
|
||||
|
||||
void DescriptorSetSlot::AddBindRefs(std::set<ResourceId> &ids, VulkanResourceManager *rm,
|
||||
VkResourceRecord *record, FrameRefType ref)
|
||||
void DescriptorSetSlot::AddBindRefs(std::set<ResourceId> &ids, VkResourceRecord *bufView,
|
||||
VkResourceRecord *imgView, VkResourceRecord *buffer,
|
||||
VkResourceRecord *descSetRecord, FrameRefType ref)
|
||||
{
|
||||
SCOPED_LOCK(record->descInfo->refLock);
|
||||
SCOPED_LOCK(descSetRecord->descInfo->refLock);
|
||||
|
||||
if(texelBufferView != ResourceId())
|
||||
if(bufView)
|
||||
{
|
||||
VkResourceRecord *bufView = rm->GetResourceRecord(texelBufferView);
|
||||
record->AddBindFrameRef(ids, bufView->GetResourceID(), eFrameRef_Read,
|
||||
bufView->resInfo && bufView->resInfo->IsSparse());
|
||||
descSetRecord->AddBindFrameRef(ids, bufView->GetResourceID(), eFrameRef_Read,
|
||||
bufView->resInfo && bufView->resInfo->IsSparse());
|
||||
if(bufView->baseResource != ResourceId())
|
||||
record->AddBindFrameRef(ids, bufView->baseResource, eFrameRef_Read);
|
||||
descSetRecord->AddBindFrameRef(ids, bufView->baseResource, eFrameRef_Read);
|
||||
if(bufView->baseResourceMem != ResourceId())
|
||||
record->AddMemFrameRef(ids, bufView->baseResourceMem, bufView->memOffset, bufView->memSize,
|
||||
ref);
|
||||
descSetRecord->AddMemFrameRef(ids, bufView->baseResourceMem, bufView->memOffset,
|
||||
bufView->memSize, ref);
|
||||
}
|
||||
if(imageInfo.imageView != ResourceId())
|
||||
if(imgView)
|
||||
{
|
||||
VkResourceRecord *view = rm->GetResourceRecord(imageInfo.imageView);
|
||||
record->AddImgFrameRef(ids, view, ref);
|
||||
descSetRecord->AddImgFrameRef(ids, imgView, ref);
|
||||
}
|
||||
if(imageInfo.sampler != ResourceId())
|
||||
{
|
||||
record->AddBindFrameRef(ids, imageInfo.sampler, eFrameRef_Read);
|
||||
descSetRecord->AddBindFrameRef(ids, imageInfo.sampler, eFrameRef_Read);
|
||||
}
|
||||
if(bufferInfo.buffer != ResourceId())
|
||||
if(buffer)
|
||||
{
|
||||
VkResourceRecord *buf = rm->GetResourceRecord(bufferInfo.buffer);
|
||||
record->AddBindFrameRef(ids, bufferInfo.buffer, eFrameRef_Read,
|
||||
buf->resInfo && buf->resInfo->IsSparse());
|
||||
if(buf->baseResource != ResourceId())
|
||||
record->AddMemFrameRef(ids, buf->baseResource, buf->memOffset, buf->memSize, ref);
|
||||
descSetRecord->AddBindFrameRef(ids, bufferInfo.buffer, eFrameRef_Read,
|
||||
buffer->resInfo && buffer->resInfo->IsSparse());
|
||||
if(buffer->baseResource != ResourceId())
|
||||
descSetRecord->AddMemFrameRef(ids, buffer->baseResource, buffer->memOffset, buffer->memSize,
|
||||
ref);
|
||||
}
|
||||
}
|
||||
|
||||
void DescriptorSetSlot::AddBindRefs(std::set<ResourceId> &ids, VulkanResourceManager *rm,
|
||||
VkResourceRecord *descSetRecord, FrameRefType ref)
|
||||
{
|
||||
VkResourceRecord *bufView = NULL, *imgView = NULL, *buffer = NULL;
|
||||
|
||||
if(texelBufferView != ResourceId())
|
||||
bufView = rm->GetResourceRecord(texelBufferView);
|
||||
if(imageInfo.imageView != ResourceId())
|
||||
imgView = rm->GetResourceRecord(imageInfo.imageView);
|
||||
if(bufferInfo.buffer != ResourceId())
|
||||
buffer = rm->GetResourceRecord(bufferInfo.buffer);
|
||||
|
||||
AddBindRefs(ids, bufView, imgView, buffer, descSetRecord, ref);
|
||||
}
|
||||
|
||||
void DescriptorSetData::UpdateBackgroundRefCache(VulkanResourceManager *resourceManager,
|
||||
const std::set<ResourceId> &ids)
|
||||
{
|
||||
|
||||
@@ -433,6 +433,8 @@ struct DescriptorSetSlot
|
||||
void RemoveBindRefs(std::set<ResourceId> &ids, VulkanResourceManager *rm, VkResourceRecord *record);
|
||||
void AddBindRefs(std::set<ResourceId> &ids, VulkanResourceManager *rm, VkResourceRecord *record,
|
||||
FrameRefType ref);
|
||||
void AddBindRefs(std::set<ResourceId> &ids, VkResourceRecord *bufView, VkResourceRecord *imgView,
|
||||
VkResourceRecord *buffer, VkResourceRecord *descSetRecord, FrameRefType ref);
|
||||
|
||||
// VkDescriptorBufferInfo
|
||||
DescriptorSetSlotBufferInfo bufferInfo;
|
||||
|
||||
@@ -1122,10 +1122,13 @@ void WrappedVulkan::vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount,
|
||||
|
||||
bind.RemoveBindRefs(ids, GetResourceManager(), record);
|
||||
|
||||
VkResourceRecord *bufView = NULL, *imgView = NULL, *buffer = NULL;
|
||||
|
||||
if(descWrite.descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER ||
|
||||
descWrite.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER)
|
||||
{
|
||||
bind.texelBufferView = GetResID(descWrite.pTexelBufferView[d]);
|
||||
bufView = GetRecord(descWrite.pTexelBufferView[d]);
|
||||
}
|
||||
else if(descWrite.descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER ||
|
||||
descWrite.descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER ||
|
||||
@@ -1146,6 +1149,9 @@ void WrappedVulkan::vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount,
|
||||
imageView = false;
|
||||
|
||||
bind.imageInfo.SetFrom(descWrite.pImageInfo[d], sampler, imageView);
|
||||
|
||||
if(imageView)
|
||||
imgView = GetRecord(descWrite.pImageInfo[d].imageView);
|
||||
}
|
||||
else if(descWrite.descriptorType == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT)
|
||||
{
|
||||
@@ -1161,9 +1167,10 @@ void WrappedVulkan::vkUpdateDescriptorSets(VkDevice device, uint32_t writeCount,
|
||||
else
|
||||
{
|
||||
bind.bufferInfo.SetFrom(descWrite.pBufferInfo[d]);
|
||||
buffer = GetRecord(descWrite.pBufferInfo[d].buffer);
|
||||
}
|
||||
|
||||
bind.AddBindRefs(ids, GetResourceManager(), record, ref);
|
||||
bind.AddBindRefs(ids, bufView, imgView, buffer, record, ref);
|
||||
}
|
||||
|
||||
record->descInfo->UpdateBackgroundRefCache(GetResourceManager(), ids);
|
||||
|
||||
Reference in New Issue
Block a user