diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index 585b98e2b..3878e1c73 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -64,6 +64,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_EXT_headless_surface` * `VK_EXT_host_query_reset` * `VK_EXT_image_2d_view_of_3d` +* `VK_EXT_image_compression_control` * `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_metal` * `VK_EXT_host_image_copy` * `VK_EXT_image_compression_control_swapchain` -* `VK_EXT_image_compression_control` * `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 a4bae71fb..c2fde0dce 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -1381,6 +1381,8 @@ DECLARE_REFLECTION_STRUCT(VkGraphicsPipelineCreateInfo); DECLARE_REFLECTION_STRUCT(VkGraphicsPipelineLibraryCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkHdrMetadataEXT); DECLARE_REFLECTION_STRUCT(VkImageBlit2); +DECLARE_REFLECTION_STRUCT(VkImageCompressionControlEXT); +DECLARE_REFLECTION_STRUCT(VkImageCompressionPropertiesEXT); DECLARE_REFLECTION_STRUCT(VkImageCopy2); DECLARE_REFLECTION_STRUCT(VkImageCreateInfo); DECLARE_REFLECTION_STRUCT(VkImageFormatListCreateInfo); @@ -1481,6 +1483,7 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceGroupProperties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceHostQueryResetFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceIDProperties); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT); +DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageCompressionControlFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageFormatInfo2); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImagelessFramebufferFeatures); DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceImageRobustnessFeatures); @@ -1843,6 +1846,8 @@ DECLARE_DESERIALISE_TYPE(VkFramebufferCreateInfo); DECLARE_DESERIALISE_TYPE(VkGraphicsPipelineCreateInfo); DECLARE_DESERIALISE_TYPE(VkGraphicsPipelineLibraryCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkImageBlit2); +DECLARE_DESERIALISE_TYPE(VkImageCompressionControlEXT); +DECLARE_DESERIALISE_TYPE(VkImageCompressionPropertiesEXT); DECLARE_DESERIALISE_TYPE(VkImageCopy2); DECLARE_DESERIALISE_TYPE(VkImageCreateInfo); DECLARE_DESERIALISE_TYPE(VkImageFormatListCreateInfo); @@ -1940,6 +1945,7 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceGroupProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceHostQueryResetFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceIDProperties); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT); +DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageCompressionControlFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageFormatInfo2); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImagelessFramebufferFeatures); DECLARE_DESERIALISE_TYPE(VkPhysicalDeviceImageRobustnessFeatures); @@ -2434,6 +2440,8 @@ DECLARE_REFLECTION_ENUM(VkGeometryTypeKHR); DECLARE_REFLECTION_ENUM(VkGraphicsPipelineLibraryFlagBitsEXT); DECLARE_REFLECTION_ENUM(VkFrontFace); DECLARE_REFLECTION_ENUM(VkImageAspectFlagBits); +DECLARE_REFLECTION_ENUM(VkImageCompressionFixedRateFlagBitsEXT); +DECLARE_REFLECTION_ENUM(VkImageCompressionFlagBitsEXT); DECLARE_REFLECTION_ENUM(VkImageCreateFlagBits); DECLARE_REFLECTION_ENUM(VkImageLayout); DECLARE_REFLECTION_ENUM(VkImageTiling); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 41db66bc0..518b2b4e0 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1152,6 +1152,10 @@ static const VkExtensionProperties supportedExtensions[] = { VK_EXT_IMAGE_2D_VIEW_OF_3D_EXTENSION_NAME, VK_EXT_IMAGE_2D_VIEW_OF_3D_SPEC_VERSION, }, + { + VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME, + VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION, + }, { VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index b4aace385..ae6ff5732 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -3045,4 +3045,9 @@ public: void vkGetRenderingAreaGranularityKHR(VkDevice device, const VkRenderingAreaInfo *pRenderingAreaInfo, VkExtent2D *pGranularity); + + // VK_EXT_image_compression_control + void vkGetImageSubresourceLayout2EXT(VkDevice device, VkImage image, + const VkImageSubresource2 *pSubresource, + VkSubresourceLayout2 *pLayout); }; diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 07f9dfe0a..1d56eb803 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -546,7 +546,8 @@ DeclExt(EXT_shader_subgroup_vote); \ DeclExt(KHR_shader_subgroup_uniform_control_flow); \ DeclExt(KHR_ray_tracing_maintenance1); \ - DeclExt(KHR_maintenance5); + DeclExt(KHR_maintenance5); \ + DeclExt(EXT_image_compression_control); // for simplicity and since the check itself is platform agnostic, // these aren't protected in platform defines @@ -682,7 +683,8 @@ CheckExt(EXT_shader_subgroup_vote, VK11); \ CheckExt(KHR_shader_subgroup_uniform_control_flow, VKXX); \ CheckExt(KHR_ray_tracing_maintenance1, VKXX); \ - CheckExt(KHR_maintenance5, VKXX); + CheckExt(KHR_maintenance5, VKXX); \ + CheckExt(EXT_image_compression_control, VKXX); #define HookInitVulkanInstanceExts_PhysDev() \ HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \ @@ -1053,6 +1055,7 @@ HookInitExtension(KHR_maintenance5, GetDeviceImageSubresourceLayoutKHR); \ HookInitExtension(KHR_maintenance5, GetImageSubresourceLayout2KHR); \ HookInitExtension(KHR_maintenance5, GetRenderingAreaGranularityKHR); \ + HookInitExtension(EXT_image_compression_control, GetImageSubresourceLayout2EXT); \ HookInitExtension_Device_Win32(); \ HookInitExtension_Device_Linux(); \ HookInitExtension_Device_Android(); \ @@ -1968,6 +1971,8 @@ const VkImageSubresource2 *, pSubresource, VkSubresourceLayout2 *, pLayout); \ HookDefine3(void, vkGetRenderingAreaGranularityKHR, VkDevice, device, \ const VkRenderingAreaInfo *, pRenderingAreaInfo, VkExtent2D *, pGranularity); \ + HookDefine4(void, vkGetImageSubresourceLayout2EXT, VkDevice, device, VkImage, image, \ + const VkImageSubresource2 *, pSubresource, VkSubresourceLayout2 *, pLayout); \ HookDefine_Win32(); \ HookDefine_Linux(); \ HookDefine_Android(); \ diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index e99356079..32e288454 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -187,6 +187,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, VkGraphicsPipelineLibraryCreateInfoEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_HDR_METADATA_EXT, VkHdrMetadataEXT) \ COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_BLIT_2, VkImageBlit2); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT, VkImageCompressionControlEXT); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT, VkImageCompressionPropertiesEXT); \ COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_COPY_2, VkImageCopy2); \ COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, VkImageCreateInfo); \ COPY_STRUCT(VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO, VkImageFormatListCreateInfo); \ @@ -331,6 +333,8 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, VkPhysicalDeviceIDProperties); \ COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, \ VkPhysicalDeviceImage2DViewOf3DFeaturesEXT); \ + COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT, \ + VkPhysicalDeviceImageCompressionControlFeaturesEXT); \ 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, \ @@ -963,8 +967,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct, case VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO: \ case VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA: \ case VK_STRUCTURE_TYPE_IMAGE_CAPTURE_DESCRIPTOR_DATA_INFO_EXT: \ - case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT: \ - case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT: \ case VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA: \ case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT: \ case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT: \ @@ -1091,7 +1093,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_FEATURES_EXT: \ 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: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 3c3f248e4..807dcf69d 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -171,6 +171,8 @@ DECL_VKFLAG_EXT(VkGeometryInstance, KHR); DECL_VKFLAG_EXT(VkShaderCreate, EXT); DECL_VKFLAG_EXT(VkBufferUsage, 2); DECL_VKFLAG_EXT(VkPipelineCreate, 2); +DECL_VKFLAG_EXT(VkImageCompression, EXT); +DECL_VKFLAG_EXT(VkImageCompressionFixedRate, EXT); // serialise a member as flags - cast to the Bits enum for serialisation so the stringification // picks up the bitfield and doesn't treat it as uint32_t. Then we rename the type back to the base @@ -715,6 +717,12 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, \ VkPhysicalDeviceImage2DViewOf3DFeaturesEXT) \ \ + /* VK_EXT_image_compression_control */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT, VkImageCompressionControlEXT) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT, VkImageCompressionPropertiesEXT) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT, \ + VkPhysicalDeviceImageCompressionControlFeaturesEXT) \ + \ /* VK_EXT_image_robustness */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES, \ VkPhysicalDeviceImageRobustnessFeatures) \ @@ -1671,11 +1679,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 */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT) \ - \ /* VK_EXT_image_compression_control_swapchain */ \ PNEXT_UNSUPPORTED( \ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT) \ @@ -12954,6 +12957,57 @@ void Deserialise(const VkPhysicalDeviceMaintenance5Properties &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkImageCompressionControlEXT &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER_VKFLAGS(VkImageCompressionFlagsEXT, flags); + SERIALISE_MEMBER(compressionControlPlaneCount); + SERIALISE_MEMBER_ARRAY_VKFLAGS(VkImageCompressionFixedRateFlagsEXT, pFixedRateFlags, + compressionControlPlaneCount); +} + +template <> +void Deserialise(const VkImageCompressionControlEXT &el) +{ + DeserialiseNext(el.pNext); + delete[] el.pFixedRateFlags; +} + +template +void DoSerialise(SerialiserType &ser, VkImageCompressionPropertiesEXT &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER_VKFLAGS(VkImageCompressionFlagsEXT, imageCompressionFlags); + SERIALISE_MEMBER_VKFLAGS(VkImageCompressionFixedRateFlagsEXT, imageCompressionFixedRateFlags); +} + +template <> +void Deserialise(const VkImageCompressionPropertiesEXT &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkPhysicalDeviceImageCompressionControlFeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(imageCompressionControl); +} + +template <> +void Deserialise(const VkPhysicalDeviceImageCompressionControlFeaturesEXT &el) +{ + DeserialiseNext(el.pNext); +} + // pNext structs - always have deserialise for the next chain INSTANTIATE_SERIALISE_TYPE(VkAccelerationStructureBuildGeometryInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkAccelerationStructureBuildSizesInfoKHR); @@ -13083,6 +13137,8 @@ INSTANTIATE_SERIALISE_TYPE(VkGraphicsPipelineCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkGraphicsPipelineLibraryCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkHdrMetadataEXT); INSTANTIATE_SERIALISE_TYPE(VkImageBlit2); +INSTANTIATE_SERIALISE_TYPE(VkImageCompressionControlEXT); +INSTANTIATE_SERIALISE_TYPE(VkImageCompressionPropertiesEXT); INSTANTIATE_SERIALISE_TYPE(VkImageCopy2); INSTANTIATE_SERIALISE_TYPE(VkImageCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkImageFormatListCreateInfo); @@ -13182,6 +13238,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceGroupProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceHostQueryResetFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceIDProperties); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImage2DViewOf3DFeaturesEXT); +INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImageCompressionControlFeaturesEXT); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImageFormatInfo2); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImagelessFramebufferFeatures); INSTANTIATE_SERIALISE_TYPE(VkPhysicalDeviceImageRobustnessFeatures); diff --git a/renderdoc/driver/vulkan/vk_stringise.cpp b/renderdoc/driver/vulkan/vk_stringise.cpp index f36179217..6a363a9e8 100644 --- a/renderdoc/driver/vulkan/vk_stringise.cpp +++ b/renderdoc/driver/vulkan/vk_stringise.cpp @@ -4320,3 +4320,50 @@ rdcstr DoStringise(const VkGeometryTypeKHR &el) } END_ENUM_STRINGISE(); } + +template <> +rdcstr DoStringise(const VkImageCompressionFixedRateFlagBitsEXT &el) +{ + BEGIN_BITFIELD_STRINGISE(VkImageCompressionFixedRateFlagBitsEXT); + { + STRINGISE_BITFIELD_VALUE(VK_IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT) + } + END_BITFIELD_STRINGISE(); +} + +template <> +rdcstr DoStringise(const VkImageCompressionFlagBitsEXT &el) +{ + BEGIN_BITFIELD_STRINGISE(VkImageCompressionFlagBitsEXT); + { + STRINGISE_BITFIELD_VALUE(VK_IMAGE_COMPRESSION_DEFAULT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT) + STRINGISE_BITFIELD_BIT(VK_IMAGE_COMPRESSION_DISABLED_EXT) + } + END_BITFIELD_STRINGISE(); +} diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index a2df798c8..83fb86c5e 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -3473,6 +3473,13 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi m_Maintenance5 = ext->maintenance5 != VK_FALSE; } END_PHYS_EXT_CHECK(); + + BEGIN_PHYS_EXT_CHECK(VkPhysicalDeviceImageCompressionControlFeaturesEXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT); + { + CHECK_PHYS_EXT_FEATURE(imageCompressionControl); + } + END_PHYS_EXT_CHECK(); } if(availFeatures.depthClamp) diff --git a/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp index 86c219458..81f77cd86 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_get_funcs.cpp @@ -1324,3 +1324,11 @@ void WrappedVulkan::vkGetRenderingAreaGranularityKHR(VkDevice device, { ObjDisp(device)->GetRenderingAreaGranularityKHR(Unwrap(device), pRenderingAreaInfo, pGranularity); } + +void WrappedVulkan::vkGetImageSubresourceLayout2EXT(VkDevice device, VkImage image, + const VkImageSubresource2 *pSubresource, + VkSubresourceLayout2 *pLayout) +{ + ObjDisp(device)->GetImageSubresourceLayout2EXT(Unwrap(device), Unwrap(image), pSubresource, + pLayout); +}