From 500b01076e1a96b9c133ff663daad6f9dd8e4039 Mon Sep 17 00:00:00 2001 From: lat9nq Date: Sun, 29 May 2022 22:26:27 -0400 Subject: yuzu-qt: Make has_broken_vulkan only for crashes Being able to catch and handle a Vulkan exception is not what this is for. --- src/yuzu/check_vulkan.cpp | 8 +++++--- src/yuzu/check_vulkan.h | 5 +++++ src/yuzu/configuration/configure_graphics.cpp | 4 +--- src/yuzu/main.cpp | 10 +++++----- src/yuzu/uisettings.h | 1 + 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/yuzu/check_vulkan.cpp b/src/yuzu/check_vulkan.cpp index 1b21efe69..e6d66ab34 100644 --- a/src/yuzu/check_vulkan.cpp +++ b/src/yuzu/check_vulkan.cpp @@ -1,6 +1,8 @@ +// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + #include "video_core/vulkan_common/vulkan_wrapper.h" -#include #include #include #include "common/fs/fs.h" @@ -42,8 +44,8 @@ bool CheckVulkan() { } catch (const Vulkan::vk::Exception& exception) { LOG_ERROR(Frontend, "Failed to initialize Vulkan: {}", exception.what()); - UISettings::values.has_broken_vulkan = true; - return false; + // Don't set has_broken_vulkan to true here: we care when loading Vulkan crashes the + // application, not when we can handle it. } std::filesystem::remove(temp_file_loc); diff --git a/src/yuzu/check_vulkan.h b/src/yuzu/check_vulkan.h index 3b199d3bb..e4ea93582 100644 --- a/src/yuzu/check_vulkan.h +++ b/src/yuzu/check_vulkan.h @@ -1 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + bool CheckVulkan(); diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp index 482a6a8ab..70015a373 100644 --- a/src/yuzu/configuration/configure_graphics.cpp +++ b/src/yuzu/configuration/configure_graphics.cpp @@ -64,6 +64,7 @@ ConfigureGraphics::ConfigureGraphics(const Core::System& system_, QWidget* paren if (RetrieveVulkanDevices()) { ui->api->setEnabled(true); + ui->button_check_vulkan->hide(); for (const auto& device : vulkan_devices) { ui->device->addItem(device); @@ -356,9 +357,6 @@ bool ConfigureGraphics::RetrieveVulkanDevices() try { vulkan_devices.push_back(QString::fromStdString(name)); } - UISettings::values.has_broken_vulkan = false; - ui->button_check_vulkan->setVisible(false); - return true; } catch (const Vulkan::vk::Exception& exception) { LOG_ERROR(Frontend, "Failed to enumerate devices with error: {}", exception.what()); diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 71802cfc2..ff1afa56e 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -299,11 +299,7 @@ GMainWindow::GMainWindow() MigrateConfigFiles(); if (!CheckVulkan()) { - QMessageBox::warning( - this, tr("Broken Vulkan Installation Detected"), - tr("Vulkan initialization failed on the previous boot. Please update your graphics " - "driver, then re-check your Vulkan installation by accessing the Graphics " - "configuration and clicking \"Check for Working Vulkan\".")); + QMessageBox::warning(this, tr("Broken Vulkan Installation Detected"), tr("")); } if (UISettings::values.has_broken_vulkan) { Settings::values.renderer_backend = Settings::RendererBackend::OpenGL; @@ -2788,6 +2784,10 @@ void GMainWindow::OnConfigure() { mouse_hide_timer.start(); } + if (!UISettings::values.has_broken_vulkan) { + renderer_status_button->setEnabled(!emulation_running); + } + UpdateStatusButtons(); controller_dialog->refreshConfiguration(); } diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h index 653b76883..c64d87ace 100644 --- a/src/yuzu/uisettings.h +++ b/src/yuzu/uisettings.h @@ -77,6 +77,7 @@ struct Values { Settings::BasicSetting pause_when_in_background{false, "pauseWhenInBackground"}; Settings::BasicSetting mute_when_in_background{false, "muteWhenInBackground"}; Settings::BasicSetting hide_mouse{true, "hideInactiveMouse"}; + // Set when Vulkan is known to crash the application Settings::BasicSetting has_broken_vulkan{false, "has_broken_vulkan"}; Settings::BasicSetting select_user_on_boot{false, "select_user_on_boot"}; -- cgit v1.2.3