From 8238af0aa1041ebadb9c3750f5f4e8685134acb2 Mon Sep 17 00:00:00 2001 From: ygole Date: Tue, 15 Jan 2019 19:19:31 +0530 Subject: [PATCH] Check if CTS has platform display for wsi-type Vulkan driver can expose multiple VK_KHR_{platform}_surface extensions and it's app responsibility to create platform display then create the surface and pass it to vkCreate{platform}SurfaceKHR. But if CTS does not have display for requested wsi type and extension is exposed, CTS reports it as failure. To fix this, if function createWsiDisplay fails then check whether CTS has platform display available for requested wsi-type and if it does then only report this as failure otherwise report it as unsupported. Affects: dEQP-VK.wsi.* Components: Vulkan, Framework VK-GL-CTS issue: 1558 Change-Id: I41aabc2e77cfc6e730b5a95dde746d8ea8152d2b (cherry picked from commit b7efacd7b320d2b2c3b8b75cf98c9979b5a29fe9) --- .../vulkancts/framework/vulkan/vkPlatform.cpp | 5 ++++ .../vulkancts/framework/vulkan/vkPlatform.hpp | 1 + .../vktProtectedMemWsiSwapchainTests.cpp | 3 +- .../vulkan/wsi/vktWsiColorSpaceTests.cpp | 3 +- .../vulkan/wsi/vktWsiDisplayTimingTests.cpp | 3 +- .../wsi/vktWsiIncrementalPresentTests.cpp | 3 +- .../wsi/vktWsiSharedPresentableImageTests.cpp | 3 +- .../modules/vulkan/wsi/vktWsiSurfaceTests.cpp | 3 +- .../vulkan/wsi/vktWsiSwapchainTests.cpp | 3 +- .../platform/android/tcuAndroidPlatform.cpp | 8 ++++++ .../platform/android/tcuAndroidPlatform.hpp | 1 + framework/platform/lnx/X11/tcuLnxX11.cpp | 18 ++++++++++++ framework/platform/lnx/X11/tcuLnxX11.hpp | 10 +++++++ framework/platform/lnx/X11/tcuLnxX11Xcb.cpp | 17 +++++++++++ framework/platform/lnx/X11/tcuLnxX11Xcb.hpp | 2 ++ .../platform/lnx/tcuLnxVulkanPlatform.cpp | 28 +++++++++++++++++-- .../platform/lnx/tcuLnxVulkanPlatform.hpp | 1 + .../platform/lnx/wayland/tcuLnxWayland.cpp | 17 +++++++++++ .../platform/lnx/wayland/tcuLnxWayland.hpp | 9 ++++++ .../platform/osx/tcuOSXVulkanPlatform.cpp | 7 +++++ .../platform/osx/tcuOSXVulkanPlatform.hpp | 1 + .../platform/win32/tcuWin32VulkanPlatform.cpp | 8 ++++++ .../platform/win32/tcuWin32VulkanPlatform.hpp | 1 + 23 files changed, 145 insertions(+), 10 deletions(-) diff --git a/external/vulkancts/framework/vulkan/vkPlatform.cpp b/external/vulkancts/framework/vulkan/vkPlatform.cpp index 8ceb805ac..d2266f45a 100644 --- a/external/vulkancts/framework/vulkan/vkPlatform.cpp +++ b/external/vulkancts/framework/vulkan/vkPlatform.cpp @@ -78,6 +78,11 @@ wsi::Display* Platform::createWsiDisplay (wsi::Type) const TCU_THROW(NotSupportedError, "WSI not supported"); } +bool Platform::hasDisplay (wsi::Type) const +{ + return false; +} + void Platform::describePlatform (std::ostream& dst) const { dst << "vk::Platform::describePlatform() not implemented"; diff --git a/external/vulkancts/framework/vulkan/vkPlatform.hpp b/external/vulkancts/framework/vulkan/vkPlatform.hpp index 40159a734..1ec1f26af 100644 --- a/external/vulkancts/framework/vulkan/vkPlatform.hpp +++ b/external/vulkancts/framework/vulkan/vkPlatform.hpp @@ -141,6 +141,7 @@ public: virtual Library* createLibrary (void) const = 0; virtual wsi::Display* createWsiDisplay (wsi::Type wsiType) const; + virtual bool hasDisplay (wsi::Type wsiType) const; virtual void getMemoryLimits (PlatformMemoryLimits& limits) const = 0; virtual void describePlatform (std::ostream& dst) const; diff --git a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp index 509851f4d..b53979f62 100644 --- a/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp +++ b/external/vulkancts/modules/vulkan/protected_memory/vktProtectedMemWsiSwapchainTests.cpp @@ -115,7 +115,8 @@ de::MovePtr createDisplay (const vk::Platform& platform, } catch (const tcu::NotSupportedError& e) { - if (isExtensionSupported(supportedExtensions, vk::RequiredExtension(getExtensionName(wsiType)))) + if (isExtensionSupported(supportedExtensions, vk::RequiredExtension(getExtensionName(wsiType))) && + platform.hasDisplay(wsiType)) { // If VK_KHR_{platform}_surface was supported, vk::Platform implementation // must support creating native display & window for that WSI type. diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp index ca87f6166..d2f65cc13 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiColorSpaceTests.cpp @@ -261,7 +261,8 @@ MovePtr createDisplay (const vk::Platform& platform, } catch (const tcu::NotSupportedError& e) { - if (isExtensionSupported(supportedExtensions, RequiredExtension(getExtensionName(wsiType)))) + if (isExtensionSupported(supportedExtensions, RequiredExtension(getExtensionName(wsiType))) && + platform.hasDisplay(wsiType)) { // If VK_KHR_{platform}_surface was supported, vk::Platform implementation // must support creating native display & window for that WSI type. diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTimingTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTimingTests.cpp index 2a6045c20..f67a818f2 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTimingTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTimingTests.cpp @@ -192,7 +192,8 @@ de::MovePtr createDisplay (const vk::Platform& platform, } catch (const tcu::NotSupportedError& e) { - if (isExtensionSupported(supportedExtensions, vk::RequiredExtension(getExtensionName(wsiType)))) + if (isExtensionSupported(supportedExtensions, vk::RequiredExtension(getExtensionName(wsiType))) && + platform.hasDisplay(wsiType)) { // If VK_KHR_{platform}_surface was supported, vk::Platform implementation // must support creating native display & window for that WSI type. diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiIncrementalPresentTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiIncrementalPresentTests.cpp index c3675540f..9b851b208 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiIncrementalPresentTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiIncrementalPresentTests.cpp @@ -194,7 +194,8 @@ de::MovePtr createDisplay (const vk::Platform& platform, } catch (const tcu::NotSupportedError& e) { - if (isExtensionSupported(supportedExtensions, vk::RequiredExtension(getExtensionName(wsiType)))) + if (isExtensionSupported(supportedExtensions, vk::RequiredExtension(getExtensionName(wsiType))) && + platform.hasDisplay(wsiType)) { // If VK_KHR_{platform}_surface was supported, vk::Platform implementation // must support creating native display & window for that WSI type. diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiSharedPresentableImageTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiSharedPresentableImageTests.cpp index cf1eb7dd9..bc7c3de4b 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiSharedPresentableImageTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiSharedPresentableImageTests.cpp @@ -200,7 +200,8 @@ de::MovePtr createDisplay (const vk::Platform& platform, } catch (const tcu::NotSupportedError& e) { - if (isExtensionSupported(supportedExtensions, vk::RequiredExtension(getExtensionName(wsiType)))) + if (isExtensionSupported(supportedExtensions, vk::RequiredExtension(getExtensionName(wsiType))) && + platform.hasDisplay(wsiType)) { // If VK_KHR_{platform}_surface was supported, vk::Platform implementation // must support creating native display & window for that WSI type. diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp index d97857311..aab4da21b 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiSurfaceTests.cpp @@ -238,7 +238,8 @@ MovePtr createDisplay (const vk::Platform& platform, } catch (const tcu::NotSupportedError& e) { - if (isExtensionSupported(supportedExtensions, RequiredExtension(getExtensionName(wsiType)))) + if (isExtensionSupported(supportedExtensions, RequiredExtension(getExtensionName(wsiType))) && + platform.hasDisplay(wsiType)) { // If VK_KHR_{platform}_surface was supported, vk::Platform implementation // must support creating native display & window for that WSI type. diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp index 951aa2577..cb5fe91d9 100644 --- a/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp +++ b/external/vulkancts/modules/vulkan/wsi/vktWsiSwapchainTests.cpp @@ -258,7 +258,8 @@ MovePtr createDisplay (const vk::Platform& platform, } catch (const tcu::NotSupportedError& e) { - if (isExtensionSupported(supportedExtensions, RequiredExtension(getExtensionName(wsiType)))) + if (isExtensionSupported(supportedExtensions, RequiredExtension(getExtensionName(wsiType))) && + platform.hasDisplay(wsiType)) { // If VK_KHR_{platform}_surface was supported, vk::Platform implementation // must support creating native display & window for that WSI type. diff --git a/framework/platform/android/tcuAndroidPlatform.cpp b/framework/platform/android/tcuAndroidPlatform.cpp index 2aa092061..8556bb058 100644 --- a/framework/platform/android/tcuAndroidPlatform.cpp +++ b/framework/platform/android/tcuAndroidPlatform.cpp @@ -347,5 +347,13 @@ vk::wsi::Display* Platform::createWsiDisplay (vk::wsi::Type wsiType) const TCU_THROW(NotSupportedError, "WSI type not supported on Android"); } +bool Platform::hasDisplay (vk::wsi::Type wsiType) const +{ + if (wsiType == vk::wsi::TYPE_ANDROID) + return true; + + return false; +} + } // Android } // tcu diff --git a/framework/platform/android/tcuAndroidPlatform.hpp b/framework/platform/android/tcuAndroidPlatform.hpp index 179877727..a10cef862 100644 --- a/framework/platform/android/tcuAndroidPlatform.hpp +++ b/framework/platform/android/tcuAndroidPlatform.hpp @@ -55,6 +55,7 @@ public: void describePlatform (std::ostream& dst) const; void getMemoryLimits (vk::PlatformMemoryLimits& limits) const; vk::wsi::Display* createWsiDisplay (vk::wsi::Type wsiType) const; + bool hasDisplay (vk::wsi::Type wsiType) const; private: NativeActivity& m_activity; diff --git a/framework/platform/lnx/X11/tcuLnxX11.cpp b/framework/platform/lnx/X11/tcuLnxX11.cpp index 1a608600f..7f2fe59b8 100644 --- a/framework/platform/lnx/X11/tcuLnxX11.cpp +++ b/framework/platform/lnx/X11/tcuLnxX11.cpp @@ -52,6 +52,24 @@ WindowBase::~WindowBase (void) { } +XlibDisplay::DisplayState XlibDisplay::s_displayState = XlibDisplay::DISPLAY_STATE_UNKNOWN; + +bool XlibDisplay::hasDisplay (const char* name) +{ + if (s_displayState == DISPLAY_STATE_UNKNOWN) + { + XInitThreads(); + Display *display = XOpenDisplay((char*)name); + if (display) + { + s_displayState = DISPLAY_STATE_AVAILABLE; + XCloseDisplay(display); + } else + s_displayState = DISPLAY_STATE_UNAVAILABLE; + } + return s_displayState == DISPLAY_STATE_AVAILABLE ? true : false; +} + XlibDisplay::XlibDisplay (EventState& eventState, const char* name) : DisplayBase (eventState) { diff --git a/framework/platform/lnx/X11/tcuLnxX11.hpp b/framework/platform/lnx/X11/tcuLnxX11.hpp index 10d7fc0dd..b6abe1b7e 100644 --- a/framework/platform/lnx/X11/tcuLnxX11.hpp +++ b/framework/platform/lnx/X11/tcuLnxX11.hpp @@ -47,6 +47,13 @@ public: virtual ~DisplayBase (void); virtual void processEvents (void) = 0; + enum DisplayState + { + DISPLAY_STATE_UNKNOWN = -1, + DISPLAY_STATE_UNAVAILABLE, + DISPLAY_STATE_AVAILABLE + }; + protected: EventState& m_eventState; @@ -90,6 +97,9 @@ public: bool getVisualInfo (VisualID visualID, XVisualInfo& dst); void processEvents (void); void processEvent (XEvent& event); + static bool hasDisplay (const char* name); + + static DisplayState s_displayState; protected: ::Display* m_display; diff --git a/framework/platform/lnx/X11/tcuLnxX11Xcb.cpp b/framework/platform/lnx/X11/tcuLnxX11Xcb.cpp index de87b0cae..2820cbc2a 100644 --- a/framework/platform/lnx/X11/tcuLnxX11Xcb.cpp +++ b/framework/platform/lnx/X11/tcuLnxX11Xcb.cpp @@ -31,6 +31,23 @@ namespace lnx namespace x11 { +XcbDisplay::DisplayState XcbDisplay::s_displayState = XcbDisplay::DISPLAY_STATE_UNKNOWN; + +bool XcbDisplay::hasDisplay (const char* name) +{ + if (s_displayState == DISPLAY_STATE_UNKNOWN) + { + xcb_connection_t *connection = xcb_connect(name, NULL); + if (connection) + { + s_displayState = DISPLAY_STATE_AVAILABLE; + xcb_disconnect(connection); + } else + s_displayState = DISPLAY_STATE_UNAVAILABLE; + } + return s_displayState == DISPLAY_STATE_AVAILABLE ? true : false; +} + XcbDisplay::XcbDisplay (EventState& platform, const char* name) : DisplayBase (platform) { diff --git a/framework/platform/lnx/X11/tcuLnxX11Xcb.hpp b/framework/platform/lnx/X11/tcuLnxX11Xcb.hpp index c00c4137b..0d5472ff9 100644 --- a/framework/platform/lnx/X11/tcuLnxX11Xcb.hpp +++ b/framework/platform/lnx/X11/tcuLnxX11Xcb.hpp @@ -43,7 +43,9 @@ public: xcb_connection_t* getConnection (void) { return m_connection; } void processEvents (void); + static bool hasDisplay (const char* name); + static DisplayState s_displayState; protected: xcb_screen_t* m_screen; xcb_connection_t* m_connection; diff --git a/framework/platform/lnx/tcuLnxVulkanPlatform.cpp b/framework/platform/lnx/tcuLnxVulkanPlatform.cpp index 642af34e8..b933dadb6 100644 --- a/framework/platform/lnx/tcuLnxVulkanPlatform.cpp +++ b/framework/platform/lnx/tcuLnxVulkanPlatform.cpp @@ -40,10 +40,12 @@ using de::UniquePtr; # if defined (DEQP_SUPPORT_XCB) # include "tcuLnxX11Xcb.hpp" # endif // DEQP_SUPPORT_XCB +# define X11_DISPLAY "" #endif // DEQP_SUPPORT_X11 #if defined (DEQP_SUPPORT_WAYLAND) # include "tcuLnxWayland.hpp" +# define WAYLAND_DISPLAY DE_NULL #endif // DEQP_SUPPORT_WAYLAND namespace tcu @@ -211,17 +213,17 @@ vk::wsi::Display* VulkanPlatform::createWsiDisplay (vk::wsi::Type wsiType) const { #if defined (DEQP_SUPPORT_X11) case vk::wsi::TYPE_XLIB: - return new VulkanDisplayXlib(MovePtr(new x11::XlibDisplay(m_eventState,""))); + return new VulkanDisplayXlib(MovePtr(new x11::XlibDisplay(m_eventState,X11_DISPLAY))); break; #endif // DEQP_SUPPORT_X11 #if defined (DEQP_SUPPORT_XCB) case vk::wsi::TYPE_XCB: - return new VulkanDisplayXcb(MovePtr(new x11::XcbDisplay(m_eventState,""))); + return new VulkanDisplayXcb(MovePtr(new x11::XcbDisplay(m_eventState,X11_DISPLAY))); break; #endif // DEQP_SUPPORT_XCB #if defined (DEQP_SUPPORT_WAYLAND) case vk::wsi::TYPE_WAYLAND: - return new VulkanDisplayWayland(MovePtr(new wayland::Display(m_eventState, DE_NULL))); + return new VulkanDisplayWayland(MovePtr(new wayland::Display(m_eventState, WAYLAND_DISPLAY))); break; #endif // DEQP_SUPPORT_WAYLAND @@ -230,7 +232,27 @@ vk::wsi::Display* VulkanPlatform::createWsiDisplay (vk::wsi::Type wsiType) const }; } +bool VulkanPlatform::hasDisplay (vk::wsi::Type wsiType) const +{ + switch(wsiType) + { +#if defined (DEQP_SUPPORT_X11) + case vk::wsi::TYPE_XLIB: + return x11::XlibDisplay::hasDisplay(X11_DISPLAY); +#endif // DEQP_SUPPORT_X11 +#if defined (DEQP_SUPPORT_XCB) + case vk::wsi::TYPE_XCB: + return x11::XcbDisplay::hasDisplay(X11_DISPLAY); +#endif // DEQP_SUPPORT_XCB +#if defined (DEQP_SUPPORT_WAYLAND) + case vk::wsi::TYPE_WAYLAND: + return wayland::Display::hasDisplay(WAYLAND_DISPLAY); +#endif // DEQP_SUPPORT_WAYLAND + default: + return false; + }; +} vk::Library* VulkanPlatform::createLibrary (void) const { return new VulkanLibrary(); diff --git a/framework/platform/lnx/tcuLnxVulkanPlatform.hpp b/framework/platform/lnx/tcuLnxVulkanPlatform.hpp index b025f55b2..6d4c2e942 100644 --- a/framework/platform/lnx/tcuLnxVulkanPlatform.hpp +++ b/framework/platform/lnx/tcuLnxVulkanPlatform.hpp @@ -39,6 +39,7 @@ public: VulkanPlatform (EventState& eventState); vk::wsi::Display* createWsiDisplay (vk::wsi::Type wsiType) const; vk::Library* createLibrary (void) const; + bool hasDisplay (vk::wsi::Type wsiType) const; void describePlatform (std::ostream& dst) const; void getMemoryLimits (vk::PlatformMemoryLimits& limits) const; diff --git a/framework/platform/lnx/wayland/tcuLnxWayland.cpp b/framework/platform/lnx/wayland/tcuLnxWayland.cpp index 6d1254351..bea6835f8 100644 --- a/framework/platform/lnx/wayland/tcuLnxWayland.cpp +++ b/framework/platform/lnx/wayland/tcuLnxWayland.cpp @@ -42,6 +42,8 @@ const struct wl_registry_listener Display::s_registryListener = Display::handleGlobalRemove }; +Display::DisplayState Display::s_displayState = Display::DISPLAY_STATE_UNKNOWN; + const struct wl_shell_surface_listener Window::s_shellSurfaceListener = { Window::handlePing, @@ -68,6 +70,21 @@ void Display::handleGlobalRemove (void* data, struct wl_registry* registry, uint DE_UNREF(name); } +bool Display::hasDisplay (const char* name) +{ + if (s_displayState == DISPLAY_STATE_UNKNOWN) + { + struct wl_display *display = wl_display_connect(name); + if (display) + { + s_displayState = DISPLAY_STATE_AVAILABLE; + wl_display_disconnect(display); + } else + s_displayState = DISPLAY_STATE_UNAVAILABLE; + } + return s_displayState == DISPLAY_STATE_AVAILABLE ? true : false; +} + Display::Display (EventState& eventState, const char* name) : m_eventState (eventState) , m_display (DE_NULL) diff --git a/framework/platform/lnx/wayland/tcuLnxWayland.hpp b/framework/platform/lnx/wayland/tcuLnxWayland.hpp index b5d1f9e84..b7c540a81 100644 --- a/framework/platform/lnx/wayland/tcuLnxWayland.hpp +++ b/framework/platform/lnx/wayland/tcuLnxWayland.hpp @@ -51,6 +51,15 @@ public: struct wl_shell* getShell (void) { return m_shell; } void processEvents (void); + static bool hasDisplay (const char* name); + + enum DisplayState + { + DISPLAY_STATE_UNKNOWN = -1, + DISPLAY_STATE_UNAVAILABLE, + DISPLAY_STATE_AVAILABLE + }; + static DisplayState s_displayState; protected: EventState& m_eventState; diff --git a/framework/platform/osx/tcuOSXVulkanPlatform.cpp b/framework/platform/osx/tcuOSXVulkanPlatform.cpp index b1fde87cc..61822dd3f 100644 --- a/framework/platform/osx/tcuOSXVulkanPlatform.cpp +++ b/framework/platform/osx/tcuOSXVulkanPlatform.cpp @@ -108,6 +108,13 @@ vk::wsi::Display* VulkanPlatform::createWsiDisplay (vk::wsi::Type wsiType) const return new VulkanDisplay(); } +bool VulkanPlatform::hasDisplay (vk::wsi::Type wsiType) const +{ + if (wsiType != vk::wsi::TYPE_MACOS) + return false; + + return true; +} vk::Library* VulkanPlatform::createLibrary (void) const { return new VulkanLibrary(); diff --git a/framework/platform/osx/tcuOSXVulkanPlatform.hpp b/framework/platform/osx/tcuOSXVulkanPlatform.hpp index f28842560..5044d5b6c 100644 --- a/framework/platform/osx/tcuOSXVulkanPlatform.hpp +++ b/framework/platform/osx/tcuOSXVulkanPlatform.hpp @@ -38,6 +38,7 @@ public: VulkanPlatform (); vk::wsi::Display* createWsiDisplay (vk::wsi::Type wsiType) const; vk::Library* createLibrary (void) const; + bool hasDisplay (vk::wsi::Type wsiType) const; void describePlatform (std::ostream& dst) const; void getMemoryLimits (vk::PlatformMemoryLimits& limits) const; }; diff --git a/framework/platform/win32/tcuWin32VulkanPlatform.cpp b/framework/platform/win32/tcuWin32VulkanPlatform.cpp index 78edfac76..a72a36eac 100644 --- a/framework/platform/win32/tcuWin32VulkanPlatform.cpp +++ b/framework/platform/win32/tcuWin32VulkanPlatform.cpp @@ -294,5 +294,13 @@ vk::wsi::Display* VulkanPlatform::createWsiDisplay (vk::wsi::Type wsiType) const return new VulkanDisplay(m_instance); } +bool VulkanPlatform::hasDisplay (vk::wsi::Type wsiType) const +{ + if (wsiType != vk::wsi::TYPE_WIN32) + return false; + + return true; +} + } // win32 } // tcu diff --git a/framework/platform/win32/tcuWin32VulkanPlatform.hpp b/framework/platform/win32/tcuWin32VulkanPlatform.hpp index 26d9fb437..4fb7f8156 100644 --- a/framework/platform/win32/tcuWin32VulkanPlatform.hpp +++ b/framework/platform/win32/tcuWin32VulkanPlatform.hpp @@ -40,6 +40,7 @@ public: vk::Library* createLibrary (void) const; vk::wsi::Display* createWsiDisplay (vk::wsi::Type wsiType) const; + bool hasDisplay (vk::wsi::Type wsiType) const; void getMemoryLimits (vk::PlatformMemoryLimits& limits) const; void describePlatform (std::ostream& dst) const; -- 2.34.1