From c6ee124ef0d8c8d5c5b3d8b32c3d198155d1bff9 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 12 Jan 2022 14:52:49 +0000 Subject: [PATCH] Add support for VK_EXT_4444_formats --- 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 | 3 ++- renderdoc/driver/vulkan/vk_serialise.cpp | 25 ++++++++++++++++--- .../vulkan/wrappers/vk_device_funcs.cpp | 8 ++++++ 6 files changed, 38 insertions(+), 5 deletions(-) diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index 02a0b19b9..d480a378a 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -22,6 +22,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_AMD_shader_trinary_minmax` * `VK_AMD_texture_gather_bias_lod` * `VK_ANDROID_external_memory_android_hardware_buffer` +* `VK_EXT_4444_formats` * `VK_EXT_acquire_xlib_display` * `VK_EXT_astc_decode_mode` * `VK_EXT_buffer_device_address` @@ -221,7 +222,6 @@ Ray tracing extensions are now standard and will likely be supported at some poi ## EXT Extensions -* `VK_EXT_4444_formats` * `VK_EXT_acquire_drm_display` * `VK_EXT_blend_operation_advanced` * `VK_EXT_border_color_swizzle` diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 971164849..04faad771 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -922,6 +922,7 @@ DECLARE_REFLECTION_STRUCT(VkPerformanceCounterDescriptionKHR); DECLARE_REFLECTION_STRUCT(VkPerformanceCounterKHR); DECLARE_REFLECTION_STRUCT(VkPerformanceQuerySubmitInfoKHR); DECLARE_REFLECTION_STRUCT(VkPhysicalDevice16BitStorageFeatures); +DECLARE_REFLECTION_STRUCT(VkPhysicalDevice4444FormatsFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDevice8BitStorageFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceASTCDecodeFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceBufferDeviceAddressFeatures); @@ -1281,6 +1282,7 @@ DECLARE_DESERIALISE_TYPE(VkPerformanceCounterDescriptionKHR); DECLARE_DESERIALISE_TYPE(VkPerformanceCounterKHR); DECLARE_DESERIALISE_TYPE(VkPerformanceQuerySubmitInfoKHR); DECLARE_DESERIALISE_TYPE(VkPhysicalDevice16BitStorageFeatures); +DECLARE_DESERIALISE_TYPE(VkPhysicalDevice4444FormatsFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDevice8BitStorageFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceASTCDecodeFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceCoherentMemoryFeaturesAMD); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index fd606b41b..b16d2ca6f 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -864,6 +864,9 @@ static const VkExtensionProperties supportedExtensions[] = { VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION, }, #endif + { + VK_EXT_4444_FORMATS_EXTENSION_NAME, VK_EXT_4444_FORMATS_SPEC_VERSION, + }, #ifdef VK_EXT_acquire_xlib_display { VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME, VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index 64e4e9dab..b1d88a0e7 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -196,6 +196,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, COPY_STRUCT(VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR, VkPerformanceQuerySubmitInfoKHR); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, \ VkPhysicalDevice16BitStorageFeatures); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, \ + VkPhysicalDevice4444FormatsFeaturesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, \ VkPhysicalDevice8BitStorageFeatures); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, \ @@ -743,7 +745,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL: \ case VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL: \ case VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index a4ff673a9..088c3678d 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -543,6 +543,10 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD, \ VkTextureLODGatherFormatPropertiesAMD) \ \ + /* VK_EXT_4444_formats */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT, \ + VkPhysicalDevice4444FormatsFeaturesEXT) \ + \ /* VK_EXT_astc_decode_mode */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT, VkImageViewASTCDecodeModeEXT) \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT, \ @@ -1275,9 +1279,6 @@ SERIALISE_VK_HANDLES(); /* VK_AMD_shader_core_properties2 */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD) \ \ - /* VK_EXT_4444_formats */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT) \ - \ /* VK_EXT_blend_operation_advanced */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT) \ @@ -6008,6 +6009,23 @@ void Deserialise(const VkTextureLODGatherFormatPropertiesAMD &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDevice4444FormatsFeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(formatA4R4G4B4); + SERIALISE_MEMBER(formatA4B4G4R4); +} + +template <> +void Deserialise(const VkPhysicalDevice4444FormatsFeaturesEXT &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkImageViewASTCDecodeModeEXT &el) { @@ -9983,6 +10001,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPerformanceCounterDescriptionKHR); INSTANTIATE_SERIALISE_TYPE(VkPerformanceCounterKHR); INSTANTIATE_SERIALISE_TYPE(VkPerformanceQuerySubmitInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevice16BitStorageFeatures); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevice4444FormatsFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevice8BitStorageFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceASTCDecodeFeaturesEXT) INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceBufferDeviceAddressFeatures); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 8151e0d32..528e7760c 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2836,6 +2836,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi CHECK_PHYS_EXT_FEATURE(dynamicRendering); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK(VkPhysicalDevice4444FormatsFeaturesEXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT); + { + CHECK_PHYS_EXT_FEATURE(formatA4R4G4B4); + CHECK_PHYS_EXT_FEATURE(formatA4B4G4R4); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp)