From 9b877549bd1a9ab57ed33bd4ea158a8e2d1c98b3 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 21 Oct 2021 15:26:29 +0100 Subject: [PATCH] Add support for VK_KHR_format_feature_flags2 --- renderdoc/driver/vulkan/extension_support.md | 2 +- renderdoc/driver/vulkan/vk_common.h | 2 ++ renderdoc/driver/vulkan/vk_core.cpp | 3 +++ renderdoc/driver/vulkan/vk_next_chains.cpp | 2 +- renderdoc/driver/vulkan/vk_serialise.cpp | 24 +++++++++++++++++--- 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index ed48a8622..62425e955 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -121,6 +121,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_KHR_external_semaphore_fd` * `VK_KHR_external_semaphore_win32` * `VK_KHR_external_semaphore` +* `VK_KHR_format_feature_flags2` * `VK_KHR_get_display_properties2` * `VK_KHR_get_memory_requirements2` * `VK_KHR_get_physical_device_properties2` @@ -186,7 +187,6 @@ KHR extensions will definitely be implemented at some point, though KHR extensio ## KHR Extensions -* `VK_KHR_format_feature_flags2` * `VK_KHR_fragment_shading_rate` * `VK_KHR_maintenance4` * `VK_KHR_present_id` diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 62c9ea0de..5b21b5387 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -864,6 +864,7 @@ DECLARE_REFLECTION_STRUCT(VkFenceCreateInfo); DECLARE_REFLECTION_STRUCT(VkFenceGetFdInfoKHR); DECLARE_REFLECTION_STRUCT(VkFilterCubicImageViewImageFormatPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkFormatProperties2); +DECLARE_REFLECTION_STRUCT(VkFormatProperties3KHR); DECLARE_REFLECTION_STRUCT(VkFramebufferAttachmentImageInfo); DECLARE_REFLECTION_STRUCT(VkFramebufferAttachmentsCreateInfo); DECLARE_REFLECTION_STRUCT(VkFramebufferCreateInfo); @@ -1197,6 +1198,7 @@ DECLARE_DESERIALISE_TYPE(VkFenceCreateInfo); DECLARE_DESERIALISE_TYPE(VkFenceGetFdInfoKHR); DECLARE_DESERIALISE_TYPE(VkFilterCubicImageViewImageFormatPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkFormatProperties2); +DECLARE_DESERIALISE_TYPE(VkFormatProperties3KHR); DECLARE_DESERIALISE_TYPE(VkFramebufferAttachmentImageInfo); DECLARE_DESERIALISE_TYPE(VkFramebufferAttachmentsCreateInfo); DECLARE_DESERIALISE_TYPE(VkFramebufferCreateInfo); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 322a9682e..9b036ee3d 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1192,6 +1192,9 @@ static const VkExtensionProperties supportedExtensions[] = { VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME, VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION, }, #endif + { + VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME, VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION, + }, { VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME, VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION, }, diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index ee334d71c..27c1456cd 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -163,6 +163,7 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, COPY_STRUCT(VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT, \ VkFilterCubicImageViewImageFormatPropertiesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, VkFormatProperties2); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, VkFormatProperties3KHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_HDR_METADATA_EXT, VkHdrMetadataEXT) \ COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR, VkImageBlit2KHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR, VkImageCopy2KHR); \ @@ -663,7 +664,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT: \ case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT: \ case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT: \ - case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR: \ case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR: \ case VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV: \ case VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 27d6f955c..9e1c3dbf4 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -943,6 +943,9 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR, VkImportSemaphoreFdInfoKHR) \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR, VkSemaphoreGetFdInfoKHR) \ \ + /* VK_KHR_format_feature_flags2 */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR, VkFormatProperties3KHR) \ + \ /* VK_KHR_get_display_properties2 */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR, VkDisplayProperties2KHR) \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR, VkDisplayPlaneProperties2KHR) \ @@ -1309,9 +1312,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR) \ \ - /* VK_KHR_format_feature_flags2 */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR) \ - \ /* VK_KHR_fragment_shading_rate */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR) \ @@ -8898,6 +8898,23 @@ void Deserialise(const VkFormatProperties2 &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkFormatProperties3KHR &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER_VKFLAGS(VkFormatFeatureFlags2KHR, linearTilingFeatures); + SERIALISE_MEMBER_VKFLAGS(VkFormatFeatureFlags2KHR, optimalTilingFeatures); + SERIALISE_MEMBER_VKFLAGS(VkFormatFeatureFlags2KHR, bufferFeatures); +} + +template <> +void Deserialise(const VkFormatProperties3KHR &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkImageFormatProperties &el) { @@ -9365,6 +9382,7 @@ INSTANTIATE_SERIALISE_TYPE(VkFenceCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkFenceGetFdInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkFilterCubicImageViewImageFormatPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkFormatProperties2); +INSTANTIATE_SERIALISE_TYPE(VkFormatProperties3KHR); INSTANTIATE_SERIALISE_TYPE(VkFramebufferAttachmentImageInfo); INSTANTIATE_SERIALISE_TYPE(VkFramebufferAttachmentsCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkFramebufferCreateInfo);