diff options
author | 2020-07-05 16:05:26 -0700 | |
---|---|---|
committer | 2020-07-07 16:55:52 -0700 | |
commit | a55624ba5ae108daf326b03e1fe68165206b883a (patch) | |
tree | 81febc3e5c640bee3204bc77ec22de75ba61b84a | |
parent | e4f64170c9c754b7c87ce138a5d7493964bd9204 (diff) |
libvulkan: fix support for promoted GPDP2
This change intercepts below entry points:
vkGetPhysicalDeviceFeatures2
vkGetPhysicalDeviceProperties2
vkGetPhysicalDeviceFormatProperties2
vkGetPhysicalDeviceImageFormatProperties2
vkGetPhysicalDeviceQueueFamilyProperties2
vkGetPhysicalDeviceMemoryProperties2
vkGetPhysicalDeviceSparseImageFormatProperties2
Bug: 160276146
Test: adb shell cmd gpu vkjson
Test: dEQP-VK.api.*
Change-Id: I446192e3d29a3b0496d8d274a5a9cd3f2c0b3ee5
-rw-r--r-- | vulkan/libvulkan/driver.cpp | 131 | ||||
-rw-r--r-- | vulkan/libvulkan/driver.h | 8 | ||||
-rw-r--r-- | vulkan/libvulkan/driver_gen.cpp | 61 | ||||
-rw-r--r-- | vulkan/libvulkan/driver_gen.h | 12 | ||||
-rw-r--r-- | vulkan/scripts/driver_generator.py | 27 |
5 files changed, 224 insertions, 15 deletions
diff --git a/vulkan/libvulkan/driver.cpp b/vulkan/libvulkan/driver.cpp index f2712d1f99..d2fdf42bd6 100644 --- a/vulkan/libvulkan/driver.cpp +++ b/vulkan/libvulkan/driver.cpp @@ -970,13 +970,6 @@ VkResult EnumerateInstanceExtensionProperties( bool QueryPresentationProperties( VkPhysicalDevice physicalDevice, VkPhysicalDevicePresentationPropertiesANDROID *presentation_properties) { - const InstanceData& data = GetData(physicalDevice); - - // GPDP2 must be present and enabled on the instance. - if (!data.driver.GetPhysicalDeviceProperties2KHR && - !data.driver.GetPhysicalDeviceProperties2) - return false; - // Request the android-specific presentation properties via GPDP2 VkPhysicalDeviceProperties2KHR properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR, @@ -992,12 +985,7 @@ bool QueryPresentationProperties( presentation_properties->pNext = nullptr; presentation_properties->sharedImage = VK_FALSE; - if (data.driver.GetPhysicalDeviceProperties2KHR) { - data.driver.GetPhysicalDeviceProperties2KHR(physicalDevice, - &properties); - } else { - data.driver.GetPhysicalDeviceProperties2(physicalDevice, &properties); - } + GetPhysicalDeviceProperties2(physicalDevice, &properties); return true; } @@ -1379,5 +1367,122 @@ VKAPI_ATTR VkResult QueueSubmit(VkQueue queue, return data.driver.QueueSubmit(queue, submitCount, pSubmits, fence); } +void GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceFeatures2* pFeatures) { + ATRACE_CALL(); + + const auto& driver = GetData(physicalDevice).driver; + + if (driver.GetPhysicalDeviceFeatures2) { + driver.GetPhysicalDeviceFeatures2(physicalDevice, pFeatures); + return; + } + + driver.GetPhysicalDeviceFeatures2KHR(physicalDevice, pFeatures); +} + +void GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, + VkPhysicalDeviceProperties2* pProperties) { + ATRACE_CALL(); + + const auto& driver = GetData(physicalDevice).driver; + + if (driver.GetPhysicalDeviceProperties2) { + driver.GetPhysicalDeviceProperties2(physicalDevice, pProperties); + return; + } + + driver.GetPhysicalDeviceProperties2KHR(physicalDevice, pProperties); +} + +void GetPhysicalDeviceFormatProperties2( + VkPhysicalDevice physicalDevice, + VkFormat format, + VkFormatProperties2* pFormatProperties) { + ATRACE_CALL(); + + const auto& driver = GetData(physicalDevice).driver; + + if (driver.GetPhysicalDeviceFormatProperties2) { + driver.GetPhysicalDeviceFormatProperties2(physicalDevice, format, + pFormatProperties); + return; + } + + driver.GetPhysicalDeviceFormatProperties2KHR(physicalDevice, format, + pFormatProperties); +} + +VkResult GetPhysicalDeviceImageFormatProperties2( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, + VkImageFormatProperties2* pImageFormatProperties) { + ATRACE_CALL(); + + const auto& driver = GetData(physicalDevice).driver; + + if (driver.GetPhysicalDeviceImageFormatProperties2) { + return driver.GetPhysicalDeviceImageFormatProperties2( + physicalDevice, pImageFormatInfo, pImageFormatProperties); + } + + return driver.GetPhysicalDeviceImageFormatProperties2KHR( + physicalDevice, pImageFormatInfo, pImageFormatProperties); +} + +void GetPhysicalDeviceQueueFamilyProperties2( + VkPhysicalDevice physicalDevice, + uint32_t* pQueueFamilyPropertyCount, + VkQueueFamilyProperties2* pQueueFamilyProperties) { + ATRACE_CALL(); + + const auto& driver = GetData(physicalDevice).driver; + + if (driver.GetPhysicalDeviceQueueFamilyProperties2) { + driver.GetPhysicalDeviceQueueFamilyProperties2( + physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); + return; + } + + driver.GetPhysicalDeviceQueueFamilyProperties2KHR( + physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); +} + +void GetPhysicalDeviceMemoryProperties2( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties2* pMemoryProperties) { + ATRACE_CALL(); + + const auto& driver = GetData(physicalDevice).driver; + + if (driver.GetPhysicalDeviceMemoryProperties2) { + driver.GetPhysicalDeviceMemoryProperties2(physicalDevice, + pMemoryProperties); + return; + } + + driver.GetPhysicalDeviceMemoryProperties2KHR(physicalDevice, + pMemoryProperties); +} + +void GetPhysicalDeviceSparseImageFormatProperties2( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, + uint32_t* pPropertyCount, + VkSparseImageFormatProperties2* pProperties) { + ATRACE_CALL(); + + const auto& driver = GetData(physicalDevice).driver; + + if (driver.GetPhysicalDeviceSparseImageFormatProperties2) { + driver.GetPhysicalDeviceSparseImageFormatProperties2( + physicalDevice, pFormatInfo, pPropertyCount, pProperties); + return; + } + + driver.GetPhysicalDeviceSparseImageFormatProperties2KHR( + physicalDevice, pFormatInfo, pPropertyCount, pProperties); +} + } // namespace driver } // namespace vulkan diff --git a/vulkan/libvulkan/driver.h b/vulkan/libvulkan/driver.h index 23c717cf5d..360e724589 100644 --- a/vulkan/libvulkan/driver.h +++ b/vulkan/libvulkan/driver.h @@ -126,6 +126,14 @@ VKAPI_ATTR void GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint3 VKAPI_ATTR void GetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue); VKAPI_ATTR VkResult AllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers); VKAPI_ATTR VkResult QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence); + +VKAPI_ATTR void GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); +VKAPI_ATTR void GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); +VKAPI_ATTR void GetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); +VKAPI_ATTR VkResult GetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); +VKAPI_ATTR void GetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); +VKAPI_ATTR void GetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); +VKAPI_ATTR void GetPhysicalDeviceSparseImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); // clang-format on template <typename DispatchableType> diff --git a/vulkan/libvulkan/driver_gen.cpp b/vulkan/libvulkan/driver_gen.cpp index 36577c2622..de0ed60673 100644 --- a/vulkan/libvulkan/driver_gen.cpp +++ b/vulkan/libvulkan/driver_gen.cpp @@ -363,6 +363,34 @@ const ProcHook g_proc_hooks[] = { reinterpret_cast<PFN_vkVoidFunction>(checkedGetPastPresentationTimingGOOGLE), }, { + "vkGetPhysicalDeviceFeatures2", + ProcHook::INSTANCE, + ProcHook::EXTENSION_CORE_1_1, + reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceFeatures2), + nullptr, + }, + { + "vkGetPhysicalDeviceFormatProperties2", + ProcHook::INSTANCE, + ProcHook::EXTENSION_CORE_1_1, + reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceFormatProperties2), + nullptr, + }, + { + "vkGetPhysicalDeviceImageFormatProperties2", + ProcHook::INSTANCE, + ProcHook::EXTENSION_CORE_1_1, + reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceImageFormatProperties2), + nullptr, + }, + { + "vkGetPhysicalDeviceMemoryProperties2", + ProcHook::INSTANCE, + ProcHook::EXTENSION_CORE_1_1, + reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceMemoryProperties2), + nullptr, + }, + { "vkGetPhysicalDevicePresentRectanglesKHR", ProcHook::INSTANCE, ProcHook::KHR_swapchain, @@ -370,6 +398,27 @@ const ProcHook g_proc_hooks[] = { nullptr, }, { + "vkGetPhysicalDeviceProperties2", + ProcHook::INSTANCE, + ProcHook::EXTENSION_CORE_1_1, + reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceProperties2), + nullptr, + }, + { + "vkGetPhysicalDeviceQueueFamilyProperties2", + ProcHook::INSTANCE, + ProcHook::EXTENSION_CORE_1_1, + reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceQueueFamilyProperties2), + nullptr, + }, + { + "vkGetPhysicalDeviceSparseImageFormatProperties2", + ProcHook::INSTANCE, + ProcHook::EXTENSION_CORE_1_1, + reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSparseImageFormatProperties2), + nullptr, + }, + { "vkGetPhysicalDeviceSurfaceCapabilities2KHR", ProcHook::INSTANCE, ProcHook::KHR_get_surface_capabilities2, @@ -544,8 +593,20 @@ bool InitDriverTable(VkInstance instance, INIT_PROC_EXT(EXT_debug_report, true, instance, CreateDebugReportCallbackEXT); INIT_PROC_EXT(EXT_debug_report, true, instance, DestroyDebugReportCallbackEXT); INIT_PROC_EXT(EXT_debug_report, true, instance, DebugReportMessageEXT); + INIT_PROC(false, instance, GetPhysicalDeviceFeatures2); + INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceFeatures2KHR); INIT_PROC(false, instance, GetPhysicalDeviceProperties2); INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceProperties2KHR); + INIT_PROC(false, instance, GetPhysicalDeviceFormatProperties2); + INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceFormatProperties2KHR); + INIT_PROC(false, instance, GetPhysicalDeviceImageFormatProperties2); + INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceImageFormatProperties2KHR); + INIT_PROC(false, instance, GetPhysicalDeviceQueueFamilyProperties2); + INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceQueueFamilyProperties2KHR); + INIT_PROC(false, instance, GetPhysicalDeviceMemoryProperties2); + INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceMemoryProperties2KHR); + INIT_PROC(false, instance, GetPhysicalDeviceSparseImageFormatProperties2); + INIT_PROC_EXT(KHR_get_physical_device_properties2, true, instance, GetPhysicalDeviceSparseImageFormatProperties2KHR); INIT_PROC(false, instance, EnumeratePhysicalDeviceGroups); INIT_PROC_EXT(KHR_device_group_creation, true, instance, EnumeratePhysicalDeviceGroupsKHR); // clang-format on diff --git a/vulkan/libvulkan/driver_gen.h b/vulkan/libvulkan/driver_gen.h index dda9bb1194..1f102a90e9 100644 --- a/vulkan/libvulkan/driver_gen.h +++ b/vulkan/libvulkan/driver_gen.h @@ -77,8 +77,20 @@ struct InstanceDriverTable { PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT; PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT; PFN_vkDebugReportMessageEXT DebugReportMessageEXT; + PFN_vkGetPhysicalDeviceFeatures2 GetPhysicalDeviceFeatures2; + PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysicalDeviceFeatures2KHR; PFN_vkGetPhysicalDeviceProperties2 GetPhysicalDeviceProperties2; PFN_vkGetPhysicalDeviceProperties2KHR GetPhysicalDeviceProperties2KHR; + PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysicalDeviceFormatProperties2; + PFN_vkGetPhysicalDeviceFormatProperties2KHR GetPhysicalDeviceFormatProperties2KHR; + PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysicalDeviceImageFormatProperties2; + PFN_vkGetPhysicalDeviceImageFormatProperties2KHR GetPhysicalDeviceImageFormatProperties2KHR; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysicalDeviceQueueFamilyProperties2; + PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR GetPhysicalDeviceQueueFamilyProperties2KHR; + PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysicalDeviceMemoryProperties2; + PFN_vkGetPhysicalDeviceMemoryProperties2KHR GetPhysicalDeviceMemoryProperties2KHR; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysicalDeviceSparseImageFormatProperties2; + PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR GetPhysicalDeviceSparseImageFormatProperties2KHR; PFN_vkEnumeratePhysicalDeviceGroups EnumeratePhysicalDeviceGroups; PFN_vkEnumeratePhysicalDeviceGroupsKHR EnumeratePhysicalDeviceGroupsKHR; // clang-format on diff --git a/vulkan/scripts/driver_generator.py b/vulkan/scripts/driver_generator.py index 1db1a3715b..cf1b6cfaba 100644 --- a/vulkan/scripts/driver_generator.py +++ b/vulkan/scripts/driver_generator.py @@ -72,8 +72,6 @@ _NEEDED_COMMANDS = [ 'vkDestroyImage', 'vkGetPhysicalDeviceProperties', - 'vkGetPhysicalDeviceProperties2', - 'vkGetPhysicalDeviceProperties2KHR', # VK_KHR_swapchain v69 requirement 'vkBindImageMemory2', @@ -81,6 +79,22 @@ _NEEDED_COMMANDS = [ # For promoted VK_KHR_device_group_creation 'vkEnumeratePhysicalDeviceGroupsKHR', + + # For promoted VK_KHR_get_physical_device_properties2 + 'vkGetPhysicalDeviceFeatures2', + 'vkGetPhysicalDeviceFeatures2KHR', + 'vkGetPhysicalDeviceProperties2', + 'vkGetPhysicalDeviceProperties2KHR', + 'vkGetPhysicalDeviceFormatProperties2', + 'vkGetPhysicalDeviceFormatProperties2KHR', + 'vkGetPhysicalDeviceImageFormatProperties2', + 'vkGetPhysicalDeviceImageFormatProperties2KHR', + 'vkGetPhysicalDeviceQueueFamilyProperties2', + 'vkGetPhysicalDeviceQueueFamilyProperties2KHR', + 'vkGetPhysicalDeviceMemoryProperties2', + 'vkGetPhysicalDeviceMemoryProperties2KHR', + 'vkGetPhysicalDeviceSparseImageFormatProperties2', + 'vkGetPhysicalDeviceSparseImageFormatProperties2KHR', ] # Functions intercepted at vulkan::driver level. @@ -110,6 +124,15 @@ _INTERCEPTED_COMMANDS = [ # VK_KHR_swapchain v69 requirement 'vkBindImageMemory2', 'vkBindImageMemory2KHR', + + # For promoted VK_KHR_get_physical_device_properties2 + 'vkGetPhysicalDeviceFeatures2', + 'vkGetPhysicalDeviceProperties2', + 'vkGetPhysicalDeviceFormatProperties2', + 'vkGetPhysicalDeviceImageFormatProperties2', + 'vkGetPhysicalDeviceQueueFamilyProperties2', + 'vkGetPhysicalDeviceMemoryProperties2', + 'vkGetPhysicalDeviceSparseImageFormatProperties2', ] |