From 61c0a41767d5a21736a5705d79365a18d1585f18 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 5 Feb 2019 17:14:37 +0000 Subject: [PATCH] Add support for VK_EXT_validation_features --- renderdoc/driver/vulkan/vk_common.h | 5 ++++- renderdoc/driver/vulkan/vk_core.cpp | 3 +++ renderdoc/driver/vulkan/vk_serialise.cpp | 26 ++++++++++++++++++++--- renderdoc/driver/vulkan/vk_stringise.cpp | 27 ++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 076fb5599..03e53c7d1 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -778,6 +778,7 @@ DECLARE_REFLECTION_STRUCT(VkSwapchainCounterCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkSwapchainCreateInfoKHR); DECLARE_REFLECTION_STRUCT(VkTextureLODGatherFormatPropertiesAMD); DECLARE_REFLECTION_STRUCT(VkValidationCacheCreateInfoEXT); +DECLARE_REFLECTION_STRUCT(VkValidationFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkValidationFlagsEXT); DECLARE_REFLECTION_STRUCT(VkWriteDescriptorSet); @@ -991,6 +992,7 @@ DECLARE_DESERIALISE_TYPE(VkSwapchainCounterCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkSwapchainCreateInfoKHR); DECLARE_DESERIALISE_TYPE(VkTextureLODGatherFormatPropertiesAMD); DECLARE_DESERIALISE_TYPE(VkValidationCacheCreateInfoEXT); +DECLARE_DESERIALISE_TYPE(VkValidationFeaturesEXT); DECLARE_DESERIALISE_TYPE(VkValidationFlagsEXT); DECLARE_DESERIALISE_TYPE(VkWriteDescriptorSet); @@ -1218,5 +1220,6 @@ DECLARE_REFLECTION_ENUM(VkSurfaceTransformFlagBitsKHR); DECLARE_REFLECTION_ENUM(VkSwapchainCreateFlagBitsKHR); DECLARE_REFLECTION_ENUM(VkTessellationDomainOrigin); DECLARE_REFLECTION_ENUM(VkValidationCheckEXT); -DECLARE_REFLECTION_ENUM(VkValidationFeaturesEXT); +DECLARE_REFLECTION_ENUM(VkValidationFeatureEnableEXT); +DECLARE_REFLECTION_ENUM(VkValidationFeatureDisableEXT); DECLARE_REFLECTION_ENUM(VkVertexInputRate); \ No newline at end of file diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 582c3ed7a..82dc1d2ac 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -721,6 +721,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_EXT_VALIDATION_CACHE_EXTENSION_NAME, VK_EXT_VALIDATION_CACHE_SPEC_VERSION, }, + { + VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME, VK_EXT_VALIDATION_FEATURES_SPEC_VERSION, + }, { VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME, VK_EXT_VALIDATION_FLAGS_SPEC_VERSION, }, diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 09c0c256b..dfb805c5c 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -510,6 +510,9 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT, \ VkShaderModuleValidationCacheCreateInfoEXT) \ \ + /* VK_EXT_validation_features */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT, VkValidationFeaturesEXT) \ + \ /* VK_EXT_validation_flags */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT, VkValidationFlagsEXT) \ \ @@ -832,9 +835,6 @@ SERIALISE_VK_HANDLES(); /* VK_EXT_scalar_block_layout */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT) \ \ - /* VK_EXT_validation_features */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT) \ - \ /* VK_GOOGLE_display_timing */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE) \ \ @@ -4126,6 +4126,26 @@ void Deserialise(const VkShaderModuleValidationCacheCreateInfoEXT &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkValidationFeaturesEXT &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(enabledValidationFeatureCount); + SERIALISE_MEMBER_ARRAY(pEnabledValidationFeatures, enabledValidationFeatureCount); + SERIALISE_MEMBER(disabledValidationFeatureCount); + SERIALISE_MEMBER_ARRAY(pDisabledValidationFeatures, disabledValidationFeatureCount); +} + +template <> +void Deserialise(const VkValidationFeaturesEXT &el) +{ + DeserialiseNext(el.pNext); + delete[] el.pEnabledValidationFeatures; + delete[] el.pDisabledValidationFeatures; +} + template void DoSerialise(SerialiserType &ser, VkValidationFlagsEXT &el) { diff --git a/renderdoc/driver/vulkan/vk_stringise.cpp b/renderdoc/driver/vulkan/vk_stringise.cpp index f1a9b5948..a8dccb523 100644 --- a/renderdoc/driver/vulkan/vk_stringise.cpp +++ b/renderdoc/driver/vulkan/vk_stringise.cpp @@ -2176,6 +2176,33 @@ std::string DoStringise(const VkValidationCheckEXT &el) END_ENUM_STRINGISE(); } +template <> +std::string DoStringise(const VkValidationFeatureEnableEXT &el) +{ + BEGIN_ENUM_STRINGISE(VkValidationFeatureEnableEXT); + { + STRINGISE_ENUM(VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT) + STRINGISE_ENUM(VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT) + } + END_ENUM_STRINGISE(); +} + +template <> +std::string DoStringise(const VkValidationFeatureDisableEXT &el) +{ + BEGIN_ENUM_STRINGISE(VkValidationFeatureDisableEXT); + { + STRINGISE_ENUM(VK_VALIDATION_FEATURE_DISABLE_ALL_EXT) + STRINGISE_ENUM(VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT) + STRINGISE_ENUM(VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT) + STRINGISE_ENUM(VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT) + STRINGISE_ENUM(VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT) + STRINGISE_ENUM(VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT) + STRINGISE_ENUM(VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT) + } + END_ENUM_STRINGISE(); +} + template <> std::string DoStringise(const VkDriverIdKHR &el) {