Add tests for presentation support functions
authorPawel Ksiezopolski <pawel.ksiezopolski@mobica.com>
Thu, 14 Nov 2019 09:39:21 +0000 (10:39 +0100)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Tue, 17 Dec 2019 09:54:27 +0000 (04:54 -0500)
Test concerns platform-specific presentation support functions
defined in chapter 32.4 ( Querying for WSI Support ) of the
Vulkan specification.

New tests:
dEQP-VK.wsi.*.surface.query_presentation_support

Components: Vulkan Framework

VK-GL-CTS issue: 1798

Change-Id: I0b5017e58fe3b4c2f49c94b2f2808103734793eb

android/cts/master/vk-master.txt
external/vulkancts/framework/vulkan/CMakeLists.txt
external/vulkancts/framework/vulkan/vkWsiUtil.cpp
external/vulkancts/framework/vulkan/vkWsiUtil.hpp
external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp
external/vulkancts/mustpass/master/vk-default-no-waivers.txt
external/vulkancts/mustpass/master/vk-default.txt

index 51dce0d..c260a9a 100644 (file)
@@ -426566,6 +426566,7 @@ dEQP-VK.wsi.android.surface.create
 dEQP-VK.wsi.android.surface.create_custom_allocator
 dEQP-VK.wsi.android.surface.create_simulate_oom
 dEQP-VK.wsi.android.surface.query_support
+dEQP-VK.wsi.android.surface.query_presentation_support
 dEQP-VK.wsi.android.surface.query_capabilities
 dEQP-VK.wsi.android.surface.query_capabilities2
 dEQP-VK.wsi.android.surface.query_protected_capabilities
@@ -427340,6 +427341,7 @@ dEQP-VK.wsi.macos.surface.create
 dEQP-VK.wsi.macos.surface.create_custom_allocator
 dEQP-VK.wsi.macos.surface.create_simulate_oom
 dEQP-VK.wsi.macos.surface.query_support
+dEQP-VK.wsi.macos.surface.query_presentation_support
 dEQP-VK.wsi.macos.surface.query_capabilities
 dEQP-VK.wsi.macos.surface.query_capabilities2
 dEQP-VK.wsi.macos.surface.query_protected_capabilities
index ee7c3fe..9b81525 100644 (file)
@@ -126,5 +126,16 @@ PCH(VKUTIL_SRCS ../../modules/vulkan/pch.cpp)
 add_library(vkutilnoshader STATIC ${VKUTILNOSHADER_SRCS})
 target_link_libraries(vkutilnoshader ${VKUTILNOSHADER_LIBS})
 
+if (DEQP_USE_X11)
+       find_package(X11 REQUIRED)
+       target_link_libraries(vkutilnoshader ${X11_LIBRARIES})
+       add_definitions(-DDEQP_SUPPORT_X11=1)
+       if (DEQP_USE_XCB)
+               find_package(XCB REQUIRED)
+               target_link_libraries(vkutilnoshader ${XCB_LIBRARIES})
+               add_definitions(-DDEQP_SUPPORT_XCB=1)
+       endif ()
+endif()
+
 add_library(vkutil STATIC ${VKUTIL_SRCS})
 target_link_libraries(vkutil ${VKUTIL_LIBS})
index 29aa3c1..59c937c 100644 (file)
 
 #include <limits>
 
+#if defined (DEQP_SUPPORT_X11)
+#      include <X11/Xlib.h>
+#      if defined (DEQP_SUPPORT_XCB)
+#              include <xcb/xcb.h>
+#      endif // DEQP_SUPPORT_XCB
+#endif // DEQP_SUPPORT_X11
+
 namespace vk
 {
 namespace wsi
@@ -255,6 +262,56 @@ VkBool32 getPhysicalDeviceSurfaceSupport (const InstanceInterface& vki,
        return result;
 }
 
+VkBool32 getPhysicalDevicePresentationSupport (const InstanceInterface&        vki,
+                                                                                          VkPhysicalDevice                     physicalDevice,
+                                                                                          deUint32                                     queueFamilyIndex,
+                                                                                          Type                                         wsiType,
+                                                                                          const Display&                       nativeDisplay)
+{
+       switch (wsiType)
+       {
+               case TYPE_XLIB:
+               {
+                       const XlibDisplayInterface&             xlibDisplay     = dynamic_cast<const XlibDisplayInterface&>(nativeDisplay);
+                       pt::XlibVisualID                                visualID        (0U);
+#if defined (DEQP_SUPPORT_X11)
+                       ::Display*                                              displayPtr      = (::Display*)(xlibDisplay.getNative().internal);
+                       visualID.internal                                                       = (deUint32)(::XDefaultVisual(displayPtr,0)->visualid);
+#endif
+                       return vki.getPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, xlibDisplay.getNative(), visualID);
+               }
+               case TYPE_XCB:
+               {
+                       const XcbDisplayInterface&              xcbDisplay      = dynamic_cast<const XcbDisplayInterface&>(nativeDisplay);
+                       pt::XcbVisualid                                 visualID        (0U);
+#if defined (DEQP_SUPPORT_XCB)
+                       xcb_connection_t*                               connPtr         = (xcb_connection_t*)(xcbDisplay.getNative().internal);
+                       xcb_screen_t*                                   screen          = xcb_setup_roots_iterator(xcb_get_setup(connPtr)).data;
+                       visualID.internal                                                       = (deUint32)(screen->root_visual);
+#endif
+                       return vki.getPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, xcbDisplay.getNative(), visualID);
+               }
+               case TYPE_WAYLAND:
+               {
+                       const WaylandDisplayInterface&  waylandDisplay  = dynamic_cast<const WaylandDisplayInterface&>(nativeDisplay);
+                       return vki.getPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, waylandDisplay.getNative());
+               }
+               case TYPE_WIN32:
+               {
+                       return vki.getPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex);
+               }
+               case TYPE_ANDROID:
+               case TYPE_MACOS:
+               {
+                       return 1;
+               }
+               default:
+                       DE_FATAL("Unknown WSI type");
+                       return 0;
+       }
+       return 1;
+}
+
 VkSurfaceCapabilitiesKHR getPhysicalDeviceSurfaceCapabilities (const InstanceInterface&                vki,
                                                                                                                           VkPhysicalDevice                             physicalDevice,
                                                                                                                           VkSurfaceKHR                                 surface)
index bd4ca43..9e2ef4c 100644 (file)
@@ -82,6 +82,12 @@ VkBool32                                             getPhysicalDeviceSurfaceSupport                 (const InstanceInterface&               vki,
                                                                                                                                                 deUint32                                               queueFamilyIndex,
                                                                                                                                                 VkSurfaceKHR                                   surface);
 
+VkBool32                                               getPhysicalDevicePresentationSupport    (const InstanceInterface&               vki,
+                                                                                                                                                VkPhysicalDevice                               physicalDevice,
+                                                                                                                                                deUint32                                               queueFamilyIndex,
+                                                                                                                                                Type                                                   wsiType,
+                                                                                                                                                const Display&                                 nativeDisplay);
+
 VkSurfaceCapabilitiesKHR               getPhysicalDeviceSurfaceCapabilities    (const InstanceInterface&               vki,
                                                                                                                                                 VkPhysicalDevice                               physicalDevice,
                                                                                                                                                 VkSurfaceKHR                                   surface);
index 9ac04b9..6ec84f3 100644 (file)
@@ -443,6 +443,39 @@ tcu::TestStatus querySurfaceSupportTest (Context& context, Type wsiType)
        return tcu::TestStatus(results.getResult(), results.getMessage());
 }
 
+tcu::TestStatus queryPresentationSupportTest(Context& context, Type wsiType)
+{
+       tcu::TestLog&                                   log                                             = context.getTestContext().getLog();
+       tcu::ResultCollector                    results                                 (log);
+
+       const InstanceHelper                    instHelper                              (context, wsiType);
+       const NativeObjects                             native                                  (context, instHelper.supportedExtensions, wsiType);
+       const Unique<VkSurfaceKHR>              surface                                 (createSurface(instHelper.vki, instHelper.instance, wsiType, *native.display, *native.window));
+       const vector<VkPhysicalDevice>  physicalDevices                 = enumeratePhysicalDevices(instHelper.vki, instHelper.instance);
+
+       for (size_t deviceNdx = 0; deviceNdx < physicalDevices.size(); ++deviceNdx)
+       {
+               const VkPhysicalDevice          physicalDevice          = physicalDevices[deviceNdx];
+               const deUint32                          numQueueFamilies        = getNumQueueFamilies(instHelper.vki, physicalDevice);
+
+               for (deUint32 queueFamilyNdx = 0; queueFamilyNdx < numQueueFamilies; ++queueFamilyNdx)
+               {
+                       VkBool32        isPresentationSupported = getPhysicalDevicePresentationSupport(instHelper.vki, physicalDevice, queueFamilyNdx, wsiType, *native.display);
+                       VkBool32        isSurfaceSupported              = getPhysicalDeviceSurfaceSupport(instHelper.vki, physicalDevice, queueFamilyNdx, *surface);
+
+                       log << TestLog::Message << "Device " << deviceNdx << ", queue family " << queueFamilyNdx << ": presentation "
+                                                                       << (isPresentationSupported == VK_FALSE ? "NOT " : "") << "supported. Surface "
+                                                                       << (isSurfaceSupported == VK_FALSE ? "NOT " : "") << "supported."
+                               << TestLog::EndMessage;
+
+                       if (isPresentationSupported != isSurfaceSupported)
+                               results.fail("Presentation support is different from surface support");
+               }
+       }
+
+       return tcu::TestStatus(results.getResult(), results.getMessage());
+}
+
 bool isSupportedByAnyQueue (const InstanceInterface& vki, VkPhysicalDevice physicalDevice, VkSurfaceKHR surface)
 {
        const deUint32  numQueueFamilies        = getNumQueueFamilies(vki, physicalDevice);
@@ -1269,6 +1302,7 @@ void createSurfaceTests (tcu::TestCaseGroup* testGroup, vk::wsi::Type wsiType)
        addFunctionCase(testGroup, "create_custom_allocator",                           "Create surface with custom allocator",                                         createSurfaceCustomAllocatorTest,                       wsiType);
        addFunctionCase(testGroup, "create_simulate_oom",                                       "Create surface with simulating OOM",                                           createSurfaceSimulateOOMTest,                           wsiType);
        addFunctionCase(testGroup, "query_support",                                                     "Query surface support",                                                                        querySurfaceSupportTest,                                        wsiType);
+       addFunctionCase(testGroup, "query_presentation_support",                        "Query native presentation support",                                            queryPresentationSupportTest,                           wsiType);
        addFunctionCase(testGroup, "query_capabilities",                                        "Query surface capabilities",                                                           querySurfaceCapabilitiesTest,                           wsiType);
        addFunctionCase(testGroup, "query_capabilities2",                                       "Query extended surface capabilities",                                          querySurfaceCapabilities2Test,                          wsiType);
        addFunctionCase(testGroup, "query_protected_capabilities",                      "Query protected surface capabilities",                                         querySurfaceProtectedCapabilitiesTest,          wsiType);
index 8cdc25e..db93d1b 100644 (file)
@@ -426583,6 +426583,7 @@ dEQP-VK.wsi.xlib.surface.create
 dEQP-VK.wsi.xlib.surface.create_custom_allocator
 dEQP-VK.wsi.xlib.surface.create_simulate_oom
 dEQP-VK.wsi.xlib.surface.query_support
+dEQP-VK.wsi.xlib.surface.query_presentation_support
 dEQP-VK.wsi.xlib.surface.query_capabilities
 dEQP-VK.wsi.xlib.surface.query_capabilities2
 dEQP-VK.wsi.xlib.surface.query_protected_capabilities
@@ -426999,6 +427000,7 @@ dEQP-VK.wsi.xcb.surface.create
 dEQP-VK.wsi.xcb.surface.create_custom_allocator
 dEQP-VK.wsi.xcb.surface.create_simulate_oom
 dEQP-VK.wsi.xcb.surface.query_support
+dEQP-VK.wsi.xcb.surface.query_presentation_support
 dEQP-VK.wsi.xcb.surface.query_capabilities
 dEQP-VK.wsi.xcb.surface.query_capabilities2
 dEQP-VK.wsi.xcb.surface.query_protected_capabilities
@@ -427415,6 +427417,7 @@ dEQP-VK.wsi.wayland.surface.create
 dEQP-VK.wsi.wayland.surface.create_custom_allocator
 dEQP-VK.wsi.wayland.surface.create_simulate_oom
 dEQP-VK.wsi.wayland.surface.query_support
+dEQP-VK.wsi.wayland.surface.query_presentation_support
 dEQP-VK.wsi.wayland.surface.query_capabilities
 dEQP-VK.wsi.wayland.surface.query_capabilities2
 dEQP-VK.wsi.wayland.surface.query_protected_capabilities
@@ -427830,6 +427833,7 @@ dEQP-VK.wsi.android.surface.create
 dEQP-VK.wsi.android.surface.create_custom_allocator
 dEQP-VK.wsi.android.surface.create_simulate_oom
 dEQP-VK.wsi.android.surface.query_support
+dEQP-VK.wsi.android.surface.query_presentation_support
 dEQP-VK.wsi.android.surface.query_capabilities
 dEQP-VK.wsi.android.surface.query_capabilities2
 dEQP-VK.wsi.android.surface.query_protected_capabilities
@@ -428966,6 +428970,7 @@ dEQP-VK.wsi.win32.surface.create
 dEQP-VK.wsi.win32.surface.create_custom_allocator
 dEQP-VK.wsi.win32.surface.create_simulate_oom
 dEQP-VK.wsi.win32.surface.query_support
+dEQP-VK.wsi.win32.surface.query_presentation_support
 dEQP-VK.wsi.win32.surface.query_capabilities
 dEQP-VK.wsi.win32.surface.query_capabilities2
 dEQP-VK.wsi.win32.surface.query_protected_capabilities
@@ -429382,6 +429387,7 @@ dEQP-VK.wsi.macos.surface.create
 dEQP-VK.wsi.macos.surface.create_custom_allocator
 dEQP-VK.wsi.macos.surface.create_simulate_oom
 dEQP-VK.wsi.macos.surface.query_support
+dEQP-VK.wsi.macos.surface.query_presentation_support
 dEQP-VK.wsi.macos.surface.query_capabilities
 dEQP-VK.wsi.macos.surface.query_capabilities2
 dEQP-VK.wsi.macos.surface.query_protected_capabilities
index c2fcfd4..0c8eb7c 100644 (file)
@@ -426544,6 +426544,7 @@ dEQP-VK.wsi.xlib.surface.create
 dEQP-VK.wsi.xlib.surface.create_custom_allocator
 dEQP-VK.wsi.xlib.surface.create_simulate_oom
 dEQP-VK.wsi.xlib.surface.query_support
+dEQP-VK.wsi.xlib.surface.query_presentation_support
 dEQP-VK.wsi.xlib.surface.query_capabilities
 dEQP-VK.wsi.xlib.surface.query_capabilities2
 dEQP-VK.wsi.xlib.surface.query_protected_capabilities
@@ -426960,6 +426961,7 @@ dEQP-VK.wsi.xcb.surface.create
 dEQP-VK.wsi.xcb.surface.create_custom_allocator
 dEQP-VK.wsi.xcb.surface.create_simulate_oom
 dEQP-VK.wsi.xcb.surface.query_support
+dEQP-VK.wsi.xcb.surface.query_presentation_support
 dEQP-VK.wsi.xcb.surface.query_capabilities
 dEQP-VK.wsi.xcb.surface.query_capabilities2
 dEQP-VK.wsi.xcb.surface.query_protected_capabilities
@@ -427376,6 +427378,7 @@ dEQP-VK.wsi.wayland.surface.create
 dEQP-VK.wsi.wayland.surface.create_custom_allocator
 dEQP-VK.wsi.wayland.surface.create_simulate_oom
 dEQP-VK.wsi.wayland.surface.query_support
+dEQP-VK.wsi.wayland.surface.query_presentation_support
 dEQP-VK.wsi.wayland.surface.query_capabilities
 dEQP-VK.wsi.wayland.surface.query_capabilities2
 dEQP-VK.wsi.wayland.surface.query_protected_capabilities
@@ -427791,6 +427794,7 @@ dEQP-VK.wsi.android.surface.create
 dEQP-VK.wsi.android.surface.create_custom_allocator
 dEQP-VK.wsi.android.surface.create_simulate_oom
 dEQP-VK.wsi.android.surface.query_support
+dEQP-VK.wsi.android.surface.query_presentation_support
 dEQP-VK.wsi.android.surface.query_capabilities
 dEQP-VK.wsi.android.surface.query_capabilities2
 dEQP-VK.wsi.android.surface.query_protected_capabilities
@@ -428927,6 +428931,7 @@ dEQP-VK.wsi.win32.surface.create
 dEQP-VK.wsi.win32.surface.create_custom_allocator
 dEQP-VK.wsi.win32.surface.create_simulate_oom
 dEQP-VK.wsi.win32.surface.query_support
+dEQP-VK.wsi.win32.surface.query_presentation_support
 dEQP-VK.wsi.win32.surface.query_capabilities
 dEQP-VK.wsi.win32.surface.query_capabilities2
 dEQP-VK.wsi.win32.surface.query_protected_capabilities
@@ -429343,6 +429348,7 @@ dEQP-VK.wsi.macos.surface.create
 dEQP-VK.wsi.macos.surface.create_custom_allocator
 dEQP-VK.wsi.macos.surface.create_simulate_oom
 dEQP-VK.wsi.macos.surface.query_support
+dEQP-VK.wsi.macos.surface.query_presentation_support
 dEQP-VK.wsi.macos.surface.query_capabilities
 dEQP-VK.wsi.macos.surface.query_capabilities2
 dEQP-VK.wsi.macos.surface.query_protected_capabilities