From a56af589d94dc851809fd5344d0ae441da70c1f2 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 9 Mar 2020 17:36:56 +0000 Subject: [PATCH] Don't modify descriptor update template while writing. Closes #1765 --- renderdoc/driver/vulkan/vk_serialise.cpp | 16 ++++++++++++---- util/test/demos/vk/vk_parameter_zoo.cpp | 11 +++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 3ce5767ae..fb3465647 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -4045,12 +4045,20 @@ void DoSerialise(SerialiserType &ser, VkDescriptorUpdateTemplateEntry &el) if(ser.VersionAtLeast(0xE)) #endif { - uint64_t offset = el.offset; - uint64_t stride = el.stride; + uint64_t offset = 0; + uint64_t stride = 0; + if(ser.IsWriting()) + { + offset = el.offset; + stride = el.stride; + } ser.Serialise("offset"_lit, offset); ser.Serialise("stride"_lit, stride); - el.offset = (size_t)offset; - el.stride = (size_t)stride; + if(ser.IsReading()) + { + el.offset = (size_t)offset; + el.stride = (size_t)stride; + } } #if DISABLED(RDOC_APPLE) else diff --git a/util/test/demos/vk/vk_parameter_zoo.cpp b/util/test/demos/vk/vk_parameter_zoo.cpp index edc80af0d..c9e072467 100644 --- a/util/test/demos/vk/vk_parameter_zoo.cpp +++ b/util/test/demos/vk/vk_parameter_zoo.cpp @@ -24,6 +24,10 @@ #include "vk_test.h" +static const VkDescriptorUpdateTemplateEntryKHR constEntry = { + 4, 0, 1, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, 0, 16, +}; + RD_TEST(VK_Parameter_Zoo, VulkanGraphicsTest) { static constexpr const char *Description = @@ -678,6 +682,13 @@ void main() vkDestroyDescriptorUpdateTemplateKHR(device, templ, NULL); + // try with constant entry + createInfo.descriptorUpdateEntryCount = 1; + createInfo.pDescriptorUpdateEntries = &constEntry; + vkCreateDescriptorUpdateTemplateKHR(device, &createInfo, NULL, &templ); + vkUpdateDescriptorSetWithTemplateKHR(device, descset, templ, &data); + vkDestroyDescriptorUpdateTemplateKHR(device, templ, NULL); + entries = { {0, 0, 1, VK_DESCRIPTOR_TYPE_SAMPLER, offsetof(refdatastruct, sampler), sizeof(data)}, {1, 0, 1, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, offsetof(refdatastruct, combined),