diff --git a/renderdoc/core/resource_manager.h b/renderdoc/core/resource_manager.h index 579d04e05..b60de33f4 100644 --- a/renderdoc/core/resource_manager.h +++ b/renderdoc/core/resource_manager.h @@ -317,6 +317,9 @@ class ResourceManager : public ResourceRecordHandler byte *blob; }; + bool IsWriting() { return m_State >= WRITING; } + bool IsReading() { return m_State < WRITING; } + /////////////////////////////////////////// // Capture-side methods diff --git a/renderdoc/driver/vulkan/vk_info.cpp b/renderdoc/driver/vulkan/vk_info.cpp index 1fb3d47f0..00ca20ec9 100644 --- a/renderdoc/driver/vulkan/vk_info.cpp +++ b/renderdoc/driver/vulkan/vk_info.cpp @@ -45,7 +45,14 @@ void DescSetLayout::Init(VulkanResourceManager *resourceMan, VulkanCreationInfo bindings[i].immutableSampler = new ResourceId[bindings[i].descriptorCount]; for(uint32_t s=0; s < bindings[i].descriptorCount; s++) - bindings[i].immutableSampler[s] = resourceMan->GetNonDispWrapper(pCreateInfo->pBindings[i].pImmutableSamplers[s])->id; + { + // during writing, the create info contains the *wrapped* objects. + // on replay, we have the wrapper map so we can look it up + if(resourceMan->IsWriting()) + bindings[i].immutableSampler[s] = GetResID(pCreateInfo->pBindings[i].pImmutableSamplers[s]); + else + bindings[i].immutableSampler[s] = resourceMan->GetNonDispWrapper(pCreateInfo->pBindings[i].pImmutableSamplers[s])->id; + } } } }