From c3c1afbfddc5667cfb726c75524cb2e7fb4d7edb Mon Sep 17 00:00:00 2001 From: Cam Mannett Date: Tue, 4 Mar 2025 06:19:24 +0000 Subject: [PATCH] VK_EXT_image_compression_control_swapchain --- renderdoc/driver/vulkan/extension_support.md | 2 +- renderdoc/driver/vulkan/vk_common.h | 2 ++ renderdoc/driver/vulkan/vk_core.cpp | 4 +++ renderdoc/driver/vulkan/vk_hookset_defs.h | 6 +++-- renderdoc/driver/vulkan/vk_next_chains.cpp | 3 ++- renderdoc/driver/vulkan/vk_serialise.cpp | 26 ++++++++++++++++--- .../vulkan/wrappers/vk_device_funcs.cpp | 8 ++++++ 7 files changed, 43 insertions(+), 8 deletions(-) diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index 3878e1c73..1e8345557 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -65,6 +65,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_EXT_host_query_reset` * `VK_EXT_image_2d_view_of_3d` * `VK_EXT_image_compression_control` +* `VK_EXT_image_compression_control_swapchain` * `VK_EXT_image_robustness` * `VK_EXT_image_view_min_lod` * `VK_EXT_index_type_uint8` @@ -285,7 +286,6 @@ The portability subset is only relevant on mac, which is not a supported platfor * `VK_EXT_external_memory_host` * `VK_EXT_external_memory_metal` * `VK_EXT_host_image_copy` -* `VK_EXT_image_compression_control_swapchain` * `VK_EXT_image_drm_format_modifier` * `VK_EXT_image_sliced_view_of_3d` * `VK_EXT_layer_settings` diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index c2fde0dce..0f78dac9c 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -1484,6 +1484,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceHostQueryResetFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceIDProperties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageCompressionControlFeaturesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageFormatInfo2); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImagelessFramebufferFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageRobustnessFeatures); @@ -1946,6 +1947,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceHostQueryResetFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceIDProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageCompressionControlFeaturesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageFormatInfo2); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImagelessFramebufferFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageRobustnessFeatures); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 518b2b4e0..14b3930b9 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1156,6 +1156,10 @@ static const VkExtensionProperties supportedExtensions[] = { VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME, VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION, }, + { + VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_EXTENSION_NAME, + VK_EXT_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_SPEC_VERSION, + }, { VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 1d56eb803..6186c4623 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -547,7 +547,8 @@ DeclExt(KHR_shader_subgroup_uniform_control_flow); \ DeclExt(KHR_ray_tracing_maintenance1); \ DeclExt(KHR_maintenance5); \ - DeclExt(EXT_image_compression_control); + DeclExt(EXT_image_compression_control); \ + DeclExt(EXT_image_compression_control_swapchain); // for simplicity and since the check itself is platform agnostic, // these aren't protected in platform defines @@ -684,7 +685,8 @@ CheckExt(KHR_shader_subgroup_uniform_control_flow, VKXX); \ CheckExt(KHR_ray_tracing_maintenance1, VKXX); \ CheckExt(KHR_maintenance5, VKXX); \ - CheckExt(EXT_image_compression_control, VKXX); + CheckExt(EXT_image_compression_control, VKXX); \ + CheckExt(EXT_image_compression_control_swapchain, VKXX); #define HookInitVulkanInstanceExts_PhysDev() \ HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \ diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index 32e288454..e2fa87f81 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -335,6 +335,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkPhysicalDeviceImage2DViewOf3DFeaturesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT, \ VkPhysicalDeviceImageCompressionControlFeaturesEXT); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT, \ + VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, \ VkPhysicalDeviceImageFormatInfo2); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT, \ @@ -1093,7 +1095,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA: \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_FEATURES_QCOM: \ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_PROCESSING_2_PROPERTIES_QCOM: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 807dcf69d..8bebde608 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -723,6 +723,10 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT, \ VkPhysicalDeviceImageCompressionControlFeaturesEXT) \ \ + /* VK_EXT_image_compression_control_swapchain */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT, \ + VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT) \ + \ /* VK_EXT_image_robustness */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, \ VkPhysicalDeviceImageRobustnessFeatures) \ @@ -1679,10 +1683,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_SLICED_VIEW_OF_3D_FEATURES_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMAGE_VIEW_SLICED_CREATE_INFO_EXT) \ \ - /* VK_EXT_image_compression_control_swapchain */ \ - PNEXT_UNSUPPORTED( \ - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT) \ - \ /* VK_EXT_image_drm_format_modifier */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT) \ @@ -13008,6 +13008,23 @@ void Deserialise(const VkPhysicalDeviceImageCompressionControlFeaturesEXT &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(imageCompressionControlSwapchain); +} + +template <> +void Deserialise(const VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT &el) +{ + DeserialiseNext(el.pNext); +} + // pNext structs - always have deserialise for the next chain INSTANTIATE_SERIALISE_TYPE(VkAccelerationStructureBuildGeometryInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkAccelerationStructureBuildSizesInfoKHR); @@ -13239,6 +13256,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceHostQueryResetFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceIDProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImageCompressionControlFeaturesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImageFormatInfo2); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImagelessFramebufferFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImageRobustnessFeatures); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 83fb86c5e..ff428d49a 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -3480,6 +3480,14 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi CHECK_PHYS_EXT_FEATURE(imageCompressionControl); } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK( + VkPhysicalDeviceImageCompressionControlSwapchainFeaturesEXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT); + { + CHECK_PHYS_EXT_FEATURE(imageCompressionControlSwapchain); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp)