mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 17:40:39 +00:00
Fix handling of descriptor copy&patching during replay
This commit is contained in:
@@ -660,6 +660,13 @@ bool CreateDescriptorWritesForSlotData(WrappedVulkan *vk, rdcarray<VkWriteDescri
|
||||
// range starting at dstArrayElement
|
||||
uint32_t arrayIdx = slot - writes.back().dstArrayElement;
|
||||
|
||||
ResourceId resId = slots[slot].resource;
|
||||
if(rm->HasLiveResource(resId))
|
||||
resId = rm->GetLiveID(resId);
|
||||
ResourceId sampId = slots[slot].sampler;
|
||||
if(rm->HasLiveResource(resId))
|
||||
sampId = rm->GetLiveID(sampId);
|
||||
|
||||
switch(descType)
|
||||
{
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLER:
|
||||
@@ -668,15 +675,15 @@ bool CreateDescriptorWritesForSlotData(WrappedVulkan *vk, rdcarray<VkWriteDescri
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
|
||||
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
|
||||
{
|
||||
if(descType != VK_DESCRIPTOR_TYPE_SAMPLER && rm->HasLiveResource(slots[slot].resource))
|
||||
writeImage[arrayIdx].imageView = rm->GetLiveHandle<VkImageView>(slots[slot].resource);
|
||||
if(descType != VK_DESCRIPTOR_TYPE_SAMPLER && rm->HasCurrentResource(resId))
|
||||
writeImage[arrayIdx].imageView = rm->GetCurrentHandle<VkImageView>(resId);
|
||||
else
|
||||
writeImage[arrayIdx].imageView = VK_NULL_HANDLE;
|
||||
|
||||
if((descType == VK_DESCRIPTOR_TYPE_SAMPLER ||
|
||||
descType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER) &&
|
||||
rm->HasLiveResource(slots[slot].sampler))
|
||||
writeImage[arrayIdx].sampler = rm->GetLiveHandle<VkSampler>(slots[slot].sampler);
|
||||
rm->HasCurrentResource(slots[slot].sampler))
|
||||
writeImage[arrayIdx].sampler = rm->GetCurrentHandle<VkSampler>(slots[slot].sampler);
|
||||
else
|
||||
writeImage[arrayIdx].sampler = VK_NULL_HANDLE;
|
||||
|
||||
@@ -698,8 +705,8 @@ bool CreateDescriptorWritesForSlotData(WrappedVulkan *vk, rdcarray<VkWriteDescri
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||
{
|
||||
if(rm->HasLiveResource(slots[slot].resource))
|
||||
writeTexelBuffer[arrayIdx] = rm->GetLiveHandle<VkBufferView>(slots[slot].resource);
|
||||
if(rm->HasCurrentResource(slots[slot].resource))
|
||||
writeTexelBuffer[arrayIdx] = rm->GetCurrentHandle<VkBufferView>(slots[slot].resource);
|
||||
else
|
||||
writeTexelBuffer[arrayIdx] = VK_NULL_HANDLE;
|
||||
|
||||
@@ -711,8 +718,8 @@ bool CreateDescriptorWritesForSlotData(WrappedVulkan *vk, rdcarray<VkWriteDescri
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
|
||||
{
|
||||
if(rm->HasLiveResource(slots[slot].resource))
|
||||
writeBuffer[arrayIdx].buffer = rm->GetLiveHandle<VkBuffer>(slots[slot].resource);
|
||||
if(rm->HasCurrentResource(slots[slot].resource))
|
||||
writeBuffer[arrayIdx].buffer = rm->GetCurrentHandle<VkBuffer>(slots[slot].resource);
|
||||
else
|
||||
writeBuffer[arrayIdx].buffer = VK_NULL_HANDLE;
|
||||
writeBuffer[arrayIdx].offset = slots[slot].offset;
|
||||
|
||||
Reference in New Issue
Block a user