Merge pull request #12770 from unknownbrackets/gpu-failed

Windows: Show a message when failing over backend
This commit is contained in:
Henrik Rydgård authored and GitHub committed 2020-03-28 14:28:42 +01:00
commit 2a44d3f797
3 files changed
+23 -2

No files matched your search

+5 -2
View File
@@ -402,8 +402,11 @@ static void CheckFailedGPUBackends() {
// Okay, let's not try a backend in the failed list.
g_Config.iGPUBackend = g_Config.NextValidBackend();
if (lastBackend != g_Config.iGPUBackend)
WARN_LOG(LOADER, "Failed graphics backend switched from %d to %d", lastBackend, g_Config.iGPUBackend);
if (lastBackend != g_Config.iGPUBackend) {
std::string param = GPUBackendToString((GPUBackend)lastBackend) + " -> " + GPUBackendToString((GPUBackend)g_Config.iGPUBackend);
System_SendMessage("graphics_failedBackend", param.c_str());
WARN_LOG(LOADER, "Failed graphics backend switched from %s (%d to %d)", param.c_str(), lastBackend, g_Config.iGPUBackend);
}
// And then let's - for now - add the current to the failed list.
if (g_Config.sFailedGPUBackends.empty()) {
g_Config.sFailedGPUBackends = GPUBackendToString((GPUBackend)g_Config.iGPUBackend);
+12
View File
@@ -132,6 +132,18 @@ void MainThreadFunc() {
bool performingRestart = NativeIsRestarting();
NativeInit(static_cast<int>(args.size()), &args[0], "1234", "1234", nullptr);
if (g_Config.iGPUBackend == (int)GPUBackend::OPENGL) {
if (!useEmuThread) {
// Okay, we must've switched to OpenGL. Let's flip the emu thread on.
useEmuThread = true;
setCurrentThreadName("Render");
}
} else if (useEmuThread) {
// We must've failed over from OpenGL, flip the emu thread off.
useEmuThread = false;
setCurrentThreadName("Emu");
}
if (g_Config.sFailedGPUBackends.find("ALL") != std::string::npos) {
Reporting::ReportMessage("Graphics init error: %s", "ALL");
+6
View File
@@ -284,6 +284,12 @@ void System_SendMessage(const char *command, const char *parameter) {
g_Config.bRestartRequired = true;
PostMessage(MainWindow::GetHWND(), WM_CLOSE, 0, 0);
}
} else if (!strcmp(command, "graphics_failedBackend")) {
auto err = GetI18NCategory("Error");
const char *backendSwitchError = err->T("GenericBackendSwitchError", "PPSSPP crashed while initializing graphics. Try upgrading your graphics drivers.\n\nGraphics backend has been switched:");
std::wstring full_error = ConvertUTF8ToWString(StringFromFormat("%s %s", backendSwitchError, parameter));
std::wstring title = ConvertUTF8ToWString(err->T("GenericGraphicsError", "Graphics Error"));
MessageBox(MainWindow::GetHWND(), full_error.c_str(), title.c_str(), MB_OK);
} else if (!strcmp(command, "setclipboardtext")) {
if (OpenClipboard(MainWindow::GetDisplayHWND())) {
std::wstring data = ConvertUTF8ToWString(parameter);