diff --git a/dist/net.shadps4.shadPS4.metainfo.xml b/dist/net.shadps4.shadPS4.metainfo.xml index f42840e9b..d2a6747d9 100644 --- a/dist/net.shadps4.shadPS4.metainfo.xml +++ b/dist/net.shadps4.shadPS4.metainfo.xml @@ -11,6 +11,7 @@ GPL-2.0 net.shadps4.shadPS4.desktop https://shadps4.net/ + https://github.com/shadps4-emu/shadPS4

shadPS4 is an early PlayStation 4 emulator for Windows, Linux and macOS written in C++.

The emulator is still early in development, so don't expect a flawless experience. Nonetheless, the emulator can already run a number of commercial games.

diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp index fc9cdd00c..8449acf43 100644 --- a/src/common/logging/backend.cpp +++ b/src/common/logging/backend.cpp @@ -1,4 +1,5 @@ // SPDX-FileCopyrightText: Copyright 2014 Citra Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include @@ -98,6 +99,7 @@ private: std::size_t bytes_written = 0; }; +#ifdef _WIN32 /** * Backend that writes to Visual Studio's output window */ @@ -108,15 +110,14 @@ public: ~DebuggerBackend() = default; void Write(const Entry& entry) { -#ifdef _WIN32 ::OutputDebugStringW(UTF8ToUTF16W(FormatLogMessage(entry).append(1, '\n')).c_str()); -#endif } void Flush() {} void EnableForStacktrace() {} }; +#endif bool initialization_in_progress_suppress_logging = true; @@ -221,6 +222,7 @@ public: .line_num = line_num, .function = function, .message = std::move(message), + .thread = Common::GetCurrentThreadName(), }; if (EmulatorSettings::GetInstance()->GetLogType() == "async") { message_queue.EmplaceWait(entry); @@ -268,7 +270,9 @@ private: } void ForEachBackend(auto lambda) { - // lambda(debugger_backend); +#ifdef _WIN32 + lambda(debugger_backend); +#endif lambda(color_console_backend); lambda(file_backend); } @@ -281,7 +285,9 @@ private: static inline bool should_append{false}; Filter filter; +#ifdef _WIN32 DebuggerBackend debugger_backend{}; +#endif ColorConsoleBackend color_console_backend{}; FileBackend file_backend; diff --git a/src/common/logging/log_entry.h b/src/common/logging/log_entry.h index cd4ae9355..6c529f878 100644 --- a/src/common/logging/log_entry.h +++ b/src/common/logging/log_entry.h @@ -21,6 +21,7 @@ struct Entry { u32 line_num = 0; std::string function; std::string message; + std::string thread; }; } // namespace Common::Log diff --git a/src/common/logging/text_formatter.cpp b/src/common/logging/text_formatter.cpp index e7a786396..e8c5f4979 100644 --- a/src/common/logging/text_formatter.cpp +++ b/src/common/logging/text_formatter.cpp @@ -14,7 +14,6 @@ #include "common/logging/log.h" #include "common/logging/log_entry.h" #include "common/logging/text_formatter.h" -#include "common/thread.h" namespace Common::Log { @@ -25,9 +24,8 @@ std::string FormatLogMessage(const Entry& entry) { const char* class_name = GetLogClassName(entry.log_class); const char* level_name = GetLevelName(entry.log_level); - return fmt::format("[{}] <{}> ({}) {}:{} {}: {}", class_name, level_name, - Common::GetCurrentThreadName(), entry.filename, entry.line_num, - entry.function, entry.message); + return fmt::format("[{}] <{}> ({}) {}:{} {}: {}", class_name, level_name, entry.thread, + entry.filename, entry.line_num, entry.function, entry.message); } void PrintMessage(const Entry& entry) { diff --git a/src/common/memory_patcher.cpp b/src/common/memory_patcher.cpp index 045a530cb..ad737dab4 100644 --- a/src/common/memory_patcher.cpp +++ b/src/common/memory_patcher.cpp @@ -51,14 +51,14 @@ std::string convertValueToHex(const std::string type, const std::string valueStr uint32_t i; } floatUnion; floatUnion.f = std::stof(valueStr); - result = toHex(floatUnion.i, sizeof(floatUnion.i)); + result = toHex(std::byteswap(floatUnion.i), sizeof(floatUnion.i)); } else if (type == "float64") { union { double d; uint64_t i; } doubleUnion; doubleUnion.d = std::stod(valueStr); - result = toHex(doubleUnion.i, sizeof(doubleUnion.i)); + result = toHex(std::byteswap(doubleUnion.i), sizeof(doubleUnion.i)); } else if (type == "utf8") { std::vector byteArray = std::vector(valueStr.begin(), valueStr.end());