diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/settings.h | 2 | ||||
| -rw-r--r-- | src/core/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/core/core.cpp | 11 | ||||
| -rw-r--r-- | src/core/core.h | 6 | ||||
| -rw-r--r-- | src/core/tools/renderdoc.cpp | 55 | ||||
| -rw-r--r-- | src/core/tools/renderdoc.h | 22 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_debug.cpp | 3 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_debug.ui | 99 | ||||
| -rw-r--r-- | src/yuzu/hotkeys.h | 4 | ||||
| -rw-r--r-- | src/yuzu/main.cpp | 6 |
10 files changed, 165 insertions, 48 deletions
diff --git a/src/common/settings.h b/src/common/settings.h index b15213bd7..82ec9077e 100644 --- a/src/common/settings.h +++ b/src/common/settings.h | |||
| @@ -348,6 +348,8 @@ struct Values { | |||
| 348 | Category::RendererDebug}; | 348 | Category::RendererDebug}; |
| 349 | Setting<bool> disable_shader_loop_safety_checks{ | 349 | Setting<bool> disable_shader_loop_safety_checks{ |
| 350 | linkage, false, "disable_shader_loop_safety_checks", Category::RendererDebug}; | 350 | linkage, false, "disable_shader_loop_safety_checks", Category::RendererDebug}; |
| 351 | Setting<bool> enable_renderdoc_hotkey{linkage, false, "renderdoc_hotkey", | ||
| 352 | Category::RendererDebug}; | ||
| 351 | 353 | ||
| 352 | // System | 354 | // System |
| 353 | SwitchableSetting<Language, true> language_index{linkage, | 355 | SwitchableSetting<Language, true> language_index{linkage, |
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 6cd1a28f2..30d2f7df6 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -864,6 +864,8 @@ add_library(core STATIC | |||
| 864 | telemetry_session.h | 864 | telemetry_session.h |
| 865 | tools/freezer.cpp | 865 | tools/freezer.cpp |
| 866 | tools/freezer.h | 866 | tools/freezer.h |
| 867 | tools/renderdoc.cpp | ||
| 868 | tools/renderdoc.h | ||
| 867 | ) | 869 | ) |
| 868 | 870 | ||
| 869 | if (MSVC) | 871 | if (MSVC) |
| @@ -879,6 +881,7 @@ else() | |||
| 879 | -Werror=conversion | 881 | -Werror=conversion |
| 880 | 882 | ||
| 881 | -Wno-sign-conversion | 883 | -Wno-sign-conversion |
| 884 | -Wno-cast-function-type | ||
| 882 | 885 | ||
| 883 | $<$<CXX_COMPILER_ID:Clang>:-fsized-deallocation> | 886 | $<$<CXX_COMPILER_ID:Clang>:-fsized-deallocation> |
| 884 | ) | 887 | ) |
| @@ -887,7 +890,7 @@ endif() | |||
| 887 | create_target_directory_groups(core) | 890 | create_target_directory_groups(core) |
| 888 | 891 | ||
| 889 | target_link_libraries(core PUBLIC common PRIVATE audio_core network video_core nx_tzdb) | 892 | target_link_libraries(core PUBLIC common PRIVATE audio_core network video_core nx_tzdb) |
| 890 | target_link_libraries(core PUBLIC Boost::headers PRIVATE fmt::fmt nlohmann_json::nlohmann_json mbedtls Opus::opus) | 893 | target_link_libraries(core PUBLIC Boost::headers PRIVATE fmt::fmt nlohmann_json::nlohmann_json mbedtls Opus::opus renderdoc) |
| 891 | if (MINGW) | 894 | if (MINGW) |
| 892 | target_link_libraries(core PRIVATE ${MSWSOCK_LIBRARY}) | 895 | target_link_libraries(core PRIVATE ${MSWSOCK_LIBRARY}) |
| 893 | endif() | 896 | endif() |
diff --git a/src/core/core.cpp b/src/core/core.cpp index 2d6e61398..e8300cd05 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -51,6 +51,7 @@ | |||
| 51 | #include "core/reporter.h" | 51 | #include "core/reporter.h" |
| 52 | #include "core/telemetry_session.h" | 52 | #include "core/telemetry_session.h" |
| 53 | #include "core/tools/freezer.h" | 53 | #include "core/tools/freezer.h" |
| 54 | #include "core/tools/renderdoc.h" | ||
| 54 | #include "network/network.h" | 55 | #include "network/network.h" |
| 55 | #include "video_core/host1x/host1x.h" | 56 | #include "video_core/host1x/host1x.h" |
| 56 | #include "video_core/renderer_base.h" | 57 | #include "video_core/renderer_base.h" |
| @@ -281,6 +282,10 @@ struct System::Impl { | |||
| 281 | microprofile_cpu[2] = MICROPROFILE_TOKEN(ARM_CPU2); | 282 | microprofile_cpu[2] = MICROPROFILE_TOKEN(ARM_CPU2); |
| 282 | microprofile_cpu[3] = MICROPROFILE_TOKEN(ARM_CPU3); | 283 | microprofile_cpu[3] = MICROPROFILE_TOKEN(ARM_CPU3); |
| 283 | 284 | ||
| 285 | if (Settings::values.enable_renderdoc_hotkey) { | ||
| 286 | renderdoc_api = std::make_unique<Tools::RenderdocAPI>(); | ||
| 287 | } | ||
| 288 | |||
| 284 | LOG_DEBUG(Core, "Initialized OK"); | 289 | LOG_DEBUG(Core, "Initialized OK"); |
| 285 | 290 | ||
| 286 | return SystemResultStatus::Success; | 291 | return SystemResultStatus::Success; |
| @@ -521,6 +526,8 @@ struct System::Impl { | |||
| 521 | std::unique_ptr<Tools::Freezer> memory_freezer; | 526 | std::unique_ptr<Tools::Freezer> memory_freezer; |
| 522 | std::array<u8, 0x20> build_id{}; | 527 | std::array<u8, 0x20> build_id{}; |
| 523 | 528 | ||
| 529 | std::unique_ptr<Tools::RenderdocAPI> renderdoc_api; | ||
| 530 | |||
| 524 | /// Frontend applets | 531 | /// Frontend applets |
| 525 | Service::AM::Applets::AppletManager applet_manager; | 532 | Service::AM::Applets::AppletManager applet_manager; |
| 526 | 533 | ||
| @@ -1024,6 +1031,10 @@ const Network::RoomNetwork& System::GetRoomNetwork() const { | |||
| 1024 | return impl->room_network; | 1031 | return impl->room_network; |
| 1025 | } | 1032 | } |
| 1026 | 1033 | ||
| 1034 | Tools::RenderdocAPI& System::GetRenderdocAPI() { | ||
| 1035 | return *impl->renderdoc_api; | ||
| 1036 | } | ||
| 1037 | |||
| 1027 | void System::RunServer(std::unique_ptr<Service::ServerManager>&& server_manager) { | 1038 | void System::RunServer(std::unique_ptr<Service::ServerManager>&& server_manager) { |
| 1028 | return impl->kernel.RunServer(std::move(server_manager)); | 1039 | return impl->kernel.RunServer(std::move(server_manager)); |
| 1029 | } | 1040 | } |
diff --git a/src/core/core.h b/src/core/core.h index fba312125..df20f26f3 100644 --- a/src/core/core.h +++ b/src/core/core.h | |||
| @@ -102,6 +102,10 @@ namespace Network { | |||
| 102 | class RoomNetwork; | 102 | class RoomNetwork; |
| 103 | } | 103 | } |
| 104 | 104 | ||
| 105 | namespace Tools { | ||
| 106 | class RenderdocAPI; | ||
| 107 | } | ||
| 108 | |||
| 105 | namespace Core { | 109 | namespace Core { |
| 106 | 110 | ||
| 107 | class ARM_Interface; | 111 | class ARM_Interface; |
| @@ -413,6 +417,8 @@ public: | |||
| 413 | /// Gets an immutable reference to the Room Network. | 417 | /// Gets an immutable reference to the Room Network. |
| 414 | [[nodiscard]] const Network::RoomNetwork& GetRoomNetwork() const; | 418 | [[nodiscard]] const Network::RoomNetwork& GetRoomNetwork() const; |
| 415 | 419 | ||
| 420 | [[nodiscard]] Tools::RenderdocAPI& GetRenderdocAPI(); | ||
| 421 | |||
| 416 | void SetExitLocked(bool locked); | 422 | void SetExitLocked(bool locked); |
| 417 | bool GetExitLocked() const; | 423 | bool GetExitLocked() const; |
| 418 | 424 | ||
diff --git a/src/core/tools/renderdoc.cpp b/src/core/tools/renderdoc.cpp new file mode 100644 index 000000000..44d24822a --- /dev/null +++ b/src/core/tools/renderdoc.cpp | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #include <renderdoc_app.h> | ||
| 5 | |||
| 6 | #include "common/assert.h" | ||
| 7 | #include "common/dynamic_library.h" | ||
| 8 | #include "core/tools/renderdoc.h" | ||
| 9 | |||
| 10 | #ifdef WIN32 | ||
| 11 | #include <windows.h> | ||
| 12 | #else | ||
| 13 | #include <dlfcn.h> | ||
| 14 | #endif | ||
| 15 | |||
| 16 | namespace Tools { | ||
| 17 | |||
| 18 | RenderdocAPI::RenderdocAPI() { | ||
| 19 | #ifdef WIN32 | ||
| 20 | if (HMODULE mod = GetModuleHandleA("renderdoc.dll")) { | ||
| 21 | const auto RENDERDOC_GetAPI = | ||
| 22 | reinterpret_cast<pRENDERDOC_GetAPI>(GetProcAddress(mod, "RENDERDOC_GetAPI")); | ||
| 23 | const s32 ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_6_0, (void**)&rdoc_api); | ||
| 24 | ASSERT(ret == 1); | ||
| 25 | } | ||
| 26 | #else | ||
| 27 | #ifdef ANDROID | ||
| 28 | static constexpr const char RENDERDOC_LIB[] = "libVkLayer_GLES_RenderDoc.so"; | ||
| 29 | #else | ||
| 30 | static constexpr const char RENDERDOC_LIB[] = "librenderdoc.so"; | ||
| 31 | #endif | ||
| 32 | if (void* mod = dlopen(RENDERDOC_LIB, RTLD_NOW | RTLD_NOLOAD)) { | ||
| 33 | const auto RENDERDOC_GetAPI = | ||
| 34 | reinterpret_cast<pRENDERDOC_GetAPI>(dlsym(mod, "RENDERDOC_GetAPI")); | ||
| 35 | const s32 ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_6_0, (void**)&rdoc_api); | ||
| 36 | ASSERT(ret == 1); | ||
| 37 | } | ||
| 38 | #endif | ||
| 39 | } | ||
| 40 | |||
| 41 | RenderdocAPI::~RenderdocAPI() = default; | ||
| 42 | |||
| 43 | void RenderdocAPI::ToggleCapture() { | ||
| 44 | if (!rdoc_api) [[unlikely]] { | ||
| 45 | return; | ||
| 46 | } | ||
| 47 | if (!is_capturing) { | ||
| 48 | rdoc_api->StartFrameCapture(NULL, NULL); | ||
| 49 | } else { | ||
| 50 | rdoc_api->EndFrameCapture(NULL, NULL); | ||
| 51 | } | ||
| 52 | is_capturing = !is_capturing; | ||
| 53 | } | ||
| 54 | |||
| 55 | } // namespace Tools | ||
diff --git a/src/core/tools/renderdoc.h b/src/core/tools/renderdoc.h new file mode 100644 index 000000000..0e5e43da5 --- /dev/null +++ b/src/core/tools/renderdoc.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #pragma once | ||
| 5 | |||
| 6 | struct RENDERDOC_API_1_6_0; | ||
| 7 | |||
| 8 | namespace Tools { | ||
| 9 | |||
| 10 | class RenderdocAPI { | ||
| 11 | public: | ||
| 12 | explicit RenderdocAPI(); | ||
| 13 | ~RenderdocAPI(); | ||
| 14 | |||
| 15 | void ToggleCapture(); | ||
| 16 | |||
| 17 | private: | ||
| 18 | RENDERDOC_API_1_6_0* rdoc_api{}; | ||
| 19 | bool is_capturing{false}; | ||
| 20 | }; | ||
| 21 | |||
| 22 | } // namespace Tools | ||
diff --git a/src/yuzu/configuration/configure_debug.cpp b/src/yuzu/configuration/configure_debug.cpp index cbeb8f168..b22fda746 100644 --- a/src/yuzu/configuration/configure_debug.cpp +++ b/src/yuzu/configuration/configure_debug.cpp | |||
| @@ -59,6 +59,8 @@ void ConfigureDebug::SetConfiguration() { | |||
| 59 | ui->use_debug_asserts->setChecked(Settings::values.use_debug_asserts.GetValue()); | 59 | ui->use_debug_asserts->setChecked(Settings::values.use_debug_asserts.GetValue()); |
| 60 | ui->use_auto_stub->setChecked(Settings::values.use_auto_stub.GetValue()); | 60 | ui->use_auto_stub->setChecked(Settings::values.use_auto_stub.GetValue()); |
| 61 | ui->enable_all_controllers->setChecked(Settings::values.enable_all_controllers.GetValue()); | 61 | ui->enable_all_controllers->setChecked(Settings::values.enable_all_controllers.GetValue()); |
| 62 | ui->enable_renderdoc_hotkey->setEnabled(runtime_lock); | ||
| 63 | ui->enable_renderdoc_hotkey->setChecked(Settings::values.enable_renderdoc_hotkey.GetValue()); | ||
| 62 | ui->enable_graphics_debugging->setEnabled(runtime_lock); | 64 | ui->enable_graphics_debugging->setEnabled(runtime_lock); |
| 63 | ui->enable_graphics_debugging->setChecked(Settings::values.renderer_debug.GetValue()); | 65 | ui->enable_graphics_debugging->setChecked(Settings::values.renderer_debug.GetValue()); |
| 64 | ui->enable_shader_feedback->setEnabled(runtime_lock); | 66 | ui->enable_shader_feedback->setEnabled(runtime_lock); |
| @@ -111,6 +113,7 @@ void ConfigureDebug::ApplyConfiguration() { | |||
| 111 | Settings::values.use_auto_stub = ui->use_auto_stub->isChecked(); | 113 | Settings::values.use_auto_stub = ui->use_auto_stub->isChecked(); |
| 112 | Settings::values.enable_all_controllers = ui->enable_all_controllers->isChecked(); | 114 | Settings::values.enable_all_controllers = ui->enable_all_controllers->isChecked(); |
| 113 | Settings::values.renderer_debug = ui->enable_graphics_debugging->isChecked(); | 115 | Settings::values.renderer_debug = ui->enable_graphics_debugging->isChecked(); |
| 116 | Settings::values.enable_renderdoc_hotkey = ui->enable_renderdoc_hotkey->isChecked(); | ||
| 114 | Settings::values.renderer_shader_feedback = ui->enable_shader_feedback->isChecked(); | 117 | Settings::values.renderer_shader_feedback = ui->enable_shader_feedback->isChecked(); |
| 115 | Settings::values.cpu_debug_mode = ui->enable_cpu_debugging->isChecked(); | 118 | Settings::values.cpu_debug_mode = ui->enable_cpu_debugging->isChecked(); |
| 116 | Settings::values.enable_nsight_aftermath = ui->enable_nsight_aftermath->isChecked(); | 119 | Settings::values.enable_nsight_aftermath = ui->enable_nsight_aftermath->isChecked(); |
diff --git a/src/yuzu/configuration/configure_debug.ui b/src/yuzu/configuration/configure_debug.ui index 97c7d9022..66b8b7459 100644 --- a/src/yuzu/configuration/configure_debug.ui +++ b/src/yuzu/configuration/configure_debug.ui | |||
| @@ -18,8 +18,8 @@ | |||
| 18 | <rect> | 18 | <rect> |
| 19 | <x>0</x> | 19 | <x>0</x> |
| 20 | <y>0</y> | 20 | <y>0</y> |
| 21 | <width>829</width> | 21 | <width>842</width> |
| 22 | <height>758</height> | 22 | <height>741</height> |
| 23 | </rect> | 23 | </rect> |
| 24 | </property> | 24 | </property> |
| 25 | <layout class="QVBoxLayout" name="verticalLayout_1"> | 25 | <layout class="QVBoxLayout" name="verticalLayout_1"> |
| @@ -260,7 +260,7 @@ | |||
| 260 | <string>Graphics</string> | 260 | <string>Graphics</string> |
| 261 | </property> | 261 | </property> |
| 262 | <layout class="QGridLayout" name="gridLayout_2"> | 262 | <layout class="QGridLayout" name="gridLayout_2"> |
| 263 | <item row="3" column="0"> | 263 | <item row="4" column="0"> |
| 264 | <widget class="QCheckBox" name="disable_loop_safety_checks"> | 264 | <widget class="QCheckBox" name="disable_loop_safety_checks"> |
| 265 | <property name="toolTip"> | 265 | <property name="toolTip"> |
| 266 | <string>When checked, it executes shaders without loop logic changes</string> | 266 | <string>When checked, it executes shaders without loop logic changes</string> |
| @@ -270,33 +270,53 @@ | |||
| 270 | </property> | 270 | </property> |
| 271 | </widget> | 271 | </widget> |
| 272 | </item> | 272 | </item> |
| 273 | <item row="4" column="0"> | 273 | <item row="8" column="0"> |
| 274 | <widget class="QCheckBox" name="dump_shaders"> | 274 | <widget class="QCheckBox" name="disable_macro_hle"> |
| 275 | <property name="enabled"> | 275 | <property name="enabled"> |
| 276 | <bool>true</bool> | 276 | <bool>true</bool> |
| 277 | </property> | 277 | </property> |
| 278 | <property name="toolTip"> | 278 | <property name="toolTip"> |
| 279 | <string>When checked, it will dump all the original assembler shaders from the disk shader cache or game as found</string> | 279 | <string>When checked, it disables the macro HLE functions. Enabling this makes games run slower</string> |
| 280 | </property> | 280 | </property> |
| 281 | <property name="text"> | 281 | <property name="text"> |
| 282 | <string>Dump Game Shaders</string> | 282 | <string>Disable Macro HLE</string> |
| 283 | </property> | 283 | </property> |
| 284 | </widget> | 284 | </widget> |
| 285 | </item> | 285 | </item> |
| 286 | <item row="7" column="0"> | 286 | <item row="7" column="0"> |
| 287 | <widget class="QCheckBox" name="disable_macro_hle"> | 287 | <widget class="QCheckBox" name="dump_macros"> |
| 288 | <property name="enabled"> | 288 | <property name="enabled"> |
| 289 | <bool>true</bool> | 289 | <bool>true</bool> |
| 290 | </property> | 290 | </property> |
| 291 | <property name="toolTip"> | 291 | <property name="toolTip"> |
| 292 | <string>When checked, it disables the macro HLE functions. Enabling this makes games run slower</string> | 292 | <string>When checked, it will dump all the macro programs of the GPU</string> |
| 293 | </property> | 293 | </property> |
| 294 | <property name="text"> | 294 | <property name="text"> |
| 295 | <string>Disable Macro HLE</string> | 295 | <string>Dump Maxwell Macros</string> |
| 296 | </property> | 296 | </property> |
| 297 | </widget> | 297 | </widget> |
| 298 | </item> | 298 | </item> |
| 299 | <item row="5" column="0"> | 299 | <item row="3" column="0"> |
| 300 | <widget class="QCheckBox" name="enable_nsight_aftermath"> | ||
| 301 | <property name="toolTip"> | ||
| 302 | <string>When checked, it enables Nsight Aftermath crash dumps</string> | ||
| 303 | </property> | ||
| 304 | <property name="text"> | ||
| 305 | <string>Enable Nsight Aftermath</string> | ||
| 306 | </property> | ||
| 307 | </widget> | ||
| 308 | </item> | ||
| 309 | <item row="2" column="0"> | ||
| 310 | <widget class="QCheckBox" name="enable_shader_feedback"> | ||
| 311 | <property name="toolTip"> | ||
| 312 | <string>When checked, yuzu will log statistics about the compiled pipeline cache</string> | ||
| 313 | </property> | ||
| 314 | <property name="text"> | ||
| 315 | <string>Enable Shader Feedback</string> | ||
| 316 | </property> | ||
| 317 | </widget> | ||
| 318 | </item> | ||
| 319 | <item row="6" column="0"> | ||
| 300 | <widget class="QCheckBox" name="disable_macro_jit"> | 320 | <widget class="QCheckBox" name="disable_macro_jit"> |
| 301 | <property name="enabled"> | 321 | <property name="enabled"> |
| 302 | <bool>true</bool> | 322 | <bool>true</bool> |
| @@ -309,6 +329,22 @@ | |||
| 309 | </property> | 329 | </property> |
| 310 | </widget> | 330 | </widget> |
| 311 | </item> | 331 | </item> |
| 332 | <item row="9" column="0"> | ||
| 333 | <spacer name="verticalSpacer_5"> | ||
| 334 | <property name="orientation"> | ||
| 335 | <enum>Qt::Vertical</enum> | ||
| 336 | </property> | ||
| 337 | <property name="sizeType"> | ||
| 338 | <enum>QSizePolicy::Preferred</enum> | ||
| 339 | </property> | ||
| 340 | <property name="sizeHint" stdset="0"> | ||
| 341 | <size> | ||
| 342 | <width>20</width> | ||
| 343 | <height>0</height> | ||
| 344 | </size> | ||
| 345 | </property> | ||
| 346 | </spacer> | ||
| 347 | </item> | ||
| 312 | <item row="0" column="0"> | 348 | <item row="0" column="0"> |
| 313 | <widget class="QCheckBox" name="enable_graphics_debugging"> | 349 | <widget class="QCheckBox" name="enable_graphics_debugging"> |
| 314 | <property name="enabled"> | 350 | <property name="enabled"> |
| @@ -322,55 +358,26 @@ | |||
| 322 | </property> | 358 | </property> |
| 323 | </widget> | 359 | </widget> |
| 324 | </item> | 360 | </item> |
| 325 | <item row="6" column="0"> | 361 | <item row="5" column="0"> |
| 326 | <widget class="QCheckBox" name="dump_macros"> | 362 | <widget class="QCheckBox" name="dump_shaders"> |
| 327 | <property name="enabled"> | 363 | <property name="enabled"> |
| 328 | <bool>true</bool> | 364 | <bool>true</bool> |
| 329 | </property> | 365 | </property> |
| 330 | <property name="toolTip"> | 366 | <property name="toolTip"> |
| 331 | <string>When checked, it will dump all the macro programs of the GPU</string> | 367 | <string>When checked, it will dump all the original assembler shaders from the disk shader cache or game as found</string> |
| 332 | </property> | 368 | </property> |
| 333 | <property name="text"> | 369 | <property name="text"> |
| 334 | <string>Dump Maxwell Macros</string> | 370 | <string>Dump Game Shaders</string> |
| 335 | </property> | 371 | </property> |
| 336 | </widget> | 372 | </widget> |
| 337 | </item> | 373 | </item> |
| 338 | <item row="1" column="0"> | 374 | <item row="1" column="0"> |
| 339 | <widget class="QCheckBox" name="enable_shader_feedback"> | 375 | <widget class="QCheckBox" name="enable_renderdoc_hotkey"> |
| 340 | <property name="toolTip"> | ||
| 341 | <string>When checked, yuzu will log statistics about the compiled pipeline cache</string> | ||
| 342 | </property> | ||
| 343 | <property name="text"> | ||
| 344 | <string>Enable Shader Feedback</string> | ||
| 345 | </property> | ||
| 346 | </widget> | ||
| 347 | </item> | ||
| 348 | <item row="2" column="0"> | ||
| 349 | <widget class="QCheckBox" name="enable_nsight_aftermath"> | ||
| 350 | <property name="toolTip"> | ||
| 351 | <string>When checked, it enables Nsight Aftermath crash dumps</string> | ||
| 352 | </property> | ||
| 353 | <property name="text"> | 376 | <property name="text"> |
| 354 | <string>Enable Nsight Aftermath</string> | 377 | <string>Enable Renderdoc Hotkey</string> |
| 355 | </property> | 378 | </property> |
| 356 | </widget> | 379 | </widget> |
| 357 | </item> | 380 | </item> |
| 358 | <item row="8" column="0"> | ||
| 359 | <spacer name="verticalSpacer_5"> | ||
| 360 | <property name="orientation"> | ||
| 361 | <enum>Qt::Vertical</enum> | ||
| 362 | </property> | ||
| 363 | <property name="sizeType"> | ||
| 364 | <enum>QSizePolicy::Preferred</enum> | ||
| 365 | </property> | ||
| 366 | <property name="sizeHint" stdset="0"> | ||
| 367 | <size> | ||
| 368 | <width>20</width> | ||
| 369 | <height>0</height> | ||
| 370 | </size> | ||
| 371 | </property> | ||
| 372 | </spacer> | ||
| 373 | </item> | ||
| 374 | </layout> | 381 | </layout> |
| 375 | </widget> | 382 | </widget> |
| 376 | </item> | 383 | </item> |
diff --git a/src/yuzu/hotkeys.h b/src/yuzu/hotkeys.h index 848239c35..56eee8d82 100644 --- a/src/yuzu/hotkeys.h +++ b/src/yuzu/hotkeys.h | |||
| @@ -4,10 +4,12 @@ | |||
| 4 | #pragma once | 4 | #pragma once |
| 5 | 5 | ||
| 6 | #include <map> | 6 | #include <map> |
| 7 | #include <QKeySequence> | ||
| 8 | #include <QString> | ||
| 9 | #include <QWidget> | ||
| 7 | #include "core/hid/hid_types.h" | 10 | #include "core/hid/hid_types.h" |
| 8 | 11 | ||
| 9 | class QDialog; | 12 | class QDialog; |
| 10 | class QKeySequence; | ||
| 11 | class QSettings; | 13 | class QSettings; |
| 12 | class QShortcut; | 14 | class QShortcut; |
| 13 | class ControllerShortcut; | 15 | class ControllerShortcut; |
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 97d216638..d32aa9615 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <memory> | 9 | #include <memory> |
| 10 | #include <thread> | 10 | #include <thread> |
| 11 | #include "core/loader/nca.h" | 11 | #include "core/loader/nca.h" |
| 12 | #include "core/tools/renderdoc.h" | ||
| 12 | #ifdef __APPLE__ | 13 | #ifdef __APPLE__ |
| 13 | #include <unistd.h> // for chdir | 14 | #include <unistd.h> // for chdir |
| 14 | #endif | 15 | #endif |
| @@ -1348,6 +1349,11 @@ void GMainWindow::InitializeHotkeys() { | |||
| 1348 | connect_shortcut(QStringLiteral("Toggle Framerate Limit"), [] { | 1349 | connect_shortcut(QStringLiteral("Toggle Framerate Limit"), [] { |
| 1349 | Settings::values.use_speed_limit.SetValue(!Settings::values.use_speed_limit.GetValue()); | 1350 | Settings::values.use_speed_limit.SetValue(!Settings::values.use_speed_limit.GetValue()); |
| 1350 | }); | 1351 | }); |
| 1352 | connect_shortcut(QStringLiteral("Toggle Renderdoc Capture"), [this] { | ||
| 1353 | if (Settings::values.enable_renderdoc_hotkey) { | ||
| 1354 | system->GetRenderdocAPI().ToggleCapture(); | ||
| 1355 | } | ||
| 1356 | }); | ||
| 1351 | connect_shortcut(QStringLiteral("Toggle Mouse Panning"), [&] { | 1357 | connect_shortcut(QStringLiteral("Toggle Mouse Panning"), [&] { |
| 1352 | if (Settings::values.mouse_enabled) { | 1358 | if (Settings::values.mouse_enabled) { |
| 1353 | Settings::values.mouse_panning = false; | 1359 | Settings::values.mouse_panning = false; |