From d0ba1dc010c35d478d38e0caae5e07e3ff09f22a Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 3 Jun 2016 14:23:15 +0200 Subject: [PATCH] Don't reject valid desc writes with immutable samplers. Refs #260 * Previously we were rejecting/ignoring any descriptor write that didn't have a valid sampler and imageview. But if the layout has immutable samplers we can allow any write that just has the imageview, and lets sampler be NULL. --- renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp index e672fb89f..65868836e 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp @@ -426,6 +426,10 @@ bool WrappedVulkan::Serialise_vkUpdateDescriptorSets(Serialiser *localSerialiser if(!valid) return true; + const DescSetLayout &layout = + m_CreationInfo.m_DescSetLayout + [m_DescriptorSetState[GetResourceManager()->GetNonDispWrapper(writeDesc.dstSet)->id].layout]; + switch(writeDesc.descriptorType) { case VK_DESCRIPTOR_TYPE_SAMPLER: @@ -438,7 +442,9 @@ bool WrappedVulkan::Serialise_vkUpdateDescriptorSets(Serialiser *localSerialiser { for(uint32_t i = 0; i < writeDesc.descriptorCount; i++) { - valid &= (writeDesc.pImageInfo[i].sampler != VK_NULL_HANDLE); + valid &= (writeDesc.pImageInfo[i].sampler != VK_NULL_HANDLE) || + (layout.bindings[writeDesc.dstBinding].immutableSampler && + layout.bindings[writeDesc.dstBinding].immutableSampler[i] != ResourceId()); valid &= (writeDesc.pImageInfo[i].imageView != VK_NULL_HANDLE); } break;