summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt2
-rw-r--r--README.md77
m---------externals/dynarmic0
-rw-r--r--src/audio_core/sink_context.h2
-rw-r--r--src/common/hex_util.h3
-rw-r--r--src/common/logging/types.h2
-rw-r--r--src/core/crypto/key_manager.cpp2
-rw-r--r--src/core/file_sys/registered_cache.cpp13
-rw-r--r--src/core/frontend/input.h1
-rw-r--r--src/core/hle/api_version.h2
-rw-r--r--src/core/hle/service/mii/manager.h2
-rw-r--r--src/core/hle/service/service.cpp6
-rw-r--r--src/core/hle/service/spl/spl_results.h2
-rw-r--r--src/core/hle/service/spl/spl_types.h2
-rw-r--r--src/input_common/mouse/mouse_poller.cpp2
-rw-r--r--src/input_common/touch_from_button.cpp1
-rw-r--r--src/video_core/renderer_opengl/gl_arb_decompiler.cpp2
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp2
-rw-r--r--src/yuzu/about_dialog.cpp3
-rw-r--r--src/yuzu/main.cpp6
20 files changed, 96 insertions, 36 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 97afaf1a9..60ec58eda 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -172,7 +172,7 @@ macro(yuzu_find_packages)
172 set(REQUIRED_LIBS 172 set(REQUIRED_LIBS
173 # Cmake Pkg Prefix Version Conan Pkg 173 # Cmake Pkg Prefix Version Conan Pkg
174 "Catch2 2.13 catch2/2.13.0" 174 "Catch2 2.13 catch2/2.13.0"
175 "fmt 7.1 fmt/7.1.2" 175 "fmt 8.0 fmt/8.0.0"
176 "lz4 1.8 lz4/1.9.2" 176 "lz4 1.8 lz4/1.9.2"
177 "nlohmann_json 3.8 nlohmann_json/3.8.0" 177 "nlohmann_json 3.8 nlohmann_json/3.8.0"
178 "ZLIB 1.2 zlib/1.2.11" 178 "ZLIB 1.2 zlib/1.2.11"
diff --git a/README.md b/README.md
index cb1a64d8c..a8821126f 100644
--- a/README.md
+++ b/README.md
@@ -1,43 +1,80 @@
1yuzu emulator 1<h1 align="center">
2============= 2 <br>
3[![Travis CI Build Status](https://travis-ci.com/yuzu-emu/yuzu.svg?branch=master)](https://travis-ci.com/yuzu-emu/yuzu) 3 <a href="https://yuzu-emu.org/"><img src="https://raw.githubusercontent.com/yuzu-emu/yuzu-assets/master/icons/icon.png" alt="yuzu" width="200"></a>
4[![Azure Mainline CI Build Status](https://dev.azure.com/yuzu-emu/yuzu/_apis/build/status/yuzu%20mainline?branchName=master)](https://dev.azure.com/yuzu-emu/yuzu/) 4 <br>
5[![Discord](https://img.shields.io/discord/398318088170242053?color=%237289DA&label=yuzu&logo=discord&logoColor=white)](https://discord.com/invite/u77vRWY) 5 <b>yuzu</b>
6 <br>
7</h1>
6 8
7yuzu is an experimental open-source emulator for the Nintendo Switch from the creators of [Citra](https://citra-emu.org/). 9<h4 align="center"><b>yuzu</b> is the world's most popular, open-source, Nintendo Switch emulator — started by the creators of <a href="https://citra-emu.org" target="_blank">Citra</a>.
10<br>
11It is written in C++ with portability in mind, and we actively maintain builds for Windows and Linux.
12</h4>
8 13
9It is written in C++ with portability in mind, with builds actively maintained for Windows and Linux. The emulator is capable of running several commercial games. 14<p align="center">
15 <a href="https://dev.azure.com/yuzu-emu/yuzu/">
16 <img src="https://dev.azure.com/yuzu-emu/yuzu/_apis/build/status/yuzu%20mainline?branchName=master"
17 alt="Azure Mainline CI Build Status">
18 </a>
19 <a href="https://discord.com/invite/u77vRWY">
20 <img src="https://img.shields.io/discord/398318088170242053?color=%237289DA&label=yuzu&logo=discord&logoColor=white"
21 alt="Discord">
22 </a>
23</p>
10 24
11yuzu only emulates a subset of Switch hardware and therefore most commercial games **do not** run at full speed or are not fully functional. 25<p align="center">
26 <a href="#compatibility">Compatibility</a> |
27 <a href="#development">Development</a> |
28 <a href="#building">Building</a> |
29 <a href="#download">Download</a> |
30 <a href="#support">Support</a> |
31 <a href="#license">License</a>
32</p>
12 33
13Do you want to check which games are compatible and which ones are not? Please visit our [Compatibility page](https://yuzu-emu.org/game/)! 34## Compatibility
14 35
15yuzu is licensed under the GPLv2 (or any later version). Refer to the license.txt file included. 36The emulator is capable of running most commercial games at full speed, provided you meet the [necessary hardware requirements](https://yuzu-emu.org/help/quickstart/#hardware-requirements).
16 37
17Check out our [website](https://yuzu-emu.org/)! 38For a full list of games yuzu support, please visit our [Compatibility page](https://yuzu-emu.org/game/)
18 39
19For development discussion, please join us on [Discord](https://discord.com/invite/u77vRWY). 40Check out our [website](https://yuzu-emu.org/) for the latest news on exciting features, monthly progress reports, and more!
20 41
21### Development 42## Development
22 43
23Most of the development happens on GitHub. It's also where [our central repository](https://github.com/yuzu-emu/yuzu) is hosted. 44Most of the development happens on GitHub. It's also where [our central repository](https://github.com/yuzu-emu/yuzu) is hosted. For development discussion, please join us on [Discord](https://discord.com/invite/u77vRWY).
24 45
25If you want to contribute please take a look at the [Contributor's Guide](https://github.com/yuzu-emu/yuzu/wiki/Contributing) and [Developer Information](https://github.com/yuzu-emu/yuzu/wiki/Developer-Information). You should also contact any of the developers on Discord in order to know about the current state of the emulator. 46If you want to contribute, please take a look at the [Contributor's Guide](https://github.com/yuzu-emu/yuzu/wiki/Contributing) and [Developer Information](https://github.com/yuzu-emu/yuzu/wiki/Developer-Information).
47You can also contact any of the developers on Discord in order to know about the current state of the emulator.
26 48
27If you want to contribute to the user interface translation, please check out the [yuzu project on transifex](https://www.transifex.com/yuzu-emulator/yuzu). We centralize translation work there, and periodically upstream translations. 49If you want to contribute to the user interface translation project, please check out the [yuzu project on transifex](https://www.transifex.com/yuzu-emulator/yuzu). We centralize translation work there, and periodically upstream translations.
28 50
29### Building 51## Building
30 52
31* __Windows__: [Windows Build](https://github.com/yuzu-emu/yuzu/wiki/Building-For-Windows) 53* __Windows__: [Windows Build](https://github.com/yuzu-emu/yuzu/wiki/Building-For-Windows)
32* __Linux__: [Linux Build](https://github.com/yuzu-emu/yuzu/wiki/Building-For-Linux) 54* __Linux__: [Linux Build](https://github.com/yuzu-emu/yuzu/wiki/Building-For-Linux)
33 55
56## Download
34 57
35### Support 58You can download the latest releases automatically via the installer on our [downloads](https://yuzu-emu.org/downloads/) page.
36We happily accept monetary donations, or donated games and hardware. Please see our [donations page](https://yuzu-emu.org/donate/) for more information on how you can contribute to yuzu. Any donations received will go towards things like: 59
60
61## Support
62
63If you enjoy the project and want to support us financially, check out our Patreon!
64
65<a href="https://www.patreon.com/yuzuteam">
66 <img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" width="160">
67</a>
68
69Any donations received will go towards things like:
37* Switch consoles to explore and reverse-engineer the hardware 70* Switch consoles to explore and reverse-engineer the hardware
38* Switch games for testing, reverse-engineering, and implementing new features 71* Switch games for testing, reverse-engineering, and implementing new features
39* Web hosting and infrastructure setup 72* Web hosting and infrastructure setup
40* Software licenses (e.g. Visual Studio, IDA Pro, etc.) 73* Software licenses (e.g. Visual Studio, IDA Pro, etc.)
41* Additional hardware (e.g. GPUs as-needed to improve rendering support, other peripherals to add support for, etc.) 74* Additional hardware (e.g. GPUs as-needed to improve rendering support, other peripherals to add support for, etc.)
42 75
43We also more than gladly accept used Switch consoles, preferably ones with firmware 3.0.0 or lower! If you would like to give yours away, don't hesitate to join our [Discord](https://discord.gg/VXqngT3) and talk to bunnei. You may also contact: donations@yuzu-emu.org. 76If you wish to support us a different way, please join our [Discord](https://discord.gg/u77vRWY) and talk to bunnei. You may also contact: donations@yuzu-emu.org.
77
78## License
79
80yuzu is licensed under the GPLv2 (or any later version). Refer to the [license.txt](https://github.com/yuzu-emu/yuzu/blob/master/license.txt) file.
diff --git a/externals/dynarmic b/externals/dynarmic
Subproject c6125082ea992c245edab26b6f86e7b904b86ee Subproject 7946868af49d403fe54c92d2d60ef986513d1fe
diff --git a/src/audio_core/sink_context.h b/src/audio_core/sink_context.h
index 66ee4e8a0..9e2b69785 100644
--- a/src/audio_core/sink_context.h
+++ b/src/audio_core/sink_context.h
@@ -4,6 +4,8 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <array>
8#include <vector>
7#include "audio_core/common.h" 9#include "audio_core/common.h"
8#include "common/common_funcs.h" 10#include "common/common_funcs.h"
9#include "common/common_types.h" 11#include "common/common_types.h"
diff --git a/src/common/hex_util.h b/src/common/hex_util.h
index a8d414fb8..f5f9e4507 100644
--- a/src/common/hex_util.h
+++ b/src/common/hex_util.h
@@ -53,8 +53,9 @@ template <typename ContiguousContainer>
53 std::string out; 53 std::string out;
54 out.reserve(std::size(data) * pad_width); 54 out.reserve(std::size(data) * pad_width);
55 55
56 const auto format_str = fmt::runtime(upper ? "{:02X}" : "{:02x}");
56 for (const u8 c : data) { 57 for (const u8 c : data) {
57 out += fmt::format(upper ? "{:02X}" : "{:02x}", c); 58 out += fmt::format(format_str, c);
58 } 59 }
59 60
60 return out; 61 return out;
diff --git a/src/common/logging/types.h b/src/common/logging/types.h
index ee9a1ed84..88b0e9c01 100644
--- a/src/common/logging/types.h
+++ b/src/common/logging/types.h
@@ -2,6 +2,8 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#pragma once
6
5#include <chrono> 7#include <chrono>
6 8
7#include "common/common_types.h" 9#include "common/common_types.h"
diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp
index fb451a423..a98daed89 100644
--- a/src/core/crypto/key_manager.cpp
+++ b/src/core/crypto/key_manager.cpp
@@ -835,7 +835,7 @@ void KeyManager::SetKey(S128KeyType id, Key128 key, u64 field1, u64 field2) {
835 "key_area_key_ocean_{:02X}", 835 "key_area_key_ocean_{:02X}",
836 "key_area_key_system_{:02X}", 836 "key_area_key_system_{:02X}",
837 }; 837 };
838 WriteKeyToFile(category, fmt::format(kak_names.at(field2), field1), key); 838 WriteKeyToFile(category, fmt::format(fmt::runtime(kak_names.at(field2)), field1), key);
839 } else if (id == S128KeyType::Master) { 839 } else if (id == S128KeyType::Master) {
840 WriteKeyToFile(category, fmt::format("master_key_{:02X}", field1), key); 840 WriteKeyToFile(category, fmt::format("master_key_{:02X}", field1), key);
841 } else if (id == S128KeyType::Package1) { 841 } else if (id == S128KeyType::Package1) {
diff --git a/src/core/file_sys/registered_cache.cpp b/src/core/file_sys/registered_cache.cpp
index 066c6789a..7a646b5f1 100644
--- a/src/core/file_sys/registered_cache.cpp
+++ b/src/core/file_sys/registered_cache.cpp
@@ -58,14 +58,17 @@ static bool FollowsNcaIdFormat(std::string_view name) {
58 58
59static std::string GetRelativePathFromNcaID(const std::array<u8, 16>& nca_id, bool second_hex_upper, 59static std::string GetRelativePathFromNcaID(const std::array<u8, 16>& nca_id, bool second_hex_upper,
60 bool within_two_digit, bool cnmt_suffix) { 60 bool within_two_digit, bool cnmt_suffix) {
61 if (!within_two_digit) 61 if (!within_two_digit) {
62 return fmt::format(cnmt_suffix ? "{}.cnmt.nca" : "/{}.nca", 62 const auto format_str = fmt::runtime(cnmt_suffix ? "{}.cnmt.nca" : "/{}.nca");
63 Common::HexToString(nca_id, second_hex_upper)); 63 return fmt::format(format_str, Common::HexToString(nca_id, second_hex_upper));
64 }
64 65
65 Core::Crypto::SHA256Hash hash{}; 66 Core::Crypto::SHA256Hash hash{};
66 mbedtls_sha256_ret(nca_id.data(), nca_id.size(), hash.data(), 0); 67 mbedtls_sha256_ret(nca_id.data(), nca_id.size(), hash.data(), 0);
67 return fmt::format(cnmt_suffix ? "/000000{:02X}/{}.cnmt.nca" : "/000000{:02X}/{}.nca", hash[0], 68
68 Common::HexToString(nca_id, second_hex_upper)); 69 const auto format_str =
70 fmt::runtime(cnmt_suffix ? "/000000{:02X}/{}.cnmt.nca" : "/000000{:02X}/{}.nca");
71 return fmt::format(format_str, hash[0], Common::HexToString(nca_id, second_hex_upper));
69} 72}
70 73
71static std::string GetCNMTName(TitleType type, u64 title_id) { 74static std::string GetCNMTName(TitleType type, u64 title_id) {
diff --git a/src/core/frontend/input.h b/src/core/frontend/input.h
index 7a047803e..f1747c5b2 100644
--- a/src/core/frontend/input.h
+++ b/src/core/frontend/input.h
@@ -4,6 +4,7 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <functional>
7#include <memory> 8#include <memory>
8#include <string> 9#include <string>
9#include <tuple> 10#include <tuple>
diff --git a/src/core/hle/api_version.h b/src/core/hle/api_version.h
index 811732179..5e10a7ad9 100644
--- a/src/core/hle/api_version.h
+++ b/src/core/hle/api_version.h
@@ -2,6 +2,8 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#pragma once
6
5#include "common/common_types.h" 7#include "common/common_types.h"
6 8
7// This file contains yuzu's HLE API version constants. 9// This file contains yuzu's HLE API version constants.
diff --git a/src/core/hle/service/mii/manager.h b/src/core/hle/service/mii/manager.h
index ec7efa5f7..8e048fc56 100644
--- a/src/core/hle/service/mii/manager.h
+++ b/src/core/hle/service/mii/manager.h
@@ -4,6 +4,8 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <array>
8#include <vector>
7#include "common/bit_field.h" 9#include "common/bit_field.h"
8#include "common/common_funcs.h" 10#include "common/common_funcs.h"
9#include "common/uuid.h" 11#include "common/uuid.h"
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index 4e1541630..663b83cd3 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -149,10 +149,10 @@ void ServiceFrameworkBase::ReportUnimplementedFunction(Kernel::HLERequestContext
149 std::string function_name = info == nullptr ? fmt::format("{}", ctx.GetCommand()) : info->name; 149 std::string function_name = info == nullptr ? fmt::format("{}", ctx.GetCommand()) : info->name;
150 150
151 fmt::memory_buffer buf; 151 fmt::memory_buffer buf;
152 fmt::format_to(buf, "function '{}': port='{}' cmd_buf={{[0]=0x{:X}", function_name, 152 fmt::format_to(std::back_inserter(buf), "function '{}': port='{}' cmd_buf={{[0]=0x{:X}",
153 service_name, cmd_buf[0]); 153 function_name, service_name, cmd_buf[0]);
154 for (int i = 1; i <= 8; ++i) { 154 for (int i = 1; i <= 8; ++i) {
155 fmt::format_to(buf, ", [{}]=0x{:X}", i, cmd_buf[i]); 155 fmt::format_to(std::back_inserter(buf), ", [{}]=0x{:X}", i, cmd_buf[i]);
156 } 156 }
157 buf.push_back('}'); 157 buf.push_back('}');
158 158
diff --git a/src/core/hle/service/spl/spl_results.h b/src/core/hle/service/spl/spl_results.h
index 878fa91b7..a07c61409 100644
--- a/src/core/hle/service/spl/spl_results.h
+++ b/src/core/hle/service/spl/spl_results.h
@@ -2,6 +2,8 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#pragma once
6
5#include "core/hle/result.h" 7#include "core/hle/result.h"
6 8
7namespace Service::SPL { 9namespace Service::SPL {
diff --git a/src/core/hle/service/spl/spl_types.h b/src/core/hle/service/spl/spl_types.h
index 23c39f7ed..a654e7556 100644
--- a/src/core/hle/service/spl/spl_types.h
+++ b/src/core/hle/service/spl/spl_types.h
@@ -2,6 +2,8 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#pragma once
6
5#include <span> 7#include <span>
6 8
7#include "common/bit_field.h" 9#include "common/bit_field.h"
diff --git a/src/input_common/mouse/mouse_poller.cpp b/src/input_common/mouse/mouse_poller.cpp
index d96104a4e..758f7af1f 100644
--- a/src/input_common/mouse/mouse_poller.cpp
+++ b/src/input_common/mouse/mouse_poller.cpp
@@ -2,6 +2,8 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <algorithm>
6#include <memory>
5#include <mutex> 7#include <mutex>
6#include <utility> 8#include <utility>
7 9
diff --git a/src/input_common/touch_from_button.cpp b/src/input_common/touch_from_button.cpp
index e94ba197b..5b24fd8bf 100644
--- a/src/input_common/touch_from_button.cpp
+++ b/src/input_common/touch_from_button.cpp
@@ -2,6 +2,7 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <algorithm>
5#include "common/settings.h" 6#include "common/settings.h"
6#include "core/frontend/framebuffer_layout.h" 7#include "core/frontend/framebuffer_layout.h"
7#include "input_common/touch_from_button.h" 8#include "input_common/touch_from_button.h"
diff --git a/src/video_core/renderer_opengl/gl_arb_decompiler.cpp b/src/video_core/renderer_opengl/gl_arb_decompiler.cpp
index 3e4d88c30..e8d8d2aa5 100644
--- a/src/video_core/renderer_opengl/gl_arb_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_arb_decompiler.cpp
@@ -454,7 +454,7 @@ private:
454 454
455 template <typename... Args> 455 template <typename... Args>
456 void AddExpression(std::string_view text, Args&&... args) { 456 void AddExpression(std::string_view text, Args&&... args) {
457 shader_source += fmt::format(text, std::forward<Args>(args)...); 457 shader_source += fmt::format(fmt::runtime(text), std::forward<Args>(args)...);
458 } 458 }
459 459
460 template <typename... Args> 460 template <typename... Args>
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index ac78d344c..9c28498e8 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -96,7 +96,7 @@ public:
96 // etc). 96 // etc).
97 template <typename... Args> 97 template <typename... Args>
98 void AddLine(std::string_view text, Args&&... args) { 98 void AddLine(std::string_view text, Args&&... args) {
99 AddExpression(fmt::format(text, std::forward<Args>(args)...)); 99 AddExpression(fmt::format(fmt::runtime(text), std::forward<Args>(args)...));
100 AddNewLine(); 100 AddNewLine();
101 } 101 }
102 102
diff --git a/src/yuzu/about_dialog.cpp b/src/yuzu/about_dialog.cpp
index a2e0e6962..6b0155a78 100644
--- a/src/yuzu/about_dialog.cpp
+++ b/src/yuzu/about_dialog.cpp
@@ -14,7 +14,8 @@ AboutDialog::AboutDialog(QWidget* parent) : QDialog(parent), ui(new Ui::AboutDia
14 const auto build_id = std::string(Common::g_build_id); 14 const auto build_id = std::string(Common::g_build_id);
15 15
16 const auto yuzu_build = fmt::format("yuzu Development Build | {}-{}", branch_name, description); 16 const auto yuzu_build = fmt::format("yuzu Development Build | {}-{}", branch_name, description);
17 const auto override_build = fmt::format(std::string(Common::g_title_bar_format_idle), build_id); 17 const auto override_build =
18 fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id);
18 const auto yuzu_build_version = override_build.empty() ? yuzu_build : override_build; 19 const auto yuzu_build_version = override_build.empty() ? yuzu_build : override_build;
19 20
20 ui->setupUi(this); 21 ui->setupUi(this);
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 75ab5ef44..6f5b2f6d6 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -236,7 +236,8 @@ GMainWindow::GMainWindow()
236 const auto build_id = std::string(Common::g_build_id); 236 const auto build_id = std::string(Common::g_build_id);
237 237
238 const auto yuzu_build = fmt::format("yuzu Development Build | {}-{}", branch_name, description); 238 const auto yuzu_build = fmt::format("yuzu Development Build | {}-{}", branch_name, description);
239 const auto override_build = fmt::format(std::string(Common::g_title_bar_format_idle), build_id); 239 const auto override_build =
240 fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id);
240 const auto yuzu_build_version = override_build.empty() ? yuzu_build : override_build; 241 const auto yuzu_build_version = override_build.empty() ? yuzu_build : override_build;
241 242
242 LOG_INFO(Frontend, "yuzu Version: {}", yuzu_build_version); 243 LOG_INFO(Frontend, "yuzu Version: {}", yuzu_build_version);
@@ -2858,7 +2859,8 @@ void GMainWindow::UpdateWindowTitle(const std::string& title_name,
2858 const auto build_id = std::string(Common::g_build_id); 2859 const auto build_id = std::string(Common::g_build_id);
2859 2860
2860 const auto yuzu_title = fmt::format("yuzu | {}-{}", branch_name, description); 2861 const auto yuzu_title = fmt::format("yuzu | {}-{}", branch_name, description);
2861 const auto override_title = fmt::format(std::string(Common::g_title_bar_format_idle), build_id); 2862 const auto override_title =
2863 fmt::format(fmt::runtime(std::string(Common::g_title_bar_format_idle)), build_id);
2862 const auto window_title = override_title.empty() ? yuzu_title : override_title; 2864 const auto window_title = override_title.empty() ? yuzu_title : override_title;
2863 2865
2864 if (title_name.empty()) { 2866 if (title_name.empty()) {