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;