From 4dccb2d02cdc4d5b3aa081a19a8510091c86b543 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 25 Sep 2018 12:26:14 +0100 Subject: [PATCH] Add support for simple vulkan extensions * VK_EXT_post_depth_coverage * VK_EXT_queue_family_foreign * VK_KHR_8bit_storage * VK_KHR_get_display_properties2 * VK_KHR_vulkan_memory_model --- renderdoc/driver/vulkan/vk_core.cpp | 15 ++++++++ renderdoc/driver/vulkan/vk_core.h | 17 ++++++++++ renderdoc/driver/vulkan/vk_hookset_defs.h | 18 +++++++++- .../driver/vulkan/wrappers/vk_sync_funcs.cpp | 3 +- .../driver/vulkan/wrappers/vk_wsi_funcs.cpp | 34 +++++++++++++++++++ 5 files changed, 85 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 9e05c386e..fd92e2012 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -620,6 +620,12 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME, VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION, }, + { + VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME, VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION, + }, + { + VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME, VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION, + }, { VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME, VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION, }, @@ -650,6 +656,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_KHR_16BIT_STORAGE_EXTENSION_NAME, VK_KHR_16BIT_STORAGE_SPEC_VERSION, }, + { + VK_KHR_8BIT_STORAGE_EXTENSION_NAME, VK_KHR_8BIT_STORAGE_SPEC_VERSION, + }, #ifdef VK_KHR_android_surface { VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, VK_KHR_ANDROID_SURFACE_SPEC_VERSION, @@ -726,6 +735,9 @@ static const VkExtensionProperties supportedExtensions[] = { VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME, VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION, }, #endif + { + VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME, VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION, + }, { VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION, }, @@ -781,6 +793,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, VK_KHR_VARIABLE_POINTERS_SPEC_VERSION, }, + { + VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION, + }, #ifdef VK_KHR_win32_keyed_mutex { VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME, VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 2c5929b51..9859707bc 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -1838,4 +1838,21 @@ public: const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, uint32_t *pSurfaceFormatCount, VkSurfaceFormat2KHR *pSurfaceFormats); + + // VK_KHR_get_display_properties2 + VkResult vkGetPhysicalDeviceDisplayProperties2KHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayProperties2KHR *pProperties); + + VkResult vkGetPhysicalDeviceDisplayPlaneProperties2KHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayPlaneProperties2KHR *pProperties); + + VkResult vkGetDisplayModeProperties2KHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, + uint32_t *pPropertyCount, + VkDisplayModeProperties2KHR *pProperties); + + VkResult vkGetDisplayPlaneCapabilities2KHR(VkPhysicalDevice physicalDevice, + const VkDisplayPlaneInfo2KHR *pDisplayPlaneInfo, + VkDisplayPlaneCapabilities2KHR *pCapabilities); }; diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 34175bd55..f8ea2a92d 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -312,7 +312,8 @@ CheckExt(EXT_debug_utils, VKXX); \ CheckExt(KHR_device_group_creation, VK11); \ CheckExt(protected_memory, VK11); \ - CheckExt(KHR_get_surface_capabilities2, VKXX); + CheckExt(KHR_get_surface_capabilities2, VKXX); \ + CheckExt(KHR_get_display_properties2, VKXX); #define CheckDeviceExts() \ CheckExt(EXT_debug_marker, VKXX); \ @@ -396,6 +397,10 @@ HookInitExtension(KHR_device_group_creation &&KHR_surface, GetPhysicalDevicePresentRectanglesKHR); \ HookInitExtension(KHR_get_surface_capabilities2, GetPhysicalDeviceSurfaceFormats2KHR); \ HookInitExtension(KHR_get_surface_capabilities2, GetPhysicalDeviceSurfaceCapabilities2KHR); \ + HookInitExtension(KHR_get_display_properties2, GetPhysicalDeviceDisplayProperties2KHR); \ + HookInitExtension(KHR_get_display_properties2, GetPhysicalDeviceDisplayPlaneProperties2KHR); \ + HookInitExtension(KHR_get_display_properties2, GetDisplayModeProperties2KHR); \ + HookInitExtension(KHR_get_display_properties2, GetDisplayPlaneCapabilities2KHR); \ HookInitInstance_PlatformSpecific() #define HookInitVulkanDeviceExts() \ @@ -951,6 +956,17 @@ HookDefine4(VkResult, vkGetPhysicalDeviceSurfaceFormats2KHR, VkPhysicalDevice, physicalDevice, \ const VkPhysicalDeviceSurfaceInfo2KHR *, pSurfaceInfo, uint32_t *, \ pSurfaceFormatCount, VkSurfaceFormat2KHR *, pSurfaceFormats); \ + HookDefine3(VkResult, vkGetPhysicalDeviceDisplayProperties2KHR, VkPhysicalDevice, \ + physicalDevice, uint32_t *, pPropertyCount, VkDisplayProperties2KHR *, pProperties); \ + HookDefine3(VkResult, vkGetPhysicalDeviceDisplayPlaneProperties2KHR, VkPhysicalDevice, \ + physicalDevice, uint32_t *, pPropertyCount, VkDisplayPlaneProperties2KHR *, \ + pProperties); \ + HookDefine4(VkResult, vkGetDisplayModeProperties2KHR, VkPhysicalDevice, physicalDevice, \ + VkDisplayKHR, display, uint32_t *, pPropertyCount, VkDisplayModeProperties2KHR *, \ + pProperties); \ + HookDefine3(VkResult, vkGetDisplayPlaneCapabilities2KHR, VkPhysicalDevice, physicalDevice, \ + const VkDisplayPlaneInfo2KHR *, pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR *, \ + pCapabilities); \ HookDefine_PlatformSpecific() struct VkLayerInstanceDispatchTableExtended : VkLayerInstanceDispatchTable diff --git a/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp index 631c2aa2b..86d065cdb 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp @@ -73,7 +73,8 @@ void WrappedVulkan::RemapQueueFamilyIndices(uint32_t &srcQueueFamily, uint32_t &dstQueueFamily) { - if(srcQueueFamily == VK_QUEUE_FAMILY_EXTERNAL || dstQueueFamily == VK_QUEUE_FAMILY_EXTERNAL) + if(srcQueueFamily == VK_QUEUE_FAMILY_EXTERNAL || dstQueueFamily == VK_QUEUE_FAMILY_EXTERNAL || + srcQueueFamily == VK_QUEUE_FAMILY_FOREIGN_EXT || dstQueueFamily == VK_QUEUE_FAMILY_FOREIGN_EXT) { // we should ignore this family transition since we're not synchronising with an // external access. diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index 9352cbe28..fabee5584 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -1002,6 +1002,40 @@ VkResult WrappedVulkan::vkGetPhysicalDeviceSurfaceFormats2KHR( pSurfaceFormats); } +VkResult WrappedVulkan::vkGetPhysicalDeviceDisplayProperties2KHR(VkPhysicalDevice physicalDevice, + uint32_t *pPropertyCount, + VkDisplayProperties2KHR *pProperties) +{ + return ObjDisp(physicalDevice) + ->GetPhysicalDeviceDisplayProperties2KHR(Unwrap(physicalDevice), pPropertyCount, pProperties); +} + +VkResult WrappedVulkan::vkGetPhysicalDeviceDisplayPlaneProperties2KHR( + VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, + VkDisplayPlaneProperties2KHR *pProperties) +{ + return ObjDisp(physicalDevice) + ->GetPhysicalDeviceDisplayPlaneProperties2KHR(Unwrap(physicalDevice), pPropertyCount, + pProperties); +} + +VkResult WrappedVulkan::vkGetDisplayModeProperties2KHR(VkPhysicalDevice physicalDevice, + VkDisplayKHR display, uint32_t *pPropertyCount, + VkDisplayModeProperties2KHR *pProperties) +{ + // displays are not wrapped + return ObjDisp(physicalDevice) + ->GetDisplayModeProperties2KHR(Unwrap(physicalDevice), display, pPropertyCount, pProperties); +} + +VkResult WrappedVulkan::vkGetDisplayPlaneCapabilities2KHR( + VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR *pDisplayPlaneInfo, + VkDisplayPlaneCapabilities2KHR *pCapabilities) +{ + return ObjDisp(physicalDevice) + ->GetDisplayPlaneCapabilities2KHR(Unwrap(physicalDevice), pDisplayPlaneInfo, pCapabilities); +} + INSTANTIATE_FUNCTION_SERIALISED(VkResult, vkCreateSwapchainKHR, VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain);