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
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
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})
#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
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)
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);
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);
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);
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
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
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
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
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
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
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
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
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
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
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
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