From 6236f2b6c1cdccfec9cb90e327b0c1f17ae3b049 Mon Sep 17 00:00:00 2001 From: Omar El Sheikh Date: Wed, 2 Sep 2020 14:52:20 -0400 Subject: [PATCH] Added Struct Handling/Serialization Added initial support for these structs: *VkAndroidHardwareBufferPropertiesANDROID *VkMemoryGetAndroidHardwareBufferInfoANDROID *VkAndroidHardwareBufferFormatPropertiesANDROID *VkExternalFormatANDROID *VkAndroidHardwareBufferUsageANDROID *VkImportAndroidHardwareBufferInfoANDROID --- renderdoc/driver/vulkan/vk_common.h | 17 +++ renderdoc/driver/vulkan/vk_serialise.cpp | 153 +++++++++++++++++++++-- 2 files changed, 159 insertions(+), 11 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 877e0d3aa..e1a250535 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -1445,6 +1445,23 @@ DECLARE_DESERIALISE_TYPE(VkWin32KeyedMutexAcquireReleaseInfoKHR); DECLARE_DESERIALISE_TYPE(VkWin32KeyedMutexAcquireReleaseInfoNV); #endif +// android only structs +#ifdef VK_USE_PLATFORM_ANDROID_KHR +DECLARE_REFLECTION_STRUCT(VkAndroidHardwareBufferUsageANDROID); +DECLARE_REFLECTION_STRUCT(VkAndroidHardwareBufferPropertiesANDROID); +DECLARE_REFLECTION_STRUCT(VkAndroidHardwareBufferFormatPropertiesANDROID); +DECLARE_REFLECTION_STRUCT(VkImportAndroidHardwareBufferInfoANDROID); +DECLARE_REFLECTION_STRUCT(VkMemoryGetAndroidHardwareBufferInfoANDROID); +DECLARE_REFLECTION_STRUCT(VkExternalFormatANDROID); + +DECLARE_DESERIALISE_TYPE(VkAndroidHardwareBufferUsageANDROID); +DECLARE_DESERIALISE_TYPE(VkAndroidHardwareBufferPropertiesANDROID); +DECLARE_DESERIALISE_TYPE(VkAndroidHardwareBufferFormatPropertiesANDROID); +DECLARE_DESERIALISE_TYPE(VkImportAndroidHardwareBufferInfoANDROID); +DECLARE_DESERIALISE_TYPE(VkMemoryGetAndroidHardwareBufferInfoANDROID); +DECLARE_DESERIALISE_TYPE(VkExternalFormatANDROID); +#endif + // enums DECLARE_REFLECTION_ENUM(VkAccessFlagBits); diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 098fc6f44..5103079f5 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -275,7 +275,7 @@ SERIALISE_VK_HANDLES(); #ifdef VK_USE_PLATFORM_WIN32_KHR -#define HANDLE_PNEXT_OS() \ +#define HANDLE_PNEXT_OS_WIN32() \ /* VK_NV_external_memory_win32 */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV, VkImportMemoryWin32HandleInfoNV) \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV, VkExportMemoryWin32HandleInfoNV) \ @@ -321,7 +321,7 @@ SERIALISE_VK_HANDLES(); #else -#define HANDLE_PNEXT_OS() \ +#define HANDLE_PNEXT_OS_WIN32() \ /* VK_NV_external_memory_win32 */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV) \ @@ -356,10 +356,38 @@ SERIALISE_VK_HANDLES(); #endif +#ifdef VK_USE_PLATFORM_ANDROID_KHR + +#define HANDLE_PNEXT_OS_ANDROID() \ + /* VK_ANDROID_external_memory_android_hardware_buffer */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID, \ + VkAndroidHardwareBufferUsageANDROID) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID, \ + VkAndroidHardwareBufferPropertiesANDROID) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID, \ + VkAndroidHardwareBufferFormatPropertiesANDROID) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID, \ + VkImportAndroidHardwareBufferInfoANDROID) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID, \ + VkMemoryGetAndroidHardwareBufferInfoANDROID) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID, VkExternalFormatANDROID) +#else + +#define HANDLE_PNEXT_OS_ANDROID() \ + /* VK_ANDROID_external_memory_android_hardware_buffer */ \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID) +#endif + // pNext structure type dispatch #define HANDLE_PNEXT() \ /* OS-specific extensions */ \ - HANDLE_PNEXT_OS() \ + HANDLE_PNEXT_OS_WIN32() \ + HANDLE_PNEXT_OS_ANDROID() \ \ /* Core 1.0 structs. Should never be serialised in a pNext chain */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_APPLICATION_INFO, VkApplicationInfo) \ @@ -1058,14 +1086,6 @@ SERIALISE_VK_HANDLES(); /* VK_AMD_shader_core_properties2 */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD) \ \ - /* VK_ANDROID_external_memory_android_hardware_buffer */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID) \ - \ /* 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) \ @@ -9319,3 +9339,114 @@ INSTANTIATE_SERIALISE_TYPE(VkSurfaceCapabilitiesFullScreenExclusiveEXT); INSTANTIATE_SERIALISE_TYPE(VkSurfaceFullScreenExclusiveInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkSurfaceFullScreenExclusiveWin32InfoEXT); #endif + +#ifdef VK_USE_PLATFORM_ANDROID_KHR +template +void DoSerialise(SerialiserType &ser, VkAndroidHardwareBufferPropertiesANDROID &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(allocationSize); + SERIALISE_MEMBER_TYPED(uint32_t, memoryTypeBits); +} + +template <> +void Deserialise(const VkAndroidHardwareBufferPropertiesANDROID &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkMemoryGetAndroidHardwareBufferInfoANDROID &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(memory); +} + +template <> +void Deserialise(const VkMemoryGetAndroidHardwareBufferInfoANDROID &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkAndroidHardwareBufferFormatPropertiesANDROID &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(format); + SERIALISE_MEMBER(externalFormat); + SERIALISE_MEMBER_VKFLAGS(VkFormatFeatureFlags, formatFeatures); + SERIALISE_MEMBER(samplerYcbcrConversionComponents); + SERIALISE_MEMBER(suggestedYcbcrModel); + SERIALISE_MEMBER(suggestedYcbcrRange); + SERIALISE_MEMBER(suggestedXChromaOffset); + SERIALISE_MEMBER(suggestedYChromaOffset); +} + +template <> +void Deserialise(const VkAndroidHardwareBufferFormatPropertiesANDROID &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkExternalFormatANDROID &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(externalFormat); +} + +template <> +void Deserialise(const VkExternalFormatANDROID &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkAndroidHardwareBufferUsageANDROID &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(androidHardwareBufferUsage); +} + +template <> +void Deserialise(const VkAndroidHardwareBufferUsageANDROID &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkImportAndroidHardwareBufferInfoANDROID &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID); + SerialiseNext(ser, el.sType, el.pNext); + + // SERIALISE_MEMBER(buffer); +} + +template <> +void Deserialise(const VkImportAndroidHardwareBufferInfoANDROID &el) +{ + DeserialiseNext(el.pNext); +} + +INSTANTIATE_SERIALISE_TYPE(VkAndroidHardwareBufferUsageANDROID); +INSTANTIATE_SERIALISE_TYPE(VkAndroidHardwareBufferPropertiesANDROID); +INSTANTIATE_SERIALISE_TYPE(VkAndroidHardwareBufferFormatPropertiesANDROID); +INSTANTIATE_SERIALISE_TYPE(VkImportAndroidHardwareBufferInfoANDROID); +INSTANTIATE_SERIALISE_TYPE(VkMemoryGetAndroidHardwareBufferInfoANDROID); +INSTANTIATE_SERIALISE_TYPE(VkExternalFormatANDROID); +#endif