From b6c9b6298f69ef536299c04b543bc53229433a89 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 28 Oct 2019 11:17:54 +0000 Subject: [PATCH] Only read pImmutableSamplers pointer for sampler descriptors --- renderdoc/driver/vulkan/vk_info.cpp | 4 +++- renderdoc/driver/vulkan/vk_serialise.cpp | 11 ++++++++++- .../driver/vulkan/wrappers/vk_descriptor_funcs.cpp | 4 +++- util/test/demos/vk/vk_parameter_zoo.cpp | 1 + 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_info.cpp b/renderdoc/driver/vulkan/vk_info.cpp index 7952177b4..904339c89 100644 --- a/renderdoc/driver/vulkan/vk_info.cpp +++ b/renderdoc/driver/vulkan/vk_info.cpp @@ -115,7 +115,9 @@ void DescSetLayout::Init(VulkanResourceManager *resourceMan, VulkanCreationInfo bindings[b].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC) dynamicCount++; - if(pCreateInfo->pBindings[i].pImmutableSamplers) + if((bindings[b].descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER || + bindings[b].descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER) && + pCreateInfo->pBindings[i].pImmutableSamplers) { bindings[b].immutableSampler = new ResourceId[bindings[b].descriptorCount]; diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index eb89d53c0..b6bcf1332 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -3050,7 +3050,16 @@ void DoSerialise(SerialiserType &ser, VkDescriptorSetLayoutBinding &el) SERIALISE_MEMBER(descriptorType); SERIALISE_MEMBER(descriptorCount); SERIALISE_MEMBER_VKFLAGS(VkShaderStageFlags, stageFlags); - SERIALISE_MEMBER_ARRAY(pImmutableSamplers, descriptorCount); + + if(el.descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER || + el.descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER) + { + SERIALISE_MEMBER_ARRAY(pImmutableSamplers, descriptorCount); + } + else + { + SERIALISE_MEMBER_ARRAY_EMPTY(pImmutableSamplers); + } } template <> diff --git a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp index 40fc22d79..55784adf2 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp @@ -45,7 +45,9 @@ VkDescriptorSetLayoutCreateInfo WrappedVulkan::UnwrapInfo(const VkDescriptorSetL { unwrapped[i] = info->pBindings[i]; - if(unwrapped[i].pImmutableSamplers) + if((unwrapped[i].descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER || + unwrapped[i].descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER) && + unwrapped[i].pImmutableSamplers) { VkSampler *unwrappedSamplers = nextSampler; nextSampler += unwrapped[i].descriptorCount; diff --git a/util/test/demos/vk/vk_parameter_zoo.cpp b/util/test/demos/vk/vk_parameter_zoo.cpp index 02fefe141..c47536e61 100644 --- a/util/test/demos/vk/vk_parameter_zoo.cpp +++ b/util/test/demos/vk/vk_parameter_zoo.cpp @@ -112,6 +112,7 @@ void main() VkDescriptorSetLayout immutsetlayout = createDescriptorSetLayout(vkh::DescriptorSetLayoutCreateInfo({ {0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_VERTEX_BIT, &validSampler}, + {99, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_VERTEX_BIT, &invalidSampler}, })); VkDescriptorSetLayout pushlayout = VK_NULL_HANDLE;