From d3c52bbe9013aa12e44535baead4dfbee2bfe4e7 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sun, 17 Jan 2016 10:50:17 +0100 Subject: [PATCH] Handle immutable samplers correctly on writing, they are wrapped already --- renderdoc/core/resource_manager.h | 3 +++ renderdoc/driver/vulkan/vk_info.cpp | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) 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; + } } } }