From 7961b25e80d5cce416b92d6c8ac1cdc872873373 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 30 Apr 2018 18:37:12 +0100 Subject: [PATCH] Add support for VK_KHR_multiview extension --- renderdoc/driver/vulkan/vk_common.h | 2 ++ renderdoc/driver/vulkan/vk_core.cpp | 3 +++ renderdoc/driver/vulkan/vk_serialise.cpp | 30 +++++++++++++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 541088827..dae611af8 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -623,6 +623,7 @@ DECLARE_REFLECTION_STRUCT(VkPipelineVertexInputDivisorStateCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkSamplerReductionModeCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkDebugUtilsLabelEXT); DECLARE_REFLECTION_STRUCT(VkSamplerYcbcrConversionCreateInfoKHR); +DECLARE_REFLECTION_STRUCT(VkRenderPassMultiviewCreateInfoKHR); DECLARE_DESERIALISE_TYPE(VkDeviceCreateInfo); DECLARE_DESERIALISE_TYPE(VkBufferCreateInfo); @@ -670,6 +671,7 @@ DECLARE_DESERIALISE_TYPE(VkPipelineVertexInputDivisorStateCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkSamplerReductionModeCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkDebugUtilsLabelEXT); DECLARE_DESERIALISE_TYPE(VkSamplerYcbcrConversionCreateInfoKHR); +DECLARE_DESERIALISE_TYPE(VkRenderPassMultiviewCreateInfoKHR); DECLARE_REFLECTION_ENUM(VkFlagWithNoBits); DECLARE_REFLECTION_ENUM(VkQueueFlagBits); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 4a75cbfc3..e2e8564d1 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -670,6 +670,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_KHR_MAINTENANCE3_EXTENSION_NAME, VK_KHR_MAINTENANCE3_SPEC_VERSION, }, + { + VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION, + }, { VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME, VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION, }, diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 42bcccfd7..997ba2b26 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -206,7 +206,11 @@ SERIALISE_VK_HANDLES(); \ /* VK_EXT_sampler_filter_minmax */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT, \ - VkSamplerReductionModeCreateInfoEXT) + VkSamplerReductionModeCreateInfoEXT) \ + \ + /* VK_KHR_multiview */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR, \ + VkRenderPassMultiviewCreateInfoKHR) template static void SerialiseNext(SerialiserType &ser, VkStructureType &sType, const void *&pNext) @@ -2408,6 +2412,29 @@ void Deserialise(const VkSamplerYcbcrConversionCreateInfoKHR &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkRenderPassMultiviewCreateInfoKHR &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(subpassCount); + SERIALISE_MEMBER_ARRAY(pViewMasks, subpassCount); + SERIALISE_MEMBER(dependencyCount); + SERIALISE_MEMBER_ARRAY(pViewOffsets, dependencyCount); + SERIALISE_MEMBER(correlationMaskCount); + SERIALISE_MEMBER_ARRAY(pCorrelationMasks, correlationMaskCount); +} + +template <> +void Deserialise(const VkRenderPassMultiviewCreateInfoKHR &el) +{ + DeserialiseNext(el.pNext); + delete[] el.pViewMasks; + delete[] el.pViewOffsets; + delete[] el.pCorrelationMasks; +} + INSTANTIATE_SERIALISE_TYPE(VkOffset2D); INSTANTIATE_SERIALISE_TYPE(VkExtent2D); INSTANTIATE_SERIALISE_TYPE(VkMemoryType); @@ -2513,6 +2540,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPipelineVertexInputDivisorStateCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkSamplerReductionModeCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkDebugUtilsLabelEXT); INSTANTIATE_SERIALISE_TYPE(VkSamplerYcbcrConversionCreateInfoKHR); +INSTANTIATE_SERIALISE_TYPE(VkRenderPassMultiviewCreateInfoKHR); INSTANTIATE_SERIALISE_TYPE(DescriptorSetSlot); INSTANTIATE_SERIALISE_TYPE(ImageRegionState);