Merge remote-tracking branch 'upstream/main' into hybrid

This commit is contained in:
Lander Gallastegi 2025-05-22 19:52:20 +02:00
commit f3148f12a0
53 changed files with 423 additions and 343 deletions

View File

@ -134,6 +134,7 @@ if (GIT_REMOTE_RESULT OR GIT_REMOTE_NAME STREQUAL "")
ERROR_QUIET ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_STRIP_TRAILING_WHITESPACE
) )
message("got remote: ${GIT_REMOTE_NAME}")
endif() endif()
# If running in GitHub Actions and the above fails # If running in GitHub Actions and the above fails
@ -177,7 +178,7 @@ if (GIT_REMOTE_RESULT OR GIT_REMOTE_NAME STREQUAL "")
set(GIT_BRANCH "${GITHUB_BRANCH}") set(GIT_BRANCH "${GITHUB_BRANCH}")
elseif ("${PR_NUMBER}" STREQUAL "" AND NOT "${GITHUB_REF}" STREQUAL "") elseif ("${PR_NUMBER}" STREQUAL "" AND NOT "${GITHUB_REF}" STREQUAL "")
set(GIT_BRANCH "${GITHUB_REF}") set(GIT_BRANCH "${GITHUB_REF}")
else() elseif("${GIT_BRANCH}" STREQUAL "")
message("couldn't find branch") message("couldn't find branch")
set(GIT_BRANCH "detached-head") set(GIT_BRANCH "detached-head")
endif() endif()
@ -186,8 +187,8 @@ else()
string(FIND "${GIT_REMOTE_NAME}" "/" INDEX) string(FIND "${GIT_REMOTE_NAME}" "/" INDEX)
if (INDEX GREATER -1) if (INDEX GREATER -1)
string(SUBSTRING "${GIT_REMOTE_NAME}" 0 "${INDEX}" GIT_REMOTE_NAME) string(SUBSTRING "${GIT_REMOTE_NAME}" 0 "${INDEX}" GIT_REMOTE_NAME)
else() elseif("${GIT_REMOTE_NAME}" STREQUAL "")
# If no remote is present (only a branch name), default to origin message("reset to origin")
set(GIT_REMOTE_NAME "origin") set(GIT_REMOTE_NAME "origin")
endif() endif()
endif() endif()
@ -202,7 +203,7 @@ execute_process(
# Set Version # Set Version
set(EMULATOR_VERSION_MAJOR "0") set(EMULATOR_VERSION_MAJOR "0")
set(EMULATOR_VERSION_MINOR "8") set(EMULATOR_VERSION_MINOR "9")
set(EMULATOR_VERSION_PATCH "1") set(EMULATOR_VERSION_PATCH "1")
set_source_files_properties(src/shadps4.rc PROPERTIES COMPILE_DEFINITIONS "EMULATOR_VERSION_MAJOR=${EMULATOR_VERSION_MAJOR};EMULATOR_VERSION_MINOR=${EMULATOR_VERSION_MINOR};EMULATOR_VERSION_PATCH=${EMULATOR_VERSION_PATCH}") set_source_files_properties(src/shadps4.rc PROPERTIES COMPILE_DEFINITIONS "EMULATOR_VERSION_MAJOR=${EMULATOR_VERSION_MAJOR};EMULATOR_VERSION_MINOR=${EMULATOR_VERSION_MINOR};EMULATOR_VERSION_PATCH=${EMULATOR_VERSION_PATCH}")
@ -409,6 +410,7 @@ set(SYSTEM_LIBS src/core/libraries/system/commondialog.cpp
src/core/libraries/save_data/save_memory.h src/core/libraries/save_data/save_memory.h
src/core/libraries/save_data/savedata.cpp src/core/libraries/save_data/savedata.cpp
src/core/libraries/save_data/savedata.h src/core/libraries/save_data/savedata.h
src/core/libraries/save_data/savedata_error.h
src/core/libraries/save_data/dialog/savedatadialog.cpp src/core/libraries/save_data/dialog/savedatadialog.cpp
src/core/libraries/save_data/dialog/savedatadialog.h src/core/libraries/save_data/dialog/savedatadialog.h
src/core/libraries/save_data/dialog/savedatadialog_ui.cpp src/core/libraries/save_data/dialog/savedatadialog_ui.cpp

View File

@ -37,7 +37,10 @@
<category translate="no">Game</category> <category translate="no">Game</category>
</categories> </categories>
<releases> <releases>
<release version="0.8.0" date="2025-05-23"> <release version="0.9.0" date="2025-05-22">
<url>https://github.com/shadps4-emu/shadPS4/releases/tag/v.0.9.0</url>
</release>
<release version="0.8.0" date="2025-04-23">
<url>https://github.com/shadps4-emu/shadPS4/releases/tag/v.0.8.0</url> <url>https://github.com/shadps4-emu/shadPS4/releases/tag/v.0.8.0</url>
</release> </release>
<release version="0.7.0" date="2025-03-23"> <release version="0.7.0" date="2025-03-23">

View File

@ -154,7 +154,7 @@ bool GetLoadGameSizeEnabled() {
std::filesystem::path GetSaveDataPath() { std::filesystem::path GetSaveDataPath() {
if (save_data_path.empty()) { if (save_data_path.empty()) {
return Common::FS::GetUserPath(Common::FS::PathType::SaveDataDir); return Common::FS::GetUserPath(Common::FS::PathType::UserDir) / "savedata";
} }
return save_data_path; return save_data_path;
} }

View File

@ -128,7 +128,6 @@ static auto UserPaths = [] {
create_path(PathType::LogDir, user_dir / LOG_DIR); create_path(PathType::LogDir, user_dir / LOG_DIR);
create_path(PathType::ScreenshotsDir, user_dir / SCREENSHOTS_DIR); create_path(PathType::ScreenshotsDir, user_dir / SCREENSHOTS_DIR);
create_path(PathType::ShaderDir, user_dir / SHADER_DIR); create_path(PathType::ShaderDir, user_dir / SHADER_DIR);
create_path(PathType::SaveDataDir, user_dir / SAVEDATA_DIR);
create_path(PathType::GameDataDir, user_dir / GAMEDATA_DIR); create_path(PathType::GameDataDir, user_dir / GAMEDATA_DIR);
create_path(PathType::TempDataDir, user_dir / TEMPDATA_DIR); create_path(PathType::TempDataDir, user_dir / TEMPDATA_DIR);
create_path(PathType::SysModuleDir, user_dir / SYSMODULES_DIR); create_path(PathType::SysModuleDir, user_dir / SYSMODULES_DIR);

View File

@ -18,7 +18,6 @@ enum class PathType {
LogDir, // Where log files are stored. LogDir, // Where log files are stored.
ScreenshotsDir, // Where screenshots are stored. ScreenshotsDir, // Where screenshots are stored.
ShaderDir, // Where shaders are stored. ShaderDir, // Where shaders are stored.
SaveDataDir, // Where guest save data is stored.
TempDataDir, // Where game temp data is stored. TempDataDir, // Where game temp data is stored.
GameDataDir, // Where game data is stored. GameDataDir, // Where game data is stored.
SysModuleDir, // Where system modules are stored. SysModuleDir, // Where system modules are stored.
@ -36,7 +35,6 @@ constexpr auto PORTABLE_DIR = "user";
constexpr auto LOG_DIR = "log"; constexpr auto LOG_DIR = "log";
constexpr auto SCREENSHOTS_DIR = "screenshots"; constexpr auto SCREENSHOTS_DIR = "screenshots";
constexpr auto SHADER_DIR = "shader"; constexpr auto SHADER_DIR = "shader";
constexpr auto SAVEDATA_DIR = "savedata";
constexpr auto GAMEDATA_DIR = "data"; constexpr auto GAMEDATA_DIR = "data";
constexpr auto TEMPDATA_DIR = "temp"; constexpr auto TEMPDATA_DIR = "temp";
constexpr auto SYSMODULES_DIR = "sys_modules"; constexpr auto SYSMODULES_DIR = "sys_modules";

View File

@ -206,6 +206,10 @@ s32 PS4_SYSV_ABI sceNpTrophyDestroyHandle(OrbisNpTrophyHandle handle) {
if (handle == ORBIS_NP_TROPHY_INVALID_HANDLE) if (handle == ORBIS_NP_TROPHY_INVALID_HANDLE)
return ORBIS_NP_TROPHY_ERROR_INVALID_HANDLE; return ORBIS_NP_TROPHY_ERROR_INVALID_HANDLE;
if (handle >= trophy_handles.size()) {
LOG_ERROR(Lib_NpTrophy, "Invalid handle {}", handle);
return ORBIS_NP_TROPHY_ERROR_INVALID_HANDLE;
}
if (!trophy_handles.is_allocated({static_cast<u32>(handle)})) { if (!trophy_handles.is_allocated({static_cast<u32>(handle)})) {
return ORBIS_NP_TROPHY_ERROR_INVALID_HANDLE; return ORBIS_NP_TROPHY_ERROR_INVALID_HANDLE;
} }

View File

@ -155,7 +155,7 @@ SaveDialogState::SaveDialogState(const OrbisSaveDataDialogParam& param) {
if (item->focusPos != FocusPos::DIRNAME) { if (item->focusPos != FocusPos::DIRNAME) {
this->focus_pos = item->focusPos; this->focus_pos = item->focusPos;
} else { } else if (item->focusPosDirName != nullptr) {
this->focus_pos = item->focusPosDirName->data.to_string(); this->focus_pos = item->focusPosDirName->data.to_string();
} }
this->style = item->itemStyle; this->style = item->itemStyle;

View File

@ -10,15 +10,14 @@
#include <utility> #include <utility>
#include <fmt/format.h> #include <fmt/format.h>
#include <core/libraries/system/msgdialog_ui.h> #include "boost/icl/concept/interval.hpp"
#include "common/assert.h"
#include "common/elf_info.h" #include "common/elf_info.h"
#include "common/logging/log.h" #include "common/logging/log.h"
#include "common/path_util.h" #include "common/path_util.h"
#include "common/singleton.h" #include "common/singleton.h"
#include "common/thread.h" #include "common/thread.h"
#include "core/file_sys/fs.h" #include "core/file_sys/fs.h"
#include "core/libraries/system/msgdialog_ui.h"
#include "save_instance.h" #include "save_instance.h"
using Common::FS::IOFile; using Common::FS::IOFile;
@ -35,11 +34,12 @@ namespace Libraries::SaveData::SaveMemory {
static Core::FileSys::MntPoints* g_mnt = Common::Singleton<Core::FileSys::MntPoints>::Instance(); static Core::FileSys::MntPoints* g_mnt = Common::Singleton<Core::FileSys::MntPoints>::Instance();
struct SlotData { struct SlotData {
OrbisUserServiceUserId user_id; OrbisUserServiceUserId user_id{};
std::string game_serial; std::string game_serial;
std::filesystem::path folder_path; std::filesystem::path folder_path;
PSF sfo; PSF sfo;
std::vector<u8> memory_cache; std::vector<u8> memory_cache;
size_t memory_cache_size{};
}; };
static std::mutex g_slot_mtx; static std::mutex g_slot_mtx;
@ -97,7 +97,8 @@ std::filesystem::path GetSavePath(OrbisUserServiceUserId user_id, u32 slot_id,
return SaveInstance::MakeDirSavePath(user_id, Common::ElfInfo::Instance().GameSerial(), dir); return SaveInstance::MakeDirSavePath(user_id, Common::ElfInfo::Instance().GameSerial(), dir);
} }
size_t SetupSaveMemory(OrbisUserServiceUserId user_id, u32 slot_id, std::string_view game_serial) { size_t SetupSaveMemory(OrbisUserServiceUserId user_id, u32 slot_id, std::string_view game_serial,
size_t memory_size) {
std::lock_guard lck{g_slot_mtx}; std::lock_guard lck{g_slot_mtx};
const auto save_dir = GetSavePath(user_id, slot_id, game_serial); const auto save_dir = GetSavePath(user_id, slot_id, game_serial);
@ -109,6 +110,7 @@ size_t SetupSaveMemory(OrbisUserServiceUserId user_id, u32 slot_id, std::string_
.folder_path = save_dir, .folder_path = save_dir,
.sfo = {}, .sfo = {},
.memory_cache = {}, .memory_cache = {},
.memory_cache_size = memory_size,
}; };
SaveInstance::SetupDefaultParamSFO(data.sfo, GetSaveDir(slot_id), std::string{game_serial}); SaveInstance::SetupDefaultParamSFO(data.sfo, GetSaveDir(slot_id), std::string{game_serial});
@ -196,9 +198,9 @@ void ReadMemory(u32 slot_id, void* buf, size_t buf_size, int64_t offset) {
auto& data = g_attached_slots[slot_id]; auto& data = g_attached_slots[slot_id];
auto& memory = data.memory_cache; auto& memory = data.memory_cache;
if (memory.empty()) { // Load file if (memory.empty()) { // Load file
memory.resize(data.memory_cache_size);
IOFile f{data.folder_path / FilenameSaveDataMemory, Common::FS::FileAccessMode::Read}; IOFile f{data.folder_path / FilenameSaveDataMemory, Common::FS::FileAccessMode::Read};
if (f.IsOpen()) { if (f.IsOpen()) {
memory.resize(f.GetSize());
f.Seek(0); f.Seek(0);
f.ReadSpan(std::span{memory}); f.ReadSpan(std::span{memory});
} }
@ -222,5 +224,4 @@ void WriteMemory(u32 slot_id, void* buf, size_t buf_size, int64_t offset) {
Backup::NewRequest(data.user_id, data.game_serial, GetSaveDir(slot_id), Backup::NewRequest(data.user_id, data.game_serial, GetSaveDir(slot_id),
Backup::OrbisSaveDataEventType::__DO_NOT_SAVE); Backup::OrbisSaveDataEventType::__DO_NOT_SAVE);
} }
} // namespace Libraries::SaveData::SaveMemory } // namespace Libraries::SaveData::SaveMemory

View File

@ -4,13 +4,13 @@
#pragma once #pragma once
#include <vector> #include <vector>
#include "save_backup.h" #include "core/libraries/save_data/save_backup.h"
class PSF; class PSF;
namespace Libraries::SaveData { namespace Libraries::SaveData {
using OrbisUserServiceUserId = s32; using OrbisUserServiceUserId = s32;
} } // namespace Libraries::SaveData
namespace Libraries::SaveData::SaveMemory { namespace Libraries::SaveData::SaveMemory {
@ -22,7 +22,8 @@ void PersistMemory(u32 slot_id, bool lock = true);
std::string_view game_serial); std::string_view game_serial);
// returns the size of the save memory if exists // returns the size of the save memory if exists
size_t SetupSaveMemory(OrbisUserServiceUserId user_id, u32 slot_id, std::string_view game_serial); size_t SetupSaveMemory(OrbisUserServiceUserId user_id, u32 slot_id, std::string_view game_serial,
size_t memory_size);
// Write the icon. Set buf to null to read the standard icon. // Write the icon. Set buf to null to read the standard icon.
void SetIcon(u32 slot_id, void* buf = nullptr, size_t buf_size = 0); void SetIcon(u32 slot_id, void* buf = nullptr, size_t buf_size = 0);

View File

@ -5,10 +5,10 @@
#include <thread> #include <thread>
#include <vector> #include <vector>
#include <core/libraries/system/msgdialog_ui.h>
#include <magic_enum/magic_enum.hpp> #include <magic_enum/magic_enum.hpp>
#include "common/assert.h" #include "common/assert.h"
#include "common/config.h"
#include "common/cstring.h" #include "common/cstring.h"
#include "common/elf_info.h" #include "common/elf_info.h"
#include "common/enum.h" #include "common/enum.h"
@ -20,7 +20,9 @@
#include "core/libraries/error_codes.h" #include "core/libraries/error_codes.h"
#include "core/libraries/libs.h" #include "core/libraries/libs.h"
#include "core/libraries/save_data/savedata.h" #include "core/libraries/save_data/savedata.h"
#include "core/libraries/save_data/savedata_error.h"
#include "core/libraries/system/msgdialog.h" #include "core/libraries/system/msgdialog.h"
#include "core/libraries/system/msgdialog_ui.h"
#include "save_backup.h" #include "save_backup.h"
#include "save_instance.h" #include "save_instance.h"
#include "save_memory.h" #include "save_memory.h"
@ -33,27 +35,6 @@ using Common::ElfInfo;
namespace Libraries::SaveData { namespace Libraries::SaveData {
enum class Error : u32 {
OK = 0,
USER_SERVICE_NOT_INITIALIZED = 0x80960002,
PARAMETER = 0x809F0000,
NOT_INITIALIZED = 0x809F0001,
OUT_OF_MEMORY = 0x809F0002,
BUSY = 0x809F0003,
NOT_MOUNTED = 0x809F0004,
EXISTS = 0x809F0007,
NOT_FOUND = 0x809F0008,
NO_SPACE_FS = 0x809F000A,
INTERNAL = 0x809F000B,
MOUNT_FULL = 0x809F000C,
BAD_MOUNTED = 0x809F000D,
BROKEN = 0x809F000F,
INVALID_LOGIN_USER = 0x809F0011,
MEMORY_NOT_READY = 0x809F0012,
BACKUP_BUSY = 0x809F0013,
BUSY_FOR_SAVING = 0x809F0016,
};
enum class OrbisSaveDataSaveDataMemoryOption : u32 { enum class OrbisSaveDataSaveDataMemoryOption : u32 {
NONE = 0, NONE = 0,
SET_PARAM = 1 << 0, SET_PARAM = 1 << 0,
@ -336,7 +317,9 @@ static std::array<std::optional<SaveInstance>, 16> g_mount_slots;
static void initialize() { static void initialize() {
g_initialized = true; g_initialized = true;
g_game_serial = ElfInfo::Instance().GameSerial(); g_game_serial = Common::Singleton<PSF>::Instance()
->GetString("INSTALL_DIR_SAVEDATA")
.value_or(ElfInfo::Instance().GameSerial());
g_fw_ver = ElfInfo::Instance().FirmwareVer(); g_fw_ver = ElfInfo::Instance().FirmwareVer();
Backup::StartThread(); Backup::StartThread();
} }
@ -456,7 +439,7 @@ static Error saveDataMount(const OrbisSaveDataMount2* mount_info,
LOG_INFO(Lib_SaveData, "called with invalid block size"); LOG_INFO(Lib_SaveData, "called with invalid block size");
} }
const auto root_save = Common::FS::GetUserPath(Common::FS::PathType::SaveDataDir); const auto root_save = Config::GetSaveDataPath();
fs::create_directories(root_save); fs::create_directories(root_save);
const auto available = fs::space(root_save).available; const auto available = fs::space(root_save).available;
@ -1593,8 +1576,8 @@ Error PS4_SYSV_ABI sceSaveDataSetupSaveDataMemory2(const OrbisSaveDataMemorySetu
} }
try { try {
size_t existed_size = size_t existed_size = SaveMemory::SetupSaveMemory(setupParam->userId, slot_id,
SaveMemory::SetupSaveMemory(setupParam->userId, slot_id, g_game_serial); g_game_serial, setupParam->memorySize);
if (existed_size == 0) { // Just created if (existed_size == 0) { // Just created
if (g_fw_ver >= ElfInfo::FW_45 && setupParam->initParam != nullptr) { if (g_fw_ver >= ElfInfo::FW_45 && setupParam->initParam != nullptr) {
auto& sfo = SaveMemory::GetParamSFO(slot_id); auto& sfo = SaveMemory::GetParamSFO(slot_id);

View File

@ -0,0 +1,27 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
namespace Libraries::SaveData {
enum class Error : u32 {
OK = 0,
USER_SERVICE_NOT_INITIALIZED = 0x80960002,
PARAMETER = 0x809F0000,
NOT_INITIALIZED = 0x809F0001,
OUT_OF_MEMORY = 0x809F0002,
BUSY = 0x809F0003,
NOT_MOUNTED = 0x809F0004,
EXISTS = 0x809F0007,
NOT_FOUND = 0x809F0008,
NO_SPACE_FS = 0x809F000A,
INTERNAL = 0x809F000B,
MOUNT_FULL = 0x809F000C,
BAD_MOUNTED = 0x809F000D,
BROKEN = 0x809F000F,
INVALID_LOGIN_USER = 0x809F0011,
MEMORY_NOT_READY = 0x809F0012,
BACKUP_BUSY = 0x809F0013,
BUSY_FOR_SAVING = 0x809F0016,
};
} // namespace Libraries::SaveData

View File

@ -362,11 +362,8 @@ int MemoryManager::MapMemory(void** out_addr, VAddr virtual_addr, size_t size, M
return ORBIS_KERNEL_ERROR_ENOMEM; return ORBIS_KERNEL_ERROR_ENOMEM;
} }
// When virtual addr is zero, force it to virtual_base. The guest cannot pass Fixed // Limit the minumum address to SystemManagedVirtualBase to prevent hardware-specific issues.
// flag so we will take the branch that searches for free (or reserved) mappings. VAddr mapped_addr = (virtual_addr == 0) ? impl.SystemManagedVirtualBase() : virtual_addr;
virtual_addr = (virtual_addr == 0) ? impl.SystemManagedVirtualBase() : virtual_addr;
alignment = alignment > 0 ? alignment : 16_KB;
VAddr mapped_addr = alignment > 0 ? Common::AlignUp(virtual_addr, alignment) : virtual_addr;
// Fixed mapping means the virtual address must exactly match the provided one. // Fixed mapping means the virtual address must exactly match the provided one.
if (True(flags & MemoryMapFlags::Fixed)) { if (True(flags & MemoryMapFlags::Fixed)) {
@ -396,7 +393,9 @@ int MemoryManager::MapMemory(void** out_addr, VAddr virtual_addr, size_t size, M
// Find the first free area starting with provided virtual address. // Find the first free area starting with provided virtual address.
if (False(flags & MemoryMapFlags::Fixed)) { if (False(flags & MemoryMapFlags::Fixed)) {
mapped_addr = SearchFree(mapped_addr, size, alignment); // Provided address needs to be aligned before we can map.
alignment = alignment > 0 ? alignment : 16_KB;
mapped_addr = SearchFree(Common::AlignUp(mapped_addr, alignment), size, alignment);
if (mapped_addr == -1) { if (mapped_addr == -1) {
// No suitable memory areas to map to // No suitable memory areas to map to
return ORBIS_KERNEL_ERROR_ENOMEM; return ORBIS_KERNEL_ERROR_ENOMEM;

View File

@ -53,7 +53,7 @@ template <class ReturnType, class... FuncArgs, class... CallArgs>
ReturnType ExecuteGuest(PS4_SYSV_ABI ReturnType (*func)(FuncArgs...), CallArgs&&... args) { ReturnType ExecuteGuest(PS4_SYSV_ABI ReturnType (*func)(FuncArgs...), CallArgs&&... args) {
EnsureThreadInitialized(); EnsureThreadInitialized();
// clear stack to avoid trash from EnsureThreadInitialized // clear stack to avoid trash from EnsureThreadInitialized
ClearStack<13_KB>(); ClearStack<12_KB>();
return func(std::forward<CallArgs>(args)...); return func(std::forward<CallArgs>(args)...);
} }

View File

@ -190,16 +190,24 @@ void Emulator::Run(const std::filesystem::path& file, const std::vector<std::str
std::string game_title = fmt::format("{} - {} <{}>", id, title, app_version); std::string game_title = fmt::format("{} - {} <{}>", id, title, app_version);
std::string window_title = ""; std::string window_title = "";
if (Common::g_is_release) { std::string remote_url(Common::g_scm_remote_url);
window_title = fmt::format("shadPS4 v{} | {}", Common::g_version, game_title); std::string remote_host;
} else { try {
std::string remote_url(Common::g_scm_remote_url); if (*remote_url.rbegin() == '/') {
std::string remote_host; remote_url.pop_back();
try {
remote_host = remote_url.substr(19, remote_url.rfind('/') - 19);
} catch (...) {
remote_host = "unknown";
} }
remote_host = remote_url.substr(19, remote_url.rfind('/') - 19);
} catch (...) {
remote_host = "unknown";
}
if (Common::g_is_release) {
if (remote_host == "shadps4-emu" || remote_url.length() == 0) {
window_title = fmt::format("shadPS4 v{} | {}", Common::g_version, game_title);
} else {
window_title =
fmt::format("shadPS4 {}/v{} | {}", remote_host, Common::g_version, game_title);
}
} else {
if (remote_host == "shadps4-emu" || remote_url.length() == 0) { if (remote_host == "shadps4-emu" || remote_url.length() == 0) {
window_title = fmt::format("shadPS4 v{} {} {} | {}", Common::g_version, window_title = fmt::format("shadPS4 v{} {} {} | {}", Common::g_version,
Common::g_scm_branch, Common::g_scm_desc, game_title); Common::g_scm_branch, Common::g_scm_desc, game_title);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 236 KiB

After

Width:  |  Height:  |  Size: 133 KiB

View File

@ -79,6 +79,11 @@ public:
if (const auto play_time = psf.GetString("PLAY_TIME"); play_time.has_value()) { if (const auto play_time = psf.GetString("PLAY_TIME"); play_time.has_value()) {
game.play_time = *play_time; game.play_time = *play_time;
} }
if (const auto save_dir = psf.GetString("INSTALL_DIR_SAVEDATA"); save_dir.has_value()) {
game.save_dir = *save_dir;
} else {
game.save_dir = game.serial;
}
} }
return game; return game;
} }

View File

@ -25,6 +25,7 @@ struct GameInfo {
std::string version = "Unknown"; std::string version = "Unknown";
std::string region = "Unknown"; std::string region = "Unknown";
std::string fw = "Unknown"; std::string fw = "Unknown";
std::string save_dir = "Unknown";
std::string play_time = "Unknown"; std::string play_time = "Unknown";
CompatibilityEntry compatibility = CompatibilityEntry{CompatibilityStatus::Unknown}; CompatibilityEntry compatibility = CompatibilityEntry{CompatibilityStatus::Unknown};

View File

@ -156,11 +156,9 @@ public:
} }
if (selected == openSaveDataFolder) { if (selected == openSaveDataFolder) {
QString userPath; QString saveDataPath;
Common::FS::PathToQString(userPath, Common::FS::PathToQString(saveDataPath,
Common::FS::GetUserPath(Common::FS::PathType::UserDir)); Config::GetSaveDataPath() / "1" / m_games[itemID].save_dir);
QString saveDataPath =
userPath + "/savedata/1/" + QString::fromStdString(m_games[itemID].serial);
QDir(saveDataPath).mkpath(saveDataPath); QDir(saveDataPath).mkpath(saveDataPath);
QDesktopServices::openUrl(QUrl::fromLocalFile(saveDataPath)); QDesktopServices::openUrl(QUrl::fromLocalFile(saveDataPath));
} }
@ -485,8 +483,7 @@ public:
dlc_path, Config::getAddonInstallDir() / dlc_path, Config::getAddonInstallDir() /
Common::FS::PathFromQString(folder_path).parent_path().filename()); Common::FS::PathFromQString(folder_path).parent_path().filename());
Common::FS::PathToQString(save_data_path, Common::FS::PathToQString(save_data_path,
Common::FS::GetUserPath(Common::FS::PathType::UserDir) / Config::GetSaveDataPath() / "1" / m_games[itemID].save_dir);
"savedata/1" / m_games[itemID].serial);
Common::FS::PathToQString(trophy_data_path, Common::FS::PathToQString(trophy_data_path,
Common::FS::GetUserPath(Common::FS::PathType::MetaDataDir) / Common::FS::GetUserPath(Common::FS::PathType::MetaDataDir) /

View File

@ -825,6 +825,9 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumHeight">
<number>48</number>
</property>
<property name="focusPolicy"> <property name="focusPolicy">
<enum>Qt::FocusPolicy::NoFocus</enum> <enum>Qt::FocusPolicy::NoFocus</enum>
</property> </property>
@ -841,6 +844,9 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="minimumHeight">
<number>48</number>
</property>
<property name="focusPolicy"> <property name="focusPolicy">
<enum>Qt::FocusPolicy::NoFocus</enum> <enum>Qt::FocusPolicy::NoFocus</enum>
</property> </property>
@ -983,8 +989,8 @@
<widget class="QLabel" name="l_controller"> <widget class="QLabel" name="l_controller">
<property name="maximumSize"> <property name="maximumSize">
<size> <size>
<width>500</width> <width>424</width>
<height>200</height> <height>250</height>
</size> </size>
</property> </property>
<property name="pixmap"> <property name="pixmap">

View File

@ -55,16 +55,23 @@ bool MainWindow::Init() {
// show ui // show ui
setMinimumSize(720, 405); setMinimumSize(720, 405);
std::string window_title = ""; std::string window_title = "";
if (Common::g_is_release) { std::string remote_url(Common::g_scm_remote_url);
window_title = fmt::format("shadPS4 v{}", Common::g_version); std::string remote_host;
} else { try {
std::string remote_url(Common::g_scm_remote_url); if (*remote_url.rbegin() == '/') {
std::string remote_host; remote_url.pop_back();
try {
remote_host = remote_url.substr(19, remote_url.rfind('/') - 19);
} catch (...) {
remote_host = "unknown";
} }
remote_host = remote_url.substr(19, remote_url.rfind('/') - 19);
} catch (...) {
remote_host = "unknown";
}
if (Common::g_is_release) {
if (remote_host == "shadps4-emu" || remote_url.length() == 0) {
window_title = fmt::format("shadPS4 v{}", Common::g_version);
} else {
window_title = fmt::format("shadPS4 {}/v{}", remote_host, Common::g_version);
}
} else {
if (remote_host == "shadps4-emu" || remote_url.length() == 0) { if (remote_host == "shadps4-emu" || remote_url.length() == 0) {
window_title = fmt::format("shadPS4 v{} {} {}", Common::g_version, Common::g_scm_branch, window_title = fmt::format("shadPS4 v{} {} {}", Common::g_version, Common::g_scm_branch,
Common::g_scm_desc); Common::g_scm_desc);

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>قائمة الألعاب</translation> <translation>قائمة الألعاب</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * إصدار Vulkan غير مدعوم</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>تحميل الشفرات لجميع الألعاب المثبتة</translation> <translation>تحميل الشفرات لجميع الألعاب المثبتة</translation>
@ -2051,6 +2047,10 @@ Nightly: نُسخ تحتوي على أحدث الميزات، لكنها أقل
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>افتح مجلد الصور/الأصوات الخاصة بالجوائز المخصصة:\nيمكنك إضافة صور مخصصة للجوائز وصوت مرفق.\nأضف الملفات إلى مجلد custom_trophy بالأسماء التالية:\ntrophy.wav أو trophy.mp3، bronze.png، gold.png، platinum.png، silver.png\nملاحظة: الصوت سيعمل فقط في الإصدارات التي تستخدم QT.</translation> <translation>افتح مجلد الصور/الأصوات الخاصة بالجوائز المخصصة:\nيمكنك إضافة صور مخصصة للجوائز وصوت مرفق.\nأضف الملفات إلى مجلد custom_trophy بالأسماء التالية:\ntrophy.wav أو trophy.mp3، bronze.png، gold.png، platinum.png، silver.png\nملاحظة: الصوت سيعمل فقط في الإصدارات التي تستخدم QT.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Spiloversigt</translation> <translation>Spiloversigt</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Ikke understøttet Vulkan-version</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Hent snyd til alle installerede spil</translation> <translation>Hent snyd til alle installerede spil</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Spieleliste</translation> <translation>Spieleliste</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Nicht unterstützte Vulkan-Version</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Cheats für alle installierten Spiele herunterladen</translation> <translation>Cheats für alle installierten Spiele herunterladen</translation>
@ -2054,6 +2050,10 @@ Fügen Sie die Dateien dem Ordner custom_trophy mit folgenden Namen hinzu:\n
trophy.wav ODER trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\n trophy.wav ODER trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\n
Hinweis: Der Sound funktioniert nur in Qt-Versionen.</translation> Hinweis: Der Sound funktioniert nur in Qt-Versionen.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Λίστα παιχνιδιών</translation> <translation>Λίστα παιχνιδιών</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Μη υποστηριζόμενη έκδοση Vulkan</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Λήψη Cheats για όλα τα εγκατεστημένα παιχνίδια</translation> <translation>Λήψη Cheats για όλα τα εγκατεστημένα παιχνίδια</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Game List</translation> <translation>Game List</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Unsupported Vulkan Version</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Download Cheats For All Installed Games</translation> <translation>Download Cheats For All Installed Games</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Lista de Juegos</translation> <translation>Lista de Juegos</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versión de Vulkan no soportada</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Descargar trucos para todos los juegos instalados</translation> <translation>Descargar trucos para todos los juegos instalados</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Abre la carpeta de trofeos/sonidos personalizados:\nPuedes añadir imágenes y un audio personalizados a los trofeos.\nAñade los archivos a custom_trophy con los siguientes nombres:\ntrophy.wav o trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNota: El sonido sólo funcionará en versiones QT.</translation> <translation>Abre la carpeta de trofeos/sonidos personalizados:\nPuedes añadir imágenes y un audio personalizados a los trofeos.\nAñade los archivos a custom_trophy con los siguientes nombres:\ntrophy.wav o trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNota: El sonido sólo funcionará en versiones QT.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>لیست بازی</translation> <translation>لیست بازی</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation>شما پشتیبانی نمیشود Vulkan ورژن *</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>دانلود چیت برای همه بازی ها</translation> <translation>دانلود چیت برای همه بازی ها</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Pelilista</translation> <translation>Pelilista</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Ei Tuettu Vulkan-versio</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Lataa Huijaukset Kaikille Asennetuille Peleille</translation> <translation>Lataa Huijaukset Kaikille Asennetuille Peleille</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Liste de jeux</translation> <translation>Liste de jeux</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Version de Vulkan non prise en charge</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Télécharger les Cheats pour tous les jeux installés</translation> <translation>Télécharger les Cheats pour tous les jeux installés</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Ouvrez le dossier des images/sons des trophées personnalisés:\nVous pouvez ajouter des images personnalisées aux trophées et aux sons.\nAjoutez les fichiers à custom_trophy avec les noms suivants:\ntrophy.wav OU trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote : Le son ne fonctionnera que dans les versions QT.</translation> <translation>Ouvrez le dossier des images/sons des trophées personnalisés:\nVous pouvez ajouter des images personnalisées aux trophées et aux sons.\nAjoutez les fichiers à custom_trophy avec les noms suivants:\ntrophy.wav OU trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote : Le son ne fonctionnera que dans les versions QT.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Version de Vulkan non prise en charge</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Játéklista</translation> <translation>Játéklista</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Nem támogatott Vulkan verzió</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Csalások letöltése minden telepített játékhoz</translation> <translation>Csalások letöltése minden telepített játékhoz</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Daftar game</translation> <translation>Daftar game</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versi Vulkan Tidak Didukung</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Unduh Cheat Untuk Semua Game Yang Terpasang</translation> <translation>Unduh Cheat Untuk Semua Game Yang Terpasang</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Elenco giochi</translation> <translation>Elenco giochi</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versione Vulkan non supportata</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Scarica Trucchi per tutti i giochi installati</translation> <translation>Scarica Trucchi per tutti i giochi installati</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Apri la cartella personalizzata delle immagini/suoni trofei:\ possibile aggiungere immagini personalizzate ai trofei e un audio.\nAggiungi i file a custom_trophy con i seguenti nomi:\ntrophy.wav OPPURE trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNota: Il suono funzionerà solo nelle versioni QT.</translation> <translation>Apri la cartella personalizzata delle immagini/suoni trofei:\ possibile aggiungere immagini personalizzate ai trofei e un audio.\nAggiungi i file a custom_trophy con i seguenti nomi:\ntrophy.wav OPPURE trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNota: Il suono funzionerà solo nelle versioni QT.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versione Vulkan non supportata</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkanバージョン</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation></translation> <translation></translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -7,15 +7,15 @@
<name>AboutDialog</name> <name>AboutDialog</name>
<message> <message>
<source>About shadPS4</source> <source>About shadPS4</source>
<translation type="unfinished">About shadPS4</translation> <translation>shadPS4</translation>
</message> </message>
<message> <message>
<source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source> <source>shadPS4 is an experimental open-source emulator for the PlayStation 4.</source>
<translation type="unfinished">shadPS4 is an experimental open-source emulator for the PlayStation 4.</translation> <translation>shadPS4는 PlayStation 4 .</translation>
</message> </message>
<message> <message>
<source>This software should not be used to play games you have not legally obtained.</source> <source>This software should not be used to play games you have not legally obtained.</source>
<translation type="unfinished">This software should not be used to play games you have not legally obtained.</translation> <translation> .</translation>
</message> </message>
</context> </context>
<context> <context>
@ -26,238 +26,238 @@
</message> </message>
<message> <message>
<source>Cheats/Patches are experimental.\nUse with caution.\n\nDownload cheats individually by selecting the repository and clicking the download button.\nIn the Patches tab, you can download all patches at once, choose which ones you want to use, and save your selection.\n\nSince we do not develop the Cheats/Patches,\nplease report issues to the cheat author.\n\nCreated a new cheat? Visit:\n</source> <source>Cheats/Patches are experimental.\nUse with caution.\n\nDownload cheats individually by selecting the repository and clicking the download button.\nIn the Patches tab, you can download all patches at once, choose which ones you want to use, and save your selection.\n\nSince we do not develop the Cheats/Patches,\nplease report issues to the cheat author.\n\nCreated a new cheat? Visit:\n</source>
<translation type="unfinished">Cheats/Patches are experimental.\nUse with caution.\n\nDownload cheats individually by selecting the repository and clicking the download button.\nIn the Patches tab, you can download all patches at once, choose which ones you want to use, and save your selection.\n\nSince we do not develop the Cheats/Patches,\nplease report issues to the cheat author.\n\nCreated a new cheat? Visit:\n</translation> <translation>/ .\n사용 .\n\n치트를 , .\n패치 , .\n\n치트/ ,\n문제가 .\n\n새로운 ? :\n</translation>
</message> </message>
<message> <message>
<source>No Image Available</source> <source>No Image Available</source>
<translation type="unfinished">No Image Available</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Serial: </source> <source>Serial: </source>
<translation type="unfinished">Serial: </translation> <translation>: </translation>
</message> </message>
<message> <message>
<source>Version: </source> <source>Version: </source>
<translation type="unfinished">Version: </translation> <translation>: </translation>
</message> </message>
<message> <message>
<source>Size: </source> <source>Size: </source>
<translation type="unfinished">Size: </translation> <translation>: </translation>
</message> </message>
<message> <message>
<source>Select Cheat File:</source> <source>Select Cheat File:</source>
<translation type="unfinished">Select Cheat File:</translation> <translation> :</translation>
</message> </message>
<message> <message>
<source>Repository:</source> <source>Repository:</source>
<translation type="unfinished">Repository:</translation> <translation>:</translation>
</message> </message>
<message> <message>
<source>Download Cheats</source> <source>Download Cheats</source>
<translation type="unfinished">Download Cheats</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Delete File</source> <source>Delete File</source>
<translation type="unfinished">Delete File</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>No files selected.</source> <source>No files selected.</source>
<translation type="unfinished">No files selected.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>You can delete the cheats you don&apos;t want after downloading them.</source> <source>You can delete the cheats you don&apos;t want after downloading them.</source>
<translation type="unfinished">You can delete the cheats you don&apos;t want after downloading them.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>Do you want to delete the selected file?\n%1</source> <source>Do you want to delete the selected file?\n%1</source>
<translation type="unfinished">Do you want to delete the selected file?\n%1</translation> <translation> ?\n%1</translation>
</message> </message>
<message> <message>
<source>Select Patch File:</source> <source>Select Patch File:</source>
<translation type="unfinished">Select Patch File:</translation> <translation> :</translation>
</message> </message>
<message> <message>
<source>Download Patches</source> <source>Download Patches</source>
<translation type="unfinished">Download Patches</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Save</source> <source>Save</source>
<translation type="unfinished">Save</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Cheats</source> <source>Cheats</source>
<translation type="unfinished">Cheats</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Patches</source> <source>Patches</source>
<translation type="unfinished">Patches</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished">Error</translation> <translation></translation>
</message> </message>
<message> <message>
<source>No patch selected.</source> <source>No patch selected.</source>
<translation type="unfinished">No patch selected.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>Unable to open files.json for reading.</source> <source>Unable to open files.json for reading.</source>
<translation type="unfinished">Unable to open files.json for reading.</translation> <translation>Files.json을 .</translation>
</message> </message>
<message> <message>
<source>No patch file found for the current serial.</source> <source>No patch file found for the current serial.</source>
<translation type="unfinished">No patch file found for the current serial.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>Unable to open the file for reading.</source> <source>Unable to open the file for reading.</source>
<translation type="unfinished">Unable to open the file for reading.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>Unable to open the file for writing.</source> <source>Unable to open the file for writing.</source>
<translation type="unfinished">Unable to open the file for writing.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>Failed to parse XML: </source> <source>Failed to parse XML: </source>
<translation type="unfinished">Failed to parse XML: </translation> <translation>XML : </translation>
</message> </message>
<message> <message>
<source>Success</source> <source>Success</source>
<translation type="unfinished">Success</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Options saved successfully.</source> <source>Options saved successfully.</source>
<translation type="unfinished">Options saved successfully.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>Invalid Source</source> <source>Invalid Source</source>
<translation type="unfinished">Invalid Source</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>The selected source is invalid.</source> <source>The selected source is invalid.</source>
<translation type="unfinished">The selected source is invalid.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>File Exists</source> <source>File Exists</source>
<translation type="unfinished">File Exists</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>File already exists. Do you want to replace it?</source> <source>File already exists. Do you want to replace it?</source>
<translation type="unfinished">File already exists. Do you want to replace it?</translation> <translation> . ?</translation>
</message> </message>
<message> <message>
<source>Failed to save file:</source> <source>Failed to save file:</source>
<translation type="unfinished">Failed to save file:</translation> <translation> :</translation>
</message> </message>
<message> <message>
<source>Failed to download file:</source> <source>Failed to download file:</source>
<translation type="unfinished">Failed to download file:</translation> <translation> :</translation>
</message> </message>
<message> <message>
<source>Cheats Not Found</source> <source>Cheats Not Found</source>
<translation type="unfinished">Cheats Not Found</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>No Cheats found for this game in this version of the selected repository,try another repository or a different version of the game.</source> <source>No Cheats found for this game in this version of the selected repository,try another repository or a different version of the game.</source>
<translation type="unfinished">No Cheats found for this game in this version of the selected repository,try another repository or a different version of the game.</translation> <translation> . .</translation>
</message> </message>
<message> <message>
<source>Cheats Downloaded Successfully</source> <source>Cheats Downloaded Successfully</source>
<translation type="unfinished">Cheats Downloaded Successfully</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>You have successfully downloaded the cheats for this version of the game from the selected repository. You can try downloading from another repository, if it is available it will also be possible to use it by selecting the file from the list.</source> <source>You have successfully downloaded the cheats for this version of the game from the selected repository. You can try downloading from another repository, if it is available it will also be possible to use it by selecting the file from the list.</source>
<translation type="unfinished">You have successfully downloaded the cheats for this version of the game from the selected repository. You can try downloading from another repository, if it is available it will also be possible to use it by selecting the file from the list.</translation> <translation> . , .</translation>
</message> </message>
<message> <message>
<source>Failed to save:</source> <source>Failed to save:</source>
<translation type="unfinished">Failed to save:</translation> <translation> :</translation>
</message> </message>
<message> <message>
<source>Failed to download:</source> <source>Failed to download:</source>
<translation type="unfinished">Failed to download:</translation> <translation> :</translation>
</message> </message>
<message> <message>
<source>Download Complete</source> <source>Download Complete</source>
<translation type="unfinished">Download Complete</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Patches Downloaded Successfully! All Patches available for all games have been downloaded, there is no need to download them individually for each game as happens in Cheats. If the patch does not appear, it may be that it does not exist for the specific serial and version of the game.</source> <source>Patches Downloaded Successfully! All Patches available for all games have been downloaded, there is no need to download them individually for each game as happens in Cheats. If the patch does not appear, it may be that it does not exist for the specific serial and version of the game.</source>
<translation type="unfinished">Patches Downloaded Successfully! All Patches available for all games have been downloaded, there is no need to download them individually for each game as happens in Cheats. If the patch does not appear, it may be that it does not exist for the specific serial and version of the game.</translation> <translation> ! , . , .</translation>
</message> </message>
<message> <message>
<source>Failed to parse JSON data from HTML.</source> <source>Failed to parse JSON data from HTML.</source>
<translation type="unfinished">Failed to parse JSON data from HTML.</translation> <translation>HTML에서 JSON .</translation>
</message> </message>
<message> <message>
<source>Failed to retrieve HTML page.</source> <source>Failed to retrieve HTML page.</source>
<translation type="unfinished">Failed to retrieve HTML page.</translation> <translation>HTML .</translation>
</message> </message>
<message> <message>
<source>The game is in version: %1</source> <source>The game is in version: %1</source>
<translation type="unfinished">The game is in version: %1</translation> <translation> : %1</translation>
</message> </message>
<message> <message>
<source>The downloaded patch only works on version: %1</source> <source>The downloaded patch only works on version: %1</source>
<translation type="unfinished">The downloaded patch only works on version: %1</translation> <translation> %1 .</translation>
</message> </message>
<message> <message>
<source>You may need to update your game.</source> <source>You may need to update your game.</source>
<translation type="unfinished">You may need to update your game.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>Incompatibility Notice</source> <source>Incompatibility Notice</source>
<translation type="unfinished">Incompatibility Notice</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Failed to open file:</source> <source>Failed to open file:</source>
<translation type="unfinished">Failed to open file:</translation> <translation> :</translation>
</message> </message>
<message> <message>
<source>XML ERROR:</source> <source>XML ERROR:</source>
<translation type="unfinished">XML ERROR:</translation> <translation>XML :</translation>
</message> </message>
<message> <message>
<source>Failed to open files.json for writing</source> <source>Failed to open files.json for writing</source>
<translation type="unfinished">Failed to open files.json for writing</translation> <translation>files.json </translation>
</message> </message>
<message> <message>
<source>Author: </source> <source>Author: </source>
<translation type="unfinished">Author: </translation> <translation>: </translation>
</message> </message>
<message> <message>
<source>Directory does not exist:</source> <source>Directory does not exist:</source>
<translation type="unfinished">Directory does not exist:</translation> <translation> :</translation>
</message> </message>
<message> <message>
<source>Failed to open files.json for reading.</source> <source>Failed to open files.json for reading.</source>
<translation type="unfinished">Failed to open files.json for reading.</translation> <translation>files.json .</translation>
</message> </message>
<message> <message>
<source>Name:</source> <source>Name:</source>
<translation type="unfinished">Name:</translation> <translation>:</translation>
</message> </message>
<message> <message>
<source>Can&apos;t apply cheats before the game is started</source> <source>Can&apos;t apply cheats before the game is started</source>
<translation type="unfinished">Can&apos;t apply cheats before the game is started</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Close</source> <source>Close</source>
<translation type="unfinished">Close</translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
<name>CheckUpdate</name> <name>CheckUpdate</name>
<message> <message>
<source>Auto Updater</source> <source>Auto Updater</source>
<translation type="unfinished">Auto Updater</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished">Error</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Network error:</source> <source>Network error:</source>
<translation type="unfinished">Network error:</translation> <translation> :</translation>
</message> </message>
<message> <message>
<source>The Auto Updater allows up to 60 update checks per hour.\nYou have reached this limit. Please try again later.</source> <source>The Auto Updater allows up to 60 update checks per hour.\nYou have reached this limit. Please try again later.</source>
@ -265,91 +265,91 @@
</message> </message>
<message> <message>
<source>Failed to parse update information.</source> <source>Failed to parse update information.</source>
<translation type="unfinished">Failed to parse update information.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>No pre-releases found.</source> <source>No pre-releases found.</source>
<translation type="unfinished">No pre-releases found.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>Invalid release data.</source> <source>Invalid release data.</source>
<translation type="unfinished">Invalid release data.</translation> <translation> .</translation>
</message> </message>
<message> <message>
<source>No download URL found for the specified asset.</source> <source>No download URL found for the specified asset.</source>
<translation type="unfinished">No download URL found for the specified asset.</translation> <translation> URL을 .</translation>
</message> </message>
<message> <message>
<source>Your version is already up to date!</source> <source>Your version is already up to date!</source>
<translation type="unfinished">Your version is already up to date!</translation> <translation> !</translation>
</message> </message>
<message> <message>
<source>Update Available</source> <source>Update Available</source>
<translation type="unfinished">Update Available</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Update Channel</source> <source>Update Channel</source>
<translation type="unfinished">Update Channel</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Current Version</source> <source>Current Version</source>
<translation type="unfinished">Current Version</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Latest Version</source> <source>Latest Version</source>
<translation type="unfinished">Latest Version</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Do you want to update?</source> <source>Do you want to update?</source>
<translation type="unfinished">Do you want to update?</translation> <translation>?</translation>
</message> </message>
<message> <message>
<source>Show Changelog</source> <source>Show Changelog</source>
<translation type="unfinished">Show Changelog</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Check for Updates at Startup</source> <source>Check for Updates at Startup</source>
<translation type="unfinished">Check for Updates at Startup</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Update</source> <source>Update</source>
<translation type="unfinished">Update</translation> <translation></translation>
</message> </message>
<message> <message>
<source>No</source> <source>No</source>
<translation type="unfinished">No</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Hide Changelog</source> <source>Hide Changelog</source>
<translation type="unfinished">Hide Changelog</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Changes</source> <source>Changes</source>
<translation type="unfinished">Changes</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Network error occurred while trying to access the URL</source> <source>Network error occurred while trying to access the URL</source>
<translation type="unfinished">Network error occurred while trying to access the URL</translation> <translation>URL에 </translation>
</message> </message>
<message> <message>
<source>Download Complete</source> <source>Download Complete</source>
<translation type="unfinished">Download Complete</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>The update has been downloaded, press OK to install.</source> <source>The update has been downloaded, press OK to install.</source>
<translation type="unfinished">The update has been downloaded, press OK to install.</translation> <translation> . .</translation>
</message> </message>
<message> <message>
<source>Failed to save the update file at</source> <source>Failed to save the update file at</source>
<translation type="unfinished">Failed to save the update file at</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Starting Update...</source> <source>Starting Update...</source>
<translation type="unfinished">Starting Update...</translation> <translation> ...</translation>
</message> </message>
<message> <message>
<source>Failed to create the update script file</source> <source>Failed to create the update script file</source>
<translation type="unfinished">Failed to create the update script file</translation> <translation> </translation>
</message> </message>
</context> </context>
<context> <context>
@ -407,83 +407,83 @@
<name>ControlSettings</name> <name>ControlSettings</name>
<message> <message>
<source>Configure Controls</source> <source>Configure Controls</source>
<translation type="unfinished">Configure Controls</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>D-Pad</source> <source>D-Pad</source>
<translation type="unfinished">D-Pad</translation> <translation>D-</translation>
</message> </message>
<message> <message>
<source>Up</source> <source>Up</source>
<translation type="unfinished">Up</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Left</source> <source>Left</source>
<translation type="unfinished">Left</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Right</source> <source>Right</source>
<translation type="unfinished">Right</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Down</source> <source>Down</source>
<translation type="unfinished">Down</translation> <translation></translation>
</message> </message>
<message> <message>
<source>Left Stick Deadzone (def:2 max:127)</source> <source>Left Stick Deadzone (def:2 max:127)</source>
<translation type="unfinished">Left Stick Deadzone (def:2 max:127)</translation> <translation> (기본값:2 최대값:127)</translation>
</message> </message>
<message> <message>
<source>Left Deadzone</source> <source>Left Deadzone</source>
<translation type="unfinished">Left Deadzone</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Left Stick</source> <source>Left Stick</source>
<translation type="unfinished">Left Stick</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Config Selection</source> <source>Config Selection</source>
<translation type="unfinished">Config Selection</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Common Config</source> <source>Common Config</source>
<translation type="unfinished">Common Config</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>Use per-game configs</source> <source>Use per-game configs</source>
<translation type="unfinished">Use per-game configs</translation> <translation> </translation>
</message> </message>
<message> <message>
<source>L1 / LB</source> <source>L1 / LB</source>
<translation type="unfinished">L1 / LB</translation> <translation>L1 / LB</translation>
</message> </message>
<message> <message>
<source>L2 / LT</source> <source>L2 / LT</source>
<translation type="unfinished">L2 / LT</translation> <translation>L2 / LT</translation>
</message> </message>
<message> <message>
<source>Back</source> <source>Back</source>
<translation type="unfinished">Back</translation> <translation></translation>
</message> </message>
<message> <message>
<source>R1 / RB</source> <source>R1 / RB</source>
<translation type="unfinished">R1 / RB</translation> <translation>R1 / RB</translation>
</message> </message>
<message> <message>
<source>R2 / RT</source> <source>R2 / RT</source>
<translation type="unfinished">R2 / RT</translation> <translation>R2 / RT</translation>
</message> </message>
<message> <message>
<source>L3</source> <source>L3</source>
<translation type="unfinished">L3</translation> <translation>L3</translation>
</message> </message>
<message> <message>
<source>Options / Start</source> <source>Options / Start</source>
<translation type="unfinished">Options / Start</translation> <translation> / </translation>
</message> </message>
<message> <message>
<source>R3</source> <source>R3</source>
<translation type="unfinished">R3</translation> <translation>R3</translation>
</message> </message>
<message> <message>
<source>Face Buttons</source> <source>Face Buttons</source>
@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation type="unfinished">Game List</translation> <translation type="unfinished">Game List</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation type="unfinished">Download Cheats For All Installed Games</translation> <translation type="unfinished">Download Cheats For All Installed Games</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Žaidimų sąrašas</translation> <translation>Žaidimų sąrašas</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Nepalaikoma Vulkan versija</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Atsisiųsti sukčiavimus visiems įdiegtiems žaidimams</translation> <translation>Atsisiųsti sukčiavimus visiems įdiegtiems žaidimams</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1253,11 +1253,11 @@
</message> </message>
<message> <message>
<source>List View</source> <source>List View</source>
<translation>Liste-visning</translation> <translation>Listevisning</translation>
</message> </message>
<message> <message>
<source>Grid View</source> <source>Grid View</source>
<translation>Rute-visning</translation> <translation>Rutenettvisning</translation>
</message> </message>
<message> <message>
<source>Elf Viewer</source> <source>Elf Viewer</source>
@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Spilliste</translation> <translation>Spilliste</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Ustøttet Vulkan-versjon</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Last ned juks for alle installerte spill</translation> <translation>Last ned juks for alle installerte spill</translation>
@ -1760,7 +1756,7 @@
</message> </message>
<message> <message>
<source>Log Filter:\nFilters the log to only print specific information.\nExamples: &quot;Core:Trace&quot; &quot;Lib.Pad:Debug Common.Filesystem:Error&quot; &quot;*:Critical&quot;\nLevels: Trace, Debug, Info, Warning, Error, Critical - in this order, a specific level silences all levels preceding it in the list and logs every level after it.</source> <source>Log Filter:\nFilters the log to only print specific information.\nExamples: &quot;Core:Trace&quot; &quot;Lib.Pad:Debug Common.Filesystem:Error&quot; &quot;*:Critical&quot;\nLevels: Trace, Debug, Info, Warning, Error, Critical - in this order, a specific level silences all levels preceding it in the list and logs every level after it.</source>
<translation>Loggfilter:\nFiltrerer loggen for å kun skrive ut spesifikk informasjon.\nEksempler: &quot;Core:Trace&quot; &quot;Lib.Pad:Debug Common.Filesystem:Error&quot; &quot;*:Critical&quot; \nNivåer: Trace, Debug, Info, Warning, Error, Critical - i denne rekkefølgen, et spesifikt nivå demper alle tidligere nivåer i lista og loggfører alle nivåer etter det.</translation> <translation>Loggfilter:\nFiltrerer loggen for å kun skrive ut spesifikk informasjon.\nEksempler: «Core:Trace» «Lib.Pad:Debug Common.Filesystem:Error» «*:Critical» \nNivåer: Trace, Debug, Info, Warning, Error, Critical - i denne rekkefølgen, et spesifikt nivå demper alle tidligere nivåer i lista og loggfører alle nivåer etter det.</translation>
</message> </message>
<message> <message>
<source>Update:\nRelease: Official versions released every month that may be very outdated, but are more reliable and tested.\nNightly: Development versions that have all the latest features and fixes, but may contain bugs and are less stable.</source> <source>Update:\nRelease: Official versions released every month that may be very outdated, but are more reliable and tested.\nNightly: Development versions that have all the latest features and fixes, but may contain bugs and are less stable.</source>
@ -1792,7 +1788,7 @@
</message> </message>
<message> <message>
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable &quot;Update Compatibility On Startup&quot; to get up-to-date information.</source> <source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable &quot;Update Compatibility On Startup&quot; to get up-to-date information.</source>
<translation>Vis kompatibilitets-data:\nViser informasjon om spillkompatibilitet i tabellvisning. Bruk &quot;Oppdater kompatibilitets-data ved oppstart&quot; for oppdatert informasjon.</translation> <translation>Vis kompatibilitets-data:\nViser informasjon om spillkompatibilitet i tabellvisning. Bruk «Oppdater database ved oppstart» for oppdatert informasjon.</translation>
</message> </message>
<message> <message>
<source>Update Compatibility On Startup:\nAutomatically update the compatibility database when shadPS4 starts.</source> <source>Update Compatibility On Startup:\nAutomatically update the compatibility database when shadPS4 starts.</source>
@ -1832,7 +1828,7 @@
</message> </message>
<message> <message>
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select &quot;Auto Select&quot; to automatically determine it.</source> <source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select &quot;Auto Select&quot; to automatically determine it.</source>
<translation>Grafikkenhet:\nSystemer med flere GPU-er, kan emulatoren velge hvilken enhet som skal brukes fra rullegardinlista,\neller velg &quot;Velg automatisk&quot;.</translation> <translation>Grafikkenhet:\nSystemer med flere GPU-er, kan emulatoren velge hvilken enhet som skal brukes fra rullegardinlista,\neller bruk «Velg automatisk».</translation>
</message> </message>
<message> <message>
<source>Width/Height:\nSets the size of the emulator window at launch, which can be resized during gameplay.\nThis is different from the in-game resolution.</source> <source>Width/Height:\nSets the size of the emulator window at launch, which can be resized during gameplay.\nThis is different from the in-game resolution.</source>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Åpne mappa med tilpassede bilder og lyder for trofé:\nDu kan legge til tilpassede bilder til trofeer og en lyd.\nLegg filene til custom_trophy med følgende navn:\ntrophy.wav ELLER trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nMerk: Lyden avspilles kun i Qt-versjonen.</translation> <translation>Åpne mappa med tilpassede bilder og lyder for trofé:\nDu kan legge til tilpassede bilder til trofeer og en lyd.\nLegg filene til custom_trophy med følgende navn:\ntrophy.wav ELLER trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nMerk: Lyden avspilles kun i Qt-versjonen.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> *Ustøttet Vulkan-versjon</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Lijst met spellen</translation> <translation>Lijst met spellen</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Niet ondersteunde Vulkan-versie</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Download cheats voor alle geïnstalleerde spellen</translation> <translation>Download cheats voor alle geïnstalleerde spellen</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Lista gier</translation> <translation>Lista gier</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Nieobsługiwana wersja Vulkan</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Pobierz kody do wszystkich zainstalowanych gier</translation> <translation>Pobierz kody do wszystkich zainstalowanych gier</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Otwórz niestandardowy folder obrazów/dźwięków:\nMożesz dodać własne obrazy dla trofeów i ich dźwięki.\nDodaj pliki do custom_trophy o następujących nazwach:\ntrophy.wav LUB trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nUwaga: Dźwięki działają tylko w wersji QT.</translation> <translation>Otwórz niestandardowy folder obrazów/dźwięków:\nMożesz dodać własne obrazy dla trofeów i ich dźwięki.\nDodaj pliki do custom_trophy o następujących nazwach:\ntrophy.wav LUB trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nUwaga: Dźwięki działają tylko w wersji QT.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Lista de Jogos</translation> <translation>Lista de Jogos</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versão Vulkan não suportada</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Baixar Trapaças para Todos os Jogos Instalados</translation> <translation>Baixar Trapaças para Todos os Jogos Instalados</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Abrir a pasta de imagens e sons de troféus personalizados:\nVocê pode adicionar imagens personalizadas aos troféus e um áudio.\nAdicione os arquivos na pasta custom_trophy com os seguintes nomes:\ntrophy.wav OU trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nObservação: O som funcionará apenas em versões Qt.</translation> <translation>Abrir a pasta de imagens e sons de troféus personalizados:\nVocê pode adicionar imagens personalizadas aos troféus e um áudio.\nAdicione os arquivos na pasta custom_trophy com os seguintes nomes:\ntrophy.wav OU trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nObservação: O som funcionará apenas em versões Qt.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -543,7 +543,7 @@
</message> </message>
<message> <message>
<source>Unable to Save</source> <source>Unable to Save</source>
<translation>Não é possível salvar</translation> <translation>Não foi possível guardar</translation>
</message> </message>
<message> <message>
<source>Cannot bind axis values more than once</source> <source>Cannot bind axis values more than once</source>
@ -551,7 +551,7 @@
</message> </message>
<message> <message>
<source>Save</source> <source>Save</source>
<translation>Salvar</translation> <translation>Guardar</translation>
</message> </message>
<message> <message>
<source>Apply</source> <source>Apply</source>
@ -559,7 +559,7 @@
</message> </message>
<message> <message>
<source>Restore Defaults</source> <source>Restore Defaults</source>
<translation>Restaurar o Padrão</translation> <translation>Restaurar Predefinições</translation>
</message> </message>
<message> <message>
<source>Cancel</source> <source>Cancel</source>
@ -570,11 +570,11 @@
<name>EditorDialog</name> <name>EditorDialog</name>
<message> <message>
<source>Edit Keyboard + Mouse and Controller input bindings</source> <source>Edit Keyboard + Mouse and Controller input bindings</source>
<translation>Editar comandos do Teclado + Mouse e do Controle</translation> <translation>Editar configurações de entrada do Teclado + Rato e do Comando</translation>
</message> </message>
<message> <message>
<source>Use Per-Game configs</source> <source>Use Per-Game configs</source>
<translation>Use uma configuração para cada jogo</translation> <translation>Utilizar configurações por jogo</translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
@ -582,19 +582,19 @@
</message> </message>
<message> <message>
<source>Could not open the file for reading</source> <source>Could not open the file for reading</source>
<translation>Não foi possível abrir o arquivo para ler</translation> <translation>Não foi possível abrir o ficheiro para leitura</translation>
</message> </message>
<message> <message>
<source>Could not open the file for writing</source> <source>Could not open the file for writing</source>
<translation>Não foi possível abrir o arquivo para escrever</translation> <translation>Não foi possível abrir o ficheiro para escrita</translation>
</message> </message>
<message> <message>
<source>Save Changes</source> <source>Save Changes</source>
<translation>Salvar mudanças</translation> <translation>Guardar as alterações</translation>
</message> </message>
<message> <message>
<source>Do you want to save changes?</source> <source>Do you want to save changes?</source>
<translation>Salvar as mudanças?</translation> <translation>Pretende guardar as alterações?</translation>
</message> </message>
<message> <message>
<source>Help</source> <source>Help</source>
@ -610,7 +610,7 @@
</message> </message>
<message> <message>
<source>Reset to Default</source> <source>Reset to Default</source>
<translation>Resetar ao Padrão</translation> <translation>Repor para o Padrão</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1150,7 +1150,7 @@
</message> </message>
<message> <message>
<source>Unable to Save</source> <source>Unable to Save</source>
<translation>Não é possível salvar</translation> <translation>Não foi possível guardar</translation>
</message> </message>
<message> <message>
<source>Cannot bind any unique input more than once</source> <source>Cannot bind any unique input more than once</source>
@ -1166,11 +1166,11 @@
</message> </message>
<message> <message>
<source>Mousewheel cannot be mapped to stick outputs</source> <source>Mousewheel cannot be mapped to stick outputs</source>
<translation>Roda do rato não pode ser mapeada para saídas empates</translation> <translation>Roda do rato não pode ser mapeada para saídas dos manípulos</translation>
</message> </message>
<message> <message>
<source>Save</source> <source>Save</source>
<translation>Salvar</translation> <translation>Guardar</translation>
</message> </message>
<message> <message>
<source>Apply</source> <source>Apply</source>
@ -1178,7 +1178,7 @@
</message> </message>
<message> <message>
<source>Restore Defaults</source> <source>Restore Defaults</source>
<translation>Restaurar Definições</translation> <translation>Restaurar Predefinições</translation>
</message> </message>
<message> <message>
<source>Cancel</source> <source>Cancel</source>
@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Lista de Jogos</translation> <translation>Lista de Jogos</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versão do Vulkan não suportada</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Transferir Cheats para Todos os Jogos Instalados</translation> <translation>Transferir Cheats para Todos os Jogos Instalados</translation>
@ -1409,43 +1405,43 @@
</message> </message>
<message> <message>
<source>Play</source> <source>Play</source>
<translation type="unfinished">Play</translation> <translation>Reproduzir</translation>
</message> </message>
<message> <message>
<source>Pause</source> <source>Pause</source>
<translation type="unfinished">Pause</translation> <translation>Pausa</translation>
</message> </message>
<message> <message>
<source>Stop</source> <source>Stop</source>
<translation type="unfinished">Stop</translation> <translation>Parar</translation>
</message> </message>
<message> <message>
<source>Restart</source> <source>Restart</source>
<translation type="unfinished">Restart</translation> <translation>Reiniciar</translation>
</message> </message>
<message> <message>
<source>Full Screen</source> <source>Full Screen</source>
<translation type="unfinished">Full Screen</translation> <translation>Ecrã Inteiro</translation>
</message> </message>
<message> <message>
<source>Controllers</source> <source>Controllers</source>
<translation type="unfinished">Controllers</translation> <translation>Comandos</translation>
</message> </message>
<message> <message>
<source>Keyboard</source> <source>Keyboard</source>
<translation type="unfinished">Keyboard</translation> <translation>Teclado</translation>
</message> </message>
<message> <message>
<source>Refresh List</source> <source>Refresh List</source>
<translation type="unfinished">Refresh List</translation> <translation>Atualizar Lista</translation>
</message> </message>
<message> <message>
<source>Resume</source> <source>Resume</source>
<translation type="unfinished">Resume</translation> <translation>Continuar</translation>
</message> </message>
<message> <message>
<source>Show Labels Under Icons</source> <source>Show Labels Under Icons</source>
<translation type="unfinished">Show Labels Under Icons</translation> <translation>Mostrar Etiquetas Debaixo dos Ícones</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2032,7 +2028,7 @@
</message> </message>
<message> <message>
<source>Cannot create portable user folder</source> <source>Cannot create portable user folder</source>
<translation>Não é possível criar pasta de utilizador portátil</translation> <translation>Não foi possível criar pasta de utilizador portátil</translation>
</message> </message>
<message> <message>
<source>%1 already exists</source> <source>%1 already exists</source>
@ -2048,7 +2044,11 @@
</message> </message>
<message> <message>
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Abra a pasta de imagens/sons de troféus personalizados:\nPoderá adicionar imagens personalizadas aos troféus e um áudio.\nAdicione os arquivos na pasta custom_trophy com os seguintes nomes:\ntrophy.mp3 ou trophy.wav, bronze.png, gold.png, platinum.png, silver.png\nObservação: O som funcionará apenas nas versões Qt.</translation> <translation>Abra a pasta de imagens/sons de troféus personalizados:\nPoderá adicionar imagens personalizadas aos troféus e um áudio.\nAdicione os ficheiros na pasta custom_trophy com os seguintes nomes:\ntrophy.mp3 ou trophy.wav, bronze.png, gold.png, platinum.png, silver.png\nObservação: O som funcionará apenas nas versões Qt.</translation>
</message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versão do Vulkan não suportada</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Lista jocurilor</translation> <translation>Lista jocurilor</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versiune Vulkan nesuportată</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Descarcă Cheats pentru toate jocurile instalate</translation> <translation>Descarcă Cheats pentru toate jocurile instalate</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Список игр</translation> <translation>Список игр</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Неподдерживаемая версия Vulkan</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Скачать читы для всех установленных игр</translation> <translation>Скачать читы для всех установленных игр</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Открыть папку с пользовательскими изображениями/звуками трофеев:\nВы можете добавить пользовательские изображения к трофеям и аудио.\обавьте файлы в custom_trophy со следующими именами:\ntrophy.wav ИЛИ trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\римечание: звук будет работать только в QT-версии.</translation> <translation>Открыть папку с пользовательскими изображениями/звуками трофеев:\nВы можете добавить пользовательские изображения к трофеям и аудио.\обавьте файлы в custom_trophy со следующими именами:\ntrophy.wav ИЛИ trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\римечание: звук будет работать только в QT-версии.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Неподдерживаемая версия Vulkan</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation type="unfinished">Game List</translation> <translation type="unfinished">Game List</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation type="unfinished">Download Cheats For All Installed Games</translation> <translation type="unfinished">Download Cheats For All Installed Games</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Lista e lojërave</translation> <translation>Lista e lojërave</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Version i pambështetur i Vulkan</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Shkarko mashtrime për gjitha lojërat e instaluara</translation> <translation>Shkarko mashtrime për gjitha lojërat e instaluara</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Hap dosjen e imazheve/tingujve trofeve personalizuar:\nMund shtosh imazhe personalizuara për trofetë dhe një audio.\nShto skedarët dosjen custom_trophy me emrat vijojnë:\ntrophy.wav ose trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nShënim: Tingulli do punojë vetëm versionet QT.</translation> <translation>Hap dosjen e imazheve/tingujve trofeve personalizuar:\nMund shtosh imazhe personalizuara për trofetë dhe një audio.\nShto skedarët dosjen custom_trophy me emrat vijojnë:\ntrophy.wav ose trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nShënim: Tingulli do punojë vetëm versionet QT.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Version i pambështetur i Vulkan</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Spellista</translation> <translation>Spellista</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkan-versionen stöds inte</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Hämta fusk för alla installerade spel</translation> <translation>Hämta fusk för alla installerade spel</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Öppna mappen för anpassade trofébilder/ljud:\nDu kan lägga till egna bilder till troféerna och ett ljud.\nLägg till filerna i custom_trophy med följande namn:\ntrophy.wav ELLER trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nObservera: Ljudet fungerar endast i QT-versioner.</translation> <translation>Öppna mappen för anpassade trofébilder/ljud:\nDu kan lägga till egna bilder till troféerna och ett ljud.\nLägg till filerna i custom_trophy med följande namn:\ntrophy.wav ELLER trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nObservera: Ljudet fungerar endast i QT-versioner.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Versionen av Vulkan stöds inte</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Oyun Listesi</translation> <translation>Oyun Listesi</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Desteklenmeyen Vulkan Sürümü</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Tüm Yüklenmiş Oyunlar İçin Hileleri İndir</translation> <translation>Tüm Yüklenmiş Oyunlar İçin Hileleri İndir</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Özel kupa görüntüleri/sesleri klasörünü :\nKupalara özel görüntüler ve sesler ekleyebilirsiniz.\nDosyaları aşağıdaki adlarla custom_trophy'ye ekleyin:\ntrophy.wav ya da trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNot: Ses yalnızca QT sürümlerinde çalışacaktır.</translation> <translation>Özel kupa görüntüleri/sesleri klasörünü :\nKupalara özel görüntüler ve sesler ekleyebilirsiniz.\nDosyaları aşağıdaki adlarla custom_trophy'ye ekleyin:\ntrophy.wav ya da trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNot: Ses yalnızca QT sürümlerinde çalışacaktır.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Список ігор</translation> <translation>Список ігор</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Непідтримувана версія Vulkan</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Завантажити чити для усіх встановлених ігор</translation> <translation>Завантажити чити для усіх встановлених ігор</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>Відкрити папку користувацьких зображень трофеїв/звуків:\nВи можете додати користувацькі зображення до трофеїв та звук.\одайте файли до теки custom_trophy з такими назвами:\ntrophy.wav АБО trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\римітка: Звук буде працювати лише у версіях ShadPS4 з графічним інтерфейсом.</translation> <translation>Відкрити папку користувацьких зображень трофеїв/звуків:\nВи можете додати користувацькі зображення до трофеїв та звук.\одайте файли до теки custom_trophy з такими назвами:\ntrophy.wav АБО trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\римітка: Звук буде працювати лише у версіях ShadPS4 з графічним інтерфейсом.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation>Danh sách trò chơi</translation> <translation>Danh sách trò chơi</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Phiên bản Vulkan không đưc hỗ trợ</translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation>Tải xuống cheat cho tất cả các trò chơi đã cài đt</translation> <translation>Tải xuống cheat cho tất cả các trò chơi đã cài đt</translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation> <translation type="unfinished">Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkan </translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation></translation> <translation></translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>/\n您可以自定义奖杯图像和声音\n将文件添加到 custom_trophy \ntrophy.wav trophy.mp3bronze.pnggold.pngplatinum.pngsilver.png\n注意 QT </translation> <translation>/\n您可以自定义奖杯图像和声音\n将文件添加到 custom_trophy \ntrophy.wav trophy.mp3bronze.pnggold.pngplatinum.pngsilver.png\n注意 QT </translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkan </translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -1347,10 +1347,6 @@
<source>Game List</source> <source>Game List</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation> * Vulkan </translation>
</message>
<message> <message>
<source>Download Cheats For All Installed Games</source> <source>Download Cheats For All Installed Games</source>
<translation></translation> <translation></translation>
@ -2050,6 +2046,10 @@
<source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source> <source>Open the custom trophy images/sounds folder:\nYou can add custom images to the trophies and an audio.\nAdd the files to custom_trophy with the following names:\ntrophy.wav OR trophy.mp3, bronze.png, gold.png, platinum.png, silver.png\nNote: The sound will only work in QT versions.</source>
<translation>/\n您可以將自訂影像新增至獎盃和音訊 \n將檔案加入 custom_tropy\ntropy.wav OR trophy.mp3bronze.pnggold.pngplatinum.pngsilver.png\n注意 QT </translation> <translation>/\n您可以將自訂影像新增至獎盃和音訊 \n將檔案加入 custom_tropy\ntropy.wav OR trophy.mp3bronze.pnggold.pngplatinum.pngsilver.png\n注意 QT </translation>
</message> </message>
<message>
<source> * Unsupported Vulkan Version</source>
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
</message>
</context> </context>
<context> <context>
<name>TrophyViewer</name> <name>TrophyViewer</name>

View File

@ -2,6 +2,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include "common/assert.h" #include "common/assert.h"
#include "common/logging/log.h"
#include "shader_recompiler/backend/spirv/emit_spirv_instructions.h" #include "shader_recompiler/backend/spirv/emit_spirv_instructions.h"
#include "shader_recompiler/backend/spirv/spirv_emit_context.h" #include "shader_recompiler/backend/spirv/spirv_emit_context.h"
#include "shader_recompiler/ir/attribute.h" #include "shader_recompiler/ir/attribute.h"
@ -173,19 +174,24 @@ Id EmitReadConst(EmitContext& ctx, IR::Inst* inst, Id addr, Id offset) {
} }
} }
Id EmitReadConstBuffer(EmitContext& ctx, u32 handle, Id index) { template <PointerType type>
Id ReadConstBuffer(EmitContext& ctx, u32 handle, Id index) {
const auto& buffer = ctx.buffers[handle]; const auto& buffer = ctx.buffers[handle];
index = ctx.OpIAdd(ctx.U32[1], index, buffer.offset_dwords); index = ctx.OpIAdd(ctx.U32[1], index, buffer.offset_dwords);
const auto [id, pointer_type] = buffer[PointerType::U32]; const auto [id, pointer_type] = buffer[type];
const auto value_type = type == PointerType::U32 ? ctx.U32[1] : ctx.F32[1];
const Id ptr{ctx.OpAccessChain(pointer_type, id, ctx.u32_zero_value, index)}; const Id ptr{ctx.OpAccessChain(pointer_type, id, ctx.u32_zero_value, index)};
const Id result{ctx.OpLoad(ctx.U32[1], ptr)}; const Id result{ctx.OpLoad(value_type, ptr)};
if (Sirit::ValidId(buffer.size_dwords)) { if (Sirit::ValidId(buffer.size_dwords)) {
const Id in_bounds = ctx.OpULessThan(ctx.U1[1], index, buffer.size_dwords); const Id in_bounds = ctx.OpULessThan(ctx.U1[1], index, buffer.size_dwords);
return ctx.OpSelect(ctx.U32[1], in_bounds, result, ctx.u32_zero_value); return ctx.OpSelect(value_type, in_bounds, result, ctx.u32_zero_value);
} else {
return result;
} }
return result;
}
Id EmitReadConstBuffer(EmitContext& ctx, u32 handle, Id index) {
return ReadConstBuffer<PointerType::U32>(ctx, handle, index);
} }
Id EmitReadStepRate(EmitContext& ctx, int rate_idx) { Id EmitReadStepRate(EmitContext& ctx, int rate_idx) {
@ -244,7 +250,7 @@ Id EmitGetAttribute(EmitContext& ctx, IR::Attribute attr, u32 comp, Id index) {
ctx.OpUDiv(ctx.U32[1], ctx.OpLoad(ctx.U32[1], ctx.instance_id), step_rate), ctx.OpUDiv(ctx.U32[1], ctx.OpLoad(ctx.U32[1], ctx.instance_id), step_rate),
ctx.ConstU32(param.num_components)), ctx.ConstU32(param.num_components)),
ctx.ConstU32(comp)); ctx.ConstU32(comp));
return EmitReadConstBuffer(ctx, param.buffer_handle, offset); return ReadConstBuffer<PointerType::F32>(ctx, param.buffer_handle, offset);
} }
Id result; Id result;

View File

@ -46,6 +46,10 @@ inline F32 ApplyReadNumberConversion(IREmitter& ir, const F32& value,
const IR::F32 max = ir.Imm32(float(std::numeric_limits<u16>::max())); const IR::F32 max = ir.Imm32(float(std::numeric_limits<u16>::max()));
return ir.FPDiv(left, max); return ir.FPDiv(left, max);
} }
case AmdGpu::NumberConversion::Uint32ToUnorm: {
const auto float_val = ir.ConvertUToF(32, 32, ir.BitCast<U32>(value));
return ir.FPDiv(float_val, ir.Imm32(static_cast<float>(std::numeric_limits<u32>::max())));
}
default: default:
UNREACHABLE(); UNREACHABLE();
} }
@ -92,6 +96,12 @@ inline F32 ApplyWriteNumberConversion(IREmitter& ir, const F32& value,
const IR::U32 raw = ir.ConvertFToS(32, ir.FPDiv(left, ir.Imm32(2.f))); const IR::U32 raw = ir.ConvertFToS(32, ir.FPDiv(left, ir.Imm32(2.f)));
return ir.BitCast<F32>(raw); return ir.BitCast<F32>(raw);
} }
case AmdGpu::NumberConversion::Uint32ToUnorm: {
const auto clamped = ir.FPClamp(value, ir.Imm32(0.f), ir.Imm32(1.f));
const auto unnormalized =
ir.FPMul(clamped, ir.Imm32(static_cast<float>(std::numeric_limits<u32>::max())));
return ir.BitCast<F32>(U32{ir.ConvertFToU(32, unnormalized)});
}
default: default:
UNREACHABLE(); UNREACHABLE();
} }

View File

@ -197,8 +197,9 @@ enum class NumberConversion : u32 {
UintToUscaled = 1, UintToUscaled = 1,
SintToSscaled = 2, SintToSscaled = 2,
UnormToUbnorm = 3, UnormToUbnorm = 3,
Sint8ToSnormNz = 5, Sint8ToSnormNz = 4,
Sint16ToSnormNz = 6, Sint16ToSnormNz = 5,
Uint32ToUnorm = 6,
}; };
struct CompMapping { struct CompMapping {
@ -286,6 +287,17 @@ inline DataFormat RemapDataFormat(const DataFormat format) {
inline NumberFormat RemapNumberFormat(const NumberFormat format, const DataFormat data_format) { inline NumberFormat RemapNumberFormat(const NumberFormat format, const DataFormat data_format) {
switch (format) { switch (format) {
case NumberFormat::Unorm: {
switch (data_format) {
case DataFormat::Format32:
case DataFormat::Format32_32:
case DataFormat::Format32_32_32:
case DataFormat::Format32_32_32_32:
return NumberFormat::Uint;
default:
return format;
}
}
case NumberFormat::Uscaled: case NumberFormat::Uscaled:
return NumberFormat::Uint; return NumberFormat::Uint;
case NumberFormat::Sscaled: case NumberFormat::Sscaled:
@ -341,6 +353,17 @@ inline CompMapping RemapSwizzle(const DataFormat format, const CompMapping swizz
inline NumberConversion MapNumberConversion(const NumberFormat num_fmt, const DataFormat data_fmt) { inline NumberConversion MapNumberConversion(const NumberFormat num_fmt, const DataFormat data_fmt) {
switch (num_fmt) { switch (num_fmt) {
case NumberFormat::Unorm: {
switch (data_fmt) {
case DataFormat::Format32:
case DataFormat::Format32_32:
case DataFormat::Format32_32_32:
case DataFormat::Format32_32_32_32:
return NumberConversion::Uint32ToUnorm;
default:
return NumberConversion::None;
}
}
case NumberFormat::Uscaled: case NumberFormat::Uscaled:
return NumberConversion::UintToUscaled; return NumberConversion::UintToUscaled;
case NumberFormat::Sscaled: case NumberFormat::Sscaled: