From cf0268d40bbe5cf9be97d64bc4f90661705ac91f Mon Sep 17 00:00:00 2001 From: Egor Date: Sun, 27 Oct 2019 17:46:48 -0700 Subject: LinuxApp: attempting to initialize in OpenGL mode if Vulkan fails --- Common/NativeApp/include/Linux/LinuxAppBase.h | 2 +- Common/NativeApp/src/Linux/LinuxMain.cpp | 13 +++++++++++-- DiligentSamples | 2 +- Tests/TestApp/src/Linux/TestAppLinux.cpp | 3 ++- unityplugin/UnityEmulator/src/Linux/UnityAppLinux.cpp | 3 ++- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Common/NativeApp/include/Linux/LinuxAppBase.h b/Common/NativeApp/include/Linux/LinuxAppBase.h index 83065d1..e4c6a3e 100644 --- a/Common/NativeApp/include/Linux/LinuxAppBase.h +++ b/Common/NativeApp/include/Linux/LinuxAppBase.h @@ -54,7 +54,7 @@ public: virtual int HandleXEvent(XEvent* xev){} #if VULKAN_SUPPORTED - virtual void InitVulkan(xcb_connection_t* connection, uint32_t window) = 0; + virtual bool InitVulkan(xcb_connection_t* connection, uint32_t window) = 0; virtual void HandleXCBEvent(xcb_generic_event_t* event){} #endif }; diff --git a/Common/NativeApp/src/Linux/LinuxMain.cpp b/Common/NativeApp/src/Linux/LinuxMain.cpp index 93a3235..fc26c8a 100644 --- a/Common/NativeApp/src/Linux/LinuxMain.cpp +++ b/Common/NativeApp/src/Linux/LinuxMain.cpp @@ -214,7 +214,8 @@ int xcb_main() std::string Title = TheApp->GetAppTitle(); auto xcbInfo = InitXCBConnectionAndWindow(Title); - TheApp->InitVulkan(xcbInfo.connection, xcbInfo.window); + if(!TheApp->InitVulkan(xcbInfo.connection, xcbInfo.window)) + return -1; xcb_flush(xcbInfo.connection); @@ -509,7 +510,15 @@ int main (int argc, char ** argv) if (UseVulkan) { - return xcb_main(); + auto ret = xcb_main(); + if (ret >= 0) + { + return ret; + } + else + { + LOG_ERROR_MESSAGE("Failed to initialize the engine in Vulkan mode. Attempting to use OpenGL"); + } } #endif diff --git a/DiligentSamples b/DiligentSamples index b2e2918..ba5d6e2 160000 --- a/DiligentSamples +++ b/DiligentSamples @@ -1 +1 @@ -Subproject commit b2e2918145f853ea8be092688dcabbeb4f2377d4 +Subproject commit ba5d6e2c4846c88fb5090ac6b4fceabb720cfabf diff --git a/Tests/TestApp/src/Linux/TestAppLinux.cpp b/Tests/TestApp/src/Linux/TestAppLinux.cpp index 9ce02b9..54abfa8 100644 --- a/Tests/TestApp/src/Linux/TestAppLinux.cpp +++ b/Tests/TestApp/src/Linux/TestAppLinux.cpp @@ -41,7 +41,7 @@ public: } #if VULKAN_SUPPORTED - virtual void InitVulkan(xcb_connection_t* connection, uint32_t window)override final + virtual bool InitVulkan(xcb_connection_t* connection, uint32_t window)override final { m_DeviceType = DeviceType::Vulkan; struct XCBInfo @@ -51,6 +51,7 @@ public: }xcbInfo = {connection, window}; InitializeDiligentEngine(nullptr, &xcbInfo); InitializeRenderers(); + return true; } #endif }; diff --git a/unityplugin/UnityEmulator/src/Linux/UnityAppLinux.cpp b/unityplugin/UnityEmulator/src/Linux/UnityAppLinux.cpp index 8176440..83ce859 100644 --- a/unityplugin/UnityEmulator/src/Linux/UnityAppLinux.cpp +++ b/unityplugin/UnityEmulator/src/Linux/UnityAppLinux.cpp @@ -40,9 +40,10 @@ public: InitScene(); } #if VULKAN_SUPPORTED - virtual void InitVulkan(xcb_connection_t* connection, uint32_t window)override final + virtual bool InitVulkan(xcb_connection_t* connection, uint32_t window)override final { UNSUPPORTED("Vulkan is not supported for this application"); + return false; } #endif }; -- cgit v1.2.3