aboutsummaryrefslogtreecommitdiff
path: root/src/yuzu/configuration
diff options
context:
space:
mode:
authorxbzk <xbzk@eden-emu.dev>2026-06-27 02:52:13 +0200
committercrueter <crueter@eden-emu.dev>2026-06-27 02:52:13 +0200
commit09b6b3b71e74a47ae8b8ffe64b1803fc34bae6a2 (patch)
tree7949d8522bafb1565b98c3821db07c2b96867f89 /src/yuzu/configuration
parent629ebf1bdee023d3d3ecc96c3276cf3285f8f727 (diff)
xbzk/gpu-logging_qt-controls_android-fix (#4018)
5af7771f83-Bugfix: Made gpu_log_level global-only (was per-game switchable). Fixed Android non-determinism where a per-game profile silently overrode the global to Off and trapped GPULogger::Initialize() in a dead state, making shader dumps fail invisibly. Android per-game UI now hides the whole GPU logging block; Qt UI is untouched (global-only anyway). bf4aabe8ab-Refactor/Cleanup: Removed gpu_logging_enabled master toggle as redundant with gpu_log_level == Off. Introduced GPU::Logging::IsActive() helper, replaced 14 call sites across vk_*.cpp. Refactored LogShaderCompilation() to be text-only and extracted SPIR-V dumping into a standalone GPU::Logging::DumpSpirvShader() free function. No singleton dependency, gated only by gpu_log_shader_dumps. Now gpu_log_level and gpu_log_shader_dumps are fully orthogonal. Cleaned up Android (BooleanSetting, SettingsItem, presenter, 7 locale string files). 865a1c5027-Refactor: Renamed dump_shaders → dump_guest_shaders to disambiguate from gpu_log_shader_dumps. Updated Qt label to "Dump Guest (Maxwell) Shaders" and rewrote the tooltip to mention .ash, the DumpDir/shaders/ location, and nvdisasm. 7cab456fdf-Feature: Added Qt UI control for GPU log level in the Logging session. Added gpu_log_shader_dumps checkbox to the Graphics column right below dump_guest_shaders. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4018 Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Diffstat (limited to 'src/yuzu/configuration')
-rw-r--r--src/yuzu/configuration/configure_debug.cpp15
-rw-r--r--src/yuzu/configuration/configure_debug.ui205
2 files changed, 174 insertions, 46 deletions
diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp
index bc4ea5bd13..47abf66036 100644
--- a/src/yuzu/configuration/configure_debug.cpp
+++ b/src/yuzu/configuration/configure_debug.cpp
@@ -81,8 +81,8 @@ void ConfigureDebug::SetConfiguration() {
ui->enable_shader_feedback->setChecked(Settings::values.renderer_shader_feedback.GetValue());
ui->enable_nsight_aftermath->setEnabled(runtime_lock);
ui->enable_nsight_aftermath->setChecked(Settings::values.enable_nsight_aftermath.GetValue());
- ui->dump_shaders->setEnabled(runtime_lock);
- ui->dump_shaders->setChecked(Settings::values.dump_shaders.GetValue());
+ ui->dump_guest_shaders->setEnabled(runtime_lock);
+ ui->dump_guest_shaders->setChecked(Settings::values.dump_guest_shaders.GetValue());
ui->dump_macros->setEnabled(runtime_lock);
ui->dump_macros->setChecked(Settings::values.dump_macros.GetValue());
ui->disable_macro_jit->setEnabled(runtime_lock);
@@ -94,6 +94,12 @@ void ConfigureDebug::SetConfiguration() {
Settings::values.disable_shader_loop_safety_checks.GetValue());
ui->perform_vulkan_check->setChecked(Settings::values.perform_vulkan_check.GetValue());
ui->debug_knobs_spinbox->setValue(Settings::values.debug_knobs.GetValue());
+
+ ui->gpu_log_level->setEnabled(runtime_lock);
+ ui->gpu_log_level->setCurrentIndex(
+ static_cast<int>(Settings::values.gpu_log_level.GetValue()));
+ ui->gpu_log_shader_dumps->setEnabled(runtime_lock);
+ ui->gpu_log_shader_dumps->setChecked(Settings::values.gpu_log_shader_dumps.GetValue());
#ifdef YUZU_USE_QT_WEB_ENGINE
ui->disable_web_applet->setChecked(Settings::values.disable_web_applet.GetValue());
#else
@@ -123,7 +129,7 @@ void ConfigureDebug::ApplyConfiguration() {
Settings::values.disable_buffer_reorder = ui->disable_buffer_reorder->isChecked();
Settings::values.renderer_shader_feedback = ui->enable_shader_feedback->isChecked();
Settings::values.enable_nsight_aftermath = ui->enable_nsight_aftermath->isChecked();
- Settings::values.dump_shaders = ui->dump_shaders->isChecked();
+ Settings::values.dump_guest_shaders = ui->dump_guest_shaders->isChecked();
Settings::values.dump_macros = ui->dump_macros->isChecked();
Settings::values.disable_shader_loop_safety_checks =
ui->disable_loop_safety_checks->isChecked();
@@ -135,6 +141,9 @@ void ConfigureDebug::ApplyConfiguration() {
Settings::values.serial_battery = ui->serial_battery_edit->text().toUInt();
Settings::values.serial_unit = ui->serial_board_edit->text().toUInt();
Settings::values.debug_knobs = ui->debug_knobs_spinbox->value();
+ Settings::values.gpu_log_level =
+ static_cast<Settings::GpuLogLevel>(ui->gpu_log_level->currentIndex());
+ Settings::values.gpu_log_shader_dumps = ui->gpu_log_shader_dumps->isChecked();
Debugger::ToggleConsole();
Common::Log::Filter filter;
filter.ParseFilterString(Settings::values.log_filter.GetValue());
diff --git a/src/yuzu/configuration/configure_debug.ui b/src/yuzu/configuration/configure_debug.ui
index f76f3b012d..4e49c55f37 100644
--- a/src/yuzu/configuration/configure_debug.ui
+++ b/src/yuzu/configuration/configure_debug.ui
@@ -157,7 +157,7 @@
<string>Logging</string>
</property>
<layout class="QGridLayout" name="gridLayout_1">
- <item row="0" column="0" colspan="2">
+ <item row="0" column="0" colspan="4">
<widget class="QWidget" name="logging_widget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
@@ -197,7 +197,77 @@
</layout>
</widget>
</item>
- <item row="2" column="0">
+ <item row="1" column="0">
+ <widget class="QWidget" name="gpu_log_level_widget" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <layout class="QHBoxLayout" name="gpu_log_level_layout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="gpu_log_level_label">
+ <property name="text">
+ <string>GPU Logging/Level</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="gpu_log_level">
+ <property name="toolTip">
+ <string>Detail level for GPU logs. Off disables logging entirely.</string>
+ </property>
+ <item>
+ <property name="text">
+ <string>Off</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Errors</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Standard</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Verbose</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>All</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QCheckBox" name="toggle_console">
+ <property name="text">
+ <string>Show Log in Console</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
<widget class="QCheckBox" name="extended_logging">
<property name="enabled">
<bool>true</bool>
@@ -210,15 +280,20 @@
</property>
</widget>
</item>
- <item row="1" column="0">
- <widget class="QCheckBox" name="toggle_console">
- <property name="text">
- <string>Show Log in Console</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
+ <item row="1" column="3">
<widget class="QPushButton" name="open_log_button">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>250</width>
+ <height>0</height>
+ </size>
+ </property>
<property name="text">
<string>Open Log Location</string>
</property>
@@ -270,7 +345,7 @@
</property>
</widget>
</item>
- <item row="8" column="0">
+ <item row="9" column="0">
<widget class="QCheckBox" name="dump_macros">
<property name="enabled">
<bool>true</bool>
@@ -294,15 +369,15 @@
</widget>
</item>
<item row="6" column="0">
- <widget class="QCheckBox" name="dump_shaders">
+ <widget class="QCheckBox" name="dump_guest_shaders">
<property name="enabled">
<bool>true</bool>
</property>
<property name="toolTip">
- <string>When checked, it will dump all the original assembler shaders from the disk shader cache or game as found</string>
+ <string>When checked, it will dump original Maxwell guest shader bytecode (the input to the recompiler) as .ash files under DumpDir/shaders/. Useful for inspection with nvdisasm.</string>
</property>
<property name="text">
- <string>Dump Game Shaders</string>
+ <string>Dump Guest (Maxwell) Shaders</string>
</property>
</widget>
</item>
@@ -313,7 +388,7 @@
</property>
</widget>
</item>
- <item row="7" column="0">
+ <item row="8" column="0">
<widget class="QCheckBox" name="disable_macro_jit">
<property name="enabled">
<bool>true</bool>
@@ -326,7 +401,7 @@
</property>
</widget>
</item>
- <item row="9" column="0">
+ <item row="10" column="0">
<widget class="QCheckBox" name="disable_macro_hle">
<property name="enabled">
<bool>true</bool>
@@ -352,7 +427,7 @@
</property>
</widget>
</item>
- <item row="10" column="0">
+ <item row="11" column="0">
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
@@ -388,6 +463,16 @@
</property>
</widget>
</item>
+ <item row="7" column="0">
+ <widget class="QCheckBox" name="gpu_log_shader_dumps">
+ <property name="toolTip">
+ <string>When checked, it will dump the recompiler's output SPIR-V binaries (.spv) under LogDir/shaders/. Inspect via SPIRV-Tools (spirv-dis / spirv-cross / spirv-val) or RenderDoc.</string>
+ </property>
+ <property name="text">
+ <string>Dump SPIR-V Shaders</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
@@ -514,31 +599,65 @@
</layout>
</widget>
</item>
- <item row="8" column="0">
- <widget class="QSpinBox" name="debug_knobs_spinbox">
- <property name="minimum">
- <number>0</number>
- </property>
- <property name="maximum">
- <number>65535</number>
- </property>
- <property name="toolTip">
- <string>Bitmask for quick development toggles</string>
- </property>
- <property name="statusTip">
- <string>Set debug knobs (bitmask)</string>
- </property>
- <property name="whatsThis">
- <string>16-bit debug knob set for quick development toggles</string>
- </property>
- <property name="suffix">
- <string> (bitmask)</string>
- </property>
- <property name="prefix">
- <string>Debug Knobs: </string>
- </property>
- </widget>
- </item>
+ <item row="8" column="0">
+ <widget class="QWidget" name="debug_knobs_widget" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_debug_knobs">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label_debug_knobs">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Debug Knobs:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="debug_knobs_spinbox">
+ <property name="minimum">
+ <number>0</number>
+ </property>
+ <property name="maximum">
+ <number>65535</number>
+ </property>
+ <property name="toolTip">
+ <string>Bitmask for quick development toggles</string>
+ </property>
+ <property name="statusTip">
+ <string>Set debug knobs (bitmask)</string>
+ </property>
+ <property name="whatsThis">
+ <string>16-bit debug knob set for quick development toggles</string>
+ </property>
+ <property name="suffix">
+ <string> (bitmask)</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
<item row="7" column="0">
<widget class="QWidget" name="serial_board_widget" native="true">
<property name="sizePolicy">
@@ -579,7 +698,7 @@
</layout>
</widget>
</item>
- <item row="0" column="0">
+ <item row="20" column="0">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>