diff options
23 files changed, 155 insertions, 199 deletions
diff --git a/.ci/scripts/format/script.sh b/.ci/scripts/format/script.sh index 969ab637c..c2550c966 100644 --- a/.ci/scripts/format/script.sh +++ b/.ci/scripts/format/script.sh | |||
| @@ -7,7 +7,7 @@ if grep -nrI '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .ci* dis | |||
| 7 | fi | 7 | fi |
| 8 | 8 | ||
| 9 | # Default clang-format points to default 3.5 version one | 9 | # Default clang-format points to default 3.5 version one |
| 10 | CLANG_FORMAT=clang-format-10 | 10 | CLANG_FORMAT=clang-format-12 |
| 11 | $CLANG_FORMAT --version | 11 | $CLANG_FORMAT --version |
| 12 | 12 | ||
| 13 | if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then | 13 | if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then |
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5df2ff3fa..b7ea86d8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt | |||
| @@ -135,7 +135,7 @@ endif() | |||
| 135 | # boost asio's concept usage doesn't play nicely with some compilers yet. | 135 | # boost asio's concept usage doesn't play nicely with some compilers yet. |
| 136 | add_definitions(-DBOOST_ASIO_DISABLE_CONCEPTS) | 136 | add_definitions(-DBOOST_ASIO_DISABLE_CONCEPTS) |
| 137 | if (MSVC) | 137 | if (MSVC) |
| 138 | add_compile_options(/std:c++latest) | 138 | add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/std:c++latest>) |
| 139 | 139 | ||
| 140 | # cubeb and boost still make use of deprecated result_of. | 140 | # cubeb and boost still make use of deprecated result_of. |
| 141 | add_definitions(-D_HAS_DEPRECATED_RESULT_OF) | 141 | add_definitions(-D_HAS_DEPRECATED_RESULT_OF) |
| @@ -780,7 +780,7 @@ endif() | |||
| 780 | # against all the src files. This should be used before making a pull request. | 780 | # against all the src files. This should be used before making a pull request. |
| 781 | # ======================================================================= | 781 | # ======================================================================= |
| 782 | 782 | ||
| 783 | set(CLANG_FORMAT_POSTFIX "-10") | 783 | set(CLANG_FORMAT_POSTFIX "-12") |
| 784 | find_program(CLANG_FORMAT | 784 | find_program(CLANG_FORMAT |
| 785 | NAMES clang-format${CLANG_FORMAT_POSTFIX} | 785 | NAMES clang-format${CLANG_FORMAT_POSTFIX} |
| 786 | clang-format | 786 | clang-format |
diff --git a/src/common/alignment.h b/src/common/alignment.h index 32d796ffa..1b56569d1 100644 --- a/src/common/alignment.h +++ b/src/common/alignment.h | |||
| @@ -9,41 +9,48 @@ | |||
| 9 | namespace Common { | 9 | namespace Common { |
| 10 | 10 | ||
| 11 | template <typename T> | 11 | template <typename T> |
| 12 | requires std::is_unsigned_v<T>[[nodiscard]] constexpr T AlignUp(T value, size_t size) { | 12 | requires std::is_unsigned_v<T> |
| 13 | [[nodiscard]] constexpr T AlignUp(T value, size_t size) { | ||
| 13 | auto mod{static_cast<T>(value % size)}; | 14 | auto mod{static_cast<T>(value % size)}; |
| 14 | value -= mod; | 15 | value -= mod; |
| 15 | return static_cast<T>(mod == T{0} ? value : value + size); | 16 | return static_cast<T>(mod == T{0} ? value : value + size); |
| 16 | } | 17 | } |
| 17 | 18 | ||
| 18 | template <typename T> | 19 | template <typename T> |
| 19 | requires std::is_unsigned_v<T>[[nodiscard]] constexpr T AlignUpLog2(T value, size_t align_log2) { | 20 | requires std::is_unsigned_v<T> |
| 21 | [[nodiscard]] constexpr T AlignUpLog2(T value, size_t align_log2) { | ||
| 20 | return static_cast<T>((value + ((1ULL << align_log2) - 1)) >> align_log2 << align_log2); | 22 | return static_cast<T>((value + ((1ULL << align_log2) - 1)) >> align_log2 << align_log2); |
| 21 | } | 23 | } |
| 22 | 24 | ||
| 23 | template <typename T> | 25 | template <typename T> |
| 24 | requires std::is_unsigned_v<T>[[nodiscard]] constexpr T AlignDown(T value, size_t size) { | 26 | requires std::is_unsigned_v<T> |
| 27 | [[nodiscard]] constexpr T AlignDown(T value, size_t size) { | ||
| 25 | return static_cast<T>(value - value % size); | 28 | return static_cast<T>(value - value % size); |
| 26 | } | 29 | } |
| 27 | 30 | ||
| 28 | template <typename T> | 31 | template <typename T> |
| 29 | requires std::is_unsigned_v<T>[[nodiscard]] constexpr bool Is4KBAligned(T value) { | 32 | requires std::is_unsigned_v<T> |
| 33 | [[nodiscard]] constexpr bool Is4KBAligned(T value) { | ||
| 30 | return (value & 0xFFF) == 0; | 34 | return (value & 0xFFF) == 0; |
| 31 | } | 35 | } |
| 32 | 36 | ||
| 33 | template <typename T> | 37 | template <typename T> |
| 34 | requires std::is_unsigned_v<T>[[nodiscard]] constexpr bool IsWordAligned(T value) { | 38 | requires std::is_unsigned_v<T> |
| 39 | [[nodiscard]] constexpr bool IsWordAligned(T value) { | ||
| 35 | return (value & 0b11) == 0; | 40 | return (value & 0b11) == 0; |
| 36 | } | 41 | } |
| 37 | 42 | ||
| 38 | template <typename T> | 43 | template <typename T> |
| 39 | requires std::is_integral_v<T>[[nodiscard]] constexpr bool IsAligned(T value, size_t alignment) { | 44 | requires std::is_integral_v<T> |
| 45 | [[nodiscard]] constexpr bool IsAligned(T value, size_t alignment) { | ||
| 40 | using U = typename std::make_unsigned_t<T>; | 46 | using U = typename std::make_unsigned_t<T>; |
| 41 | const U mask = static_cast<U>(alignment - 1); | 47 | const U mask = static_cast<U>(alignment - 1); |
| 42 | return (value & mask) == 0; | 48 | return (value & mask) == 0; |
| 43 | } | 49 | } |
| 44 | 50 | ||
| 45 | template <typename T, typename U> | 51 | template <typename T, typename U> |
| 46 | requires std::is_integral_v<T>[[nodiscard]] constexpr T DivideUp(T x, U y) { | 52 | requires std::is_integral_v<T> |
| 53 | [[nodiscard]] constexpr T DivideUp(T x, U y) { | ||
| 47 | return (x + (y - 1)) / y; | 54 | return (x + (y - 1)) / y; |
| 48 | } | 55 | } |
| 49 | 56 | ||
diff --git a/src/common/div_ceil.h b/src/common/div_ceil.h index 95e1489a9..e1db35464 100644 --- a/src/common/div_ceil.h +++ b/src/common/div_ceil.h | |||
| @@ -11,15 +11,15 @@ namespace Common { | |||
| 11 | 11 | ||
| 12 | /// Ceiled integer division. | 12 | /// Ceiled integer division. |
| 13 | template <typename N, typename D> | 13 | template <typename N, typename D> |
| 14 | requires std::is_integral_v<N>&& std::is_unsigned_v<D>[[nodiscard]] constexpr N DivCeil(N number, | 14 | requires std::is_integral_v<N> && std::is_unsigned_v<D> |
| 15 | D divisor) { | 15 | [[nodiscard]] constexpr N DivCeil(N number, D divisor) { |
| 16 | return static_cast<N>((static_cast<D>(number) + divisor - 1) / divisor); | 16 | return static_cast<N>((static_cast<D>(number) + divisor - 1) / divisor); |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | /// Ceiled integer division with logarithmic divisor in base 2 | 19 | /// Ceiled integer division with logarithmic divisor in base 2 |
| 20 | template <typename N, typename D> | 20 | template <typename N, typename D> |
| 21 | requires std::is_integral_v<N>&& std::is_unsigned_v<D>[[nodiscard]] constexpr N DivCeilLog2( | 21 | requires std::is_integral_v<N> && std::is_unsigned_v<D> |
| 22 | N value, D alignment_log2) { | 22 | [[nodiscard]] constexpr N DivCeilLog2(N value, D alignment_log2) { |
| 23 | return static_cast<N>((static_cast<D>(value) + (D(1) << alignment_log2) - 1) >> alignment_log2); | 23 | return static_cast<N>((static_cast<D>(value) + (D(1) << alignment_log2) - 1) >> alignment_log2); |
| 24 | } | 24 | } |
| 25 | 25 | ||
diff --git a/src/common/intrusive_red_black_tree.h b/src/common/intrusive_red_black_tree.h index 1f696fe80..3173cc449 100644 --- a/src/common/intrusive_red_black_tree.h +++ b/src/common/intrusive_red_black_tree.h | |||
| @@ -235,20 +235,19 @@ public: | |||
| 235 | 235 | ||
| 236 | template <typename T> | 236 | template <typename T> |
| 237 | concept HasLightCompareType = requires { | 237 | concept HasLightCompareType = requires { |
| 238 | { std::is_same<typename T::LightCompareType, void>::value } | 238 | { std::is_same<typename T::LightCompareType, void>::value } -> std::convertible_to<bool>; |
| 239 | ->std::convertible_to<bool>; | ||
| 240 | }; | 239 | }; |
| 241 | 240 | ||
| 242 | namespace impl { | 241 | namespace impl { |
| 243 | 242 | ||
| 244 | template <typename T, typename Default> | 243 | template <typename T, typename Default> |
| 245 | consteval auto* GetLightCompareType() { | 244 | consteval auto* GetLightCompareType() { |
| 246 | if constexpr (HasLightCompareType<T>) { | 245 | if constexpr (HasLightCompareType<T>) { |
| 247 | return static_cast<typename T::LightCompareType*>(nullptr); | 246 | return static_cast<typename T::LightCompareType*>(nullptr); |
| 248 | } else { | 247 | } else { |
| 249 | return static_cast<Default*>(nullptr); | 248 | return static_cast<Default*>(nullptr); |
| 249 | } | ||
| 250 | } | 250 | } |
| 251 | } | ||
| 252 | 251 | ||
| 253 | } // namespace impl | 252 | } // namespace impl |
| 254 | 253 | ||
diff --git a/src/common/uuid.h b/src/common/uuid.h index 2353179d8..8ea01f8da 100644 --- a/src/common/uuid.h +++ b/src/common/uuid.h | |||
| @@ -58,6 +58,13 @@ struct UUID { | |||
| 58 | uuid = INVALID_UUID; | 58 | uuid = INVALID_UUID; |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | [[nodiscard]] constexpr bool IsInvalid() const { | ||
| 62 | return uuid == INVALID_UUID; | ||
| 63 | } | ||
| 64 | [[nodiscard]] constexpr bool IsValid() const { | ||
| 65 | return !IsInvalid(); | ||
| 66 | } | ||
| 67 | |||
| 61 | // TODO(ogniK): Properly generate a Nintendo ID | 68 | // TODO(ogniK): Properly generate a Nintendo ID |
| 62 | [[nodiscard]] constexpr u64 GetNintendoID() const { | 69 | [[nodiscard]] constexpr u64 GetNintendoID() const { |
| 63 | return uuid[0]; | 70 | return uuid[0]; |
diff --git a/src/common/vector_math.h b/src/common/vector_math.h index 22dba3c2d..ba7c363c1 100644 --- a/src/common/vector_math.h +++ b/src/common/vector_math.h | |||
| @@ -667,8 +667,8 @@ template <typename T> | |||
| 667 | 667 | ||
| 668 | // linear interpolation via float: 0.0=begin, 1.0=end | 668 | // linear interpolation via float: 0.0=begin, 1.0=end |
| 669 | template <typename X> | 669 | template <typename X> |
| 670 | [[nodiscard]] constexpr decltype(X{} * float{} + X{} * float{}) Lerp(const X& begin, const X& end, | 670 | [[nodiscard]] constexpr decltype(X{} * float{} + X{} * float{}) |
| 671 | const float t) { | 671 | Lerp(const X& begin, const X& end, const float t) { |
| 672 | return begin * (1.f - t) + end * t; | 672 | return begin * (1.f - t) + end * t; |
| 673 | } | 673 | } |
| 674 | 674 | ||
diff --git a/src/core/frontend/applets/profile_select.cpp b/src/core/frontend/applets/profile_select.cpp index 4c58c310f..3e4f90be2 100644 --- a/src/core/frontend/applets/profile_select.cpp +++ b/src/core/frontend/applets/profile_select.cpp | |||
| @@ -13,7 +13,8 @@ ProfileSelectApplet::~ProfileSelectApplet() = default; | |||
| 13 | void DefaultProfileSelectApplet::SelectProfile( | 13 | void DefaultProfileSelectApplet::SelectProfile( |
| 14 | std::function<void(std::optional<Common::UUID>)> callback) const { | 14 | std::function<void(std::optional<Common::UUID>)> callback) const { |
| 15 | Service::Account::ProfileManager manager; | 15 | Service::Account::ProfileManager manager; |
| 16 | callback(manager.GetUser(Settings::values.current_user.GetValue()).value_or(Common::UUID{})); | 16 | callback(manager.GetUser(Settings::values.current_user.GetValue()) |
| 17 | .value_or(Common::UUID{Common::INVALID_UUID})); | ||
| 17 | LOG_INFO(Service_ACC, "called, selecting current user instead of prompting..."); | 18 | LOG_INFO(Service_ACC, "called, selecting current user instead of prompting..."); |
| 18 | } | 19 | } |
| 19 | 20 | ||
diff --git a/src/core/hle/kernel/k_priority_queue.h b/src/core/hle/kernel/k_priority_queue.h index 4aa669d95..f4d71ad7e 100644 --- a/src/core/hle/kernel/k_priority_queue.h +++ b/src/core/hle/kernel/k_priority_queue.h | |||
| @@ -22,12 +22,10 @@ class KThread; | |||
| 22 | 22 | ||
| 23 | template <typename T> | 23 | template <typename T> |
| 24 | concept KPriorityQueueAffinityMask = !std::is_reference_v<T> && requires(T & t) { | 24 | concept KPriorityQueueAffinityMask = !std::is_reference_v<T> && requires(T & t) { |
| 25 | { t.GetAffinityMask() } | 25 | { t.GetAffinityMask() } -> Common::ConvertibleTo<u64>; |
| 26 | ->Common::ConvertibleTo<u64>; | ||
| 27 | {t.SetAffinityMask(0)}; | 26 | {t.SetAffinityMask(0)}; |
| 28 | 27 | ||
| 29 | { t.GetAffinity(0) } | 28 | { t.GetAffinity(0) } -> std::same_as<bool>; |
| 30 | ->std::same_as<bool>; | ||
| 31 | {t.SetAffinity(0, false)}; | 29 | {t.SetAffinity(0, false)}; |
| 32 | {t.SetAll()}; | 30 | {t.SetAll()}; |
| 33 | }; | 31 | }; |
| @@ -38,25 +36,20 @@ concept KPriorityQueueMember = !std::is_reference_v<T> && requires(T & t) { | |||
| 38 | {(typename T::QueueEntry()).Initialize()}; | 36 | {(typename T::QueueEntry()).Initialize()}; |
| 39 | {(typename T::QueueEntry()).SetPrev(std::addressof(t))}; | 37 | {(typename T::QueueEntry()).SetPrev(std::addressof(t))}; |
| 40 | {(typename T::QueueEntry()).SetNext(std::addressof(t))}; | 38 | {(typename T::QueueEntry()).SetNext(std::addressof(t))}; |
| 41 | { (typename T::QueueEntry()).GetNext() } | 39 | { (typename T::QueueEntry()).GetNext() } -> std::same_as<T*>; |
| 42 | ->std::same_as<T*>; | 40 | { (typename T::QueueEntry()).GetPrev() } -> std::same_as<T*>; |
| 43 | { (typename T::QueueEntry()).GetPrev() } | 41 | { t.GetPriorityQueueEntry(0) } -> std::same_as<typename T::QueueEntry&>; |
| 44 | ->std::same_as<T*>; | ||
| 45 | { t.GetPriorityQueueEntry(0) } | ||
| 46 | ->std::same_as<typename T::QueueEntry&>; | ||
| 47 | 42 | ||
| 48 | {t.GetAffinityMask()}; | 43 | {t.GetAffinityMask()}; |
| 49 | { std::remove_cvref_t<decltype(t.GetAffinityMask())>() } | 44 | { std::remove_cvref_t<decltype(t.GetAffinityMask())>() } -> KPriorityQueueAffinityMask; |
| 50 | ->KPriorityQueueAffinityMask; | ||
| 51 | 45 | ||
| 52 | { t.GetActiveCore() } | 46 | { t.GetActiveCore() } -> Common::ConvertibleTo<s32>; |
| 53 | ->Common::ConvertibleTo<s32>; | 47 | { t.GetPriority() } -> Common::ConvertibleTo<s32>; |
| 54 | { t.GetPriority() } | ||
| 55 | ->Common::ConvertibleTo<s32>; | ||
| 56 | }; | 48 | }; |
| 57 | 49 | ||
| 58 | template <typename Member, size_t NumCores_, int LowestPriority, int HighestPriority> | 50 | template <typename Member, size_t NumCores_, int LowestPriority, int HighestPriority> |
| 59 | requires KPriorityQueueMember<Member> class KPriorityQueue { | 51 | requires KPriorityQueueMember<Member> |
| 52 | class KPriorityQueue { | ||
| 60 | public: | 53 | public: |
| 61 | using AffinityMaskType = std::remove_cv_t< | 54 | using AffinityMaskType = std::remove_cv_t< |
| 62 | std::remove_reference_t<decltype(std::declval<Member>().GetAffinityMask())>>; | 55 | std::remove_reference_t<decltype(std::declval<Member>().GetAffinityMask())>>; |
diff --git a/src/core/hle/kernel/k_scheduler.h b/src/core/hle/kernel/k_scheduler.h index 12cfae919..c8ccc1ae4 100644 --- a/src/core/hle/kernel/k_scheduler.h +++ b/src/core/hle/kernel/k_scheduler.h | |||
| @@ -197,7 +197,7 @@ private: | |||
| 197 | 197 | ||
| 198 | class [[nodiscard]] KScopedSchedulerLock : KScopedLock<GlobalSchedulerContext::LockType> { | 198 | class [[nodiscard]] KScopedSchedulerLock : KScopedLock<GlobalSchedulerContext::LockType> { |
| 199 | public: | 199 | public: |
| 200 | explicit KScopedSchedulerLock(KernelCore & kernel); | 200 | explicit KScopedSchedulerLock(KernelCore& kernel); |
| 201 | ~KScopedSchedulerLock(); | 201 | ~KScopedSchedulerLock(); |
| 202 | }; | 202 | }; |
| 203 | 203 | ||
diff --git a/src/core/hle/kernel/k_scoped_lock.h b/src/core/hle/kernel/k_scoped_lock.h index 72c3b0252..4fb180fc6 100644 --- a/src/core/hle/kernel/k_scoped_lock.h +++ b/src/core/hle/kernel/k_scoped_lock.h | |||
| @@ -13,19 +13,18 @@ namespace Kernel { | |||
| 13 | 13 | ||
| 14 | template <typename T> | 14 | template <typename T> |
| 15 | concept KLockable = !std::is_reference_v<T> && requires(T & t) { | 15 | concept KLockable = !std::is_reference_v<T> && requires(T & t) { |
| 16 | { t.Lock() } | 16 | { t.Lock() } -> std::same_as<void>; |
| 17 | ->std::same_as<void>; | 17 | { t.Unlock() } -> std::same_as<void>; |
| 18 | { t.Unlock() } | ||
| 19 | ->std::same_as<void>; | ||
| 20 | }; | 18 | }; |
| 21 | 19 | ||
| 22 | template <typename T> | 20 | template <typename T> |
| 23 | requires KLockable<T> class [[nodiscard]] KScopedLock { | 21 | requires KLockable<T> |
| 22 | class [[nodiscard]] KScopedLock { | ||
| 24 | public: | 23 | public: |
| 25 | explicit KScopedLock(T * l) : lock_ptr(l) { | 24 | explicit KScopedLock(T* l) : lock_ptr(l) { |
| 26 | this->lock_ptr->Lock(); | 25 | this->lock_ptr->Lock(); |
| 27 | } | 26 | } |
| 28 | explicit KScopedLock(T & l) : KScopedLock(std::addressof(l)) {} | 27 | explicit KScopedLock(T& l) : KScopedLock(std::addressof(l)) {} |
| 29 | 28 | ||
| 30 | ~KScopedLock() { | 29 | ~KScopedLock() { |
| 31 | this->lock_ptr->Unlock(); | 30 | this->lock_ptr->Unlock(); |
| @@ -34,7 +33,7 @@ public: | |||
| 34 | KScopedLock(const KScopedLock&) = delete; | 33 | KScopedLock(const KScopedLock&) = delete; |
| 35 | KScopedLock& operator=(const KScopedLock&) = delete; | 34 | KScopedLock& operator=(const KScopedLock&) = delete; |
| 36 | 35 | ||
| 37 | KScopedLock(KScopedLock &&) = delete; | 36 | KScopedLock(KScopedLock&&) = delete; |
| 38 | KScopedLock& operator=(KScopedLock&&) = delete; | 37 | KScopedLock& operator=(KScopedLock&&) = delete; |
| 39 | 38 | ||
| 40 | private: | 39 | private: |
diff --git a/src/core/hle/kernel/k_scoped_scheduler_lock_and_sleep.h b/src/core/hle/kernel/k_scoped_scheduler_lock_and_sleep.h index a86af56dd..f6c75f2d9 100644 --- a/src/core/hle/kernel/k_scoped_scheduler_lock_and_sleep.h +++ b/src/core/hle/kernel/k_scoped_scheduler_lock_and_sleep.h | |||
| @@ -17,7 +17,7 @@ namespace Kernel { | |||
| 17 | 17 | ||
| 18 | class [[nodiscard]] KScopedSchedulerLockAndSleep { | 18 | class [[nodiscard]] KScopedSchedulerLockAndSleep { |
| 19 | public: | 19 | public: |
| 20 | explicit KScopedSchedulerLockAndSleep(KernelCore & kernel_, KThread * t, s64 timeout) | 20 | explicit KScopedSchedulerLockAndSleep(KernelCore& kernel_, KThread* t, s64 timeout) |
| 21 | : kernel(kernel_), thread(t), timeout_tick(timeout) { | 21 | : kernel(kernel_), thread(t), timeout_tick(timeout) { |
| 22 | // Lock the scheduler. | 22 | // Lock the scheduler. |
| 23 | kernel.GlobalSchedulerContext().scheduler_lock.Lock(); | 23 | kernel.GlobalSchedulerContext().scheduler_lock.Lock(); |
diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp index 6d9ec0a8a..689b36056 100644 --- a/src/core/hle/service/acc/acc.cpp +++ b/src/core/hle/service/acc/acc.cpp | |||
| @@ -929,8 +929,7 @@ void Module::Interface::TrySelectUserWithoutInteraction(Kernel::HLERequestContex | |||
| 929 | } | 929 | } |
| 930 | 930 | ||
| 931 | const auto user_list = profile_manager->GetAllUsers(); | 931 | const auto user_list = profile_manager->GetAllUsers(); |
| 932 | if (std::all_of(user_list.begin(), user_list.end(), | 932 | if (std::ranges::all_of(user_list, [](const auto& user) { return user.IsInvalid(); })) { |
| 933 | [](const auto& user) { return user.uuid == Common::INVALID_UUID; })) { | ||
| 934 | rb.Push(ResultUnknown); // TODO(ogniK): Find the correct error code | 933 | rb.Push(ResultUnknown); // TODO(ogniK): Find the correct error code |
| 935 | rb.PushRaw<u128>(Common::INVALID_UUID); | 934 | rb.PushRaw<u128>(Common::INVALID_UUID); |
| 936 | return; | 935 | return; |
diff --git a/src/core/hle/service/acc/profile_manager.cpp b/src/core/hle/service/acc/profile_manager.cpp index 24a1c9157..568303ced 100644 --- a/src/core/hle/service/acc/profile_manager.cpp +++ b/src/core/hle/service/acc/profile_manager.cpp | |||
| @@ -208,9 +208,10 @@ bool ProfileManager::UserExists(UUID uuid) const { | |||
| 208 | } | 208 | } |
| 209 | 209 | ||
| 210 | bool ProfileManager::UserExistsIndex(std::size_t index) const { | 210 | bool ProfileManager::UserExistsIndex(std::size_t index) const { |
| 211 | if (index >= MAX_USERS) | 211 | if (index >= MAX_USERS) { |
| 212 | return false; | 212 | return false; |
| 213 | return profiles[index].user_uuid.uuid != Common::INVALID_UUID; | 213 | } |
| 214 | return profiles[index].user_uuid.IsValid(); | ||
| 214 | } | 215 | } |
| 215 | 216 | ||
| 216 | /// Opens a specific user | 217 | /// Opens a specific user |
| @@ -304,7 +305,7 @@ bool ProfileManager::RemoveUser(UUID uuid) { | |||
| 304 | 305 | ||
| 305 | bool ProfileManager::SetProfileBase(UUID uuid, const ProfileBase& profile_new) { | 306 | bool ProfileManager::SetProfileBase(UUID uuid, const ProfileBase& profile_new) { |
| 306 | const auto index = GetUserIndex(uuid); | 307 | const auto index = GetUserIndex(uuid); |
| 307 | if (!index || profile_new.user_uuid == UUID(Common::INVALID_UUID)) { | 308 | if (!index || profile_new.user_uuid.IsInvalid()) { |
| 308 | return false; | 309 | return false; |
| 309 | } | 310 | } |
| 310 | 311 | ||
| @@ -346,7 +347,7 @@ void ProfileManager::ParseUserSaveFile() { | |||
| 346 | } | 347 | } |
| 347 | 348 | ||
| 348 | for (const auto& user : data.users) { | 349 | for (const auto& user : data.users) { |
| 349 | if (user.uuid == UUID(Common::INVALID_UUID)) { | 350 | if (user.uuid.IsInvalid()) { |
| 350 | continue; | 351 | continue; |
| 351 | } | 352 | } |
| 352 | 353 | ||
diff --git a/src/core/hle/service/am/applets/applet_profile_select.cpp b/src/core/hle/service/am/applets/applet_profile_select.cpp index bdc21778e..a6e891944 100644 --- a/src/core/hle/service/am/applets/applet_profile_select.cpp +++ b/src/core/hle/service/am/applets/applet_profile_select.cpp | |||
| @@ -60,7 +60,7 @@ void ProfileSelect::Execute() { | |||
| 60 | void ProfileSelect::SelectionComplete(std::optional<Common::UUID> uuid) { | 60 | void ProfileSelect::SelectionComplete(std::optional<Common::UUID> uuid) { |
| 61 | UserSelectionOutput output{}; | 61 | UserSelectionOutput output{}; |
| 62 | 62 | ||
| 63 | if (uuid.has_value() && uuid->uuid != Common::INVALID_UUID) { | 63 | if (uuid.has_value() && uuid->IsValid()) { |
| 64 | output.result = 0; | 64 | output.result = 0; |
| 65 | output.uuid_selected = uuid->uuid; | 65 | output.uuid_selected = uuid->uuid; |
| 66 | } else { | 66 | } else { |
diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index 7d85ecb6a..b9e765f1d 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp | |||
| @@ -415,6 +415,18 @@ void BSD::Write(Kernel::HLERequestContext& ctx) { | |||
| 415 | }); | 415 | }); |
| 416 | } | 416 | } |
| 417 | 417 | ||
| 418 | void BSD::Read(Kernel::HLERequestContext& ctx) { | ||
| 419 | IPC::RequestParser rp{ctx}; | ||
| 420 | const s32 fd = rp.Pop<s32>(); | ||
| 421 | |||
| 422 | LOG_WARNING(Service, "(STUBBED) called. fd={} len={}", fd, ctx.GetWriteBufferSize()); | ||
| 423 | |||
| 424 | IPC::ResponseBuilder rb{ctx, 4}; | ||
| 425 | rb.Push(ResultSuccess); | ||
| 426 | rb.Push<u32>(0); // ret | ||
| 427 | rb.Push<u32>(0); // bsd errno | ||
| 428 | } | ||
| 429 | |||
| 418 | void BSD::Close(Kernel::HLERequestContext& ctx) { | 430 | void BSD::Close(Kernel::HLERequestContext& ctx) { |
| 419 | IPC::RequestParser rp{ctx}; | 431 | IPC::RequestParser rp{ctx}; |
| 420 | const s32 fd = rp.Pop<s32>(); | 432 | const s32 fd = rp.Pop<s32>(); |
| @@ -855,7 +867,7 @@ BSD::BSD(Core::System& system_, const char* name) : ServiceFramework{system_, na | |||
| 855 | {22, &BSD::Shutdown, "Shutdown"}, | 867 | {22, &BSD::Shutdown, "Shutdown"}, |
| 856 | {23, nullptr, "ShutdownAllSockets"}, | 868 | {23, nullptr, "ShutdownAllSockets"}, |
| 857 | {24, &BSD::Write, "Write"}, | 869 | {24, &BSD::Write, "Write"}, |
| 858 | {25, nullptr, "Read"}, | 870 | {25, &BSD::Read, "Read"}, |
| 859 | {26, &BSD::Close, "Close"}, | 871 | {26, &BSD::Close, "Close"}, |
| 860 | {27, nullptr, "DuplicateSocket"}, | 872 | {27, nullptr, "DuplicateSocket"}, |
| 861 | {28, nullptr, "GetResourceStatistics"}, | 873 | {28, nullptr, "GetResourceStatistics"}, |
diff --git a/src/core/hle/service/sockets/bsd.h b/src/core/hle/service/sockets/bsd.h index 1d2df9c61..d68beef5c 100644 --- a/src/core/hle/service/sockets/bsd.h +++ b/src/core/hle/service/sockets/bsd.h | |||
| @@ -135,6 +135,7 @@ private: | |||
| 135 | void Send(Kernel::HLERequestContext& ctx); | 135 | void Send(Kernel::HLERequestContext& ctx); |
| 136 | void SendTo(Kernel::HLERequestContext& ctx); | 136 | void SendTo(Kernel::HLERequestContext& ctx); |
| 137 | void Write(Kernel::HLERequestContext& ctx); | 137 | void Write(Kernel::HLERequestContext& ctx); |
| 138 | void Read(Kernel::HLERequestContext& ctx); | ||
| 138 | void Close(Kernel::HLERequestContext& ctx); | 139 | void Close(Kernel::HLERequestContext& ctx); |
| 139 | void EventFd(Kernel::HLERequestContext& ctx); | 140 | void EventFd(Kernel::HLERequestContext& ctx); |
| 140 | 141 | ||
diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp index 18d7d8817..f3907c65a 100644 --- a/src/input_common/main.cpp +++ b/src/input_common/main.cpp | |||
| @@ -346,8 +346,8 @@ void InputSubsystem::ReloadInputDevices() { | |||
| 346 | impl->udp->ReloadSockets(); | 346 | impl->udp->ReloadSockets(); |
| 347 | } | 347 | } |
| 348 | 348 | ||
| 349 | std::vector<std::unique_ptr<Polling::DevicePoller>> InputSubsystem::GetPollers([ | 349 | std::vector<std::unique_ptr<Polling::DevicePoller>> InputSubsystem::GetPollers( |
| 350 | [maybe_unused]] Polling::DeviceType type) const { | 350 | [[maybe_unused]] Polling::DeviceType type) const { |
| 351 | #ifdef HAVE_SDL2 | 351 | #ifdef HAVE_SDL2 |
| 352 | return impl->sdl->GetPollers(type); | 352 | return impl->sdl->GetPollers(type); |
| 353 | #else | 353 | #else |
diff --git a/src/shader_recompiler/object_pool.h b/src/shader_recompiler/object_pool.h index f3b12d04b..a12ddcc8f 100644 --- a/src/shader_recompiler/object_pool.h +++ b/src/shader_recompiler/object_pool.h | |||
| @@ -11,14 +11,16 @@ | |||
| 11 | namespace Shader { | 11 | namespace Shader { |
| 12 | 12 | ||
| 13 | template <typename T> | 13 | template <typename T> |
| 14 | requires std::is_destructible_v<T> class ObjectPool { | 14 | requires std::is_destructible_v<T> |
| 15 | class ObjectPool { | ||
| 15 | public: | 16 | public: |
| 16 | explicit ObjectPool(size_t chunk_size = 8192) : new_chunk_size{chunk_size} { | 17 | explicit ObjectPool(size_t chunk_size = 8192) : new_chunk_size{chunk_size} { |
| 17 | node = &chunks.emplace_back(new_chunk_size); | 18 | node = &chunks.emplace_back(new_chunk_size); |
| 18 | } | 19 | } |
| 19 | 20 | ||
| 20 | template <typename... Args> | 21 | template <typename... Args> |
| 21 | requires std::is_constructible_v<T, Args...>[[nodiscard]] T* Create(Args&&... args) { | 22 | requires std::is_constructible_v<T, Args...> |
| 23 | [[nodiscard]] T* Create(Args&&... args) { | ||
| 22 | return std::construct_at(Memory(), std::forward<Args>(args)...); | 24 | return std::construct_at(Memory(), std::forward<Args>(args)...); |
| 23 | } | 25 | } |
| 24 | 26 | ||
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index adb6b7a3b..74822814d 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp | |||
| @@ -97,19 +97,14 @@ RendererVulkan::RendererVulkan(Core::TelemetrySession& telemetry_session_, | |||
| 97 | Core::Frontend::EmuWindow& emu_window, | 97 | Core::Frontend::EmuWindow& emu_window, |
| 98 | Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_, | 98 | Core::Memory::Memory& cpu_memory_, Tegra::GPU& gpu_, |
| 99 | std::unique_ptr<Core::Frontend::GraphicsContext> context_) try | 99 | std::unique_ptr<Core::Frontend::GraphicsContext> context_) try |
| 100 | : RendererBase(emu_window, std::move(context_)), | 100 | : RendererBase(emu_window, std::move(context_)), telemetry_session(telemetry_session_), |
| 101 | telemetry_session(telemetry_session_), | 101 | cpu_memory(cpu_memory_), gpu(gpu_), library(OpenLibrary()), |
| 102 | cpu_memory(cpu_memory_), | ||
| 103 | gpu(gpu_), | ||
| 104 | library(OpenLibrary()), | ||
| 105 | instance(CreateInstance(library, dld, VK_API_VERSION_1_1, render_window.GetWindowInfo().type, | 102 | instance(CreateInstance(library, dld, VK_API_VERSION_1_1, render_window.GetWindowInfo().type, |
| 106 | true, Settings::values.renderer_debug.GetValue())), | 103 | true, Settings::values.renderer_debug.GetValue())), |
| 107 | debug_callback(Settings::values.renderer_debug ? CreateDebugCallback(instance) : nullptr), | 104 | debug_callback(Settings::values.renderer_debug ? CreateDebugCallback(instance) : nullptr), |
| 108 | surface(CreateSurface(instance, render_window)), | 105 | surface(CreateSurface(instance, render_window)), |
| 109 | device(CreateDevice(instance, dld, *surface)), | 106 | device(CreateDevice(instance, dld, *surface)), memory_allocator(device, false), |
| 110 | memory_allocator(device, false), | 107 | state_tracker(gpu), scheduler(device, state_tracker), |
| 111 | state_tracker(gpu), | ||
| 112 | scheduler(device, state_tracker), | ||
| 113 | swapchain(*surface, device, scheduler, render_window.GetFramebufferLayout().width, | 108 | swapchain(*surface, device, scheduler, render_window.GetFramebufferLayout().width, |
| 114 | render_window.GetFramebufferLayout().height, false), | 109 | render_window.GetFramebufferLayout().height, false), |
| 115 | blit_screen(cpu_memory, render_window, device, memory_allocator, swapchain, scheduler, | 110 | blit_screen(cpu_memory, render_window, device, memory_allocator, swapchain, scheduler, |
diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 7c0f91007..11cd41ad7 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp | |||
| @@ -507,8 +507,9 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { | |||
| 507 | vertex_attributes.push_back({ | 507 | vertex_attributes.push_back({ |
| 508 | .location = static_cast<u32>(index), | 508 | .location = static_cast<u32>(index), |
| 509 | .binding = 0, | 509 | .binding = 0, |
| 510 | .format = type == 1 ? VK_FORMAT_R32_SFLOAT | 510 | .format = type == 1 ? VK_FORMAT_R32_SFLOAT |
| 511 | : type == 2 ? VK_FORMAT_R32_SINT : VK_FORMAT_R32_UINT, | 511 | : type == 2 ? VK_FORMAT_R32_SINT |
| 512 | : VK_FORMAT_R32_UINT, | ||
| 512 | .offset = 0, | 513 | .offset = 0, |
| 513 | }); | 514 | }); |
| 514 | } | 515 | } |
diff --git a/src/video_core/texture_cache/slot_vector.h b/src/video_core/texture_cache/slot_vector.h index 74cd3c9d8..50df06409 100644 --- a/src/video_core/texture_cache/slot_vector.h +++ b/src/video_core/texture_cache/slot_vector.h | |||
| @@ -31,8 +31,8 @@ struct SlotId { | |||
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| 33 | template <class T> | 33 | template <class T> |
| 34 | requires std::is_nothrow_move_assignable_v<T>&& | 34 | requires std::is_nothrow_move_assignable_v<T> && std::is_nothrow_move_constructible_v<T> |
| 35 | std::is_nothrow_move_constructible_v<T> class SlotVector { | 35 | class SlotVector { |
| 36 | public: | 36 | public: |
| 37 | class Iterator { | 37 | class Iterator { |
| 38 | friend SlotVector<T>; | 38 | friend SlotVector<T>; |
diff --git a/src/yuzu/configuration/configure_debug.ui b/src/yuzu/configuration/configure_debug.ui index 3fe9ff7de..b884a56b0 100644 --- a/src/yuzu/configuration/configure_debug.ui +++ b/src/yuzu/configuration/configure_debug.ui | |||
| @@ -2,85 +2,55 @@ | |||
| 2 | <ui version="4.0"> | 2 | <ui version="4.0"> |
| 3 | <class>ConfigureDebug</class> | 3 | <class>ConfigureDebug</class> |
| 4 | <widget class="QWidget" name="ConfigureDebug"> | 4 | <widget class="QWidget" name="ConfigureDebug"> |
| 5 | <property name="geometry"> | ||
| 6 | <rect> | ||
| 7 | <x>0</x> | ||
| 8 | <y>0</y> | ||
| 9 | <width>400</width> | ||
| 10 | <height>777</height> | ||
| 11 | </rect> | ||
| 12 | </property> | ||
| 13 | <property name="windowTitle"> | ||
| 14 | <string>Form</string> | ||
| 15 | </property> | ||
| 16 | <layout class="QVBoxLayout" name="verticalLayout_1"> | 5 | <layout class="QVBoxLayout" name="verticalLayout_1"> |
| 17 | <item> | 6 | <item> |
| 18 | <widget class="QGroupBox" name="groupBox_2"> | 7 | <widget class="QGroupBox" name="groupBox_2"> |
| 19 | <property name="title"> | 8 | <property name="title"> |
| 20 | <string>Logging</string> | 9 | <string>Logging</string> |
| 21 | </property> | 10 | </property> |
| 22 | <layout class="QVBoxLayout" name="verticalLayout_4"> | 11 | <layout class="QGridLayout" name="gridLayout_1"> |
| 23 | <item> | 12 | <item row="0" column="0" colspan="2"> |
| 24 | <layout class="QHBoxLayout" name="horizontalLayout_2"> | 13 | <layout class="QHBoxLayout" name="horizontalLayout_1"> |
| 25 | <item> | 14 | <item> |
| 26 | <widget class="QLabel" name="label_1"> | 15 | <widget class="QLabel" name="label_1"> |
| 27 | <property name="text"> | 16 | <property name="text"> |
| 28 | <string>Global Log Filter</string> | 17 | <string>Global Log Filter</string> |
| 18 | </property> | ||
| 19 | </widget> | ||
| 20 | </item> | ||
| 21 | <item> | ||
| 22 | <widget class="QLineEdit" name="log_filter_edit"/> | ||
| 23 | </item> | ||
| 24 | </layout> | ||
| 25 | </item> | ||
| 26 | <item row="1" column="0"> | ||
| 27 | <widget class="QCheckBox" name="toggle_console"> | ||
| 28 | <property name="text"> | ||
| 29 | <string>Show Log in Console</string> | ||
| 30 | </property> | ||
| 31 | </widget> | ||
| 32 | </item> | ||
| 33 | <item row="1" column="1"> | ||
| 34 | <widget class="QPushButton" name="open_log_button"> | ||
| 35 | <property name="text"> | ||
| 36 | <string>Open Log Location</string> | ||
| 37 | </property> | ||
| 38 | </widget> | ||
| 39 | </item> | ||
| 40 | <item row="2" column="0"> | ||
| 41 | <widget class="QCheckBox" name="extended_logging"> | ||
| 42 | <property name="enabled"> | ||
| 43 | <bool>true</bool> | ||
| 29 | </property> | 44 | </property> |
| 30 | </widget> | 45 | <property name="toolTip"> |
| 31 | </item> | 46 | <string>When checked, the max size of the log increases from 100 MB to 1 GB</string> |
| 32 | <item> | ||
| 33 | <widget class="QLineEdit" name="log_filter_edit"/> | ||
| 34 | </item> | ||
| 35 | </layout> | ||
| 36 | </item> | ||
| 37 | <item> | ||
| 38 | <layout class="QHBoxLayout" name="horizontalLayout_3"> | ||
| 39 | <item> | ||
| 40 | <widget class="QCheckBox" name="toggle_console"> | ||
| 41 | <property name="text"> | ||
| 42 | <string>Show Log in Console</string> | ||
| 43 | </property> | 47 | </property> |
| 44 | </widget> | ||
| 45 | </item> | ||
| 46 | <item> | ||
| 47 | <widget class="QPushButton" name="open_log_button"> | ||
| 48 | <property name="text"> | 48 | <property name="text"> |
| 49 | <string>Open Log Location</string> | 49 | <string>Enable Extended Logging**</string> |
| 50 | </property> | 50 | </property> |
| 51 | </widget> | 51 | </widget> |
| 52 | </item> | 52 | </item> |
| 53 | </layout> | 53 | </layout> |
| 54 | </item> | ||
| 55 | <item> | ||
| 56 | <widget class="QCheckBox" name="extended_logging"> | ||
| 57 | <property name="enabled"> | ||
| 58 | <bool>true</bool> | ||
| 59 | </property> | ||
| 60 | <property name="toolTip"> | ||
| 61 | <string>When checked, the max size of the log increases from 100 MB to 1 GB</string> | ||
| 62 | </property> | ||
| 63 | <property name="text"> | ||
| 64 | <string>Enable Extended Logging</string> | ||
| 65 | </property> | ||
| 66 | </widget> | ||
| 67 | </item> | ||
| 68 | <item> | ||
| 69 | <widget class="QLabel" name="label_2"> | ||
| 70 | <property name="font"> | ||
| 71 | <font> | ||
| 72 | <italic>true</italic> | ||
| 73 | </font> | ||
| 74 | </property> | ||
| 75 | <property name="text"> | ||
| 76 | <string>This will be reset automatically when yuzu closes.</string> | ||
| 77 | </property> | ||
| 78 | <property name="indent"> | ||
| 79 | <number>20</number> | ||
| 80 | </property> | ||
| 81 | </widget> | ||
| 82 | </item> | ||
| 83 | </layout> | ||
| 84 | </widget> | 54 | </widget> |
| 85 | </item> | 55 | </item> |
| 86 | <item> | 56 | <item> |
| @@ -111,7 +81,7 @@ | |||
| 111 | <property name="title"> | 81 | <property name="title"> |
| 112 | <string>Graphics</string> | 82 | <string>Graphics</string> |
| 113 | </property> | 83 | </property> |
| 114 | <layout class="QGridLayout" name="gridLayout_3"> | 84 | <layout class="QGridLayout" name="gridLayout_2"> |
| 115 | <item row="0" column="0"> | 85 | <item row="0" column="0"> |
| 116 | <widget class="QCheckBox" name="enable_graphics_debugging"> | 86 | <widget class="QCheckBox" name="enable_graphics_debugging"> |
| 117 | <property name="enabled"> | 87 | <property name="enabled"> |
| @@ -176,33 +146,18 @@ | |||
| 176 | <property name="title"> | 146 | <property name="title"> |
| 177 | <string>Debugging</string> | 147 | <string>Debugging</string> |
| 178 | </property> | 148 | </property> |
| 179 | <layout class="QVBoxLayout" name="verticalLayout_7"> | 149 | <layout class="QGridLayout" name="gridLayout_3"> |
| 180 | <item> | 150 | <item row="0" column="0"> |
| 181 | <widget class="QCheckBox" name="fs_access_log"> | 151 | <widget class="QCheckBox" name="fs_access_log"> |
| 182 | <property name="text"> | 152 | <property name="text"> |
| 183 | <string>Enable FS Access Log</string> | 153 | <string>Enable FS Access Log</string> |
| 184 | </property> | 154 | </property> |
| 185 | </widget> | 155 | </widget> |
| 186 | </item> | 156 | </item> |
| 187 | <item> | 157 | <item row="1" column="0"> |
| 188 | <widget class="QCheckBox" name="reporting_services"> | 158 | <widget class="QCheckBox" name="reporting_services"> |
| 189 | <property name="text"> | 159 | <property name="text"> |
| 190 | <string>Enable Verbose Reporting Services</string> | 160 | <string>Enable Verbose Reporting Services**</string> |
| 191 | </property> | ||
| 192 | </widget> | ||
| 193 | </item> | ||
| 194 | <item> | ||
| 195 | <widget class="QLabel" name="label_4"> | ||
| 196 | <property name="font"> | ||
| 197 | <font> | ||
| 198 | <italic>true</italic> | ||
| 199 | </font> | ||
| 200 | </property> | ||
| 201 | <property name="text"> | ||
| 202 | <string>This will be reset automatically when yuzu closes.</string> | ||
| 203 | </property> | ||
| 204 | <property name="indent"> | ||
| 205 | <number>20</number> | ||
| 206 | </property> | 161 | </property> |
| 207 | </widget> | 162 | </widget> |
| 208 | </item> | 163 | </item> |
| @@ -214,47 +169,32 @@ | |||
| 214 | <property name="title"> | 169 | <property name="title"> |
| 215 | <string>Advanced</string> | 170 | <string>Advanced</string> |
| 216 | </property> | 171 | </property> |
| 217 | <layout class="QVBoxLayout" name="verticalLayout_8"> | 172 | <layout class="QGridLayout" name="gridLayout_4"> |
| 218 | <item> | 173 | <item> row="0" column="0"> |
| 219 | <widget class="QCheckBox" name="quest_flag"> | 174 | <widget class="QCheckBox" name="quest_flag"> |
| 220 | <property name="text"> | 175 | <property name="text"> |
| 221 | <string>Kiosk (Quest) Mode</string> | 176 | <string>Kiosk (Quest) Mode</string> |
| 222 | </property> | 177 | </property> |
| 223 | </widget> | 178 | </widget> |
| 224 | </item> | 179 | </item> |
| 225 | <item> | 180 | <item row="1" column="0"> |
| 226 | <widget class="QCheckBox" name="enable_cpu_debugging"> | 181 | <widget class="QCheckBox" name="enable_cpu_debugging"> |
| 227 | <property name="text"> | 182 | <property name="text"> |
| 228 | <string>Enable CPU Debugging</string> | 183 | <string>Enable CPU Debugging</string> |
| 229 | </property> | 184 | </property> |
| 230 | </widget> | 185 | </widget> |
| 231 | </item> | 186 | </item> |
| 232 | <item> | 187 | <item row="2" column="0"> |
| 233 | <widget class="QCheckBox" name="use_debug_asserts"> | 188 | <widget class="QCheckBox" name="use_debug_asserts"> |
| 234 | <property name="text"> | 189 | <property name="text"> |
| 235 | <string>Enable Debug Asserts</string> | 190 | <string>Enable Debug Asserts</string> |
| 236 | </property> | 191 | </property> |
| 237 | </widget> | 192 | </widget> |
| 238 | </item> | 193 | </item> |
| 239 | <item> | 194 | <item row="0" column="1"> |
| 240 | <widget class="QCheckBox" name="use_auto_stub"> | 195 | <widget class="QCheckBox" name="use_auto_stub"> |
| 241 | <property name="text"> | 196 | <property name="text"> |
| 242 | <string>Enable Auto-Stub</string> | 197 | <string>Enable Auto-Stub**</string> |
| 243 | </property> | ||
| 244 | </widget> | ||
| 245 | </item> | ||
| 246 | <item> | ||
| 247 | <widget class="QLabel" name="label_5"> | ||
| 248 | <property name="font"> | ||
| 249 | <font> | ||
| 250 | <italic>true</italic> | ||
| 251 | </font> | ||
| 252 | </property> | ||
| 253 | <property name="text"> | ||
| 254 | <string>This will be reset automatically when yuzu closes.</string> | ||
| 255 | </property> | ||
| 256 | <property name="indent"> | ||
| 257 | <number>20</number> | ||
| 258 | </property> | 198 | </property> |
| 259 | </widget> | 199 | </widget> |
| 260 | </item> | 200 | </item> |
| @@ -262,20 +202,19 @@ | |||
| 262 | </widget> | 202 | </widget> |
| 263 | </item> | 203 | </item> |
| 264 | <item> | 204 | <item> |
| 265 | <spacer name="verticalSpacer"> | 205 | <widget class="QLabel" name="label_5"> |
| 266 | <property name="orientation"> | 206 | <property name="font"> |
| 267 | <enum>Qt::Vertical</enum> | 207 | <font> |
| 208 | <italic>true</italic> | ||
| 209 | </font> | ||
| 268 | </property> | 210 | </property> |
| 269 | <property name="sizeType"> | 211 | <property name="text"> |
| 270 | <enum>QSizePolicy::Expanding</enum> | 212 | <string>**This will be reset automatically when yuzu closes.</string> |
| 271 | </property> | 213 | </property> |
| 272 | <property name="sizeHint" stdset="0"> | 214 | <property name="indent"> |
| 273 | <size> | 215 | <number>20</number> |
| 274 | <width>20</width> | ||
| 275 | <height>40</height> | ||
| 276 | </size> | ||
| 277 | </property> | 216 | </property> |
| 278 | </spacer> | 217 | </widget> |
| 279 | </item> | 218 | </item> |
| 280 | </layout> | 219 | </layout> |
| 281 | </widget> | 220 | </widget> |