From 1e90f4594105c5e14f3d9099572dc765ab0e8d7a Mon Sep 17 00:00:00 2001
From: SaynedBread <114937220+CyntexMore@users.noreply.github.com>
Date: Sun, 25 Aug 2024 02:53:13 +0200
Subject: [PATCH 01/69] docs: Added some fancy Markdown formating to the README
---
README.md | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/README.md b/README.md
index 542acca9e..ba94b64bd 100644
--- a/README.md
+++ b/README.md
@@ -32,25 +32,28 @@ SPDX-License-Identifier: GPL-2.0-or-later
-# shadPS4
+# General information
-shadPS4 is an early **PlayStation 4** emulator for **Windows**, **Linux** and **macOS** written in C++
+shadPS4 is an early **PlayStation 4** emulator for **Windows**, **Linux** and **macOS** written in C++.
If you encounter problems or have doubts, do not hesitate to look at the [**Quickstart**](https://github.com/shadps4-emu/shadPS4/blob/main/documents/Quickstart/Quickstart.md).
To verify that a game works, you can look at [**shadPS4 Game Compatibility**](https://github.com/shadps4-emu/shadps4-game-compatibility).
-To discuss shadPS4 development or suggest ideas, join the [**Discord server**](https://discord.gg/MyZRaBngxA).
+To discuss shadPS4 development, suggest ideas or to ask for help, join our [**Discord server**](https://discord.gg/MyZRaBngxA).
-To get the latest news, go to our [**X (twitter)**](https://x.com/shadps4) or our [**website**](https://shadps4.net/).
+To get the latest news, go to our [**X (Twitter)**](https://x.com/shadps4) or our [**website**](https://shadps4.net/).
# Status
-In development, small games are working like [**Sonic Mania**](https://www.youtube.com/watch?v=AAHoNzhHyCU), [**Undertale**](https://youtu.be/5zIvdy65Ro4), [**Dysmantle**](https://youtu.be/b9xzhLBdESE) and others...
+> [!IMPORTANT]
+> shadPS4 is early in developement, don't expect a flawless experience.
+
+Currently, the emulator successfully runs small games like [**Sonic Mania**](https://www.youtube.com/watch?v=AAHoNzhHyCU), [**Undertale**](https://youtu.be/5zIvdy65Ro4), [**Dysmantle**](https://youtu.be/b9xzhLBdESE), and a few others. Most importantly shadPS4 can *somewhat* run Bloodborne.
# Why
-The project started as a fun project. Due to limited free time, it will probably take a while before shadPS4 is able to run anything decent, but we're trying to make small, regular commits.
+This project began as a fun project. Given our limited free time, it may take some time before shadPS4 can run more complex games, but we're committed to making small, regular updates.
# Build
@@ -62,7 +65,7 @@ Check the build instructions for [**Windows**](https://github.com/shadps4-emu/sh
Check the build instructions for [**Linux**](https://github.com/shadps4-emu/shadPS4/blob/main/documents/building-linux.md).
-## Build status
+## Building status
Windows
@@ -95,9 +98,12 @@ Check the build instructions for [**Linux**](https://github.com/shadps4-emu/shad
For more information on how to test, debug and report issues with the emulator or games, read the [Debugging documentation](https://github.com/shadps4-emu/shadPS4/blob/main/documents/Debugging/Debugging.md).
-# Keyboard Mapping
+# Keyboard mapping
-| Controller button | Keyboard |
+> [!NOTE]
+> Keyboard mappings can be changed from the Qt interface of shadPS4. Xbox and DualShock controllers work out of the box.
+
+| Controller button | Keyboard equivelant |
|-------------|-------------|
LEFT AXIS UP | W |
LEFT AXIS DOWN | S |
@@ -154,4 +160,4 @@ Open a PR and we'll check it :)
# License
-- [**GPL-2.0 license**](https://github.com/shadps4-emu/shadPS4/blob/main/LICENSE)
\ No newline at end of file
+- [**GPL-2.0 license**](https://github.com/shadps4-emu/shadPS4/blob/main/LICENSE)
From 41a93dcae41d4c977d430978ba5b01a4ed03e108 Mon Sep 17 00:00:00 2001
From: SaynedBread <114937220+CyntexMore@users.noreply.github.com>
Date: Sun, 25 Aug 2024 02:54:46 +0200
Subject: [PATCH 02/69] docs: Added some fancy Markdown formating to the
README
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index ba94b64bd..25dbbccc2 100644
--- a/README.md
+++ b/README.md
@@ -55,7 +55,7 @@ Currently, the emulator successfully runs small games like [**Sonic Mania**](htt
This project began as a fun project. Given our limited free time, it may take some time before shadPS4 can run more complex games, but we're committed to making small, regular updates.
-# Build
+# Building
## Windows
From 3f445eca407984a3808a1be9efd12ccfcb8299fa Mon Sep 17 00:00:00 2001
From: Dzmitry Dubrova
Date: Sun, 25 Aug 2024 11:45:26 +0300
Subject: [PATCH 03/69] gui: Implement gui translations
---
CMakeLists.txt | 19 +-
src/common/config.cpp | 12 +
src/common/config.h | 2 +
src/qt_gui/game_info.cpp | 4 +-
src/qt_gui/game_install_dialog.cpp | 10 +-
src/qt_gui/gui_context_menus.h | 39 +--
src/qt_gui/main_window.cpp | 41 +++
src/qt_gui/main_window.h | 5 +
src/qt_gui/settings_dialog.cpp | 33 ++
src/qt_gui/settings_dialog.h | 7 +
src/qt_gui/settings_dialog.ui | 69 ++--
src/qt_gui/translations/da_DK.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/de.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/el.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/en.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/es_ES.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/fi.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/fr.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/hu_HU.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/id.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/it.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/ja_JP.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/ko_KR.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/lt_LT.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/nb.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/nl.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/pl_PL.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/pt_BR.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/ro_RO.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/ru_RU.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/tr_TR.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/vi_VN.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/zh_CN.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/translations/zh_TW.ts | 491 +++++++++++++++++++++++++++++
src/qt_gui/trophy_viewer.cpp | 2 +-
35 files changed, 11473 insertions(+), 63 deletions(-)
create mode 100644 src/qt_gui/translations/da_DK.ts
create mode 100644 src/qt_gui/translations/de.ts
create mode 100644 src/qt_gui/translations/el.ts
create mode 100644 src/qt_gui/translations/en.ts
create mode 100644 src/qt_gui/translations/es_ES.ts
create mode 100644 src/qt_gui/translations/fi.ts
create mode 100644 src/qt_gui/translations/fr.ts
create mode 100644 src/qt_gui/translations/hu_HU.ts
create mode 100644 src/qt_gui/translations/id.ts
create mode 100644 src/qt_gui/translations/it.ts
create mode 100644 src/qt_gui/translations/ja_JP.ts
create mode 100644 src/qt_gui/translations/ko_KR.ts
create mode 100644 src/qt_gui/translations/lt_LT.ts
create mode 100644 src/qt_gui/translations/nb.ts
create mode 100644 src/qt_gui/translations/nl.ts
create mode 100644 src/qt_gui/translations/pl_PL.ts
create mode 100644 src/qt_gui/translations/pt_BR.ts
create mode 100644 src/qt_gui/translations/ro_RO.ts
create mode 100644 src/qt_gui/translations/ru_RU.ts
create mode 100644 src/qt_gui/translations/tr_TR.ts
create mode 100644 src/qt_gui/translations/vi_VN.ts
create mode 100644 src/qt_gui/translations/zh_CN.ts
create mode 100644 src/qt_gui/translations/zh_TW.ts
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0ff00d6f5..721f11287 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -113,11 +113,27 @@ add_subdirectory(externals)
include_directories(src)
if(ENABLE_QT_GUI)
- find_package(Qt6 REQUIRED COMPONENTS Widgets Concurrent)
+ find_package(Qt6 REQUIRED COMPONENTS Widgets Concurrent LinguistTools)
qt_standard_project_setup()
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
+
+ set(QT_TRANSLATIONS "${PROJECT_SOURCE_DIR}/src/qt_gui/translations")
+ file(GLOB_RECURSE TRANSLATIONS_TS ${QT_TRANSLATIONS}/*.ts)
+
+ set_source_files_properties(${TRANSLATIONS_TS} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/translations")
+ qt_add_translation(TRANSLATIONS_QM ${TRANSLATIONS_TS})
+
+ set(TRANSLATIONS_QRC ${CMAKE_CURRENT_BINARY_DIR}/translations/translations.qrc)
+ file(WRITE ${TRANSLATIONS_QRC} "\n")
+ foreach (QM ${TRANSLATIONS_QM})
+ get_filename_component(QM_FILE ${QM} NAME)
+ file(APPEND ${TRANSLATIONS_QRC} "${QM_FILE}\n")
+ endforeach (QM)
+ file(APPEND ${TRANSLATIONS_QRC} "")
+
+ qt_add_resources(TRANSLATIONS ${TRANSLATIONS_QRC})
endif()
set(AUDIO_CORE src/audio_core/sdl_audio.cpp
@@ -574,6 +590,7 @@ set(QT_GUI src/qt_gui/about_dialog.cpp
src/qt_gui/main.cpp
${EMULATOR}
${RESOURCE_FILES}
+ ${TRANSLATIONS}
)
endif()
diff --git a/src/common/config.cpp b/src/common/config.cpp
index ddd1d3257..0659a987f 100644
--- a/src/common/config.cpp
+++ b/src/common/config.cpp
@@ -45,6 +45,7 @@ u32 m_window_size_H = 720;
std::vector m_pkg_viewer;
std::vector m_elf_viewer;
std::vector m_recent_files;
+std::string emulator_language = "en";
// Settings
u32 m_language = 1; // english
@@ -242,6 +243,10 @@ void setRecentFiles(const std::vector& recentFiles) {
m_recent_files = recentFiles;
}
+void setEmulatorLanguage(std::string language) {
+ emulator_language = language;
+}
+
u32 getMainWindowGeometryX() {
return main_window_geometry_x;
}
@@ -291,6 +296,10 @@ std::vector getRecentFiles() {
return m_recent_files;
}
+std::string getEmulatorLanguage() {
+ return emulator_language;
+}
+
u32 GetLanguage() {
return m_language;
}
@@ -368,6 +377,7 @@ void load(const std::filesystem::path& path) {
m_elf_viewer = toml::find_or>(gui, "elfDirs", {});
m_recent_files = toml::find_or>(gui, "recentFiles", {});
m_table_mode = toml::find_or(gui, "gameTableMode", 0);
+ emulator_language = toml::find_or(gui, "emulatorLanguage", "en");
}
if (data.contains("Settings")) {
@@ -430,6 +440,7 @@ void save(const std::filesystem::path& path) {
data["GUI"]["pkgDirs"] = m_pkg_viewer;
data["GUI"]["elfDirs"] = m_elf_viewer;
data["GUI"]["recentFiles"] = m_recent_files;
+ data["GUI"]["emulatorLanguage"] = emulator_language;
data["Settings"]["consoleLanguage"] = m_language;
@@ -454,6 +465,7 @@ void setDefaultValues() {
vblankDivider = 1;
vkValidation = false;
rdocEnable = false;
+ emulator_language = "en";
m_language = 1;
gpuId = -1;
}
diff --git a/src/common/config.h b/src/common/config.h
index 9bf91e692..458fa88c3 100644
--- a/src/common/config.h
+++ b/src/common/config.h
@@ -69,6 +69,7 @@ void setMainWindowHeight(u32 height);
void setPkgViewer(const std::vector& pkgList);
void setElfViewer(const std::vector& elfList);
void setRecentFiles(const std::vector& recentFiles);
+void setEmulatorLanguage(std::string language);
u32 getMainWindowGeometryX();
u32 getMainWindowGeometryY();
@@ -86,6 +87,7 @@ u32 getMainWindowHeight();
std::vector getPkgViewer();
std::vector getElfViewer();
std::vector getRecentFiles();
+std::string getEmulatorLanguage();
void setDefaultValues();
diff --git a/src/qt_gui/game_info.cpp b/src/qt_gui/game_info.cpp
index d2bf3bb2d..2821a0322 100644
--- a/src/qt_gui/game_info.cpp
+++ b/src/qt_gui/game_info.cpp
@@ -23,8 +23,8 @@ void GameInfoClass::GetGameInfo(QWidget* parent) {
}).results();
// Progress bar, please be patient :)
- QProgressDialog dialog("Loading game list, please wait :3", "Cancel", 0, 0, parent);
- dialog.setWindowTitle("Loading...");
+ QProgressDialog dialog(tr("Loading game list, please wait :3"), tr("Cancel"), 0, 0, parent);
+ dialog.setWindowTitle(tr("Loading..."));
QFutureWatcher futureWatcher;
GameListUtils game_util;
diff --git a/src/qt_gui/game_install_dialog.cpp b/src/qt_gui/game_install_dialog.cpp
index 4b2b8528b..5f031bdec 100644
--- a/src/qt_gui/game_install_dialog.cpp
+++ b/src/qt_gui/game_install_dialog.cpp
@@ -21,14 +21,14 @@ GameInstallDialog::GameInstallDialog() : m_gamesDirectory(nullptr) {
layout->addStretch();
layout->addWidget(SetupDialogActions());
- setWindowTitle("shadPS4 - Choose directory");
+ setWindowTitle(tr("shadPS4 - Choose directory"));
setWindowIcon(QIcon(":images/shadps4.ico"));
}
GameInstallDialog::~GameInstallDialog() {}
void GameInstallDialog::Browse() {
- auto path = QFileDialog::getExistingDirectory(this, "Directory to install games");
+ auto path = QFileDialog::getExistingDirectory(this, tr("Directory to install games"));
if (!path.isEmpty()) {
m_gamesDirectory->setText(QDir::toNativeSeparators(path));
@@ -36,7 +36,7 @@ void GameInstallDialog::Browse() {
}
QWidget* GameInstallDialog::SetupGamesDirectory() {
- auto group = new QGroupBox("Directory to install games");
+ auto group = new QGroupBox(tr("Directory to install games"));
auto layout = new QHBoxLayout(group);
// Input.
@@ -47,7 +47,7 @@ QWidget* GameInstallDialog::SetupGamesDirectory() {
layout->addWidget(m_gamesDirectory);
// Browse button.
- auto browse = new QPushButton("Browse");
+ auto browse = new QPushButton(tr("Browse"));
connect(browse, &QPushButton::clicked, this, &GameInstallDialog::Browse);
@@ -71,7 +71,7 @@ void GameInstallDialog::Save() {
if (gamesDirectory.isEmpty() || !QDir(gamesDirectory).exists() ||
!QDir::isAbsolutePath(gamesDirectory)) {
- QMessageBox::critical(this, "Error",
+ QMessageBox::critical(this, tr("Error"),
"The value for location to install games is not valid.");
return;
}
diff --git a/src/qt_gui/gui_context_menus.h b/src/qt_gui/gui_context_menus.h
index 16afdb188..f4bc519a2 100644
--- a/src/qt_gui/gui_context_menus.h
+++ b/src/qt_gui/gui_context_menus.h
@@ -36,10 +36,10 @@ public:
// Setup menu.
QMenu menu(widget);
- QAction createShortcut("Create Shortcut", widget);
- QAction openFolder("Open Game Folder", widget);
- QAction openSfoViewer("SFO Viewer", widget);
- QAction openTrophyViewer("Trophy Viewer", widget);
+ QAction createShortcut(tr("Create Shortcut"), widget);
+ QAction openFolder(tr("Open Game Folder"), widget);
+ QAction openSfoViewer(tr("SFO Viewer"), widget);
+ QAction openTrophyViewer(tr("Trophy Viewer"), widget);
menu.addAction(&openFolder);
menu.addAction(&createShortcut);
@@ -47,10 +47,10 @@ public:
menu.addAction(&openTrophyViewer);
// "Copy" submenu.
- QMenu* copyMenu = new QMenu("Copy info", widget);
- QAction* copyName = new QAction("Copy Name", widget);
- QAction* copySerial = new QAction("Copy Serial", widget);
- QAction* copyNameAll = new QAction("Copy All", widget);
+ QMenu* copyMenu = new QMenu(tr("Copy info"), widget);
+ QAction* copyName = new QAction(tr("Copy Name"), widget);
+ QAction* copySerial = new QAction(tr("Copy Serial"), widget);
+ QAction* copyNameAll = new QAction(tr("Copy All"), widget);
copyMenu->addAction(copyName);
copyMenu->addAction(copySerial);
@@ -116,7 +116,7 @@ public:
tableWidget->horizontalHeader()->setVisible(false);
tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
- tableWidget->setWindowTitle("SFO Viewer");
+ tableWidget->setWindowTitle(tr("SFO Viewer"));
tableWidget->show();
}
}
@@ -170,15 +170,15 @@ public:
if (createShortcutLinux(linkPath, ebootPath, iconPath)) {
#endif
QMessageBox::information(
- nullptr, "Shortcut creation",
- QString("Shortcut created successfully!\n %1").arg(linkPath));
+ nullptr, tr("Shortcut creation"),
+ QString(tr("Shortcut created successfully!\n %1")).arg(linkPath));
} else {
QMessageBox::critical(
- nullptr, "Error",
- QString("Error creating shortcut!\n %1").arg(linkPath));
+ nullptr, tr("Error"),
+ QString(tr("Error creating shortcut!\n %1")).arg(linkPath));
}
} else {
- QMessageBox::critical(nullptr, "Error", "Failed to convert icon.");
+ QMessageBox::critical(nullptr, tr("Error"), tr("Failed to convert icon."));
}
} else {
// If the icon is already in ICO format, we just create the shortcut
@@ -188,11 +188,12 @@ public:
if (createShortcutLinux(linkPath, ebootPath, iconPath)) {
#endif
QMessageBox::information(
- nullptr, "Shortcut creation",
- QString("Shortcut created successfully!\n %1").arg(linkPath));
+ nullptr, tr("Shortcut creation"),
+ QString(tr("Shortcut created successfully!\n %1")).arg(linkPath));
} else {
- QMessageBox::critical(nullptr, "Error",
- QString("Error creating shortcut!\n %1").arg(linkPath));
+ QMessageBox::critical(
+ nullptr, tr("Error"),
+ QString(tr("Error creating shortcut!\n %1")).arg(linkPath));
}
}
}
@@ -249,7 +250,7 @@ public:
int itemIndex = GetRowIndex(treeWidget, currentItem); // row
QMenu menu(treeWidget);
- QAction installPackage("Install PKG", treeWidget);
+ QAction installPackage(tr("Install PKG"), treeWidget);
menu.addAction(&installPackage);
diff --git a/src/qt_gui/main_window.cpp b/src/qt_gui/main_window.cpp
index b6711d719..64a89c6a6 100644
--- a/src/qt_gui/main_window.cpp
+++ b/src/qt_gui/main_window.cpp
@@ -37,6 +37,7 @@ bool MainWindow::Init() {
SetLastUsedTheme();
SetLastIconSizeBullet();
GetPhysicalDevices();
+ LoadTranslation();
// show ui
setMinimumSize(350, minimumSizeHint().height());
setWindowTitle(QString::fromStdString("shadPS4 v" + std::string(Common::VERSION)));
@@ -200,11 +201,19 @@ void MainWindow::CreateConnects() {
connect(ui->configureAct, &QAction::triggered, this, [this]() {
auto settingsDialog = new SettingsDialog(m_physical_devices, this);
+
+ connect(settingsDialog, &SettingsDialog::LanguageChanged, this,
+ &MainWindow::OnLanguageChanged);
+
settingsDialog->exec();
});
connect(ui->settingsButton, &QPushButton::clicked, this, [this]() {
auto settingsDialog = new SettingsDialog(m_physical_devices, this);
+
+ connect(settingsDialog, &SettingsDialog::LanguageChanged, this,
+ &MainWindow::OnLanguageChanged);
+
settingsDialog->exec();
});
@@ -781,3 +790,35 @@ void MainWindow::CreateRecentGameActions() {
emulator.Run(gamePath.toUtf8().constData());
});
}
+
+void MainWindow::LoadTranslation() {
+ auto language = QString::fromStdString(Config::getEmulatorLanguage());
+
+ const QString base_dir = QStringLiteral(":/translations");
+ QString base_path = QStringLiteral("%1/%2.qm").arg(base_dir).arg(language);
+
+ if (QFile::exists(base_path)) {
+ if (translator != nullptr) {
+ qApp->removeTranslator(translator);
+ }
+
+ translator = new QTranslator(qApp);
+ if (!translator->load(base_path)) {
+ QMessageBox::warning(
+ nullptr, QStringLiteral("Translation Error"),
+ QStringLiteral("Failed to find load translation file for '%1':\n%2")
+ .arg(language)
+ .arg(base_path));
+ delete translator;
+ } else {
+ qApp->installTranslator(translator);
+ ui->retranslateUi(this);
+ }
+ }
+}
+
+void MainWindow::OnLanguageChanged(const std::string& locale) {
+ Config::setEmulatorLanguage(locale);
+
+ LoadTranslation();
+}
\ No newline at end of file
diff --git a/src/qt_gui/main_window.h b/src/qt_gui/main_window.h
index 1abe17625..d3b83e619 100644
--- a/src/qt_gui/main_window.h
+++ b/src/qt_gui/main_window.h
@@ -5,6 +5,7 @@
#include
#include
+#include
#include "common/config.h"
#include "common/path_util.h"
@@ -43,6 +44,7 @@ private Q_SLOTS:
void ShowGameList();
void RefreshGameTable();
void HandleResize(QResizeEvent* event);
+ void OnLanguageChanged(const std::string& locale);
private:
Ui_MainWindow* ui;
@@ -59,6 +61,7 @@ private:
void InstallPkg();
void BootGame();
void AddRecentFiles(QString filePath);
+ void LoadTranslation();
QIcon RecolorIcon(const QIcon& icon, bool isWhite);
bool isIconBlack = false;
bool isTableList = true;
@@ -84,6 +87,8 @@ private:
std::shared_ptr m_game_info = std::make_shared();
+ QTranslator* translator;
+
protected:
void dragEnterEvent(QDragEnterEvent* event1) override {
if (event1->mimeData()->hasUrls()) {
diff --git a/src/qt_gui/settings_dialog.cpp b/src/qt_gui/settings_dialog.cpp
index 09247951a..d572915c6 100644
--- a/src/qt_gui/settings_dialog.cpp
+++ b/src/qt_gui/settings_dialog.cpp
@@ -2,7 +2,9 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include
+#include
+#include "main_window.h"
#include "settings_dialog.h"
#include "ui_settings_dialog.h"
@@ -60,6 +62,7 @@ SettingsDialog::SettingsDialog(std::span physical_devices, QWidge
completer->setCaseSensitivity(Qt::CaseInsensitive);
ui->consoleLanguageComboBox->setCompleter(completer);
+ InitializeEmulatorLanguages();
LoadValuesFromConfig();
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QWidget::close);
@@ -158,6 +161,7 @@ void SettingsDialog::LoadValuesFromConfig() {
languageIndexes.begin(),
std::find(languageIndexes.begin(), languageIndexes.end(), Config::GetLanguage())) %
languageIndexes.size());
+ ui->emulatorLanguageComboBox->setCurrentIndex(languages[Config::getEmulatorLanguage()]);
ui->graphicsAdapterBox->setCurrentIndex(Config::getGpuId() + 1);
ui->widthSpinBox->setValue(Config::getScreenWidth());
ui->heightSpinBox->setValue(Config::getScreenHeight());
@@ -179,6 +183,35 @@ void SettingsDialog::LoadValuesFromConfig() {
ui->rdocCheckBox->setChecked(Config::isRdocEnabled());
}
+void SettingsDialog::InitializeEmulatorLanguages() {
+ QDirIterator it(QStringLiteral(":/translations"), QDirIterator::NoIteratorFlags);
+
+ int idx = 0;
+ while (it.hasNext()) {
+ QString locale = it.next();
+ locale.truncate(locale.lastIndexOf(QLatin1Char{'.'}));
+ locale.remove(0, locale.lastIndexOf(QLatin1Char{'/'}) + 1);
+ const QString lang = QLocale::languageToString(QLocale(locale).language());
+ const QString country = QLocale::territoryToString(QLocale(locale).territory());
+ ui->emulatorLanguageComboBox->addItem(QStringLiteral("%1 (%2)").arg(lang, country), locale);
+
+ languages[locale.toStdString()] = idx;
+ idx++;
+ }
+
+ connect(ui->emulatorLanguageComboBox, qOverload(&QComboBox::currentIndexChanged), this,
+ &SettingsDialog::OnLanguageChanged);
+}
+
+void SettingsDialog::OnLanguageChanged(int index) {
+ if (index == -1)
+ return;
+
+ ui->retranslateUi(this);
+
+ emit LanguageChanged(ui->emulatorLanguageComboBox->itemData(index).toString().toStdString());
+}
+
int SettingsDialog::exec() {
return QDialog::exec();
}
diff --git a/src/qt_gui/settings_dialog.h b/src/qt_gui/settings_dialog.h
index 7d8701093..ddae7daac 100644
--- a/src/qt_gui/settings_dialog.h
+++ b/src/qt_gui/settings_dialog.h
@@ -22,8 +22,15 @@ public:
int exec() override;
+signals:
+ void LanguageChanged(const std::string& locale);
+
private:
void LoadValuesFromConfig();
+ void InitializeEmulatorLanguages();
+ void OnLanguageChanged(int index);
std::unique_ptr ui;
+
+ std::map languages;
};
diff --git a/src/qt_gui/settings_dialog.ui b/src/qt_gui/settings_dialog.ui
index d11f177d1..1ecd12495 100644
--- a/src/qt_gui/settings_dialog.ui
+++ b/src/qt_gui/settings_dialog.ui
@@ -79,32 +79,6 @@
System
- -
-
-
- 6
-
-
- 0
-
-
-
-
-
-
-
-
- Username
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -117,6 +91,18 @@
+ -
+
+
+ Emulator Language
+
+
+
-
+
+
+
+
+
@@ -156,17 +142,30 @@
-
-
-
- Qt::Orientation::Horizontal
+
+
+ 6
-
-
- 40
- 20
-
+
+ 0
-
+
-
+
+
-
+
+
+ Username
+
+
+
-
+
+
+
+
+
+
+
+
diff --git a/src/qt_gui/translations/da_DK.ts b/src/qt_gui/translations/da_DK.ts
new file mode 100644
index 000000000..0f4489eed
--- /dev/null
+++ b/src/qt_gui/translations/da_DK.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/de.ts b/src/qt_gui/translations/de.ts
new file mode 100644
index 000000000..1ff204df9
--- /dev/null
+++ b/src/qt_gui/translations/de.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/el.ts b/src/qt_gui/translations/el.ts
new file mode 100644
index 000000000..b015954e6
--- /dev/null
+++ b/src/qt_gui/translations/el.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/en.ts b/src/qt_gui/translations/en.ts
new file mode 100644
index 000000000..5ceb11884
--- /dev/null
+++ b/src/qt_gui/translations/en.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/es_ES.ts b/src/qt_gui/translations/es_ES.ts
new file mode 100644
index 000000000..eedd4f6d4
--- /dev/null
+++ b/src/qt_gui/translations/es_ES.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/fi.ts b/src/qt_gui/translations/fi.ts
new file mode 100644
index 000000000..af605d641
--- /dev/null
+++ b/src/qt_gui/translations/fi.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/fr.ts b/src/qt_gui/translations/fr.ts
new file mode 100644
index 000000000..d56f6e427
--- /dev/null
+++ b/src/qt_gui/translations/fr.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/hu_HU.ts b/src/qt_gui/translations/hu_HU.ts
new file mode 100644
index 000000000..a32b2d2ad
--- /dev/null
+++ b/src/qt_gui/translations/hu_HU.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/id.ts b/src/qt_gui/translations/id.ts
new file mode 100644
index 000000000..502be21e6
--- /dev/null
+++ b/src/qt_gui/translations/id.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/it.ts b/src/qt_gui/translations/it.ts
new file mode 100644
index 000000000..64d123f2e
--- /dev/null
+++ b/src/qt_gui/translations/it.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/ja_JP.ts b/src/qt_gui/translations/ja_JP.ts
new file mode 100644
index 000000000..c67352569
--- /dev/null
+++ b/src/qt_gui/translations/ja_JP.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/ko_KR.ts b/src/qt_gui/translations/ko_KR.ts
new file mode 100644
index 000000000..b33b5d927
--- /dev/null
+++ b/src/qt_gui/translations/ko_KR.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/lt_LT.ts b/src/qt_gui/translations/lt_LT.ts
new file mode 100644
index 000000000..286ec3f43
--- /dev/null
+++ b/src/qt_gui/translations/lt_LT.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/nb.ts b/src/qt_gui/translations/nb.ts
new file mode 100644
index 000000000..27fc540c1
--- /dev/null
+++ b/src/qt_gui/translations/nb.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/nl.ts b/src/qt_gui/translations/nl.ts
new file mode 100644
index 000000000..2f4f5f9b2
--- /dev/null
+++ b/src/qt_gui/translations/nl.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/pl_PL.ts b/src/qt_gui/translations/pl_PL.ts
new file mode 100644
index 000000000..cad5c5829
--- /dev/null
+++ b/src/qt_gui/translations/pl_PL.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/pt_BR.ts b/src/qt_gui/translations/pt_BR.ts
new file mode 100644
index 000000000..a35f9b1d8
--- /dev/null
+++ b/src/qt_gui/translations/pt_BR.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/ro_RO.ts b/src/qt_gui/translations/ro_RO.ts
new file mode 100644
index 000000000..c7dfae1b4
--- /dev/null
+++ b/src/qt_gui/translations/ro_RO.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/ru_RU.ts b/src/qt_gui/translations/ru_RU.ts
new file mode 100644
index 000000000..556875e17
--- /dev/null
+++ b/src/qt_gui/translations/ru_RU.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/tr_TR.ts b/src/qt_gui/translations/tr_TR.ts
new file mode 100644
index 000000000..ebb8b9b7c
--- /dev/null
+++ b/src/qt_gui/translations/tr_TR.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/vi_VN.ts b/src/qt_gui/translations/vi_VN.ts
new file mode 100644
index 000000000..08af9b351
--- /dev/null
+++ b/src/qt_gui/translations/vi_VN.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/zh_CN.ts b/src/qt_gui/translations/zh_CN.ts
new file mode 100644
index 000000000..6f6392237
--- /dev/null
+++ b/src/qt_gui/translations/zh_CN.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/translations/zh_TW.ts b/src/qt_gui/translations/zh_TW.ts
new file mode 100644
index 000000000..1ddeaa43f
--- /dev/null
+++ b/src/qt_gui/translations/zh_TW.ts
@@ -0,0 +1,491 @@
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ This software should not be used to play games you have not legally obtained.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Loading game list, please wait :3
+
+
+
+ Cancel
+ Cancel
+
+
+
+ Loading...
+ Loading...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Choose directory
+
+
+
+ Directory to install games
+ Directory to install games
+
+
+
+ Browse
+ Browse
+
+
+
+ Error
+ Error
+
+
+
+ The value for location to install games is not valid.
+ The value for location to install games is not valid.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Create Shortcut
+
+
+
+ Open Game Folder
+ Open Game Folder
+
+
+
+ SFO Viewer
+ SFO Viewer
+
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ Copy info
+ Copy info
+
+
+
+ Copy Name
+ Copy Name
+
+
+
+ Copy Serial
+ Copy Serial
+
+
+
+ Copy All
+ Copy All
+
+
+
+ Shortcut creation
+ Shortcut creation
+
+
+
+ Shortcut created successfully!\n %1
+ Shortcut created successfully!\n %1
+
+
+
+ Error
+ Error
+
+
+
+ Error creating shortcut!\n %1
+ Error creating shortcut!\n %1
+
+
+
+ Install PKG
+ Install PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Open/Add Elf Folder
+
+
+
+ Install Packages (PKG)
+ Install Packages (PKG)
+
+
+
+ Boot Game
+ Boot Game
+
+
+
+ About shadPS4
+ About shadPS4
+
+
+
+ Configure...
+ Configure...
+
+
+
+ Install application from a .pkg file
+ Install application from a .pkg file
+
+
+
+ Recent Games
+ Recent Games
+
+
+
+ Exit
+ Exit
+
+
+
+ Exit shadPS4
+ Exit shadPS4
+
+
+
+ Exit the application.
+ Exit the application.
+
+
+
+ Show Game List
+ Show Game List
+
+
+
+ Game List Refresh
+ Game List Refresh
+
+
+
+ Tiny
+ Tiny
+
+
+
+ Small
+ Small
+
+
+
+ Medium
+ Medium
+
+
+
+ Large
+ Large
+
+
+
+ List View
+ List View
+
+
+
+ Grid View
+ Grid View
+
+
+
+ Elf Viewer
+ Elf Viewer
+
+
+
+ Game Install Directory
+ Game Install Directory
+
+
+
+ Dump Game List
+ Dump Game List
+
+
+
+ PKG Viewer
+ PKG Viewer
+
+
+
+ Search...
+ Search...
+
+
+
+ File
+ File
+
+
+
+ View
+ View
+
+
+
+ Game List Icons
+ Game List Icons
+
+
+
+ Game List Mode
+ Game List Mode
+
+
+
+ Settings
+ Settings
+
+
+
+ Utils
+ Utils
+
+
+
+ Themes
+ Themes
+
+
+
+ About
+ About
+
+
+
+ Dark
+ Dark
+
+
+
+ Light
+ Light
+
+
+
+ Green
+ Green
+
+
+
+ Blue
+ Blue
+
+
+
+ Violet
+ Violet
+
+
+
+ toolBar
+ toolBar
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Trophy Viewer
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Settings
+
+
+
+ General
+ General
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Console Language
+
+
+
+ Emulator Language
+ Emulator Language
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Enable Fullscreen
+
+
+
+ Show Splash
+ Show Splash
+
+
+
+ Is PS4 Pro
+ Is PS4 Pro
+
+
+
+ Username
+ Username
+
+
+
+ Logger
+ Logger
+
+
+
+ Log Type
+ Log Type
+
+
+
+ Log Filter
+ Log Filter
+
+
+
+ Graphics
+ Graphics
+
+
+
+ Graphics Device
+ Graphics Device
+
+
+
+ Width
+ Width
+
+
+
+ Height
+ Height
+
+
+
+ Vblank Divider
+ Vblank Divider
+
+
+
+ Advanced
+ Advanced
+
+
+
+ Enable Shaders Dumping
+ Enable Shaders Dumping
+
+
+
+ Enable NULL GPU
+ Enable NULL GPU
+
+
+
+ Enable PM4 Dumping
+ Enable PM4 Dumping
+
+
+
+ Debug
+ Debug
+
+
+
+ Enable Debug Dumping
+ Enable Debug Dumping
+
+
+
+ Enable Vulkan Validation Layers
+ Enable Vulkan Validation Layers
+
+
+
+ Enable Vulkan Synchronization Validation
+ Enable Vulkan Synchronization Validation
+
+
+
+ Enable RenderDoc Debugging
+ Enable RenderDoc Debugging
+
+
+
\ No newline at end of file
diff --git a/src/qt_gui/trophy_viewer.cpp b/src/qt_gui/trophy_viewer.cpp
index bb17dfc3a..57dce6b4e 100644
--- a/src/qt_gui/trophy_viewer.cpp
+++ b/src/qt_gui/trophy_viewer.cpp
@@ -5,7 +5,7 @@
#include "trophy_viewer.h"
TrophyViewer::TrophyViewer(QString trophyPath, QString gameTrpPath) : QMainWindow() {
- this->setWindowTitle("Trophy Viewer");
+ this->setWindowTitle(tr("Trophy Viewer"));
this->setAttribute(Qt::WA_DeleteOnClose);
tabWidget = new QTabWidget(this);
gameTrpPath_ = gameTrpPath;
From 7766a653d572dd0ead49d9a8fb2894961f23a555 Mon Sep 17 00:00:00 2001
From: Dzmitry Dubrova
Date: Sun, 25 Aug 2024 12:30:05 +0300
Subject: [PATCH 04/69] ci: Add LinguistTools to CIs
---
.github/workflows/macos-qt.yml | 3 ++-
.github/workflows/windows-qt.yml | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/macos-qt.yml b/.github/workflows/macos-qt.yml
index 4b3672dff..24c71af49 100644
--- a/.github/workflows/macos-qt.yml
+++ b/.github/workflows/macos-qt.yml
@@ -38,7 +38,7 @@ jobs:
host: mac
target: desktop
arch: clang_64
- archives: qtbase
+ archives: qtbase qttools
- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_OSX_ARCHITECTURES=x86_64 -DENABLE_QT_GUI=ON
@@ -50,6 +50,7 @@ jobs:
run: |
mkdir upload
mv ${{github.workspace}}/build/shadps4.app upload
+ mv ${{github.workspace}}/build/translations/* upload
macdeployqt upload/shadps4.app
tar cf shadps4-macos-qt.tar.gz -C upload .
diff --git a/.github/workflows/windows-qt.yml b/.github/workflows/windows-qt.yml
index 06a16eb5b..a3adfa90c 100644
--- a/.github/workflows/windows-qt.yml
+++ b/.github/workflows/windows-qt.yml
@@ -28,7 +28,7 @@ jobs:
host: windows
target: desktop
arch: win64_msvc2019_64
- archives: qtbase
+ archives: qtbase qttools
- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -T ClangCL -DENABLE_QT_GUI=ON
@@ -40,6 +40,7 @@ jobs:
run: |
mkdir upload
move build/Release/shadPS4.exe upload
+ move build/Release/translations/* upload
windeployqt --dir upload upload/shadPS4.exe
- name: Upload executable
From e603165e2b7a71bdfa38e0c74f2d344f19f933e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C2=A5IGA?= <164882787+Xphalnos@users.noreply.github.com>
Date: Sun, 25 Aug 2024 12:31:45 +0200
Subject: [PATCH 05/69] Implement French translation
---
src/qt_gui/translations/fr.ts | 182 +++++++++++++++++-----------------
1 file changed, 91 insertions(+), 91 deletions(-)
diff --git a/src/qt_gui/translations/fr.ts b/src/qt_gui/translations/fr.ts
index d56f6e427..54100f17d 100644
--- a/src/qt_gui/translations/fr.ts
+++ b/src/qt_gui/translations/fr.ts
@@ -6,7 +6,7 @@
About shadPS4
- About shadPS4
+ À propos de shadPS4
@@ -16,12 +16,12 @@
shadPS4 is an experimental open-source emulator for the PlayStation 4.
- shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 est un émulateur expérimental de la PlayStation 4.
This software should not be used to play games you have not legally obtained.
- This software should not be used to play games you have not legally obtained.
+ Ce logiciel ne doit pas être utilisé pour jouer à des jeux que vous n'avez pas obtenus légalement.
@@ -29,7 +29,7 @@
Open Folder
- Open Folder
+ Ouvrir un dossier
@@ -37,17 +37,17 @@
Loading game list, please wait :3
- Loading game list, please wait :3
+ Chargement de la liste de jeu, veuillez attendre...
Cancel
- Cancel
+ Annuler
Loading...
- Loading...
+ Chargement...
@@ -55,27 +55,27 @@
shadPS4 - Choose directory
- shadPS4 - Choose directory
+ shadPS4 - Choisir un répertoire
Directory to install games
- Directory to install games
+ Répertoire pour installer les jeux
Browse
- Browse
+ Parcourir
Error
- Error
+ Erreur
The value for location to install games is not valid.
- The value for location to install games is not valid.
+ Le répertoire d'installation des jeux n'est pas valide.
@@ -83,67 +83,67 @@
Create Shortcut
- Create Shortcut
+ Créer un raccourci
Open Game Folder
- Open Game Folder
+ Ouvrir le dossier du jeu
SFO Viewer
- SFO Viewer
+ Visionneur SFO
Trophy Viewer
- Trophy Viewer
+ Visionneur de trophés
Copy info
- Copy info
+ Copier les informations
Copy Name
- Copy Name
+ Copier le nom
Copy Serial
- Copy Serial
+ Copier le numéro de série
Copy All
- Copy All
+ Copier tout
Shortcut creation
- Shortcut creation
+ Création du raccourci
Shortcut created successfully!\n %1
- Shortcut created successfully!\n %1
+ Raccourci créé avec succès!\n %1
Error
- Error
+ Erreur
Error creating shortcut!\n %1
- Error creating shortcut!\n %1
+ Erreur lors de la création du raccourci!\n %1
Install PKG
- Install PKG
+ Installer un PKG
@@ -151,177 +151,177 @@
Open/Add Elf Folder
- Open/Add Elf Folder
+ Ouvrir/Ajouter un dossier Elf
Install Packages (PKG)
- Install Packages (PKG)
+ Installer des packages (PKG)
Boot Game
- Boot Game
+ Démarrer un jeu
About shadPS4
- About shadPS4
+ À propos de shadPS4
Configure...
- Configure...
+ Configurer...
Install application from a .pkg file
- Install application from a .pkg file
+ Installer une application depuis un fichier .pkg
Recent Games
- Recent Games
+ Jeux récents
Exit
- Exit
+ Fermer
Exit shadPS4
- Exit shadPS4
+ Fermer shadPS4
Exit the application.
- Exit the application.
+ Fermer l'application.
Show Game List
- Show Game List
+ Afficher la liste de jeux
Game List Refresh
- Game List Refresh
+ Rafraîchir la liste de jeux
Tiny
- Tiny
+ Très Petit
Small
- Small
+ Petit
Medium
- Medium
+ Moyen
Large
- Large
+ Grand
List View
- List View
+ Mode liste
Grid View
- Grid View
+ Mode grille
Elf Viewer
- Elf Viewer
+ Visionneur Elf
Game Install Directory
- Game Install Directory
+ Répertoire des jeux
Dump Game List
- Dump Game List
+ Dumper la liste des jeux
PKG Viewer
- PKG Viewer
+ Visionneur PKG
Search...
- Search...
+ Chercher...
File
- File
+ Fichier
View
- View
+ Affichage
Game List Icons
- Game List Icons
+ Icones des jeux
Game List Mode
- Game List Mode
+ Mode liste
Settings
- Settings
+ Paramètres
Utils
- Utils
+ Utilitaire
Themes
- Themes
+ Thèmes
About
- About
+ À propos
Dark
- Dark
+ Noir
Light
- Light
+ Blanc
Green
- Green
+ Vert
Blue
- Blue
+ Bleu
@@ -331,7 +331,7 @@
toolBar
- toolBar
+ Bare d'outils
@@ -339,7 +339,7 @@
Open Folder
- Open Folder
+ Ouvrir un dossier
@@ -347,7 +347,7 @@
Trophy Viewer
- Trophy Viewer
+ Visionneur de trophés
@@ -355,137 +355,137 @@
Settings
- Settings
+ Paramètres
General
- General
+ Général
System
- System
+ Système
Console Language
- Console Language
+ Langage de la console
Emulator Language
- Emulator Language
+ Langage de l'émulateur
Emulator
- Emulator
+ Émulateur
Enable Fullscreen
- Enable Fullscreen
+ Plein écran
Show Splash
- Show Splash
+ Afficher l'image du jeu
Is PS4 Pro
- Is PS4 Pro
+ Mode PS4 Pro
Username
- Username
+ Nom d'utilisateur
Logger
- Logger
+ Journalisation
Log Type
- Log Type
+ Type
Log Filter
- Log Filter
+ Filtre
Graphics
- Graphics
+ Graphismes
Graphics Device
- Graphics Device
+ Carte graphique
Width
- Width
+ Largeur
Height
- Height
+ Hauteur
Vblank Divider
- Vblank Divider
+ Vblank
Advanced
- Advanced
+ Avancé
Enable Shaders Dumping
- Enable Shaders Dumping
+ Dumper les shaders
Enable NULL GPU
- Enable NULL GPU
+ NULL GPU
Enable PM4 Dumping
- Enable PM4 Dumping
+ Dumper le PM4
Debug
- Debug
+ Débogage
Enable Debug Dumping
- Enable Debug Dumping
+ Activer le débogage
Enable Vulkan Validation Layers
- Enable Vulkan Validation Layers
+ Couche de validation Vulkan
Enable Vulkan Synchronization Validation
- Enable Vulkan Synchronization Validation
+ Synchroniser la validation Vulkan
Enable RenderDoc Debugging
- Enable RenderDoc Debugging
+ Activer le débogage RenderDoc
-
\ No newline at end of file
+
From 83b43363fa7e63b68dd60bc3039e78ceabe3df18 Mon Sep 17 00:00:00 2001
From: Dzmitry Dubrova
Date: Sun, 25 Aug 2024 13:59:22 +0300
Subject: [PATCH 06/69] ci: Fix CI
---
.github/workflows/macos-qt.yml | 2 +-
.github/workflows/windows-qt.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/macos-qt.yml b/.github/workflows/macos-qt.yml
index 24c71af49..def98ea34 100644
--- a/.github/workflows/macos-qt.yml
+++ b/.github/workflows/macos-qt.yml
@@ -50,7 +50,7 @@ jobs:
run: |
mkdir upload
mv ${{github.workspace}}/build/shadps4.app upload
- mv ${{github.workspace}}/build/translations/* upload
+ mv ${{github.workspace}}/build/translations upload
macdeployqt upload/shadps4.app
tar cf shadps4-macos-qt.tar.gz -C upload .
diff --git a/.github/workflows/windows-qt.yml b/.github/workflows/windows-qt.yml
index a3adfa90c..70c33ebe9 100644
--- a/.github/workflows/windows-qt.yml
+++ b/.github/workflows/windows-qt.yml
@@ -40,7 +40,7 @@ jobs:
run: |
mkdir upload
move build/Release/shadPS4.exe upload
- move build/Release/translations/* upload
+ move build/translations upload
windeployqt --dir upload upload/shadPS4.exe
- name: Upload executable
From 5664d45305b310d8716d9eee598964ad53ec0cf2 Mon Sep 17 00:00:00 2001
From: SaynedBread <114937220+CyntexMore@users.noreply.github.com>
Date: Sun, 25 Aug 2024 14:12:16 +0200
Subject: [PATCH 07/69] docs: Updated Status
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 25dbbccc2..4e9e6fb9e 100644
--- a/README.md
+++ b/README.md
@@ -49,7 +49,7 @@ To get the latest news, go to our [**X (Twitter)**](https://x.com/shadps4) or ou
> [!IMPORTANT]
> shadPS4 is early in developement, don't expect a flawless experience.
-Currently, the emulator successfully runs small games like [**Sonic Mania**](https://www.youtube.com/watch?v=AAHoNzhHyCU), [**Undertale**](https://youtu.be/5zIvdy65Ro4), [**Dysmantle**](https://youtu.be/b9xzhLBdESE), and a few others. Most importantly shadPS4 can *somewhat* run Bloodborne.
+Currently, the emulator successfully runs small games like [**Sonic Mania**](https://www.youtube.com/watch?v=AAHoNzhHyCU), [**Undertale**](https://youtu.be/5zIvdy65Ro4) and it can even *somewhat* run [**Bloodborne**](https://www.youtube.com/watch?v=wC6s0avpQRE).
# Why
From 6a87c37aeb8d49a750696608f187820faeed471b Mon Sep 17 00:00:00 2001
From: SaynedBread <114937220+CyntexMore@users.noreply.github.com>
Date: Sun, 25 Aug 2024 14:37:17 +0200
Subject: [PATCH 08/69] docs: Removed misinformation
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 4e9e6fb9e..c99142c78 100644
--- a/README.md
+++ b/README.md
@@ -101,7 +101,7 @@ For more information on how to test, debug and report issues with the emulator o
# Keyboard mapping
> [!NOTE]
-> Keyboard mappings can be changed from the Qt interface of shadPS4. Xbox and DualShock controllers work out of the box.
+> Xbox and DualShock controllers work out of the box.
| Controller button | Keyboard equivelant |
|-------------|-------------|
From 26b5661dea64da7b1f6dc62d2746b5e5468b21a9 Mon Sep 17 00:00:00 2001
From: Dzmitry Dubrova
Date: Sun, 25 Aug 2024 15:19:24 +0300
Subject: [PATCH 09/69] ci: Fix linux-qt CI
---
.github/linux-appimage-qt.sh | 4 ++++
.github/workflows/linux-qt.yml | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/.github/linux-appimage-qt.sh b/.github/linux-appimage-qt.sh
index 870172457..203d214e3 100755
--- a/.github/linux-appimage-qt.sh
+++ b/.github/linux-appimage-qt.sh
@@ -19,8 +19,12 @@ chmod a+x linuxdeploy-x86_64.AppImage
chmod a+x linuxdeploy-plugin-qt-x86_64.AppImage
chmod a+x linuxdeploy-plugin-checkrt-x86_64.sh
+
# Build AppImage
./linuxdeploy-x86_64.AppImage --appdir AppDir
./linuxdeploy-plugin-checkrt-x86_64.sh --appdir AppDir
+
+cp -a "$GITHUB_WORKSPACE/build/translations" AppDir/usr/bin
+
./linuxdeploy-x86_64.AppImage --appdir AppDir -d "$GITHUB_WORKSPACE"/.github/shadps4.desktop -e "$GITHUB_WORKSPACE"/build/shadps4 -i "$GITHUB_WORKSPACE"/.github/shadps4.png --plugin qt --output appimage
mv Shadps4-x86_64.AppImage Shadps4-qt.AppImage
diff --git a/.github/workflows/linux-qt.yml b/.github/workflows/linux-qt.yml
index 5611ae50f..26b80d683 100644
--- a/.github/workflows/linux-qt.yml
+++ b/.github/workflows/linux-qt.yml
@@ -23,7 +23,7 @@ jobs:
- name: Install misc packages
run: >
- sudo apt-get update && sudo apt install libx11-dev libxext-dev libwayland-dev libfuse2 clang build-essential qt6-base-dev
+ sudo apt-get update && sudo apt install libx11-dev libxext-dev libwayland-dev libfuse2 clang build-essential qt6-base-dev qt6-tools-dev
- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DENABLE_QT_GUI=ON
From b687ae5e3474ae4f124a730e4e59b810768c19d7 Mon Sep 17 00:00:00 2001
From: psucien <168137814+psucien@users.noreply.github.com>
Date: Sun, 25 Aug 2024 22:01:05 +0200
Subject: [PATCH 10/69] GnmDriver: Clear context support (#567)
* gnmdriver: added support for gpu context reset
* shader_recompiler: minor validation fixes
* shader_recompiler: added `V_CMPX_GT_I32`
* shader_recompiler: fix for crash on inline sampler access
* compilation warnings and dead code elimination
* amdgpu: fix for registers addressing
* libraries: videoout: reduce logging pressure
* shader_recompiler: fix for devergence scope detection
---
CMakeLists.txt | 1 +
src/core/libraries/gnmdriver/gnmdriver.cpp | 50 +++++++++++------
src/core/libraries/videoout/video_out.cpp | 16 +++---
.../backend/spirv/emit_spirv.cpp | 1 +
.../backend/spirv/spirv_emit_context.cpp | 4 ++
.../frontend/control_flow_graph.cpp | 18 ++++--
.../frontend/instruction.cpp | 14 +++++
src/shader_recompiler/frontend/instruction.h | 1 +
.../frontend/translate/vector_alu.cpp | 2 +
.../ir/passes/resource_tracking_pass.cpp | 5 +-
src/video_core/amdgpu/default_context.cpp | 55 +++++++++++++++++++
src/video_core/amdgpu/liverpool.cpp | 1 +
src/video_core/amdgpu/liverpool.h | 2 +
src/video_core/buffer_cache/buffer.h | 6 +-
.../renderer_vulkan/vk_instance.cpp | 1 +
.../renderer_vulkan/vk_rasterizer.cpp | 4 +-
src/video_core/texture_cache/image.h | 6 +-
src/video_core/texture_cache/image_view.cpp | 3 +-
src/video_core/texture_cache/tile_manager.cpp | 7 ---
19 files changed, 147 insertions(+), 50 deletions(-)
create mode 100644 src/video_core/amdgpu/default_context.cpp
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 721f11287..43ad23e94 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -488,6 +488,7 @@ set(VIDEO_CORE src/video_core/amdgpu/liverpool.cpp
src/video_core/amdgpu/pm4_cmds.h
src/video_core/amdgpu/pm4_opcodes.h
src/video_core/amdgpu/resource.h
+ src/video_core/amdgpu/default_context.cpp
src/video_core/buffer_cache/buffer.cpp
src/video_core/buffer_cache/buffer.h
src/video_core/buffer_cache/buffer_cache.cpp
diff --git a/src/core/libraries/gnmdriver/gnmdriver.cpp b/src/core/libraries/gnmdriver/gnmdriver.cpp
index c2ee6d592..95821a03b 100644
--- a/src/core/libraries/gnmdriver/gnmdriver.cpp
+++ b/src/core/libraries/gnmdriver/gnmdriver.cpp
@@ -55,6 +55,10 @@ static constexpr auto HwInitPacketSize = 0x100u;
// clang-format off
static constexpr std::array InitSequence{
+ // A fake preamble to mimic context reset sent by FW
+ 0xc0001200u, 0u, // IT_CLEAR_STATE
+
+ // Actual init state sequence
0xc0017600u, 0x216u, 0xffffffffu,
0xc0017600u, 0x217u, 0xffffffffu,
0xc0017600u, 0x215u, 0u,
@@ -94,9 +98,13 @@ static constexpr std::array InitSequence{
0xc0036900u, 0x295u, 0x100u, 0x100u, 4u,
0xc0017900u, 0x200u, 0xe0000000u,
};
-static_assert(InitSequence.size() == 0x73);
+static_assert(InitSequence.size() == 0x73 + 2);
static constexpr std::array InitSequence175{
+ // A fake preamble to mimic context reset sent by FW
+ 0xc0001200u, 0u, // IT_CLEAR_STATE
+
+ // Actual init state sequence
0xc0017600u, 0x216u, 0xffffffffu,
0xc0017600u, 0x217u, 0xffffffffu,
0xc0017600u, 0x215u, 0u,
@@ -136,9 +144,13 @@ static constexpr std::array InitSequence175{
0xc0036900u, 0x295u, 0x100u, 0x100u, 4u,
0xc0017900u, 0x200u, 0xe0000000u,
};
-static_assert(InitSequence175.size() == 0x73);
+static_assert(InitSequence175.size() == 0x73 + 2);
static constexpr std::array InitSequence200{
+ // A fake preamble to mimic context reset sent by FW
+ 0xc0001200u, 0u, // IT_CLEAR_STATE
+
+ // Actual init state sequence
0xc0017600u, 0x216u, 0xffffffffu,
0xc0017600u, 0x217u, 0xffffffffu,
0xc0017600u, 0x215u, 0u,
@@ -179,9 +191,13 @@ static constexpr std::array InitSequence200{
0xc0036900u, 0x295u, 0x100u, 0x100u, 4u,
0xc0017900u, 0x200u, 0xe0000000u,
};
-static_assert(InitSequence200.size() == 0x76);
+static_assert(InitSequence200.size() == 0x76 + 2);
static constexpr std::array InitSequence350{
+ // A fake preamble to mimic context reset sent by FW
+ 0xc0001200u, 0u, // IT_CLEAR_STATE
+
+ // Actual init state sequence
0xc0017600u, 0x216u, 0xffffffffu,
0xc0017600u, 0x217u, 0xffffffffu,
0xc0017600u, 0x215u, 0u,
@@ -224,7 +240,7 @@ static constexpr std::array InitSequence350{
0xc0017900u, 0x200u, 0xe0000000u,
0xc0016900u, 0x2aau, 0xffu,
};
-static_assert(InitSequence350.size() == 0x7c);
+static_assert(InitSequence350.size() == 0x7c + 2);
static constexpr std::array CtxInitSequence{
0xc0012800u, 0x80000000u, 0x80000000u,
@@ -735,11 +751,11 @@ u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState(u32* cmdbuf, u32 size) {
cmdbuf = ClearContextState(cmdbuf);
}
- std::memcpy(cmdbuf, InitSequence.data(), InitSequence.size() * 4);
- cmdbuf += InitSequence.size();
+ std::memcpy(cmdbuf, &InitSequence[2], (InitSequence.size() - 2) * 4);
+ cmdbuf += InitSequence.size() - 2;
const auto cmdbuf_left =
- HwInitPacketSize - InitSequence.size() - (clear_state ? 0xc : 0) - 1;
+ HwInitPacketSize - (InitSequence.size() - 2) - (clear_state ? 0xc : 0) - 1;
cmdbuf = WriteHeader(cmdbuf, cmdbuf_left);
cmdbuf = WriteBody(cmdbuf, 0u);
@@ -757,10 +773,10 @@ u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState175(u32* cmdbuf, u32 size) {
}
cmdbuf = ClearContextState(cmdbuf);
- std::memcpy(cmdbuf, InitSequence175.data(), InitSequence175.size() * 4);
- cmdbuf += InitSequence175.size();
+ std::memcpy(cmdbuf, &InitSequence175[2], (InitSequence175.size() - 2) * 4);
+ cmdbuf += InitSequence175.size() - 2;
- constexpr auto cmdbuf_left = HwInitPacketSize - InitSequence175.size() - 0xc - 1;
+ constexpr auto cmdbuf_left = HwInitPacketSize - (InitSequence175.size() - 2) - 0xc - 1;
WriteTrailingNop(cmdbuf);
return HwInitPacketSize;
@@ -778,11 +794,11 @@ u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState200(u32* cmdbuf, u32 size) {
cmdbuf = ClearContextState(cmdbuf);
}
- std::memcpy(cmdbuf, InitSequence200.data(), InitSequence200.size() * 4);
- cmdbuf += InitSequence200.size();
+ std::memcpy(cmdbuf, &InitSequence200[2], (InitSequence200.size() - 2) * 4);
+ cmdbuf += InitSequence200.size() - 2;
const auto cmdbuf_left =
- HwInitPacketSize - InitSequence200.size() - (clear_state ? 0xc : 0) - 1;
+ HwInitPacketSize - (InitSequence200.size() - 2) - (clear_state ? 0xc : 0) - 1;
cmdbuf = WriteHeader(cmdbuf, cmdbuf_left);
cmdbuf = WriteBody(cmdbuf, 0u);
@@ -804,11 +820,11 @@ u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState350(u32* cmdbuf, u32 size) {
cmdbuf = ClearContextState(cmdbuf);
}
- std::memcpy(cmdbuf, InitSequence350.data(), InitSequence350.size() * 4);
- cmdbuf += InitSequence350.size();
+ std::memcpy(cmdbuf, &InitSequence350[2], (InitSequence350.size() - 2) * 4);
+ cmdbuf += InitSequence350.size() - 2;
const auto cmdbuf_left =
- HwInitPacketSize - InitSequence350.size() - (clear_state ? 0xc : 0) - 1;
+ HwInitPacketSize - (InitSequence350.size() - 2) - (clear_state ? 0xc : 0) - 1;
cmdbuf = WriteHeader(cmdbuf, cmdbuf_left);
cmdbuf = WriteBody(cmdbuf, 0u);
@@ -1743,7 +1759,7 @@ s32 PS4_SYSV_ABI sceGnmSetVsShader(u32* cmdbuf, u32 size, const u32* vs_regs, u3
return -1;
}
- const u32 var = shader_modifier == 0 ? vs_regs[2] : (vs_regs[2] & 0xfcfffc3f | shader_modifier);
+ const u32 var = shader_modifier == 0 ? vs_regs[2] : (vs_regs[2] & 0xfcfffc3f) | shader_modifier;
cmdbuf = PM4CmdSetData::SetShReg(cmdbuf, 0x48u, vs_regs[0], 0u); // SPI_SHADER_PGM_LO_VS
cmdbuf = PM4CmdSetData::SetShReg(cmdbuf, 0x4au, var, vs_regs[3]); // SPI_SHADER_PGM_RSRC1_VS
cmdbuf = PM4CmdSetData::SetContextReg(cmdbuf, 0x207u, vs_regs[6]); // PA_CL_VS_OUT_CNTL
diff --git a/src/core/libraries/videoout/video_out.cpp b/src/core/libraries/videoout/video_out.cpp
index d13062cd4..a6c1a7623 100644
--- a/src/core/libraries/videoout/video_out.cpp
+++ b/src/core/libraries/videoout/video_out.cpp
@@ -185,14 +185,16 @@ s32 PS4_SYSV_ABI sceVideoOutGetFlipStatus(s32 handle, FlipStatus* status) {
return ORBIS_VIDEO_OUT_ERROR_INVALID_HANDLE;
}
- std::unique_lock lock{port->port_mutex};
- *status = port->flip_status;
+ {
+ std::unique_lock lock{port->port_mutex};
+ *status = port->flip_status;
+ }
- LOG_INFO(Lib_VideoOut,
- "count = {}, processTime = {}, tsc = {}, submitTsc = {}, flipArg = {}, gcQueueNum = "
- "{}, flipPendingNum = {}, currentBuffer = {}",
- status->count, status->processTime, status->tsc, status->submitTsc, status->flipArg,
- status->gcQueueNum, status->flipPendingNum, status->currentBuffer);
+ LOG_TRACE(Lib_VideoOut,
+ "count = {}, processTime = {}, tsc = {}, submitTsc = {}, flipArg = {}, gcQueueNum = "
+ "{}, flipPendingNum = {}, currentBuffer = {}",
+ status->count, status->processTime, status->tsc, status->submitTsc, status->flipArg,
+ status->gcQueueNum, status->flipPendingNum, status->currentBuffer);
return ORBIS_OK;
}
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv.cpp b/src/shader_recompiler/backend/spirv/emit_spirv.cpp
index c70427635..09a9fd629 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv.cpp
@@ -179,6 +179,7 @@ void DefineEntryPoint(const IR::Program& program, EmitContext& ctx, Id main) {
spv::ExecutionModel execution_model{};
ctx.AddCapability(spv::Capability::Image1D);
ctx.AddCapability(spv::Capability::Sampled1D);
+ ctx.AddCapability(spv::Capability::ImageQuery);
if (info.uses_fp16) {
ctx.AddCapability(spv::Capability::Float16);
ctx.AddCapability(spv::Capability::Int16);
diff --git a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp
index e48b89f4b..994c2847e 100644
--- a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp
+++ b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp
@@ -405,6 +405,10 @@ spv::ImageFormat GetFormat(const AmdGpu::Image& image) {
image.GetNumberFmt() == AmdGpu::NumberFormat::Float) {
return spv::ImageFormat::Rg16f;
}
+ if (image.GetDataFmt() == AmdGpu::DataFormat::Format16_16 &&
+ image.GetNumberFmt() == AmdGpu::NumberFormat::Snorm) {
+ return spv::ImageFormat::Rg16Snorm;
+ }
if (image.GetDataFmt() == AmdGpu::DataFormat::Format8_8 &&
image.GetNumberFmt() == AmdGpu::NumberFormat::Unorm) {
return spv::ImageFormat::Rg8;
diff --git a/src/shader_recompiler/frontend/control_flow_graph.cpp b/src/shader_recompiler/frontend/control_flow_graph.cpp
index 3faf8665b..276bd9db0 100644
--- a/src/shader_recompiler/frontend/control_flow_graph.cpp
+++ b/src/shader_recompiler/frontend/control_flow_graph.cpp
@@ -21,8 +21,13 @@ struct Compare {
}
};
-static IR::Condition MakeCondition(Opcode opcode) {
- switch (opcode) {
+static IR::Condition MakeCondition(const GcnInst& inst) {
+ if (inst.IsCmpx()) {
+ ASSERT(inst.opcode == Opcode::V_CMPX_NE_U32);
+ return IR::Condition::Execnz;
+ }
+
+ switch (inst.opcode) {
case Opcode::S_CBRANCH_SCC0:
return IR::Condition::Scc0;
case Opcode::S_CBRANCH_SCC1:
@@ -37,7 +42,6 @@ static IR::Condition MakeCondition(Opcode opcode) {
return IR::Condition::Execnz;
case Opcode::S_AND_SAVEEXEC_B64:
case Opcode::S_ANDN2_B64:
- case Opcode::V_CMPX_NE_U32:
return IR::Condition::Execnz;
default:
return IR::Condition::True;
@@ -94,7 +98,8 @@ void CFG::EmitDivergenceLabels() {
// While this instruction does not save EXEC it is often used paired
// with SAVEEXEC to mask the threads that didn't pass the condition
// of initial branch.
- inst.opcode == Opcode::S_ANDN2_B64 || inst.opcode == Opcode::V_CMPX_NE_U32;
+ (inst.opcode == Opcode::S_ANDN2_B64 && inst.dst[0].field == OperandField::ExecLo) ||
+ inst.opcode == Opcode::V_CMPX_NE_U32;
};
const auto is_close_scope = [](const GcnInst& inst) {
// Closing an EXEC scope can be either a branch instruction
@@ -104,7 +109,8 @@ void CFG::EmitDivergenceLabels() {
// Sometimes compiler might insert instructions between the SAVEEXEC and the branch.
// Those instructions need to be wrapped in the condition as well so allow branch
// as end scope instruction.
- inst.opcode == Opcode::S_CBRANCH_EXECZ || inst.opcode == Opcode::S_ANDN2_B64;
+ inst.opcode == Opcode::S_CBRANCH_EXECZ ||
+ (inst.opcode == Opcode::S_ANDN2_B64 && inst.dst[0].field == OperandField::ExecLo);
};
// Since we will be adding new labels, avoid iterating those as well.
@@ -171,7 +177,7 @@ void CFG::EmitBlocks() {
block->begin_index = GetIndex(start);
block->end_index = end_index;
block->end_inst = end_inst;
- block->cond = MakeCondition(end_inst.opcode);
+ block->cond = MakeCondition(end_inst);
blocks.insert(*block);
}
}
diff --git a/src/shader_recompiler/frontend/instruction.cpp b/src/shader_recompiler/frontend/instruction.cpp
index 756d3b4e2..a0c132053 100644
--- a/src/shader_recompiler/frontend/instruction.cpp
+++ b/src/shader_recompiler/frontend/instruction.cpp
@@ -47,4 +47,18 @@ bool GcnInst::IsConditionalBranch() const {
return false;
}
+bool GcnInst::IsCmpx() const {
+ if ((opcode >= Opcode::V_CMPX_F_F32 && opcode <= Opcode::V_CMPX_T_F32) ||
+ (opcode >= Opcode::V_CMPX_F_F64 && opcode <= Opcode::V_CMPX_T_F64) ||
+ (opcode >= Opcode::V_CMPSX_F_F32 && opcode <= Opcode::V_CMPSX_T_F32) ||
+ (opcode >= Opcode::V_CMPSX_F_F64 && opcode <= Opcode::V_CMPSX_T_F64) ||
+ (opcode >= Opcode::V_CMPX_F_I32 && opcode <= Opcode::V_CMPX_CLASS_F32) ||
+ (opcode >= Opcode::V_CMPX_F_I64 && opcode <= Opcode::V_CMPX_CLASS_F64) ||
+ (opcode >= Opcode::V_CMPX_F_U32 && opcode <= Opcode::V_CMPX_T_U32) ||
+ (opcode >= Opcode::V_CMPX_F_U64 && opcode <= Opcode::V_CMPX_T_U64)) {
+ return true;
+ }
+ return false;
+}
+
} // namespace Shader::Gcn
diff --git a/src/shader_recompiler/frontend/instruction.h b/src/shader_recompiler/frontend/instruction.h
index f83f43db5..7c2e0bd1e 100644
--- a/src/shader_recompiler/frontend/instruction.h
+++ b/src/shader_recompiler/frontend/instruction.h
@@ -203,6 +203,7 @@ struct GcnInst {
bool IsUnconditionalBranch() const;
bool IsConditionalBranch() const;
bool IsFork() const;
+ bool IsCmpx() const;
};
} // namespace Shader::Gcn
diff --git a/src/shader_recompiler/frontend/translate/vector_alu.cpp b/src/shader_recompiler/frontend/translate/vector_alu.cpp
index 1bbc3c162..0216238ab 100644
--- a/src/shader_recompiler/frontend/translate/vector_alu.cpp
+++ b/src/shader_recompiler/frontend/translate/vector_alu.cpp
@@ -280,6 +280,8 @@ void Translator::EmitVectorAlu(const GcnInst& inst) {
return V_CMP_U32(ConditionOp::GT, true, false, inst);
case Opcode::V_CMP_LT_I32:
return V_CMP_U32(ConditionOp::LT, true, false, inst);
+ case Opcode::V_CMPX_GT_I32:
+ return V_CMP_U32(ConditionOp::GT, true, true, inst);
case Opcode::V_CMPX_LT_I32:
return V_CMP_U32(ConditionOp::LT, true, true, inst);
case Opcode::V_CMPX_F_U32:
diff --git a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp
index efee710db..016ba3660 100644
--- a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp
+++ b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp
@@ -246,10 +246,7 @@ public:
return true;
}
// Samplers with different bindings might still be the same.
- const auto old_sharp =
- info.ReadUd(existing.sgpr_base, existing.dword_offset);
- const auto new_sharp = info.ReadUd(desc.sgpr_base, desc.dword_offset);
- return old_sharp == new_sharp;
+ return existing.GetSsharp(info) == desc.GetSsharp(info);
})};
return index;
}
diff --git a/src/video_core/amdgpu/default_context.cpp b/src/video_core/amdgpu/default_context.cpp
new file mode 100644
index 000000000..01229e7b1
--- /dev/null
+++ b/src/video_core/amdgpu/default_context.cpp
@@ -0,0 +1,55 @@
+// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "common/types.h"
+#include "video_core/amdgpu/liverpool.h"
+
+#include
+
+namespace AmdGpu {
+
+// The following values are taken from fpPS4:
+// https://github.com/red-prig/fpPS4/blob/436b43064be4c78229500f3d3c054fc76639247d/chip/pm4_pfp.pas#L410
+//
+static constexpr std::array reg_array_default{
+ 0x00000000u, 0x80000000u, 0x40004000u, 0xdeadbeefu, 0x00000000u, 0x40004000u, 0x00000000u,
+ 0x40004000u, 0x00000000u, 0x40004000u, 0x00000000u, 0x40004000u, 0xaa99aaaau, 0x00000000u,
+ 0xdeadbeefu, 0xdeadbeefu, 0x80000000u, 0x40004000u, 0x00000000u, 0x00000000u, 0x80000000u,
+ 0x40004000u, 0x80000000u, 0x40004000u, 0x80000000u, 0x40004000u, 0x80000000u, 0x40004000u,
+ 0x80000000u, 0x40004000u, 0x80000000u, 0x40004000u, 0x80000000u, 0x40004000u, 0x80000000u,
+ 0x40004000u, 0x80000000u, 0x40004000u, 0x80000000u, 0x40004000u, 0x80000000u, 0x40004000u,
+ 0x80000000u, 0x40004000u, 0x80000000u, 0x40004000u, 0x80000000u, 0x40004000u, 0x80000000u,
+ 0x40004000u, 0x80000000u, 0x40004000u, 0x00000000u, 0x3f800000u, 0x00000000u, 0x3f800000u,
+ 0x00000000u, 0x3f800000u, 0x00000000u, 0x3f800000u, 0x00000000u, 0x3f800000u, 0x00000000u,
+ 0x3f800000u, 0x00000000u, 0x3f800000u, 0x00000000u, 0x3f800000u, 0x00000000u, 0x3f800000u,
+ 0x00000000u, 0x3f800000u, 0x00000000u, 0x3f800000u, 0x00000000u, 0x3f800000u, 0x00000000u,
+ 0x3f800000u, 0x00000000u, 0x3f800000u, 0x00000000u, 0x3f800000u, 0x00000000u, 0x3f800000u,
+ 0x2a00161au,
+};
+
+void Liverpool::Regs::SetDefaults() {
+ std::memset(reg_array.data(), 0, reg_array.size() * sizeof(u32));
+
+ std::memcpy(®_array[ContextRegWordOffset + 0x80], reg_array_default.data(),
+ reg_array_default.size() * sizeof(u32));
+
+ // Individual context regs values
+ reg_array[ContextRegWordOffset + 0x000d] = 0x40004000u;
+ reg_array[ContextRegWordOffset + 0x01b6] = 0x00000002u;
+ reg_array[ContextRegWordOffset + 0x0204] = 0x00090000u;
+ reg_array[ContextRegWordOffset + 0x0205] = 0x00000004u;
+ reg_array[ContextRegWordOffset + 0x0295] = 0x00000100u;
+ reg_array[ContextRegWordOffset + 0x0296] = 0x00000080u;
+ reg_array[ContextRegWordOffset + 0x0297] = 0x00000002u;
+ reg_array[ContextRegWordOffset + 0x02aa] = 0x00001000u;
+ reg_array[ContextRegWordOffset + 0x02f7] = 0x00001000u;
+ reg_array[ContextRegWordOffset + 0x02f9] = 0x00000005u;
+ reg_array[ContextRegWordOffset + 0x02fa] = 0x3f800000u;
+ reg_array[ContextRegWordOffset + 0x02fb] = 0x3f800000u;
+ reg_array[ContextRegWordOffset + 0x02fc] = 0x3f800000u;
+ reg_array[ContextRegWordOffset + 0x02fd] = 0x3f800000u;
+ reg_array[ContextRegWordOffset + 0x0316] = 0x0000000eu;
+ reg_array[ContextRegWordOffset + 0x0317] = 0x00000010u;
+}
+
+} // namespace AmdGpu
diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp
index dce2d4b42..89ab7fe43 100644
--- a/src/video_core/amdgpu/liverpool.cpp
+++ b/src/video_core/amdgpu/liverpool.cpp
@@ -216,6 +216,7 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span usage_override /*= {}*/)
- : info{info_}, image_id{image_id_} {
+ : image_id{image_id_}, info{info_} {
vk::ImageViewUsageCreateInfo usage_ci{};
if (usage_override) {
usage_ci.usage = usage_override.value();
diff --git a/src/video_core/texture_cache/tile_manager.cpp b/src/video_core/texture_cache/tile_manager.cpp
index 6bb104a66..0bed5adc2 100644
--- a/src/video_core/texture_cache/tile_manager.cpp
+++ b/src/video_core/texture_cache/tile_manager.cpp
@@ -342,12 +342,6 @@ TileManager::ScratchBuffer TileManager::AllocBuffer(u32 size, bool is_storage /*
.usage = usage,
};
-#ifdef __APPLE__
- // Fix for detiler artifacts on macOS
- const bool is_large_buffer = true;
-#else
- const bool is_large_buffer = size > 128_MB;
-#endif
VmaAllocationCreateInfo alloc_info{
.flags = !is_storage ? VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT |
VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT
@@ -462,7 +456,6 @@ std::optional TileManager::TryDetile(Image& image) {
(m > 0 ? params.sizes[m - 1] : 0);
}
- auto pitch = image.info.pitch;
cmdbuf.pushConstants(*detiler->pl_layout, vk::ShaderStageFlagBits::eCompute, 0u, sizeof(params),
¶ms);
From 2a737d08004e9429720226ed2069397d643bc802 Mon Sep 17 00:00:00 2001
From: DanielSvoboda
Date: Sun, 25 Aug 2024 17:07:46 -0300
Subject: [PATCH 11/69] V_NOP | PfpSyncMe | S_CMPK_EQ_U32 (#426)
* V_NOP
V_NOP = Do nothing
* PfpSyncMe
PfpSyncMe ensures that all previous commands are completed before continuing.
'break' should be enough for now
* S_CMPK_EQ_U32
S_CMPK_EQ_U32
SCC = (D.u == SIMM16)
* S_CMPK_EQ_U32
* OperandField::Undefined:
* Update translate.cpp
remove OperandField::Undefined:
* Update image_view.cpp
[Render.Vulkan] image_view.cpp:ImageViewInfo:109: Storage image (num_comps = 4) requires swizzling [BGRA]
format 43 dst_sel 3886
* Update liverpool_to_vk.cpp
* S_CMPK_EQ_U32
* S_CMPK_EQ_U32
---
src/shader_recompiler/frontend/translate/scalar_alu.cpp | 9 +++++++++
src/shader_recompiler/frontend/translate/translate.h | 1 +
src/shader_recompiler/frontend/translate/vector_alu.cpp | 2 ++
src/video_core/amdgpu/liverpool.cpp | 3 +++
src/video_core/renderer_vulkan/liverpool_to_vk.cpp | 1 +
src/video_core/texture_cache/image_view.cpp | 3 +++
6 files changed, 19 insertions(+)
diff --git a/src/shader_recompiler/frontend/translate/scalar_alu.cpp b/src/shader_recompiler/frontend/translate/scalar_alu.cpp
index 7f7c9d7e0..50a550d44 100644
--- a/src/shader_recompiler/frontend/translate/scalar_alu.cpp
+++ b/src/shader_recompiler/frontend/translate/scalar_alu.cpp
@@ -96,6 +96,8 @@ void Translator::EmitScalarAlu(const GcnInst& inst) {
return S_MAX_U32(inst);
case Opcode::S_WQM_B64:
break;
+ case Opcode::S_CMPK_EQ_U32:
+ return S_CMPK_EQ_U32(inst);
default:
LogMissingOpcode(inst);
}
@@ -468,4 +470,11 @@ void Translator::S_MIN_U32(const GcnInst& inst) {
ir.SetScc(ir.IEqual(result, src0));
}
+void Translator::S_CMPK_EQ_U32(const GcnInst& inst) {
+ const s32 simm16 = inst.control.sopk.simm;
+ const IR::U32 src0{GetSrc(inst.src[0])};
+ const IR::U32 src1{ir.Imm32(simm16)};
+ ir.SetScc(ir.IEqual(src0, src1));
+}
+
} // namespace Shader::Gcn
diff --git a/src/shader_recompiler/frontend/translate/translate.h b/src/shader_recompiler/frontend/translate/translate.h
index 009acabdf..6de5e3673 100644
--- a/src/shader_recompiler/frontend/translate/translate.h
+++ b/src/shader_recompiler/frontend/translate/translate.h
@@ -98,6 +98,7 @@ public:
void S_ADDK_I32(const GcnInst& inst);
void S_MAX_U32(const GcnInst& inst);
void S_MIN_U32(const GcnInst& inst);
+ void S_CMPK_EQ_U32(const GcnInst& inst);
// Scalar Memory
void S_LOAD_DWORD(int num_dwords, const GcnInst& inst);
diff --git a/src/shader_recompiler/frontend/translate/vector_alu.cpp b/src/shader_recompiler/frontend/translate/vector_alu.cpp
index 0216238ab..99543a207 100644
--- a/src/shader_recompiler/frontend/translate/vector_alu.cpp
+++ b/src/shader_recompiler/frontend/translate/vector_alu.cpp
@@ -307,6 +307,8 @@ void Translator::EmitVectorAlu(const GcnInst& inst) {
return V_MBCNT_U32_B32(true, inst);
case Opcode::V_MBCNT_HI_U32_B32:
return V_MBCNT_U32_B32(false, inst);
+ case Opcode::V_NOP:
+ return;
default:
LogMissingOpcode(inst);
}
diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp
index 89ab7fe43..5b3db603a 100644
--- a/src/video_core/amdgpu/liverpool.cpp
+++ b/src/video_core/amdgpu/liverpool.cpp
@@ -455,6 +455,9 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(opcode), count);
diff --git a/src/video_core/renderer_vulkan/liverpool_to_vk.cpp b/src/video_core/renderer_vulkan/liverpool_to_vk.cpp
index c42e4f609..025f311d8 100644
--- a/src/video_core/renderer_vulkan/liverpool_to_vk.cpp
+++ b/src/video_core/renderer_vulkan/liverpool_to_vk.cpp
@@ -320,6 +320,7 @@ std::span GetAllFormats() {
vk::Format::eR8G8Uint,
vk::Format::eR8G8Unorm,
vk::Format::eR8Sint,
+ vk::Format::eR8Snorm,
vk::Format::eR8Uint,
vk::Format::eR8Unorm,
vk::Format::eR8Srgb,
diff --git a/src/video_core/texture_cache/image_view.cpp b/src/video_core/texture_cache/image_view.cpp
index 9f6ec5c4f..08be6bdc5 100644
--- a/src/video_core/texture_cache/image_view.cpp
+++ b/src/video_core/texture_cache/image_view.cpp
@@ -59,6 +59,9 @@ vk::Format TrySwizzleFormat(vk::Format format, u32 dst_sel) {
if (format == vk::Format::eR8G8B8A8Unorm && dst_sel == 0b111100101110) {
return vk::Format::eB8G8R8A8Unorm;
}
+ if (format == vk::Format::eR8G8B8A8Srgb && dst_sel == 0b111100101110) {
+ return vk::Format::eB8G8R8A8Srgb;
+ }
return format;
}
From 6fd4264b5d9784ea9cf327841bff043c74ca37df Mon Sep 17 00:00:00 2001
From: psucien
Date: Sun, 25 Aug 2024 22:24:10 +0200
Subject: [PATCH 12/69] video_core: vk_rasterizer: fix for crash on markers
with nullGpu
---
src/video_core/renderer_vulkan/vk_rasterizer.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index b26c36cef..f22f19eaf 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -243,7 +243,7 @@ void Rasterizer::UpdateDepthStencilState() {
}
void Rasterizer::ScopeMarkerBegin(const std::string_view& str) {
- if (!Config::isMarkersEnabled()) {
+ if (Config::nullGpu() || !Config::isMarkersEnabled()) {
return;
}
@@ -254,7 +254,7 @@ void Rasterizer::ScopeMarkerBegin(const std::string_view& str) {
}
void Rasterizer::ScopeMarkerEnd() {
- if (!Config::isMarkersEnabled()) {
+ if (Config::nullGpu() || !Config::isMarkersEnabled()) {
return;
}
@@ -263,7 +263,7 @@ void Rasterizer::ScopeMarkerEnd() {
}
void Rasterizer::ScopedMarkerInsert(const std::string_view& str) {
- if (!Config::isMarkersEnabled()) {
+ if (Config::nullGpu() || !Config::isMarkersEnabled()) {
return;
}
@@ -274,7 +274,7 @@ void Rasterizer::ScopedMarkerInsert(const std::string_view& str) {
}
void Rasterizer::Breadcrumb(u64 id) {
- if (!instance.HasNvCheckpoints()) {
+ if (Config::nullGpu() || !instance.HasNvCheckpoints()) {
return;
}
scheduler.CommandBuffer().setCheckpointNV(id);
From bcc3a105576c54e16def5719959721d116e03864 Mon Sep 17 00:00:00 2001
From: bigol83 <38129260+bigol83@users.noreply.github.com>
Date: Mon, 26 Aug 2024 02:22:07 +0200
Subject: [PATCH 13/69] Add Italian translation (#585)
* Update it.ts
* Update it.ts
---
src/qt_gui/translations/it.ts | 178 +++++++++++++++++-----------------
1 file changed, 89 insertions(+), 89 deletions(-)
diff --git a/src/qt_gui/translations/it.ts b/src/qt_gui/translations/it.ts
index 64d123f2e..228d798d0 100644
--- a/src/qt_gui/translations/it.ts
+++ b/src/qt_gui/translations/it.ts
@@ -6,7 +6,7 @@
About shadPS4
- About shadPS4
+ Riguardo shadPS4
@@ -16,12 +16,12 @@
shadPS4 is an experimental open-source emulator for the PlayStation 4.
- shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 è un emulatore sperimentale open source per Playstation 4.
This software should not be used to play games you have not legally obtained.
- This software should not be used to play games you have not legally obtained.
+ Questo programma non dovrebbe essere utilizzato per riprodurre giochi che non vengono ottenuti legalmente.
@@ -29,7 +29,7 @@
Open Folder
- Open Folder
+ Apri Cartella
@@ -37,17 +37,17 @@
Loading game list, please wait :3
- Loading game list, please wait :3
+ Caricamento lista giochi, attendere :3
Cancel
- Cancel
+ Annulla
Loading...
- Loading...
+ Caricamento...
@@ -55,27 +55,27 @@
shadPS4 - Choose directory
- shadPS4 - Choose directory
+ shadPS4 - Scegli cartella
Directory to install games
- Directory to install games
+ Cartella di installazione dei giochi
Browse
- Browse
+ Sfoglia
Error
- Error
+ Errore
The value for location to install games is not valid.
- The value for location to install games is not valid.
+ Il valore del percorso di installazione dei giochi non è valido.
@@ -83,67 +83,67 @@
Create Shortcut
- Create Shortcut
+ Crea scorciatoia
Open Game Folder
- Open Game Folder
+ Apri cartella del gioco
SFO Viewer
- SFO Viewer
+ Visualizzatore SFO
Trophy Viewer
- Trophy Viewer
+ Visualizzatore Trofei
Copy info
- Copy info
+ Copia informazioni
Copy Name
- Copy Name
+ Copia Nome
Copy Serial
- Copy Serial
+ Copia Seriale
Copy All
- Copy All
+ Copia Tutto
Shortcut creation
- Shortcut creation
+ Creazione scorciatoia
Shortcut created successfully!\n %1
- Shortcut created successfully!\n %1
+ Scorciatoia creata con successo!\n %1
Error
- Error
+ Errore
Error creating shortcut!\n %1
- Error creating shortcut!\n %1
+ Errore nella creazione della scorciatoia!\n %1
Install PKG
- Install PKG
+ Installa PKG
@@ -151,117 +151,117 @@
Open/Add Elf Folder
- Open/Add Elf Folder
+ Apri/Aggiungi cartella Elf
Install Packages (PKG)
- Install Packages (PKG)
+ Installa Pacchetti (PKG)
Boot Game
- Boot Game
+ Avvia Gioco
About shadPS4
- About shadPS4
+ Riguardo a shadPS4
Configure...
- Configure...
+ Configura...
Install application from a .pkg file
- Install application from a .pkg file
+ Installa applicaazione da un .pkg file
Recent Games
- Recent Games
+ Giochi Recenti
Exit
- Exit
+ Uscita
Exit shadPS4
- Exit shadPS4
+ Esci da shadPS4
Exit the application.
- Exit the application.
+ Esci dall'applicazione.
Show Game List
- Show Game List
+ Mostra Lista Giochi
Game List Refresh
- Game List Refresh
+ Aggiorna Lista Giochi
Tiny
- Tiny
+ Minuscolo
Small
- Small
+ Piccolo
Medium
- Medium
+ Medio
Large
- Large
+ Grande
List View
- List View
+ Visualizzazione lista
Grid View
- Grid View
+ Visualizzazione Griglia
Elf Viewer
- Elf Viewer
+ Visualizzatore Elf
Game Install Directory
- Game Install Directory
+ Cartella Installazione Giochi
Dump Game List
- Dump Game List
+ Scarica Lista Giochi
PKG Viewer
- PKG Viewer
+ Visualizzatore PKG
Search...
- Search...
+ Cerca...
@@ -271,67 +271,67 @@
View
- View
+ Visualizza
Game List Icons
- Game List Icons
+ Icone Lista Giochi
Game List Mode
- Game List Mode
+ Modalità Lista Giochi
Settings
- Settings
+ Impostazioni
Utils
- Utils
+ Utilità
Themes
- Themes
+ Temi
About
- About
+ Info su
Dark
- Dark
+ Scuro
Light
- Light
+ Chiaro
Green
- Green
+ Verde
Blue
- Blue
+ Blu
Violet
- Violet
+ Viola
toolBar
- toolBar
+ barra strumenti
@@ -339,14 +339,14 @@
Open Folder
- Open Folder
+ Apri Cartella
TrophyViewer
- Trophy Viewer
+ Visualizzatore Trofei
Trophy Viewer
@@ -355,52 +355,52 @@
Settings
- Settings
+ Impostazioni
General
- General
+ Generale
System
- System
+ Systema
Console Language
- Console Language
+ Lingua della console
Emulator Language
- Emulator Language
+ Lingua dell'emulatore
Emulator
- Emulator
+ Emulatore
Enable Fullscreen
- Enable Fullscreen
+ Abilita Schermo Intero
Show Splash
- Show Splash
+ Mostra Schermata Iniziale
Is PS4 Pro
- Is PS4 Pro
+ Modalità Ps4Pro
Username
- Username
+ Nome Utente
@@ -410,57 +410,57 @@
Log Type
- Log Type
+ Tipo di Log
Log Filter
- Log Filter
+ Filtro Log
Graphics
- Graphics
+ Grafica
Graphics Device
- Graphics Device
+ Adattatore grafico
Width
- Width
+ Larghezza
Height
- Height
+ Altezza
Vblank Divider
- Vblank Divider
+ Divisore Vblank
Advanced
- Advanced
+ Avanzato
Enable Shaders Dumping
- Enable Shaders Dumping
+ Abilita Scaricamento Shader
Enable NULL GPU
- Enable NULL GPU
+ Abilita NULL GPU
Enable PM4 Dumping
- Enable PM4 Dumping
+ Abilita Scaricamento PM4
@@ -470,22 +470,22 @@
Enable Debug Dumping
- Enable Debug Dumping
+ Abilita Scaricamento Debug
Enable Vulkan Validation Layers
- Enable Vulkan Validation Layers
+ Abilita Vulkan Validation Layers
Enable Vulkan Synchronization Validation
- Enable Vulkan Synchronization Validation
+ Abilita Vulkan Synchronization Validation
Enable RenderDoc Debugging
- Enable RenderDoc Debugging
+ Abilita Debugging RenderDoc
-
\ No newline at end of file
+
From 5d7407dc7dfeebba3cda7e04be49269056329a5a Mon Sep 17 00:00:00 2001
From: Yury <27062841+f1amy@users.noreply.github.com>
Date: Mon, 26 Aug 2024 05:22:30 +0500
Subject: [PATCH 14/69] Add ru translation (#579)
---
src/qt_gui/translations/ru_RU.ts | 184 +++++++++++++++----------------
1 file changed, 92 insertions(+), 92 deletions(-)
diff --git a/src/qt_gui/translations/ru_RU.ts b/src/qt_gui/translations/ru_RU.ts
index 556875e17..46a30cdeb 100644
--- a/src/qt_gui/translations/ru_RU.ts
+++ b/src/qt_gui/translations/ru_RU.ts
@@ -6,7 +6,7 @@
About shadPS4
- About shadPS4
+ О shadPS4
@@ -16,12 +16,12 @@
shadPS4 is an experimental open-source emulator for the PlayStation 4.
- shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 это экспериментальный эмулятор с открытым исходным кодом для PlayStation 4.
This software should not be used to play games you have not legally obtained.
- This software should not be used to play games you have not legally obtained.
+ Это програмное обеспечение не должно использоваться для запуска игр, которые вы получили нелегально.
@@ -29,7 +29,7 @@
Open Folder
- Open Folder
+ Открыть папку
@@ -37,17 +37,17 @@
Loading game list, please wait :3
- Loading game list, please wait :3
+ Загрузка списка игр, пожалуйста подождите :3
Cancel
- Cancel
+ Отмена
Loading...
- Loading...
+ Загрузка...
@@ -55,27 +55,27 @@
shadPS4 - Choose directory
- shadPS4 - Choose directory
+ shadPS4 - Выберите папку
Directory to install games
- Directory to install games
+ Папка для установки игр
Browse
- Browse
+ Обзор
Error
- Error
+ Ошибка
The value for location to install games is not valid.
- The value for location to install games is not valid.
+ Недопустимое значение местоположения для установки игр.
@@ -83,67 +83,67 @@
Create Shortcut
- Create Shortcut
+ Создать ярлык
Open Game Folder
- Open Game Folder
+ Открыть папку с игрой
SFO Viewer
- SFO Viewer
+ Просмотр SFO
Trophy Viewer
- Trophy Viewer
+ Просмотр трофеев
Copy info
- Copy info
+ Копировать информацию
Copy Name
- Copy Name
+ Копировать имя
Copy Serial
- Copy Serial
+ Копировать серийный номер
Copy All
- Copy All
+ Копировать все
Shortcut creation
- Shortcut creation
+ Создание ярлыка
Shortcut created successfully!\n %1
- Shortcut created successfully!\n %1
+ Ярлык создан успешно!\n %1
Error
- Error
+ Ошибка
Error creating shortcut!\n %1
- Error creating shortcut!\n %1
+ Ошибка создания ярлыка!\n %1
Install PKG
- Install PKG
+ Установить PKG
@@ -151,187 +151,187 @@
Open/Add Elf Folder
- Open/Add Elf Folder
+ Открыть/Добавить папку Elf
Install Packages (PKG)
- Install Packages (PKG)
+ Установить пакеты (PKG)
Boot Game
- Boot Game
+ Запустить игру
About shadPS4
- About shadPS4
+ О shadPS4
Configure...
- Configure...
+ Настроить...
Install application from a .pkg file
- Install application from a .pkg file
+ Установить приложение из файла .pkg
Recent Games
- Recent Games
+ Недавние игры
Exit
- Exit
+ Выход
Exit shadPS4
- Exit shadPS4
+ Выйти из shadPS4
Exit the application.
- Exit the application.
+ Выйти из приложения.
Show Game List
- Show Game List
+ Показать список игр
Game List Refresh
- Game List Refresh
+ Обновить список игр
Tiny
- Tiny
+ Крошечный
Small
- Small
+ Маленький
Medium
- Medium
+ Средний
Large
- Large
+ Большой
List View
- List View
+ Список
Grid View
- Grid View
+ Сетка
Elf Viewer
- Elf Viewer
+ Elf
Game Install Directory
- Game Install Directory
+ Каталог установки игры
Dump Game List
- Dump Game List
+ Дамп списка игр
PKG Viewer
- PKG Viewer
+ Просмотр PKG
Search...
- Search...
+ Поиск...
File
- File
+ Файл
View
- View
+ Вид
Game List Icons
- Game List Icons
+ Размер иконок списка игр
Game List Mode
- Game List Mode
+ Вид списка игр
Settings
- Settings
+ Настройки
Utils
- Utils
+ Утилиты
Themes
- Themes
+ Темы
About
- About
+ Справка
Dark
- Dark
+ Темная
Light
- Light
+ Светлая
Green
- Green
+ Зеленая
Blue
- Blue
+ Синяя
Violet
- Violet
+ Фиолетовая
toolBar
- toolBar
+ Панель инструментов
@@ -339,7 +339,7 @@
Open Folder
- Open Folder
+ Открыть папку
@@ -347,7 +347,7 @@
Trophy Viewer
- Trophy Viewer
+ Трофеи
@@ -355,137 +355,137 @@
Settings
- Settings
+ Настройки
General
- General
+ Общее
System
- System
+ Система
Console Language
- Console Language
+ Язык консоли
Emulator Language
- Emulator Language
+ Язык эмулятора
Emulator
- Emulator
+ Эмулятор
Enable Fullscreen
- Enable Fullscreen
+ Включить полноэкранный режим
Show Splash
- Show Splash
+ Показать заставку
Is PS4 Pro
- Is PS4 Pro
+ Режим PS4 Pro
Username
- Username
+ Имя пользователя
Logger
- Logger
+ Логирование
Log Type
- Log Type
+ Тип логов
Log Filter
- Log Filter
+ Фильтр логов
Graphics
- Graphics
+ Графика
Graphics Device
- Graphics Device
+ Графическое устройство
Width
- Width
+ Ширина
Height
- Height
+ Высота
Vblank Divider
- Vblank Divider
+ Разделитель Vblank
Advanced
- Advanced
+ Продвинутые
Enable Shaders Dumping
- Enable Shaders Dumping
+ Включить дамп шейдеров
Enable NULL GPU
- Enable NULL GPU
+ Включить NULL GPU
Enable PM4 Dumping
- Enable PM4 Dumping
+ Включить дамп PM4
Debug
- Debug
+ Отладка
Enable Debug Dumping
- Enable Debug Dumping
+ Включить отладочные дампы
Enable Vulkan Validation Layers
- Enable Vulkan Validation Layers
+ Включить слои валидации Vulkan
Enable Vulkan Synchronization Validation
- Enable Vulkan Synchronization Validation
+ Включить валидацию синхронизации Vulkan
Enable RenderDoc Debugging
- Enable RenderDoc Debugging
+ Включить отладку RenderDoc
-
\ No newline at end of file
+
From fae0c0ae8509d69a1d6b38af93629c34e86b5c89 Mon Sep 17 00:00:00 2001
From: "Daniel R." <47796739+polybiusproxy@users.noreply.github.com>
Date: Mon, 26 Aug 2024 03:14:21 +0200
Subject: [PATCH 15/69] core/kernel: Miscellaneous memory fixes (#557)
* core/libraries/kernel: Fix inaccurate direct memory size
* core/memory: Fix available dmem query on non-free dmem areas
* core/kernel: return ENOMEM if memory area size is zero
* core/kernel: Fix returns on `sceKernelAvailableDirectMemorySize`
* core/memory: Remove unneeded size alignment
---
src/core/libraries/kernel/memory_management.cpp | 17 +++++++++++++----
src/core/libraries/kernel/memory_management.h | 2 +-
src/core/memory.cpp | 5 +++++
3 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/src/core/libraries/kernel/memory_management.cpp b/src/core/libraries/kernel/memory_management.cpp
index 826d47973..fbc457954 100644
--- a/src/core/libraries/kernel/memory_management.cpp
+++ b/src/core/libraries/kernel/memory_management.cpp
@@ -75,19 +75,28 @@ s32 PS4_SYSV_ABI sceKernelAvailableDirectMemorySize(u64 searchStart, u64 searchE
LOG_WARNING(Kernel_Vmm, "called searchStart = {:#x}, searchEnd = {:#x}, alignment = {:#x}",
searchStart, searchEnd, alignment);
- if (searchEnd <= searchStart) {
+ if (physAddrOut == nullptr || sizeOut == nullptr) {
return ORBIS_KERNEL_ERROR_EINVAL;
}
if (searchEnd > SCE_KERNEL_MAIN_DMEM_SIZE) {
return ORBIS_KERNEL_ERROR_EINVAL;
}
+ if (searchEnd <= searchStart) {
+ return ORBIS_KERNEL_ERROR_ENOMEM;
+ }
auto* memory = Core::Memory::Instance();
- PAddr physAddr;
- s32 result =
- memory->DirectQueryAvailable(searchStart, searchEnd, alignment, &physAddr, sizeOut);
+ PAddr physAddr{};
+ size_t size{};
+ s32 result = memory->DirectQueryAvailable(searchStart, searchEnd, alignment, &physAddr, &size);
+
+ if (size == 0) {
+ return ORBIS_KERNEL_ERROR_ENOMEM;
+ }
+
*physAddrOut = static_cast(physAddr);
+ *sizeOut = size;
return result;
}
diff --git a/src/core/libraries/kernel/memory_management.h b/src/core/libraries/kernel/memory_management.h
index 378449cc5..c9dd86e18 100644
--- a/src/core/libraries/kernel/memory_management.h
+++ b/src/core/libraries/kernel/memory_management.h
@@ -6,7 +6,7 @@
#include "common/bit_field.h"
#include "common/types.h"
-constexpr u64 SCE_KERNEL_MAIN_DMEM_SIZE = 6_GB; // ~ 6GB
+constexpr u64 SCE_KERNEL_MAIN_DMEM_SIZE = 4608_MB; // ~ 4.5GB
namespace Libraries::Kernel {
diff --git a/src/core/memory.cpp b/src/core/memory.cpp
index 552c4039c..d6d5c1e36 100644
--- a/src/core/memory.cpp
+++ b/src/core/memory.cpp
@@ -328,6 +328,11 @@ int MemoryManager::DirectQueryAvailable(PAddr search_start, PAddr search_end, si
PAddr paddr{};
size_t max_size{};
while (dmem_area != dmem_map.end() && dmem_area->second.GetEnd() <= search_end) {
+ if (!dmem_area->second.is_free) {
+ dmem_area++;
+ continue;
+ }
+
if (dmem_area->second.size > max_size) {
paddr = dmem_area->second.base;
max_size = dmem_area->second.size;
From 86870e7c8da8a2e1521141702d3a845e46b0e38a Mon Sep 17 00:00:00 2001
From: greggameplayer
Date: Mon, 26 Aug 2024 03:39:38 +0200
Subject: [PATCH 16/69] Implement TBUFFER_STORE_FORMAT_XY
---
src/shader_recompiler/frontend/translate/vector_memory.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/shader_recompiler/frontend/translate/vector_memory.cpp b/src/shader_recompiler/frontend/translate/vector_memory.cpp
index 41eb91234..45440da2f 100644
--- a/src/shader_recompiler/frontend/translate/vector_memory.cpp
+++ b/src/shader_recompiler/frontend/translate/vector_memory.cpp
@@ -94,6 +94,8 @@ void Translator::EmitVectorMemory(const GcnInst& inst) {
case Opcode::TBUFFER_STORE_FORMAT_X:
return BUFFER_STORE_FORMAT(1, true, true, inst);
+ case Opcode::TBUFFER_STORE_FORMAT_XY:
+ return BUFFER_STORE_FORMAT(2, true, true, inst);
case Opcode::TBUFFER_STORE_FORMAT_XYZ:
return BUFFER_STORE_FORMAT(3, true, true, inst);
From e16aa2a012a9a487828374b231f72a5eb4ba7783 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C2=A5IGA?= <164882787+Xphalnos@users.noreply.github.com>
Date: Mon, 26 Aug 2024 08:39:24 +0200
Subject: [PATCH 17/69] Update French tranlations (#592)
---
src/qt_gui/translations/fr.ts | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/qt_gui/translations/fr.ts b/src/qt_gui/translations/fr.ts
index 54100f17d..3f3b38baf 100644
--- a/src/qt_gui/translations/fr.ts
+++ b/src/qt_gui/translations/fr.ts
@@ -16,7 +16,7 @@
shadPS4 is an experimental open-source emulator for the PlayStation 4.
- shadPS4 est un émulateur expérimental de la PlayStation 4.
+ shadPS4 est un émulateur open-source expérimental de la PlayStation 4.
@@ -37,7 +37,7 @@
Loading game list, please wait :3
- Chargement de la liste de jeu, veuillez attendre...
+ Chargement de la liste de jeu, veuillez patienter...
@@ -60,7 +60,7 @@
Directory to install games
- Répertoire pour installer les jeux
+ Répertoire d'installation des jeux
@@ -93,12 +93,12 @@
SFO Viewer
- Visionneur SFO
+ Visionneuse SFO
Trophy Viewer
- Visionneur de trophés
+ Visionneuse de trophées
@@ -151,7 +151,7 @@
Open/Add Elf Folder
- Ouvrir/Ajouter un dossier Elf
+ Ouvrir/Ajouter un dossier ELF
@@ -241,7 +241,7 @@
Elf Viewer
- Visionneur Elf
+ Visionneuse ELF
@@ -256,7 +256,7 @@
PKG Viewer
- Visionneur PKG
+ Visionneuse PKG
@@ -276,12 +276,12 @@
Game List Icons
- Icones des jeux
+ Icônes des jeux
Game List Mode
- Mode liste
+ Mode d'affichage
@@ -347,7 +347,7 @@
Trophy Viewer
- Visionneur de trophés
+ Visionneuse de trophées
@@ -488,4 +488,4 @@
Activer le débogage RenderDoc
-
+
\ No newline at end of file
From 7aa8cf992f6d7f7d25953f319e2f3ded97236d16 Mon Sep 17 00:00:00 2001
From: nishinji <107111782+nishinji@users.noreply.github.com>
Date: Mon, 26 Aug 2024 15:39:49 +0900
Subject: [PATCH 18/69] Add Japanese translation (#591)
---
src/qt_gui/translations/ja_JP.ts | 186 +++++++++++++++----------------
1 file changed, 93 insertions(+), 93 deletions(-)
diff --git a/src/qt_gui/translations/ja_JP.ts b/src/qt_gui/translations/ja_JP.ts
index c67352569..88e7554ea 100644
--- a/src/qt_gui/translations/ja_JP.ts
+++ b/src/qt_gui/translations/ja_JP.ts
@@ -6,7 +6,7 @@
About shadPS4
- About shadPS4
+ shadPS4ɂ
@@ -16,12 +16,12 @@
shadPS4 is an experimental open-source emulator for the PlayStation 4.
- shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4́APlayStation 4̎IȃI[v\[XG~[^[łB
This software should not be used to play games you have not legally obtained.
- This software should not be used to play games you have not legally obtained.
+ ̃\tgEFÁA@Iɓ肵ĂȂQ[vC邽߂Ɏgp̂ł͂܂B
@@ -29,7 +29,7 @@
Open Folder
- Open Folder
+ tH_J
@@ -37,17 +37,17 @@
Loading game list, please wait :3
- Loading game list, please wait :3
+ Q[XgǂݍݒłB҂ :3
Cancel
- Cancel
+ LZ
Loading...
- Loading...
+ ǂݍݒ...
@@ -55,27 +55,27 @@
shadPS4 - Choose directory
- shadPS4 - Choose directory
+ shadPS4 - fBNgI
Directory to install games
- Directory to install games
+ Q[CXg[fBNg
Browse
- Browse
+ Q
Error
- Error
+ G[
The value for location to install games is not valid.
- The value for location to install games is not valid.
+ Q[CXg[ꏊłB
@@ -83,67 +83,67 @@
Create Shortcut
- Create Shortcut
+ V[gJbg쐬
Open Game Folder
- Open Game Folder
+ Q[tH_J
SFO Viewer
- SFO Viewer
+ SFOr[[
Trophy Viewer
- Trophy Viewer
+ gtB[r[[
Copy info
- Copy info
+ Rs[
Copy Name
- Copy Name
+ ORs[
Copy Serial
- Copy Serial
+ VARs[
Copy All
- Copy All
+ ׂăRs[
Shortcut creation
- Shortcut creation
+ V[gJbg̍쐬
Shortcut created successfully!\n %1
- Shortcut created successfully!\n %1
+ V[gJbgɍ쐬܂!\n %1
Error
- Error
+ G[
Error creating shortcut!\n %1
- Error creating shortcut!\n %1
+ V[gJbg̍쐬Ɏs܂!\n %1
Install PKG
- Install PKG
+ PKGCXg[
@@ -151,187 +151,187 @@
Open/Add Elf Folder
- Open/Add Elf Folder
+ ElftH_J/lj
Install Packages (PKG)
- Install Packages (PKG)
+ pbP[WCXg[ (PKG)
Boot Game
- Boot Game
+ Q[N
About shadPS4
- About shadPS4
+ shadPS4ɂ
Configure...
- Configure...
+ ݒ...
Install application from a .pkg file
- Install application from a .pkg file
+ .pkgt@CAvP[VCXg[
Recent Games
- Recent Games
+ ŋ߂̃Q[
Exit
- Exit
+ I
Exit shadPS4
- Exit shadPS4
+ shadPS4I
Exit the application.
- Exit the application.
+ AvP[VI܂B
Show Game List
- Show Game List
+ Q[Xg\
Game List Refresh
- Game List Refresh
+ Q[Xg̍XV
Tiny
- Tiny
+ ɏ
Small
- Small
+
Medium
- Medium
+
Large
- Large
+
+
List View
- List View
+ Xgr[
Grid View
- Grid View
+ Obhr[
Elf Viewer
- Elf Viewer
+ Elfr[
Game Install Directory
- Game Install Directory
+ Q[CXg[fBNg
Dump Game List
- Dump Game List
+ Q[Xg_v
-
PKG Viewer
- PKG Viewer
+ PKGr[A[
Search...
- Search...
+ ...
File
- File
+ t@C
View
- View
+ \
Game List Icons
- Game List Icons
+ Q[XgACR
Game List Mode
- Game List Mode
+ Q[Xg[h
Settings
- Settings
+ ݒ
Utils
- Utils
+ [eBeB
Themes
- Themes
+ e[}
About
- About
+
Dark
- Dark
+ _[N
Light
- Light
+ Cg
Green
- Green
+ O[
Blue
- Blue
+ u[
Violet
- Violet
+ oCIbg
toolBar
- toolBar
+ c[o[
@@ -339,7 +339,7 @@
Open Folder
- Open Folder
+ tH_[J
@@ -347,7 +347,7 @@
Trophy Viewer
- Trophy Viewer
+ gtB[r[A[
@@ -355,137 +355,137 @@
Settings
- Settings
+ ݒ
General
- General
+
System
- System
+ VXe
Console Language
- Console Language
+ R\[
Emulator Language
- Emulator Language
+ G~[^[
Emulator
- Emulator
+ G~[^[
Enable Fullscreen
- Enable Fullscreen
+ tXN[Lɂ
Show Splash
- Show Splash
+ XvbV\
Is PS4 Pro
- Is PS4 Pro
+ PS4 Pro[h
Username
- Username
+ [U[
Logger
- Logger
+ K[
Log Type
- Log Type
+ O^Cv
Log Filter
- Log Filter
+ OtB^[
Graphics
- Graphics
+ OtBbNX
Graphics Device
- Graphics Device
+ OtBbNXfoCX
Width
- Width
+
Height
- Height
+
Vblank Divider
- Vblank Divider
+ VblankfBoC_[
Advanced
- Advanced
+ xȐݒ
Enable Shaders Dumping
- Enable Shaders Dumping
+ VF[_[̃_vLɂ
Enable NULL GPU
- Enable NULL GPU
+ NULL GPULɂ
Enable PM4 Dumping
- Enable PM4 Dumping
+ PM4_vLɂ
Debug
- Debug
+ fobO
Enable Debug Dumping
- Enable Debug Dumping
+ fobO_vLɂ
Enable Vulkan Validation Layers
- Enable Vulkan Validation Layers
+ VulkanC[Lɂ
Enable Vulkan Synchronization Validation
- Enable Vulkan Synchronization Validation
+ VulkanLɂ
Enable RenderDoc Debugging
- Enable RenderDoc Debugging
+ RenderDocfobOLɂ
-
\ No newline at end of file
+
From 78e24852f8bf0634be6631050e6326fdc8fba875 Mon Sep 17 00:00:00 2001
From: psucien
Date: Sun, 25 Aug 2024 23:29:22 +0200
Subject: [PATCH 19/69] libraries: kernel: fix for inaccurate
`sceKernelGetProcessTime`
---
src/common/native_clock.cpp | 12 ++++++------
src/common/native_clock.h | 6 +++---
src/core/libraries/kernel/time_management.cpp | 4 +++-
3 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/src/common/native_clock.cpp b/src/common/native_clock.cpp
index 20d0737a6..c3fa637aa 100644
--- a/src/common/native_clock.cpp
+++ b/src/common/native_clock.cpp
@@ -18,16 +18,16 @@ NativeClock::NativeClock()
us_rdtsc_factor{GetFixedPoint64Factor(std::micro::den, rdtsc_frequency)},
ms_rdtsc_factor{GetFixedPoint64Factor(std::milli::den, rdtsc_frequency)} {}
-u64 NativeClock::GetTimeNS() const {
- return MultiplyHigh(GetUptime(), ns_rdtsc_factor);
+u64 NativeClock::GetTimeNS(u64 base_ptc /*= 0*/) const {
+ return MultiplyHigh(GetUptime() - base_ptc, ns_rdtsc_factor);
}
-u64 NativeClock::GetTimeUS() const {
- return MultiplyHigh(GetUptime(), us_rdtsc_factor);
+u64 NativeClock::GetTimeUS(u64 base_ptc /*= 0*/) const {
+ return MultiplyHigh(GetUptime() - base_ptc, us_rdtsc_factor);
}
-u64 NativeClock::GetTimeMS() const {
- return MultiplyHigh(GetUptime(), ms_rdtsc_factor);
+u64 NativeClock::GetTimeMS(u64 base_ptc /*= 0*/) const {
+ return MultiplyHigh(GetUptime() - base_ptc, ms_rdtsc_factor);
}
u64 NativeClock::GetUptime() const {
diff --git a/src/common/native_clock.h b/src/common/native_clock.h
index 227c8d1ae..b5e389452 100644
--- a/src/common/native_clock.h
+++ b/src/common/native_clock.h
@@ -16,9 +16,9 @@ public:
return rdtsc_frequency;
}
- u64 GetTimeNS() const;
- u64 GetTimeUS() const;
- u64 GetTimeMS() const;
+ u64 GetTimeNS(u64 base_ptc = 0) const;
+ u64 GetTimeUS(u64 base_ptc = 0) const;
+ u64 GetTimeMS(u64 base_ptc = 0) const;
u64 GetUptime() const;
u64 GetProcessTimeUS() const;
diff --git a/src/core/libraries/kernel/time_management.cpp b/src/core/libraries/kernel/time_management.cpp
index 214f039b4..d01b0c83f 100644
--- a/src/core/libraries/kernel/time_management.cpp
+++ b/src/core/libraries/kernel/time_management.cpp
@@ -3,6 +3,7 @@
#include
#include "common/assert.h"
+#include "common/debug.h"
#include "common/native_clock.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/kernel/time_management.h"
@@ -30,7 +31,8 @@ u64 PS4_SYSV_ABI sceKernelGetTscFrequency() {
}
u64 PS4_SYSV_ABI sceKernelGetProcessTime() {
- return clock->GetProcessTimeUS();
+ // TODO: this timer should support suspends, so initial ptc needs to be updated on wake up
+ return clock->GetTimeUS(initial_ptc);
}
u64 PS4_SYSV_ABI sceKernelGetProcessTimeCounter() {
From 6e340bcdc14d8cc50c95bccbf8ad20938e3ca5d8 Mon Sep 17 00:00:00 2001
From: nishinji <107111782+nishinji@users.noreply.github.com>
Date: Mon, 26 Aug 2024 16:56:11 +0900
Subject: [PATCH 20/69] Fix ja_JP.ts (#594)
* Fix ja_JP.ts
* a
---
src/qt_gui/translations/ja_JP.ts | 186 +++++++++++++++----------------
1 file changed, 93 insertions(+), 93 deletions(-)
diff --git a/src/qt_gui/translations/ja_JP.ts b/src/qt_gui/translations/ja_JP.ts
index 88e7554ea..557b0760b 100644
--- a/src/qt_gui/translations/ja_JP.ts
+++ b/src/qt_gui/translations/ja_JP.ts
@@ -1,4 +1,4 @@
-
+
@@ -6,7 +6,7 @@
About shadPS4
- shadPS4ɂ
+ shadPS4について
@@ -16,12 +16,12 @@
shadPS4 is an experimental open-source emulator for the PlayStation 4.
- shadPS4́APlayStation 4̎IȃI[v\[XG~[^[łB
+ shadPS4は、PlayStation 4の実験的なオープンソースエミュレーターです。
This software should not be used to play games you have not legally obtained.
- ̃\tgEFÁA@Iɓ肵ĂȂQ[vC邽߂Ɏgp̂ł͂܂B
+ このソフトウェアは、合法的に入手していないゲームをプレイするために使用するものではありません。
@@ -29,7 +29,7 @@
Open Folder
- tH_J
+ フォルダを開く
@@ -37,17 +37,17 @@
Loading game list, please wait :3
- Q[XgǂݍݒłB҂ :3
+ ゲームリストを読み込み中です。お待ちください :3
Cancel
- LZ
+ キャンセル
Loading...
- ǂݍݒ...
+ 読み込み中...
@@ -55,27 +55,27 @@
shadPS4 - Choose directory
- shadPS4 - fBNgI
+ shadPS4 - ディレクトリを選択
Directory to install games
- Q[CXg[fBNg
+ ゲームをインストールするディレクトリ
Browse
- Q
+ 参照
Error
- G[
+ エラー
The value for location to install games is not valid.
- Q[CXg[ꏊłB
+ ゲームをインストールする場所が無効です。
@@ -83,67 +83,67 @@
Create Shortcut
- V[gJbg쐬
+ ショートカットを作成
Open Game Folder
- Q[tH_J
+ ゲームフォルダを開く
SFO Viewer
- SFOr[[
+ SFOビューワー
Trophy Viewer
- gtB[r[[
+ トロフィービューワー
Copy info
- Rs[
+ 情報をコピー
Copy Name
- ORs[
+ 名前をコピー
Copy Serial
- VARs[
+ シリアルをコピー
Copy All
- ׂăRs[
+ すべてコピー
Shortcut creation
- V[gJbg̍쐬
+ ショートカットの作成
Shortcut created successfully!\n %1
- V[gJbgɍ쐬܂!\n %1
+ ショートカットが正常に作成されました!\n %1
Error
- G[
+ エラー
Error creating shortcut!\n %1
- V[gJbg̍쐬Ɏs܂!\n %1
+ ショートカットの作成に失敗しました!\n %1
Install PKG
- PKGCXg[
+ PKGをインストール
@@ -151,187 +151,187 @@
Open/Add Elf Folder
- ElftH_J/lj
+ Elfフォルダを開く/追加する
Install Packages (PKG)
- pbP[WCXg[ (PKG)
+ パッケージをインストール (PKG)
Boot Game
- Q[N
+ ゲームを起動
About shadPS4
- shadPS4ɂ
+ shadPS4について
Configure...
- ݒ...
+ 設定...
Install application from a .pkg file
- .pkgt@CAvP[VCXg[
+ .pkgファイルからアプリケーションをインストールする
Recent Games
- ŋ߂̃Q[
+ 最近のゲーム
Exit
- I
+ 終了
Exit shadPS4
- shadPS4I
+ shadPS4を終了
Exit the application.
- AvP[VI܂B
+ アプリケーションを終了します。
Show Game List
- Q[Xg\
+ ゲームリストを表示
Game List Refresh
- Q[Xg̍XV
+ ゲームリストの更新
Tiny
- ɏ
+ 極小
Small
-
+ 小
Medium
-
+ 中
Large
-
+ 大
-
List View
- Xgr[
+ リストビュー
Grid View
- Obhr[
+ グリッドビュー
Elf Viewer
- Elfr[
+ Elfビュワー
Game Install Directory
- Q[CXg[fBNg
+ ゲームインストールディレクトリ
Dump Game List
- Q[Xg_v
+ ゲームリストをダンプ
+
PKG Viewer
- PKGr[A[
+ PKGビューアー
Search...
- ...
+ 検索...
File
- t@C
+ ファイル
View
- \
+ 表示
Game List Icons
- Q[XgACR
+ ゲームリストアイコン
Game List Mode
- Q[Xg[h
+ ゲームリストモード
Settings
- ݒ
+ 設定
Utils
- [eBeB
+ ユーティリティ
Themes
- e[}
+ テーマ
About
-
+ 情報
Dark
- _[N
+ ダーク
Light
- Cg
+ ライト
Green
- O[
+ グリーン
Blue
- u[
+ ブルー
Violet
- oCIbg
+ バイオレット
toolBar
- c[o[
+ ツールバー
@@ -339,7 +339,7 @@
Open Folder
- tH_[J
+ フォルダーを開く
@@ -347,7 +347,7 @@
Trophy Viewer
- gtB[r[A[
+ トロフィービューアー
@@ -355,137 +355,137 @@
Settings
- ݒ
+ 設定
General
-
+ 一般
System
- VXe
+ システム
Console Language
- R\[
+ コンソール言語
Emulator Language
- G~[^[
+ エミュレーター言語
Emulator
- G~[^[
+ エミュレーター
Enable Fullscreen
- tXN[Lɂ
+ フルスクリーンを有効にする
Show Splash
- XvbV\
+ スプラッシュを表示する
Is PS4 Pro
- PS4 Pro[h
+ PS4 Proモード
Username
- [U[
+ ユーザー名
Logger
- K[
+ ロガー
Log Type
- O^Cv
+ ログタイプ
Log Filter
- OtB^[
+ ログフィルター
Graphics
- OtBbNX
+ グラフィックス
Graphics Device
- OtBbNXfoCX
+ グラフィックスデバイス
Width
-
+ 幅
Height
-
+ 高さ
Vblank Divider
- VblankfBoC_[
+ Vblankディバイダー
Advanced
- xȐݒ
+ 高度な設定
Enable Shaders Dumping
- VF[_[̃_vLɂ
+ シェーダーのダンプを有効にする
Enable NULL GPU
- NULL GPULɂ
+ NULL GPUを有効にする
Enable PM4 Dumping
- PM4_vLɂ
+ PM4ダンプを有効にする
Debug
- fobO
+ デバッグ
Enable Debug Dumping
- fobO_vLɂ
+ デバッグダンプを有効にする
Enable Vulkan Validation Layers
- VulkanC[Lɂ
+ Vulkan検証レイヤーを有効にする
Enable Vulkan Synchronization Validation
- VulkanLɂ
+ Vulkan同期検証を有効にする
Enable RenderDoc Debugging
- RenderDocfobOLɂ
+ RenderDocデバッグを有効にする
From 0b5616c4930576ba6fdf9bdaae2b89ce66044cc7 Mon Sep 17 00:00:00 2001
From: Marcin Mitura
Date: Mon, 26 Aug 2024 12:20:12 +0200
Subject: [PATCH 21/69] Polish localization (#580)
Initial polish localization for shadPS4
---
src/qt_gui/translations/pl_PL.ts | 984 ++++++++++++++++---------------
1 file changed, 493 insertions(+), 491 deletions(-)
diff --git a/src/qt_gui/translations/pl_PL.ts b/src/qt_gui/translations/pl_PL.ts
index cad5c5829..7d18f203d 100644
--- a/src/qt_gui/translations/pl_PL.ts
+++ b/src/qt_gui/translations/pl_PL.ts
@@ -1,491 +1,493 @@
-
-
-
- AboutDialog
-
-
- About shadPS4
- About shadPS4
-
-
-
- shadPS4
- shadPS4
-
-
-
- shadPS4 is an experimental open-source emulator for the PlayStation 4.
- shadPS4 is an experimental open-source emulator for the PlayStation 4.
-
-
-
- This software should not be used to play games you have not legally obtained.
- This software should not be used to play games you have not legally obtained.
-
-
-
- ElfViewer
-
-
- Open Folder
- Open Folder
-
-
-
- GameInfoClass
-
-
- Loading game list, please wait :3
- Loading game list, please wait :3
-
-
-
- Cancel
- Cancel
-
-
-
- Loading...
- Loading...
-
-
-
- GameInstallDialog
-
-
- shadPS4 - Choose directory
- shadPS4 - Choose directory
-
-
-
- Directory to install games
- Directory to install games
-
-
-
- Browse
- Browse
-
-
-
- Error
- Error
-
-
-
- The value for location to install games is not valid.
- The value for location to install games is not valid.
-
-
-
- GuiContextMenus
-
-
- Create Shortcut
- Create Shortcut
-
-
-
- Open Game Folder
- Open Game Folder
-
-
-
- SFO Viewer
- SFO Viewer
-
-
-
- Trophy Viewer
- Trophy Viewer
-
-
-
- Copy info
- Copy info
-
-
-
- Copy Name
- Copy Name
-
-
-
- Copy Serial
- Copy Serial
-
-
-
- Copy All
- Copy All
-
-
-
- Shortcut creation
- Shortcut creation
-
-
-
- Shortcut created successfully!\n %1
- Shortcut created successfully!\n %1
-
-
-
- Error
- Error
-
-
-
- Error creating shortcut!\n %1
- Error creating shortcut!\n %1
-
-
-
- Install PKG
- Install PKG
-
-
-
- MainWindow
-
-
- Open/Add Elf Folder
- Open/Add Elf Folder
-
-
-
- Install Packages (PKG)
- Install Packages (PKG)
-
-
-
- Boot Game
- Boot Game
-
-
-
- About shadPS4
- About shadPS4
-
-
-
- Configure...
- Configure...
-
-
-
- Install application from a .pkg file
- Install application from a .pkg file
-
-
-
- Recent Games
- Recent Games
-
-
-
- Exit
- Exit
-
-
-
- Exit shadPS4
- Exit shadPS4
-
-
-
- Exit the application.
- Exit the application.
-
-
-
- Show Game List
- Show Game List
-
-
-
- Game List Refresh
- Game List Refresh
-
-
-
- Tiny
- Tiny
-
-
-
- Small
- Small
-
-
-
- Medium
- Medium
-
-
-
- Large
- Large
-
-
-
- List View
- List View
-
-
-
- Grid View
- Grid View
-
-
-
- Elf Viewer
- Elf Viewer
-
-
-
- Game Install Directory
- Game Install Directory
-
-
-
- Dump Game List
- Dump Game List
-
-
-
- PKG Viewer
- PKG Viewer
-
-
-
- Search...
- Search...
-
-
-
- File
- File
-
-
-
- View
- View
-
-
-
- Game List Icons
- Game List Icons
-
-
-
- Game List Mode
- Game List Mode
-
-
-
- Settings
- Settings
-
-
-
- Utils
- Utils
-
-
-
- Themes
- Themes
-
-
-
- About
- About
-
-
-
- Dark
- Dark
-
-
-
- Light
- Light
-
-
-
- Green
- Green
-
-
-
- Blue
- Blue
-
-
-
- Violet
- Violet
-
-
-
- toolBar
- toolBar
-
-
-
- PKGViewer
-
-
- Open Folder
- Open Folder
-
-
-
- TrophyViewer
-
-
- Trophy Viewer
- Trophy Viewer
-
-
-
- SettingsDialog
-
-
- Settings
- Settings
-
-
-
- General
- General
-
-
-
- System
- System
-
-
-
- Console Language
- Console Language
-
-
-
- Emulator Language
- Emulator Language
-
-
-
- Emulator
- Emulator
-
-
-
- Enable Fullscreen
- Enable Fullscreen
-
-
-
- Show Splash
- Show Splash
-
-
-
- Is PS4 Pro
- Is PS4 Pro
-
-
-
- Username
- Username
-
-
-
- Logger
- Logger
-
-
-
- Log Type
- Log Type
-
-
-
- Log Filter
- Log Filter
-
-
-
- Graphics
- Graphics
-
-
-
- Graphics Device
- Graphics Device
-
-
-
- Width
- Width
-
-
-
- Height
- Height
-
-
-
- Vblank Divider
- Vblank Divider
-
-
-
- Advanced
- Advanced
-
-
-
- Enable Shaders Dumping
- Enable Shaders Dumping
-
-
-
- Enable NULL GPU
- Enable NULL GPU
-
-
-
- Enable PM4 Dumping
- Enable PM4 Dumping
-
-
-
- Debug
- Debug
-
-
-
- Enable Debug Dumping
- Enable Debug Dumping
-
-
-
- Enable Vulkan Validation Layers
- Enable Vulkan Validation Layers
-
-
-
- Enable Vulkan Synchronization Validation
- Enable Vulkan Synchronization Validation
-
-
-
- Enable RenderDoc Debugging
- Enable RenderDoc Debugging
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+ AboutDialog
+
+
+ About shadPS4
+ O programie
+
+
+
+ shadPS4
+ shadPS4
+
+
+
+ shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 to eksperymentalny otwartoźródłowy emulator konsoli PlayStation 4.
+
+
+
+ This software should not be used to play games you have not legally obtained.
+ To oprogramowanie nie służy do grania w gry pochodzące z nielegalnego źródła.
+
+
+
+ ElfViewer
+
+
+ Open Folder
+ Otwórz folder
+
+
+
+ GameInfoClass
+
+
+ Loading game list, please wait :3
+ Ładowanie listy gier, proszę poczekaj :3
+
+
+
+ Cancel
+ Anuluj
+
+
+
+ Loading...
+ Ładowanie...
+
+
+
+ GameInstallDialog
+
+
+ shadPS4 - Choose directory
+ shadPS4 - Wybierz katalog
+
+
+
+ Directory to install games
+ Katalog do instalacji gier
+
+
+
+ Browse
+ Przeglądaj
+
+
+
+ Error
+ Błąd
+
+
+
+ The value for location to install games is not valid.
+ Podana ścieżka do instalacji gier nie jest prawidłowa.
+
+
+
+ GuiContextMenus
+
+
+ Create Shortcut
+ Utwórz skrót
+
+
+
+ Open Game Folder
+ Otwórz katalog gry
+
+
+
+ SFO Viewer
+ Menedżer plików SFO
+
+
+
+ Trophy Viewer
+ Menedżer trofeów
+
+
+
+ Copy info
+ Kopiuj informacje
+
+
+
+ Copy Name
+ Kopiuj nazwę
+
+
+
+ Copy Serial
+ Kopiuj numer seryjny
+
+
+
+ Copy All
+ Kopiuj wszystko
+
+
+
+ Shortcut creation
+ Tworzenie skrótu
+
+
+
+ Shortcut created successfully!\n %1
+ Utworzenie skrótu zakończone pomyślnie!\n %1
+
+
+
+ Error
+ Błąd
+
+
+
+ Error creating shortcut!\n %1
+ Utworzenie skrótu zakończone niepowodzeniem!\n %1
+
+
+
+ Install PKG
+ Zainstaluj PKG
+
+
+
+ MainWindow
+
+
+ Open/Add Elf Folder
+ Otwórz/Dodaj folder Elf
+
+
+
+ Install Packages (PKG)
+ Zainstaluj paczkę (PKG)
+
+
+
+ Boot Game
+ Uruchom grę
+
+
+
+ About shadPS4
+ O programie
+
+
+
+ Configure...
+ Konfiguruj...
+
+
+
+ Install application from a .pkg file
+ Zainstaluj aplikacje z pliku .pkg
+
+
+
+ Recent Games
+ Ostatnie gry
+
+
+
+ Exit
+ Wyjdź
+
+
+
+ Exit shadPS4
+ Wyjdź z shadPS4
+
+
+
+ Exit the application.
+ Wyjdź z aplikacji.
+
+
+
+ Show Game List
+ Pokaż listę gier
+
+
+
+ Game List Refresh
+ Odśwież listę gier
+
+
+
+ Tiny
+ Malutkie
+
+
+
+ Small
+ Małe
+
+
+
+ Medium
+ Średnie
+
+
+
+ Large
+ Wielkie
+
+
+
+ List View
+ Widok listy
+
+
+
+ Grid View
+ Widok siatki
+
+
+
+ Elf Viewer
+ Menedżer plików ELF
+
+
+
+ Game Install Directory
+ Katalog zainstalowanej gry
+
+
+
+ Dump Game List
+ Zgraj listę gier
+
+
+
+ PKG Viewer
+ Menedżer plików PKG
+
+
+
+ Search...
+ Szukaj...
+
+
+
+ File
+ Plik
+
+
+
+ View
+ Widok
+
+
+
+ Game List Icons
+ Ikony w widoku listy
+
+
+
+ Game List Mode
+ Tryb listy gier
+
+
+
+ Settings
+ Ustawienia
+
+
+
+ Utils
+ Narzędzia
+
+
+
+ Themes
+ Motywy
+
+
+
+ About
+ O programie
+
+
+
+ Dark
+ Ciemny
+
+
+
+ Light
+ Jasny
+
+
+
+ Green
+ Zielony
+
+
+
+ Blue
+ Niebieski
+
+
+
+ Violet
+ Fioletowy
+
+
+
+ toolBar
+ Pasek narzędzi
+
+
+
+ PKGViewer
+
+
+ Open Folder
+ Open Folder
+
+
+
+ TrophyViewer
+
+
+ Trophy Viewer
+ Menedżer trofeów
+
+
+
+ SettingsDialog
+
+
+ Settings
+ Ustawienia
+
+
+
+ General
+ Ogólne
+
+
+
+ System
+ System
+
+
+
+ Console Language
+ Język konsoli
+
+
+
+ Emulator Language
+ Język emulatora
+
+
+
+ Emulator
+ Emulator
+
+
+
+ Enable Fullscreen
+ Włącz pełny ekran
+
+
+
+ Show Splash
+ Pokaż ekran powitania
+
+
+
+ Is PS4 Pro
+ Emulacja PS4 Pro
+
+
+
+ Username
+ Nazwa użytkownika
+
+
+
+ Logger
+ Dziennik zdarzeń
+
+
+
+ Log Type
+ Typ dziennika
+
+
+
+ Log Filter
+ Filtrowanie dziennika
+
+
+
+ Graphics
+ Grafika
+
+
+
+ Graphics Device
+ Karta graficzna
+
+
+
+ Width
+ Szerokość
+
+
+
+ Height
+ Wysokość
+
+
+
+ Vblank Divider
+ Dzielnik pionowego blankingu (Vblank)
+
+
+
+ Advanced
+ Zaawansowane
+
+
+
+ Enable Shaders Dumping
+ Włącz zgrywanie cieni
+
+
+
+ Enable NULL GPU
+ Wyłącz kartę graficzną
+
+
+
+ Enable PM4 Dumping
+ Włącz zgrywanie PM4
+
+
+
+ Debug
+ Debugowanie
+
+
+
+ Enable Debug Dumping
+ Włącz zgrywanie debugowania
+
+
+
+ Enable Vulkan Validation Layers
+ Włącz warstwy walidacji Vulkan
+
+
+
+ Enable Vulkan Synchronization Validation
+ Włącz walidację synchronizacji Vulkan
+
+
+
+ Enable RenderDoc Debugging
+ Włącz debugowanie RenderDoc
+
+
+
From d3b6b17c7571a5627fcaf36335574bcf1fbf7dc1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Crist=C3=B3bal=20Mart=C3=AD=20M=C3=A9ndez?=
<61116988+elCrimar@users.noreply.github.com>
Date: Mon, 26 Aug 2024 12:20:26 +0200
Subject: [PATCH 22/69] Add spanish translation (#583)
* Add spanish transalation
* Update es_ES.ts
---
src/qt_gui/translations/es_ES.ts | 180 +++++++++++++++----------------
1 file changed, 90 insertions(+), 90 deletions(-)
diff --git a/src/qt_gui/translations/es_ES.ts b/src/qt_gui/translations/es_ES.ts
index eedd4f6d4..1b42b18e6 100644
--- a/src/qt_gui/translations/es_ES.ts
+++ b/src/qt_gui/translations/es_ES.ts
@@ -6,7 +6,7 @@
About shadPS4
- About shadPS4
+ Acerca de shadPS4
@@ -16,12 +16,12 @@
shadPS4 is an experimental open-source emulator for the PlayStation 4.
- shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 es un emulador experimental de código abierto para la PlayStation 4.
This software should not be used to play games you have not legally obtained.
- This software should not be used to play games you have not legally obtained.
+ Este software no debe utilizarse para jugar juegos que no hayas obtenido legalmente.
@@ -29,7 +29,7 @@
Open Folder
- Open Folder
+ Abrir carpeta
@@ -37,17 +37,17 @@
Loading game list, please wait :3
- Loading game list, please wait :3
+ Cargando lista de juegos, por favor espera :3
Cancel
- Cancel
+ Cancelar
Loading...
- Loading...
+ Cargando...
@@ -55,17 +55,17 @@
shadPS4 - Choose directory
- shadPS4 - Choose directory
+ shadPS4 - Elegir carpeta
Directory to install games
- Directory to install games
+ Carpeta para instalar juegos
Browse
- Browse
+ Buscar
@@ -75,7 +75,7 @@
The value for location to install games is not valid.
- The value for location to install games is not valid.
+ El valor para la ubicación de instalación de los juegos no es válido.
@@ -83,52 +83,52 @@
Create Shortcut
- Create Shortcut
+ Crear acceso directo
Open Game Folder
- Open Game Folder
+ Abrir carpeta del juego
SFO Viewer
- SFO Viewer
+ Vista SFO
Trophy Viewer
- Trophy Viewer
+ Ver trofeos
Copy info
- Copy info
+ Copiar información
Copy Name
- Copy Name
+ Copiar nombre
Copy Serial
- Copy Serial
+ Copiar serial
Copy All
- Copy All
+ Copiar todo
Shortcut creation
- Shortcut creation
+ Acceso directo creado
Shortcut created successfully!\n %1
- Shortcut created successfully!\n %1
+ ¡Acceso directo creado con éxito!\n %1
@@ -138,12 +138,12 @@
Error creating shortcut!\n %1
- Error creating shortcut!\n %1
+ ¡Error al crear el acceso directo!\n %1
Install PKG
- Install PKG
+ Instalar PKG
@@ -151,187 +151,187 @@
Open/Add Elf Folder
- Open/Add Elf Folder
+ Abrir/Agregar carpeta Elf
Install Packages (PKG)
- Install Packages (PKG)
+ Instalar paquetes (PKG)
Boot Game
- Boot Game
+ Iniciar juego
About shadPS4
- About shadPS4
+ Acerca de shadPS4
Configure...
- Configure...
+ Configurar...
Install application from a .pkg file
- Install application from a .pkg file
+ Instalar aplicación desde un archivo .pkg
Recent Games
- Recent Games
+ Juegos recientes
Exit
- Exit
+ Salir
Exit shadPS4
- Exit shadPS4
+ Salir de shadPS4
Exit the application.
- Exit the application.
+ Salir de la aplicación.
Show Game List
- Show Game List
+ Mostrar lista de juegos
Game List Refresh
- Game List Refresh
+ Actualizar lista de juegos
Tiny
- Tiny
+ Muy pequeño
Small
- Small
+ Pequeño
Medium
- Medium
+ Mediano
Large
- Large
+ Grande
List View
- List View
+ Vista de lista
Grid View
- Grid View
+ Vista de cuadrícula
Elf Viewer
- Elf Viewer
+ Vista Elf
Game Install Directory
- Game Install Directory
+ Carpeta de instalación de los juegos
Dump Game List
- Dump Game List
+ Volcar lista de juegos
PKG Viewer
- PKG Viewer
+ Vista PKG
Search...
- Search...
+ Buscar...
File
- File
+ Archivo
View
- View
+ Vista
Game List Icons
- Game List Icons
+ Iconos de los juegos
Game List Mode
- Game List Mode
+ Tipo de lista
Settings
- Settings
+ Configuraciones
Utils
- Utils
+ Utilidades
Themes
- Themes
+ Temas
About
- About
+ Ayuda
Dark
- Dark
+ Oscuro
Light
- Light
+ Claro
Green
- Green
+ Verde
Blue
- Blue
+ Azul
Violet
- Violet
+ Violeta
toolBar
- toolBar
+ barra de herramientas
@@ -339,7 +339,7 @@
Open Folder
- Open Folder
+ Abrir carpeta
@@ -347,15 +347,15 @@
Trophy Viewer
- Trophy Viewer
+ Vista de trofeos
-
+
SettingsDialog
Settings
- Settings
+ Configuraciones
@@ -365,127 +365,127 @@
System
- System
+ Sistema
Console Language
- Console Language
+ Idioma de la consola
Emulator Language
- Emulator Language
+ Idioma del emulador
Emulator
- Emulator
+ Emulador
Enable Fullscreen
- Enable Fullscreen
+ Habilitar pantalla completa
Show Splash
- Show Splash
+ Mostrar splash
Is PS4 Pro
- Is PS4 Pro
+ Modo PS4 Pro
Username
- Username
+ Nombre de usuario
Logger
- Logger
+ Registro
Log Type
- Log Type
+ Tipo de registro
Log Filter
- Log Filter
+ Filtro de registro
Graphics
- Graphics
+ Gráficos
Graphics Device
- Graphics Device
+ Dispositivo gráfico
Width
- Width
+ Ancho
Height
- Height
+ Alto
Vblank Divider
- Vblank Divider
+ Divisor de Vblank
Advanced
- Advanced
+ Avanzado
Enable Shaders Dumping
- Enable Shaders Dumping
+ Habilitar volcado de shaders
Enable NULL GPU
- Enable NULL GPU
+ Habilitar GPU NULL
Enable PM4 Dumping
- Enable PM4 Dumping
+ Habilitar volcado de PM4
Debug
- Debug
+ Depuración
Enable Debug Dumping
- Enable Debug Dumping
+ Habilitar volcado de depuración
Enable Vulkan Validation Layers
- Enable Vulkan Validation Layers
+ Habilitar capas de validación de Vulkan
Enable Vulkan Synchronization Validation
- Enable Vulkan Synchronization Validation
+ Habilitar validación de sincronización de Vulkan
Enable RenderDoc Debugging
- Enable RenderDoc Debugging
+ Habilitar depuración de RenderDoc
-
\ No newline at end of file
+
From 6520f3ca171644f4adf7eee6bb1c9fbc0b577656 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pl=C3=ADnio=20Larrubia?=
Date: Mon, 26 Aug 2024 07:20:40 -0300
Subject: [PATCH 23/69] feat: add pt_BR translation (#584)
* feat: add pt_BR translation
- Made by @LeDragoX
- Revised by @gabsF
* fix: change translation string 'Mostrar Tela Inicial' to 'Mostrar Splash Inicial'
---
src/qt_gui/translations/pt_BR.ts | 182 +++++++++++++++----------------
1 file changed, 91 insertions(+), 91 deletions(-)
diff --git a/src/qt_gui/translations/pt_BR.ts b/src/qt_gui/translations/pt_BR.ts
index a35f9b1d8..c98d84410 100644
--- a/src/qt_gui/translations/pt_BR.ts
+++ b/src/qt_gui/translations/pt_BR.ts
@@ -6,7 +6,7 @@
About shadPS4
- About shadPS4
+ Sobre o shadPS4
@@ -16,12 +16,12 @@
shadPS4 is an experimental open-source emulator for the PlayStation 4.
- shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4 é um emulador experimental de código-fonte aberto para o PlayStation 4.
This software should not be used to play games you have not legally obtained.
- This software should not be used to play games you have not legally obtained.
+ Este software não deve ser usado para jogar jogos piratas.
@@ -29,7 +29,7 @@
Open Folder
- Open Folder
+ Abrir Pasta
@@ -37,17 +37,17 @@
Loading game list, please wait :3
- Loading game list, please wait :3
+ Carregando lista de jogos, por favor aguarde :3
Cancel
- Cancel
+ Cancelar
Loading...
- Loading...
+ Carregando...
@@ -55,27 +55,27 @@
shadPS4 - Choose directory
- shadPS4 - Choose directory
+ shadPS4 - Escolha o diretório
Directory to install games
- Directory to install games
+ Diretório para instalar jogos
Browse
- Browse
+ Procurar
Error
- Error
+ Erro
The value for location to install games is not valid.
- The value for location to install games is not valid.
+ O diretório da instalação dos jogos não é válido.
@@ -83,67 +83,67 @@
Create Shortcut
- Create Shortcut
+ Criar Atalho
Open Game Folder
- Open Game Folder
+ Abrir Pasta do Jogo
SFO Viewer
- SFO Viewer
+ Visualizador de SFO
Trophy Viewer
- Trophy Viewer
+ Visualizador de Troféu
Copy info
- Copy info
+ Copiar informação
Copy Name
- Copy Name
+ Copiar Nome
Copy Serial
- Copy Serial
+ Copiar Serial
Copy All
- Copy All
+ Copiar Tudo
Shortcut creation
- Shortcut creation
+ Criação de atalho
Shortcut created successfully!\n %1
- Shortcut created successfully!\n %1
+ Atalho criado com sucesso!\n %1
Error
- Error
+ Erro
Error creating shortcut!\n %1
- Error creating shortcut!\n %1
+ Erro ao criar atalho!\n %1
Install PKG
- Install PKG
+ Instalar PKG
@@ -151,187 +151,187 @@
Open/Add Elf Folder
- Open/Add Elf Folder
+ Abrir/Adicionar pasta Elf
Install Packages (PKG)
- Install Packages (PKG)
+ Instalar Pacotes (PKG)
Boot Game
- Boot Game
+ Iniciar Jogo
About shadPS4
- About shadPS4
+ Sobre o shadPS4
Configure...
- Configure...
+ Configurar...
Install application from a .pkg file
- Install application from a .pkg file
+ Instalar aplicação de um arquivo .pkg
Recent Games
- Recent Games
+ Jogos Recentes
Exit
- Exit
+ Sair
Exit shadPS4
- Exit shadPS4
+ Sair do shadPS4
Exit the application.
- Exit the application.
+ Sair da aplicação.
Show Game List
- Show Game List
+ Mostrar Lista de Jogos
Game List Refresh
- Game List Refresh
+ Atualizar Lista de Jogos
Tiny
- Tiny
+ Muito pequeno
Small
- Small
+ Pequeno
Medium
- Medium
+ Médio
Large
- Large
+ Grande
List View
- List View
+ Visualizar em Lista
Grid View
- Grid View
+ Visualizar em Grade
Elf Viewer
- Elf Viewer
+ Visualizador de Elf
Game Install Directory
- Game Install Directory
+ Diretório de Instalação de Jogos
Dump Game List
- Dump Game List
+ Dumpar Lista de Jogos
PKG Viewer
- PKG Viewer
+ Visualizador de PKG
Search...
- Search...
+ Pesquisar...
File
- File
+ Arquivo
View
- View
+ Ver
Game List Icons
- Game List Icons
+ Ícones da Lista de Jogos
Game List Mode
- Game List Mode
+ Modo de Lista de Jogos
Settings
- Settings
+ Configurações
Utils
- Utils
+ Utilitários
Themes
- Themes
+ Temas
About
- About
+ Sobre
Dark
- Dark
+ Escuro
Light
- Light
+ Claro
Green
- Green
+ Verde
Blue
- Blue
+ Azul
Violet
- Violet
+ Violeta
toolBar
- toolBar
+ Barra de Ferramentas
@@ -339,7 +339,7 @@
Open Folder
- Open Folder
+ Abrir Pasta
@@ -347,7 +347,7 @@
Trophy Viewer
- Trophy Viewer
+ Visualizador de Troféu
@@ -355,137 +355,137 @@
Settings
- Settings
+ Configurações
General
- General
+ Geral
System
- System
+ Sistema
Console Language
- Console Language
+ Idioma do Console
Emulator Language
- Emulator Language
+ Idioma do Emulador
Emulator
- Emulator
+ Emulador
Enable Fullscreen
- Enable Fullscreen
+ Ativar Tela Cheia
Show Splash
- Show Splash
+ Mostrar Splash Inicial
Is PS4 Pro
- Is PS4 Pro
+ Modo PS4 Pro
Username
- Username
+ Nome de usuário
Logger
- Logger
+ Registro
Log Type
- Log Type
+ Tipo de Registro
Log Filter
- Log Filter
+ Filtro
Graphics
- Graphics
+ Gráficos
Graphics Device
- Graphics Device
+ Placa de Vídeo
Width
- Width
+ Largura
Height
- Height
+ Altura
Vblank Divider
- Vblank Divider
+ Divisor Vblank
Advanced
- Advanced
+ Avançado
Enable Shaders Dumping
- Enable Shaders Dumping
+ Ativar Dumping de Shaders
Enable NULL GPU
- Enable NULL GPU
+ Ativar GPU NULA
Enable PM4 Dumping
- Enable PM4 Dumping
+ Ativar Dumping de PM4
Debug
- Debug
+ Depuração
Enable Debug Dumping
- Enable Debug Dumping
+ Ativar Depuração de Dumping
Enable Vulkan Validation Layers
- Enable Vulkan Validation Layers
+ Ativar Camadas de Validação do Vulkan
Enable Vulkan Synchronization Validation
- Enable Vulkan Synchronization Validation
+ Ativar Validação de Sincronização do Vulkan
Enable RenderDoc Debugging
- Enable RenderDoc Debugging
+ Ativar Depuração por RenderDoc
\ No newline at end of file
From cd6b5abccfcf408027a06f48f60f1a9dca53cd80 Mon Sep 17 00:00:00 2001
From: Batu
Date: Mon, 26 Aug 2024 13:20:53 +0300
Subject: [PATCH 24/69] added tr language support (#587)
---
src/qt_gui/translations/tr_TR.ts | 182 +++++++++++++++----------------
1 file changed, 91 insertions(+), 91 deletions(-)
diff --git a/src/qt_gui/translations/tr_TR.ts b/src/qt_gui/translations/tr_TR.ts
index ebb8b9b7c..ea5d0765f 100644
--- a/src/qt_gui/translations/tr_TR.ts
+++ b/src/qt_gui/translations/tr_TR.ts
@@ -6,7 +6,7 @@
About shadPS4
- About shadPS4
+ shadPS4 Hakkında
@@ -16,12 +16,12 @@
shadPS4 is an experimental open-source emulator for the PlayStation 4.
- shadPS4 is an experimental open-source emulator for the PlayStation 4.
+ shadPS4, PlayStation 4 için deneysel bir açık kaynak kodlu emülatördür.
This software should not be used to play games you have not legally obtained.
- This software should not be used to play games you have not legally obtained.
+ Bu yazılım, yasal olarak edinmediğiniz oyunları oynamak için kullanılmamalıdır.
@@ -29,7 +29,7 @@
Open Folder
- Open Folder
+ Klasörü Aç
@@ -37,17 +37,17 @@
Loading game list, please wait :3
- Loading game list, please wait :3
+ Oyun listesi yükleniyor, lütfen bekleyin :3
Cancel
- Cancel
+ İptal
Loading...
- Loading...
+ Yükleniyor...
@@ -55,27 +55,27 @@
shadPS4 - Choose directory
- shadPS4 - Choose directory
+ shadPS4 - Klasörü Seç
Directory to install games
- Directory to install games
+ Oyunların yükleneceği klasör
Browse
- Browse
+ Gözat
Error
- Error
+ Hata
The value for location to install games is not valid.
- The value for location to install games is not valid.
+ Oyunların yükleneceği konum için girilen klasör geçerli değil.
@@ -83,67 +83,67 @@
Create Shortcut
- Create Shortcut
+ Kısayol Oluştur
Open Game Folder
- Open Game Folder
+ Oyun Klasörünü Aç
SFO Viewer
- SFO Viewer
+ SFO Görüntüleyici
Trophy Viewer
- Trophy Viewer
+ Kupa Görüntüleyici
Copy info
- Copy info
+ Bilgiyi Kopyala
Copy Name
- Copy Name
+ Adı Kopyala
Copy Serial
- Copy Serial
+ Seri Numarasını Kopyala
Copy All
- Copy All
+ Tümünü Kopyala
Shortcut creation
- Shortcut creation
+ Kısayol oluşturma
Shortcut created successfully!\n %1
- Shortcut created successfully!\n %1
+ Kısayol başarıyla oluşturuldu!\n %1
Error
- Error
+ Hata
Error creating shortcut!\n %1
- Error creating shortcut!\n %1
+ Kısayol oluşturulurken hata oluştu!\n %1
Install PKG
- Install PKG
+ PKG Yükle
@@ -151,187 +151,187 @@
Open/Add Elf Folder
- Open/Add Elf Folder
+ Elf Klasörünü Aç/Ekle
Install Packages (PKG)
- Install Packages (PKG)
+ Paketleri Kur (PKG)
Boot Game
- Boot Game
+ Oyunu Başlat
About shadPS4
- About shadPS4
+ shadPS4 Hakkında
Configure...
- Configure...
+ Yapılandır...
Install application from a .pkg file
- Install application from a .pkg file
+ .pkg dosyasından uygulama yükle
Recent Games
- Recent Games
+ Son Oyunlar
Exit
- Exit
+ Çıkış
Exit shadPS4
- Exit shadPS4
+ shadPS4'ten Çık
Exit the application.
- Exit the application.
+ Uygulamadan çık.
Show Game List
- Show Game List
+ Oyun Listesini Göster
Game List Refresh
- Game List Refresh
+ Oyun Listesini Yenile
Tiny
- Tiny
+ Küçük
Small
- Small
+ Ufak
Medium
- Medium
+ Orta
Large
- Large
+ Büyük
List View
- List View
+ Liste Görünümü
Grid View
- Grid View
+ Izgara Görünümü
Elf Viewer
- Elf Viewer
+ Elf Görüntüleyici
Game Install Directory
- Game Install Directory
+ Oyun Kurulum Klasörü
Dump Game List
- Dump Game List
+ Oyun Listesini Kaydet
PKG Viewer
- PKG Viewer
+ PKG Görüntüleyici
Search...
- Search...
+ Ara...
File
- File
+ Dosya
View
- View
+ Görünüm
Game List Icons
- Game List Icons
+ Oyun Listesi Simgeleri
Game List Mode
- Game List Mode
+ Oyun Listesi Modu
Settings
- Settings
+ Ayarlar
Utils
- Utils
+ Yardımcı Araçlar
Themes
- Themes
+ Temalar
About
- About
+ Hakkında
Dark
- Dark
+ Koyu
Light
- Light
+ Açık
Green
- Green
+ Yeşil
Blue
- Blue
+ Mavi
Violet
- Violet
+ Mor
toolBar
- toolBar
+ Araç Çubuğu
@@ -339,7 +339,7 @@
Open Folder
- Open Folder
+ Klasörü Aç
@@ -347,7 +347,7 @@
Trophy Viewer
- Trophy Viewer
+ Kupa Görüntüleyici
@@ -355,137 +355,137 @@
Settings
- Settings
+ Ayarlar
General
- General
+ Genel
System
- System
+ Sistem
Console Language
- Console Language
+ Konsol Dili
Emulator Language
- Emulator Language
+ Emülatör Dili
Emulator
- Emulator
+ Emülatör
Enable Fullscreen
- Enable Fullscreen
+ Tam Ekranı Etkinleştir
Show Splash
- Show Splash
+ Başlangıç Ekranını Göster
Is PS4 Pro
- Is PS4 Pro
+ PS4 Pro mu
Username
- Username
+ Kullanıcı Adı
Logger
- Logger
+ Kayıt Tutucu
Log Type
- Log Type
+ Kayıt Türü
Log Filter
- Log Filter
+ Kayıt Filtresi
Graphics
- Graphics
+ Grafikler
Graphics Device
- Graphics Device
+ Grafik Cihazı
Width
- Width
+ Genişlik
Height
- Height
+ Yükseklik
Vblank Divider
- Vblank Divider
+ Vblank Bölücü
Advanced
- Advanced
+ Gelişmiş
Enable Shaders Dumping
- Enable Shaders Dumping
+ Shader Kaydını Etkinleştir
Enable NULL GPU
- Enable NULL GPU
+ NULL GPU'yu Etkinleştir
Enable PM4 Dumping
- Enable PM4 Dumping
+ PM4 Kaydını Etkinleştir
Debug
- Debug
+ Hata Ayıklama
Enable Debug Dumping
- Enable Debug Dumping
+ Hata Ayıklama Dökümü Etkinleştir
Enable Vulkan Validation Layers
- Enable Vulkan Validation Layers
+ Vulkan Doğrulama Katmanlarını Etkinleştir
Enable Vulkan Synchronization Validation
- Enable Vulkan Synchronization Validation
+ Vulkan Senkronizasyon Doğrulamasını Etkinleştir
Enable RenderDoc Debugging
- Enable RenderDoc Debugging
+ RenderDoc Hata Ayıklamayı Etkinleştir
\ No newline at end of file
From aae6e5be73a6c43afdfb4bd8d22da5f47d9e380f Mon Sep 17 00:00:00 2001
From: Lizardy <6063922+lzardy@users.noreply.github.com>
Date: Mon, 26 Aug 2024 08:21:20 -0400
Subject: [PATCH 25/69] shader_recompiler: BUFFER_ATOMIC_SWAP Opcode (#566)
* shader_recompiler: BUFFER_ATOMIC_SWAP Opcode
* clang
* follow 32 convention
---------
Co-authored-by: microsoftv <6063922+microsoftv@users.noreply.github.com>
---
src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp | 2 +-
.../backend/spirv/emit_spirv_instructions.h | 2 +-
src/shader_recompiler/frontend/translate/vector_memory.cpp | 4 +++-
src/shader_recompiler/ir/ir_emitter.cpp | 6 +++---
src/shader_recompiler/ir/ir_emitter.h | 4 ++--
src/shader_recompiler/ir/microinstruction.cpp | 2 +-
src/shader_recompiler/ir/opcodes.inc | 4 ++--
src/shader_recompiler/ir/passes/resource_tracking_pass.cpp | 3 ++-
8 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp
index 37e91d3b1..1d553dc56 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_atomic.cpp
@@ -102,7 +102,7 @@ Id EmitBufferAtomicXor32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id addres
return BufferAtomicU32(ctx, inst, handle, address, value, &Sirit::Module::OpAtomicXor);
}
-Id EmitBufferAtomicExchange32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address, Id value) {
+Id EmitBufferAtomicSwap32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address, Id value) {
return BufferAtomicU32(ctx, inst, handle, address, value, &Sirit::Module::OpAtomicExchange);
}
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h b/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h
index 0703efb96..dd3d8fae9 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_instructions.h
@@ -91,7 +91,7 @@ Id EmitBufferAtomicDec32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id addres
Id EmitBufferAtomicAnd32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address, Id value);
Id EmitBufferAtomicOr32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address, Id value);
Id EmitBufferAtomicXor32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address, Id value);
-Id EmitBufferAtomicExchange32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address, Id value);
+Id EmitBufferAtomicSwap32(EmitContext& ctx, IR::Inst* inst, u32 handle, Id address, Id value);
Id EmitGetAttribute(EmitContext& ctx, IR::Attribute attr, u32 comp);
Id EmitGetAttributeU32(EmitContext& ctx, IR::Attribute attr, u32 comp);
void EmitSetAttribute(EmitContext& ctx, IR::Attribute attr, Id value, u32 comp);
diff --git a/src/shader_recompiler/frontend/translate/vector_memory.cpp b/src/shader_recompiler/frontend/translate/vector_memory.cpp
index 45440da2f..b88cfc46c 100644
--- a/src/shader_recompiler/frontend/translate/vector_memory.cpp
+++ b/src/shader_recompiler/frontend/translate/vector_memory.cpp
@@ -111,6 +111,8 @@ void Translator::EmitVectorMemory(const GcnInst& inst) {
// Buffer atomic operations
case Opcode::BUFFER_ATOMIC_ADD:
return BUFFER_ATOMIC(AtomicOp::Add, inst);
+ case Opcode::BUFFER_ATOMIC_SWAP:
+ return BUFFER_ATOMIC(AtomicOp::Swap, inst);
default:
LogMissingOpcode(inst);
}
@@ -476,7 +478,7 @@ void Translator::BUFFER_ATOMIC(AtomicOp op, const GcnInst& inst) {
const IR::Value original_val = [&] {
switch (op) {
case AtomicOp::Swap:
- return ir.BufferAtomicExchange(handle, address, vdata_val, info);
+ return ir.BufferAtomicSwap(handle, address, vdata_val, info);
case AtomicOp::Add:
return ir.BufferAtomicIAdd(handle, address, vdata_val, info);
case AtomicOp::Smin:
diff --git a/src/shader_recompiler/ir/ir_emitter.cpp b/src/shader_recompiler/ir/ir_emitter.cpp
index 0f2fb2f7c..a65e538cf 100644
--- a/src/shader_recompiler/ir/ir_emitter.cpp
+++ b/src/shader_recompiler/ir/ir_emitter.cpp
@@ -404,9 +404,9 @@ Value IREmitter::BufferAtomicXor(const Value& handle, const Value& address, cons
return Inst(Opcode::BufferAtomicXor32, Flags{info}, handle, address, value);
}
-Value IREmitter::BufferAtomicExchange(const Value& handle, const Value& address, const Value& value,
- BufferInstInfo info) {
- return Inst(Opcode::BufferAtomicExchange32, Flags{info}, handle, address, value);
+Value IREmitter::BufferAtomicSwap(const Value& handle, const Value& address, const Value& value,
+ BufferInstInfo info) {
+ return Inst(Opcode::BufferAtomicSwap32, Flags{info}, handle, address, value);
}
void IREmitter::StoreBufferFormat(int num_dwords, const Value& handle, const Value& address,
diff --git a/src/shader_recompiler/ir/ir_emitter.h b/src/shader_recompiler/ir/ir_emitter.h
index 45fa5f216..8f806eb50 100644
--- a/src/shader_recompiler/ir/ir_emitter.h
+++ b/src/shader_recompiler/ir/ir_emitter.h
@@ -115,8 +115,8 @@ public:
const Value& value, BufferInstInfo info);
[[nodiscard]] Value BufferAtomicXor(const Value& handle, const Value& address,
const Value& value, BufferInstInfo info);
- [[nodiscard]] Value BufferAtomicExchange(const Value& handle, const Value& address,
- const Value& value, BufferInstInfo info);
+ [[nodiscard]] Value BufferAtomicSwap(const Value& handle, const Value& address,
+ const Value& value, BufferInstInfo info);
[[nodiscard]] U32 LaneId();
[[nodiscard]] U32 WarpId();
diff --git a/src/shader_recompiler/ir/microinstruction.cpp b/src/shader_recompiler/ir/microinstruction.cpp
index e35be8a7f..a8c8b0737 100644
--- a/src/shader_recompiler/ir/microinstruction.cpp
+++ b/src/shader_recompiler/ir/microinstruction.cpp
@@ -70,7 +70,7 @@ bool Inst::MayHaveSideEffects() const noexcept {
case Opcode::BufferAtomicAnd32:
case Opcode::BufferAtomicOr32:
case Opcode::BufferAtomicXor32:
- case Opcode::BufferAtomicExchange32:
+ case Opcode::BufferAtomicSwap32:
case Opcode::WriteSharedU128:
case Opcode::WriteSharedU64:
case Opcode::WriteSharedU32:
diff --git a/src/shader_recompiler/ir/opcodes.inc b/src/shader_recompiler/ir/opcodes.inc
index 9be89f648..26da00bbd 100644
--- a/src/shader_recompiler/ir/opcodes.inc
+++ b/src/shader_recompiler/ir/opcodes.inc
@@ -95,7 +95,7 @@ OPCODE(StoreBufferFormatF32x4, Void, Opaq
OPCODE(StoreBufferU32, Void, Opaque, Opaque, U32, )
// Buffer atomic operations
-OPCODE(BufferAtomicIAdd32, U32, Opaque, Opaque, U32 )
+OPCODE(BufferAtomicIAdd32, U32, Opaque, Opaque, U32 )
OPCODE(BufferAtomicSMin32, U32, Opaque, Opaque, U32 )
OPCODE(BufferAtomicUMin32, U32, Opaque, Opaque, U32 )
OPCODE(BufferAtomicSMax32, U32, Opaque, Opaque, U32 )
@@ -105,7 +105,7 @@ OPCODE(BufferAtomicDec32, U32, Opaq
OPCODE(BufferAtomicAnd32, U32, Opaque, Opaque, U32, )
OPCODE(BufferAtomicOr32, U32, Opaque, Opaque, U32, )
OPCODE(BufferAtomicXor32, U32, Opaque, Opaque, U32, )
-OPCODE(BufferAtomicExchange32, U32, Opaque, Opaque, U32, )
+OPCODE(BufferAtomicSwap32, U32, Opaque, Opaque, U32, )
// Vector utility
OPCODE(CompositeConstructU32x2, U32x2, U32, U32, )
diff --git a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp
index 016ba3660..ccdcfc6e6 100644
--- a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp
+++ b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp
@@ -32,7 +32,7 @@ bool IsBufferAtomic(const IR::Inst& inst) {
case IR::Opcode::BufferAtomicAnd32:
case IR::Opcode::BufferAtomicOr32:
case IR::Opcode::BufferAtomicXor32:
- case IR::Opcode::BufferAtomicExchange32:
+ case IR::Opcode::BufferAtomicSwap32:
return true;
default:
return false;
@@ -136,6 +136,7 @@ IR::Type BufferDataType(const IR::Inst& inst, AmdGpu::NumberFormat num_format) {
case IR::Opcode::ReadConstBufferU32:
case IR::Opcode::StoreBufferU32:
case IR::Opcode::BufferAtomicIAdd32:
+ case IR::Opcode::BufferAtomicSwap32:
return IR::Type::U32;
default:
UNREACHABLE();
From ad8373095a4fda41d61ae3105af280ca4484f382 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pl=C3=ADnio=20Larrubia?=
Date: Mon, 26 Aug 2024 09:22:11 -0300
Subject: [PATCH 26/69] fix typo in LOG_INFO (#559)
fix: file name typo constant_propogation_pass.cpp
fix typo from 'symbol_vitrual_addr' variable
fix typo in emit_spirv_context_get_set.cpp
fix typo from constant_propagation_pass.cpp in CMakeLists
fix typo in these some config.cpp functions
- setSliderPosition
- setSliderPositionGrid
- getSliderPosition
- getSliderPositionGrid
fix typo inside src\core\aerolib\stubs.cpp
fix typo in a comment from src\core\file_format\pkg.cpp
fix typo inside src\core\file_sys\fs.cpp + fs.h
- NeedsCaseInsensiveSearch -> NeedsCaseInsensitiveSearch
fix 2 function typos: sceAppContentAddcontEnqueueDownloadByEntitlemetId and sceAppContentAddcontMountByEntitlemetId
fix typo on comment inside src\core\libraries\kernel\file_system.cpp
fix typo on src\core\libraries\videoout\driver.cpp
fix typo in src\core\memory.cpp
fix typo from comment in src\qt_gui\game_list_utils.h
fix typo in src\video_core\amdgpu\liverpool.h
- window_offset_disble to window_offset_disable
fix typo from comments in src\video_core\host_shaders\detile_m32x1.comp + detile_m32x2.comp
- subotimal -> suboptimal
fix typo from comment in src\video_core\renderer_vulkan\renderer_vulkan.cpp
- dimentions -> dimensions
fix typo from enum in src\common\debug.h and other files
- MarkersPallete -> MarkersPalette
fix last typo in src\video_core\amdgpu\pm4_opcodes.h
- PremableCntl -> PreambleCntl
---
CMakeLists.txt | 2 +-
scripts/aerolib.inl | 4 +--
scripts/ps4_names.txt | 4 +--
src/common/config.cpp | 8 +++---
src/common/config.h | 8 +++---
src/common/debug.h | 2 +-
src/core/aerolib/aerolib.inl | 4 +--
src/core/aerolib/stubs.cpp | 2 +-
src/core/file_format/pkg.cpp | 4 +--
src/core/file_sys/fs.cpp | 2 +-
src/core/file_sys/fs.h | 4 +--
.../libraries/app_content/app_content.cpp | 8 +++---
src/core/libraries/app_content/app_content.h | 4 +--
src/core/libraries/kernel/file_system.cpp | 2 +-
src/core/libraries/videoout/driver.cpp | 2 +-
src/core/linker.cpp | 12 ++++----
src/core/memory.cpp | 2 +-
src/qt_gui/game_list_utils.h | 2 +-
src/qt_gui/main_window.cpp | 28 +++++++++----------
.../spirv/emit_spirv_context_get_set.cpp | 4 +--
...pass.cpp => constant_propagation_pass.cpp} | 0
src/video_core/amdgpu/liverpool.h | 2 +-
src/video_core/amdgpu/pm4_opcodes.h | 2 +-
src/video_core/host_shaders/detile_m8x1.comp | 2 +-
src/video_core/host_shaders/detile_m8x2.comp | 2 +-
.../renderer_vulkan/renderer_vulkan.cpp | 4 +--
.../renderer_vulkan/vk_scheduler.cpp | 2 +-
27 files changed, 61 insertions(+), 61 deletions(-)
rename src/shader_recompiler/ir/passes/{constant_propogation_pass.cpp => constant_propagation_pass.cpp} (100%)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 43ad23e94..decc27b17 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -450,7 +450,7 @@ set(SHADER_RECOMPILER src/shader_recompiler/exception.h
src/shader_recompiler/frontend/opcodes.h
src/shader_recompiler/frontend/structured_control_flow.cpp
src/shader_recompiler/frontend/structured_control_flow.h
- src/shader_recompiler/ir/passes/constant_propogation_pass.cpp
+ src/shader_recompiler/ir/passes/constant_propagation_pass.cpp
src/shader_recompiler/ir/passes/dead_code_elimination_pass.cpp
src/shader_recompiler/ir/passes/identity_removal_pass.cpp
src/shader_recompiler/ir/passes/ir_passes.h
diff --git a/scripts/aerolib.inl b/scripts/aerolib.inl
index a87c3cc4e..64ee32ea2 100644
--- a/scripts/aerolib.inl
+++ b/scripts/aerolib.inl
@@ -114108,7 +114108,7 @@ STUB(
_ZN3sce2Np9CppWebApi6Common12IntrusivePtrINS1_7Matches2V124RequestCompetitiveResultEE7add_refEv)
STUB("efPahl2FufA",
_ZN3sce2Np9CppWebApi30CommunicationRestrictionStatus2V35Error8fromJsonERKNS_4Json5ValueE)
-STUB("efX3lrPwdKA", sceAppContentAddcontMountByEntitlemetId)
+STUB("efX3lrPwdKA", sceAppContentAddcontMountByEntitlementId)
STUB("efXnxYFN5oE", _ZNSt11range_errorD0Ev)
STUB("efcwuDLsAM0", _ZThn120_NK7WebCore16HTMLMediaElement5mutedEv)
STUB("efhGArzWdxE", _ZN7bmalloc6IsoTLS15s_didInitializeE)
@@ -129493,7 +129493,7 @@ STUB(
STUB("kJlYH5uMAWI", sceNetResolverDestroy)
STUB("kJmdxo4uM+8",
_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE5_InitERKSt8_Locinfo)
-STUB("kJmjt81mXKQ", sceAppContentAddcontEnqueueDownloadByEntitlemetId)
+STUB("kJmjt81mXKQ", sceAppContentAddcontEnqueueDownloadByEntitlementId)
STUB(
"kJoY9lMIFzY",
_ZN3sce2Np9CppWebApi6Common8IteratorINS2_12IntrusivePtrINS1_21AdvancedPlayerProfile2V138MatchCompletionRateDisconnectedMetricsEEEEmmEi)
diff --git a/scripts/ps4_names.txt b/scripts/ps4_names.txt
index caad2b4df..6f95cc734 100644
--- a/scripts/ps4_names.txt
+++ b/scripts/ps4_names.txt
@@ -80897,10 +80897,10 @@ sceAppCheckerExecute
sceAppCheckerExecuteEx
sceAppContentAddcontDelete
sceAppContentAddcontEnqueueDownload
-sceAppContentAddcontEnqueueDownloadByEntitlemetId
+sceAppContentAddcontEnqueueDownloadByEntitlementId
sceAppContentAddcontEnqueueDownloadSp
sceAppContentAddcontMount
-sceAppContentAddcontMountByEntitlemetId
+sceAppContentAddcontMountByEntitlementId
sceAppContentAddcontShrink
sceAppContentAddcontUnmount
sceAppContentAppParamGetInt
diff --git a/src/common/config.cpp b/src/common/config.cpp
index 0659a987f..9f55cbd40 100644
--- a/src/common/config.cpp
+++ b/src/common/config.cpp
@@ -215,10 +215,10 @@ void setIconSize(u32 size) {
void setIconSizeGrid(u32 size) {
m_icon_size_grid = size;
}
-void setSliderPositon(u32 pos) {
+void setSliderPosition(u32 pos) {
m_slider_pos = pos;
}
-void setSliderPositonGrid(u32 pos) {
+void setSliderPositionGrid(u32 pos) {
m_slider_pos_grid = pos;
}
void setTableMode(u32 mode) {
@@ -271,10 +271,10 @@ u32 getIconSize() {
u32 getIconSizeGrid() {
return m_icon_size_grid;
}
-u32 getSliderPositon() {
+u32 getSliderPosition() {
return m_slider_pos;
}
-u32 getSliderPositonGrid() {
+u32 getSliderPositionGrid() {
return m_slider_pos_grid;
}
u32 getTableMode() {
diff --git a/src/common/config.h b/src/common/config.h
index 458fa88c3..554515a44 100644
--- a/src/common/config.h
+++ b/src/common/config.h
@@ -61,8 +61,8 @@ void setGameInstallDir(const std::string& dir);
void setMainWindowTheme(u32 theme);
void setIconSize(u32 size);
void setIconSizeGrid(u32 size);
-void setSliderPositon(u32 pos);
-void setSliderPositonGrid(u32 pos);
+void setSliderPosition(u32 pos);
+void setSliderPositionGrid(u32 pos);
void setTableMode(u32 mode);
void setMainWindowWidth(u32 width);
void setMainWindowHeight(u32 height);
@@ -79,8 +79,8 @@ std::string getGameInstallDir();
u32 getMainWindowTheme();
u32 getIconSize();
u32 getIconSizeGrid();
-u32 getSliderPositon();
-u32 getSliderPositonGrid();
+u32 getSliderPosition();
+u32 getSliderPositionGrid();
u32 getTableMode();
u32 getMainWindowWidth();
u32 getMainWindowHeight();
diff --git a/src/common/debug.h b/src/common/debug.h
index 50022a156..596ad7b84 100644
--- a/src/common/debug.h
+++ b/src/common/debug.h
@@ -29,7 +29,7 @@ static inline bool IsProfilerConnected() {
#define TRACK_ALLOC(ptr, size, pool) TracyAllocN(std::bit_cast(ptr), (size), (pool))
#define TRACK_FREE(ptr, pool) TracyFreeN(std::bit_cast(ptr), (pool))
-enum MarkersPallete : int {
+enum MarkersPalette : int {
EmulatorMarkerColor = 0x264653,
RendererMarkerColor = 0x2a9d8f,
HleMarkerColor = 0xe9c46a,
diff --git a/src/core/aerolib/aerolib.inl b/src/core/aerolib/aerolib.inl
index a87c3cc4e..64ee32ea2 100644
--- a/src/core/aerolib/aerolib.inl
+++ b/src/core/aerolib/aerolib.inl
@@ -114108,7 +114108,7 @@ STUB(
_ZN3sce2Np9CppWebApi6Common12IntrusivePtrINS1_7Matches2V124RequestCompetitiveResultEE7add_refEv)
STUB("efPahl2FufA",
_ZN3sce2Np9CppWebApi30CommunicationRestrictionStatus2V35Error8fromJsonERKNS_4Json5ValueE)
-STUB("efX3lrPwdKA", sceAppContentAddcontMountByEntitlemetId)
+STUB("efX3lrPwdKA", sceAppContentAddcontMountByEntitlementId)
STUB("efXnxYFN5oE", _ZNSt11range_errorD0Ev)
STUB("efcwuDLsAM0", _ZThn120_NK7WebCore16HTMLMediaElement5mutedEv)
STUB("efhGArzWdxE", _ZN7bmalloc6IsoTLS15s_didInitializeE)
@@ -129493,7 +129493,7 @@ STUB(
STUB("kJlYH5uMAWI", sceNetResolverDestroy)
STUB("kJmdxo4uM+8",
_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE5_InitERKSt8_Locinfo)
-STUB("kJmjt81mXKQ", sceAppContentAddcontEnqueueDownloadByEntitlemetId)
+STUB("kJmjt81mXKQ", sceAppContentAddcontEnqueueDownloadByEntitlementId)
STUB(
"kJoY9lMIFzY",
_ZN3sce2Np9CppWebApi6Common8IteratorINS2_12IntrusivePtrINS1_21AdvancedPlayerProfile2V138MatchCompletionRateDisconnectedMetricsEEEEmmEi)
diff --git a/src/core/aerolib/stubs.cpp b/src/core/aerolib/stubs.cpp
index 5e2d55cdc..2634fc46a 100644
--- a/src/core/aerolib/stubs.cpp
+++ b/src/core/aerolib/stubs.cpp
@@ -13,7 +13,7 @@ namespace Core::AeroLib {
// on lookup, setting up the nid_entry they are matched with
//
// If it runs out of stubs with name information, it will return
-// a default implemetnation without function name details
+// a default implementation without function name details
// Up to 512, larger values lead to more resolve stub slots
// and to longer compile / CI times
diff --git a/src/core/file_format/pkg.cpp b/src/core/file_format/pkg.cpp
index 336d81019..fe3c34547 100644
--- a/src/core/file_format/pkg.cpp
+++ b/src/core/file_format/pkg.cpp
@@ -279,8 +279,8 @@ bool PKG::Extract(const std::filesystem::path& filepath, const std::filesystem::
}
}
- // let's deal with the root/uroot enteries here.
- // Sometimes it's more than 2 enteries (Tomb Raider Remastered)
+ // let's deal with the root/uroot entries here.
+ // Sometimes it's more than 2 entries (Tomb Raider Remastered)
const std::string_view flat_path_table(&decompressedData[0x10], 15);
if (flat_path_table == "flat_path_table") {
uroot_reached = true;
diff --git a/src/core/file_sys/fs.cpp b/src/core/file_sys/fs.cpp
index 40d8212bb..199e42a04 100644
--- a/src/core/file_sys/fs.cpp
+++ b/src/core/file_sys/fs.cpp
@@ -48,7 +48,7 @@ std::filesystem::path MntPoints::GetHostPath(std::string_view guest_directory) {
pos = mount->mount.size() + 1;
const auto rel_path = std::string_view(corrected_path).substr(pos);
const auto host_path = mount->host_path / rel_path;
- if (!NeedsCaseInsensiveSearch) {
+ if (!NeedsCaseInsensitiveSearch) {
return host_path;
}
diff --git a/src/core/file_sys/fs.h b/src/core/file_sys/fs.h
index b0fb63242..2c55b0513 100644
--- a/src/core/file_sys/fs.h
+++ b/src/core/file_sys/fs.h
@@ -14,9 +14,9 @@ namespace Core::FileSys {
class MntPoints {
#ifdef _WIN64
- static constexpr bool NeedsCaseInsensiveSearch = false;
+ static constexpr bool NeedsCaseInsensitiveSearch = false;
#else
- static constexpr bool NeedsCaseInsensiveSearch = true;
+ static constexpr bool NeedsCaseInsensitiveSearch = true;
#endif
public:
struct MntPair {
diff --git a/src/core/libraries/app_content/app_content.cpp b/src/core/libraries/app_content/app_content.cpp
index 882f99e49..ab3c901aa 100644
--- a/src/core/libraries/app_content/app_content.cpp
+++ b/src/core/libraries/app_content/app_content.cpp
@@ -221,12 +221,12 @@ int PS4_SYSV_ABI Func_C59A36FF8D7C59DA() {
return ORBIS_OK;
}
-int PS4_SYSV_ABI sceAppContentAddcontEnqueueDownloadByEntitlemetId() {
+int PS4_SYSV_ABI sceAppContentAddcontEnqueueDownloadByEntitlementId() {
LOG_ERROR(Lib_AppContent, "(STUBBED) called");
return ORBIS_OK;
}
-int PS4_SYSV_ABI sceAppContentAddcontMountByEntitlemetId() {
+int PS4_SYSV_ABI sceAppContentAddcontMountByEntitlementId() {
LOG_ERROR(Lib_AppContent, "(STUBBED) called");
return ORBIS_OK;
}
@@ -313,9 +313,9 @@ void RegisterlibSceAppContent(Core::Loader::SymbolsResolver* sym) {
LIB_FUNCTION("xZo2-418Wdo", "libSceAppContentBundle", 1, "libSceAppContent", 1, 1,
Func_C59A36FF8D7C59DA);
LIB_FUNCTION("kJmjt81mXKQ", "libSceAppContentIro", 1, "libSceAppContent", 1, 1,
- sceAppContentAddcontEnqueueDownloadByEntitlemetId);
+ sceAppContentAddcontEnqueueDownloadByEntitlementId);
LIB_FUNCTION("efX3lrPwdKA", "libSceAppContentIro", 1, "libSceAppContent", 1, 1,
- sceAppContentAddcontMountByEntitlemetId);
+ sceAppContentAddcontMountByEntitlementId);
LIB_FUNCTION("z9hgjLd1SGA", "libSceAppContentIro", 1, "libSceAppContent", 1, 1,
sceAppContentGetAddcontInfoByEntitlementId);
LIB_FUNCTION("3wUaDTGmjcQ", "libSceAppContentIro", 1, "libSceAppContent", 1, 1,
diff --git a/src/core/libraries/app_content/app_content.h b/src/core/libraries/app_content/app_content.h
index ecf69199e..3e6f9b540 100644
--- a/src/core/libraries/app_content/app_content.h
+++ b/src/core/libraries/app_content/app_content.h
@@ -92,8 +92,8 @@ int PS4_SYSV_ABI sceAppContentTemporaryDataMount2(OrbisAppContentTemporaryDataOp
int PS4_SYSV_ABI sceAppContentTemporaryDataUnmount();
int PS4_SYSV_ABI sceAppContentGetPftFlag();
int PS4_SYSV_ABI Func_C59A36FF8D7C59DA();
-int PS4_SYSV_ABI sceAppContentAddcontEnqueueDownloadByEntitlemetId();
-int PS4_SYSV_ABI sceAppContentAddcontMountByEntitlemetId();
+int PS4_SYSV_ABI sceAppContentAddcontEnqueueDownloadByEntitlementId();
+int PS4_SYSV_ABI sceAppContentAddcontMountByEntitlementId();
int PS4_SYSV_ABI sceAppContentGetAddcontInfoByEntitlementId();
int PS4_SYSV_ABI sceAppContentGetAddcontInfoListByIroTag();
int PS4_SYSV_ABI sceAppContentGetDownloadedStoreCountry();
diff --git a/src/core/libraries/kernel/file_system.cpp b/src/core/libraries/kernel/file_system.cpp
index 990b11d69..f7f58df59 100644
--- a/src/core/libraries/kernel/file_system.cpp
+++ b/src/core/libraries/kernel/file_system.cpp
@@ -538,7 +538,7 @@ void fileSystemSymbolsRegister(Core::Loader::SymbolsResolver* sym) {
// openOrbis (to check if it is valid out of OpenOrbis
LIB_FUNCTION("6c3rCVE-fTU", "libkernel", 1, "libkernel", 1, 1,
- posix_open); // _open shoudld be equal to open function
+ posix_open); // _open should be equal to open function
}
} // namespace Libraries::Kernel
diff --git a/src/core/libraries/videoout/driver.cpp b/src/core/libraries/videoout/driver.cpp
index dbbcb1def..09e9cef5b 100644
--- a/src/core/libraries/videoout/driver.cpp
+++ b/src/core/libraries/videoout/driver.cpp
@@ -96,7 +96,7 @@ int VideoOutDriver::RegisterBuffers(VideoOutPort* port, s32 startIndex, void* co
}
if (attribute->reserved0 != 0 || attribute->reserved1 != 0) {
- LOG_ERROR(Lib_VideoOut, "Invalid reserved memebers");
+ LOG_ERROR(Lib_VideoOut, "Invalid reserved members");
return ORBIS_VIDEO_OUT_ERROR_INVALID_VALUE;
}
if (attribute->aspect_ratio != 0) {
diff --git a/src/core/linker.cpp b/src/core/linker.cpp
index d4a15825b..6f46fdbe3 100644
--- a/src/core/linker.cpp
+++ b/src/core/linker.cpp
@@ -168,7 +168,7 @@ void Linker::Relocate(Module* module) {
auto sym_bind = sym.GetBind();
auto sym_type = sym.GetType();
auto sym_visibility = sym.GetVisibility();
- u64 symbol_vitrual_addr = 0;
+ u64 symbol_virtual_addr = 0;
Loader::SymbolRecord symrec{};
switch (sym_type) {
case STT_FUN:
@@ -185,12 +185,12 @@ void Linker::Relocate(Module* module) {
}
if (sym_visibility != 0) {
- LOG_INFO(Core_Linker, "symbol visilibity !=0");
+ LOG_INFO(Core_Linker, "symbol visibility !=0");
}
switch (sym_bind) {
case STB_LOCAL:
- symbol_vitrual_addr = rel_base_virtual_addr + sym.st_value;
+ symbol_virtual_addr = rel_base_virtual_addr + sym.st_value;
module->SetRelaBit(bit_idx);
break;
case STB_GLOBAL:
@@ -200,14 +200,14 @@ void Linker::Relocate(Module* module) {
// Only set the rela bit if the symbol was actually resolved and not stubbed.
module->SetRelaBit(bit_idx);
}
- symbol_vitrual_addr = symrec.virtual_address;
+ symbol_virtual_addr = symrec.virtual_address;
break;
}
default:
ASSERT_MSG(0, "unknown bind type {}", sym_bind);
}
- rel_is_resolved = (symbol_vitrual_addr != 0);
- rel_value = (rel_is_resolved ? symbol_vitrual_addr + addend : 0);
+ rel_is_resolved = (symbol_virtual_addr != 0);
+ rel_value = (rel_is_resolved ? symbol_virtual_addr + addend : 0);
rel_name = symrec.name;
break;
}
diff --git a/src/core/memory.cpp b/src/core/memory.cpp
index d6d5c1e36..0feef260b 100644
--- a/src/core/memory.cpp
+++ b/src/core/memory.cpp
@@ -349,7 +349,7 @@ void MemoryManager::NameVirtualRange(VAddr virtual_addr, size_t size, std::strin
auto it = FindVMA(virtual_addr);
ASSERT_MSG(it->second.Contains(virtual_addr, size),
- "Range provided is not fully containted in vma");
+ "Range provided is not fully contained in vma");
it->second.name = name;
}
VAddr MemoryManager::SearchFree(VAddr virtual_addr, size_t size, u32 alignment) {
diff --git a/src/qt_gui/game_list_utils.h b/src/qt_gui/game_list_utils.h
index 8f934388d..7911ce46f 100644
--- a/src/qt_gui/game_list_utils.h
+++ b/src/qt_gui/game_list_utils.h
@@ -4,7 +4,7 @@
#pragma once
struct GameInfo {
- std::string path; // root path of game directory (normaly directory that contains eboot.bin)
+ std::string path; // root path of game directory (normally directory that contains eboot.bin)
std::string icon_path; // path of icon0.png
std::string pic_path; // path of pic1.png
QImage icon;
diff --git a/src/qt_gui/main_window.cpp b/src/qt_gui/main_window.cpp
index 64a89c6a6..8a4281726 100644
--- a/src/qt_gui/main_window.cpp
+++ b/src/qt_gui/main_window.cpp
@@ -116,7 +116,7 @@ void MainWindow::CreateDockWindows() {
m_elf_viewer->hide();
m_game_list_frame->show();
m_dock_widget->setWidget(m_game_list_frame.data());
- slider_pos = Config::getSliderPositon();
+ slider_pos = Config::getSliderPosition();
ui->sizeSlider->setSliderPosition(slider_pos); // set slider pos at start;
isTableList = true;
} else if (table_mode == 1) { // Grid
@@ -124,7 +124,7 @@ void MainWindow::CreateDockWindows() {
m_elf_viewer->hide();
m_game_grid_frame->show();
m_dock_widget->setWidget(m_game_grid_frame.data());
- slider_pos = Config::getSliderPositonGrid();
+ slider_pos = Config::getSliderPositionGrid();
ui->sizeSlider->setSliderPosition(slider_pos); // set slider pos at start;
isTableList = false;
} else {
@@ -184,12 +184,12 @@ void MainWindow::CreateConnects() {
36 + value; // 36 is the minimum icon size to use due to text disappearing.
m_game_list_frame->ResizeIcons(36 + value);
Config::setIconSize(36 + value);
- Config::setSliderPositon(value);
+ Config::setSliderPosition(value);
} else {
m_game_grid_frame->icon_size = 69 + value;
m_game_grid_frame->PopulateGameGrid(m_game_info->m_games, false);
Config::setIconSizeGrid(69 + value);
- Config::setSliderPositonGrid(value);
+ Config::setSliderPositionGrid(value);
}
});
@@ -228,11 +228,11 @@ void MainWindow::CreateConnects() {
36; // 36 is the minimum icon size to use due to text disappearing.
ui->sizeSlider->setValue(0); // icone_size - 36
Config::setIconSize(36);
- Config::setSliderPositon(0);
+ Config::setSliderPosition(0);
} else {
ui->sizeSlider->setValue(0); // icone_size - 36
Config::setIconSizeGrid(69);
- Config::setSliderPositonGrid(0);
+ Config::setSliderPositionGrid(0);
}
});
@@ -241,11 +241,11 @@ void MainWindow::CreateConnects() {
m_game_list_frame->icon_size = 64;
ui->sizeSlider->setValue(28);
Config::setIconSize(64);
- Config::setSliderPositon(28);
+ Config::setSliderPosition(28);
} else {
ui->sizeSlider->setValue(28);
Config::setIconSizeGrid(97);
- Config::setSliderPositonGrid(28);
+ Config::setSliderPositionGrid(28);
}
});
@@ -254,11 +254,11 @@ void MainWindow::CreateConnects() {
m_game_list_frame->icon_size = 128;
ui->sizeSlider->setValue(92);
Config::setIconSize(128);
- Config::setSliderPositon(92);
+ Config::setSliderPosition(92);
} else {
ui->sizeSlider->setValue(92);
Config::setIconSizeGrid(160);
- Config::setSliderPositonGrid(91);
+ Config::setSliderPositionGrid(91);
}
});
@@ -267,11 +267,11 @@ void MainWindow::CreateConnects() {
m_game_list_frame->icon_size = 256;
ui->sizeSlider->setValue(220);
Config::setIconSize(256);
- Config::setSliderPositon(220);
+ Config::setSliderPosition(220);
} else {
ui->sizeSlider->setValue(220);
Config::setIconSizeGrid(256);
- Config::setSliderPositonGrid(220);
+ Config::setSliderPositionGrid(220);
}
});
// List
@@ -286,7 +286,7 @@ void MainWindow::CreateConnects() {
}
isTableList = true;
Config::setTableMode(0);
- int slider_pos = Config::getSliderPositon();
+ int slider_pos = Config::getSliderPosition();
ui->sizeSlider->setEnabled(true);
ui->sizeSlider->setSliderPosition(slider_pos);
});
@@ -302,7 +302,7 @@ void MainWindow::CreateConnects() {
}
isTableList = false;
Config::setTableMode(1);
- int slider_pos_grid = Config::getSliderPositonGrid();
+ int slider_pos_grid = Config::getSliderPositionGrid();
ui->sizeSlider->setEnabled(true);
ui->sizeSlider->setSliderPosition(slider_pos_grid);
});
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
index 0b02f3a37..03fc52ff4 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_context_get_set.cpp
@@ -305,7 +305,7 @@ static Id ConvertValue(EmitContext& ctx, Id value, AmdGpu::NumberFormat format,
case AmdGpu::NumberFormat::Float:
return value;
default:
- UNREACHABLE_MSG("Unsupported number fromat for conversion: {}",
+ UNREACHABLE_MSG("Unsupported number format for conversion: {}",
magic_enum::enum_name(format));
}
}
@@ -478,7 +478,7 @@ static Id ConvertF32ToFormat(EmitContext& ctx, Id value, AmdGpu::NumberFormat fo
case AmdGpu::NumberFormat::Float:
return value;
default:
- UNREACHABLE_MSG("Unsupported number fromat for conversion: {}",
+ UNREACHABLE_MSG("Unsupported number format for conversion: {}",
magic_enum::enum_name(format));
}
}
diff --git a/src/shader_recompiler/ir/passes/constant_propogation_pass.cpp b/src/shader_recompiler/ir/passes/constant_propagation_pass.cpp
similarity index 100%
rename from src/shader_recompiler/ir/passes/constant_propogation_pass.cpp
rename to src/shader_recompiler/ir/passes/constant_propagation_pass.cpp
diff --git a/src/video_core/amdgpu/liverpool.h b/src/video_core/amdgpu/liverpool.h
index 7b2d47853..2806f3308 100644
--- a/src/video_core/amdgpu/liverpool.h
+++ b/src/video_core/amdgpu/liverpool.h
@@ -556,7 +556,7 @@ struct Liverpool {
union {
BitField<0, 15, s32> top_left_x;
BitField<15, 15, s32> top_left_y;
- BitField<30, 1, s32> window_offset_disble;
+ BitField<30, 1, s32> window_offset_disable;
};
union {
BitField<0, 15, s32> bottom_right_x;
diff --git a/src/video_core/amdgpu/pm4_opcodes.h b/src/video_core/amdgpu/pm4_opcodes.h
index fba0cbb9f..83c1deaa4 100644
--- a/src/video_core/amdgpu/pm4_opcodes.h
+++ b/src/video_core/amdgpu/pm4_opcodes.h
@@ -48,7 +48,7 @@ enum class PM4ItOpcode : u32 {
EventWriteEop = 0x47,
EventWriteEos = 0x48,
ReleaseMem = 0x49,
- PremableCntl = 0x4A,
+ PreambleCntl = 0x4A,
DmaData = 0x50,
ContextRegRmw = 0x51,
AcquireMem = 0x58,
diff --git a/src/video_core/host_shaders/detile_m8x1.comp b/src/video_core/host_shaders/detile_m8x1.comp
index 5ec48fae2..3ca2e64bd 100644
--- a/src/video_core/host_shaders/detile_m8x1.comp
+++ b/src/video_core/host_shaders/detile_m8x1.comp
@@ -4,7 +4,7 @@
#version 450
#extension GL_KHR_shader_subgroup_shuffle : require
-// NOTE: Current subgroup utilization is subotimal on most GPUs, so
+// NOTE: Current subgroup utilization is suboptimal on most GPUs, so
// it will be nice to process two tiles at once here.
layout (local_size_x = 16, local_size_y = 1, local_size_z = 1) in;
diff --git a/src/video_core/host_shaders/detile_m8x2.comp b/src/video_core/host_shaders/detile_m8x2.comp
index d27bc6e2d..ee9b72810 100644
--- a/src/video_core/host_shaders/detile_m8x2.comp
+++ b/src/video_core/host_shaders/detile_m8x2.comp
@@ -3,7 +3,7 @@
#version 450
-// NOTE: Current subgroup utilization is subotimal on most GPUs, so
+// NOTE: Current subgroup utilization is suboptimal on most GPUs, so
// it will be nice to process two tiles at once here.
layout (local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp
index c78d629e4..b12708088 100644
--- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp
+++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp
@@ -258,7 +258,7 @@ void RendererVulkan::Present(Frame* frame) {
{
auto* profiler_ctx = instance.GetProfilerContext();
TracyVkNamedZoneC(profiler_ctx, renderer_gpu_zone, cmdbuf, "Host frame",
- MarkersPallete::GpuMarkerColor, profiler_ctx != nullptr);
+ MarkersPalette::GpuMarkerColor, profiler_ctx != nullptr);
const vk::Extent2D extent = swapchain.GetExtent();
const std::array pre_barriers{
@@ -380,7 +380,7 @@ Frame* RendererVulkan::GetRenderFrame() {
// Reset fence for next queue submission.
device.resetFences(frame->present_done);
- // If the window dimentions changed, recreate this frame
+ // If the window dimensions changed, recreate this frame
if (frame->width != window.getWidth() || frame->height != window.getHeight()) {
RecreateFrame(frame, window.getWidth(), window.getHeight());
}
diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp
index ef0307efd..2f1f13d72 100644
--- a/src/video_core/renderer_vulkan/vk_scheduler.cpp
+++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp
@@ -145,7 +145,7 @@ void Scheduler::AllocateWorkerCommandBuffers() {
auto* profiler_ctx = instance.GetProfilerContext();
if (profiler_ctx) {
static const auto scope_loc =
- GPU_SCOPE_LOCATION("Guest Frame", MarkersPallete::GpuMarkerColor);
+ GPU_SCOPE_LOCATION("Guest Frame", MarkersPalette::GpuMarkerColor);
new (profiler_scope) tracy::VkCtxScope{profiler_ctx, &scope_loc, current_cmdbuf, true};
}
}
From 7c7d04133e54818cbfdd589ef1e0ccda447db56c Mon Sep 17 00:00:00 2001
From: Exhigh
Date: Mon, 26 Aug 2024 19:34:35 +0400
Subject: [PATCH 27/69] savedata: Handle another missed case in saveDataMount
This should potentially fix (CUSA01019) - The Walking Dead: The Complete First Season.
---
src/core/libraries/save_data/savedata.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/core/libraries/save_data/savedata.cpp b/src/core/libraries/save_data/savedata.cpp
index d62e39f88..a6117cba5 100644
--- a/src/core/libraries/save_data/savedata.cpp
+++ b/src/core/libraries/save_data/savedata.cpp
@@ -506,7 +506,9 @@ s32 saveDataMount(u32 user_id, char* dir_name, u32 mount_mode,
case ORBIS_SAVE_DATA_MOUNT_MODE_CREATE | ORBIS_SAVE_DATA_MOUNT_MODE_RDWR |
ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON:
case ORBIS_SAVE_DATA_MOUNT_MODE_CREATE | ORBIS_SAVE_DATA_MOUNT_MODE_DESTRUCT_OFF |
- ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON: {
+ ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON:
+ case ORBIS_SAVE_DATA_MOUNT_MODE_CREATE | ORBIS_SAVE_DATA_MOUNT_MODE_RDWR |
+ ORBIS_SAVE_DATA_MOUNT_MODE_DESTRUCT_OFF | ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON: {
if (std::filesystem::exists(mount_dir)) {
return ORBIS_SAVE_DATA_ERROR_EXISTS;
}
From 3e94b533b6c9840c038e529fb95118ec0dd16c0e Mon Sep 17 00:00:00 2001
From: psucien <168137814+psucien@users.noreply.github.com>
Date: Mon, 26 Aug 2024 23:14:22 +0200
Subject: [PATCH 28/69] libraries: kernel: skip for protection op; processing
logic fixes (#602)
---
.../libraries/kernel/memory_management.cpp | 56 +++++++++++--------
1 file changed, 32 insertions(+), 24 deletions(-)
diff --git a/src/core/libraries/kernel/memory_management.cpp b/src/core/libraries/kernel/memory_management.cpp
index fbc457954..05c6e6897 100644
--- a/src/core/libraries/kernel/memory_management.cpp
+++ b/src/core/libraries/kernel/memory_management.cpp
@@ -254,46 +254,54 @@ int PS4_SYSV_ABI sceKernelMunmap(void* addr, size_t len);
s32 PS4_SYSV_ABI sceKernelBatchMap2(OrbisKernelBatchMapEntry* entries, int numEntries,
int* numEntriesOut, int flags) {
+ int result = ORBIS_OK;
int processed = 0;
- int result = 0;
- for (int i = 0; i < numEntries; i++) {
+ for (int i = 0; i < numEntries; i++, processed++) {
if (entries == nullptr || entries[i].length == 0 || entries[i].operation > 4) {
result = ORBIS_KERNEL_ERROR_EINVAL;
break; // break and assign a value to numEntriesOut.
}
- if (entries[i].operation == MemoryOpTypes::ORBIS_KERNEL_MAP_OP_MAP_DIRECT) {
+ switch (entries[i].operation) {
+ case MemoryOpTypes::ORBIS_KERNEL_MAP_OP_MAP_DIRECT: {
result = sceKernelMapNamedDirectMemory(&entries[i].start, entries[i].length,
entries[i].protection, flags,
static_cast(entries[i].offset), 0, "");
- LOG_INFO(
- Kernel_Vmm,
- "BatchMap: entry = {}, operation = {}, len = {:#x}, offset = {:#x}, type = {}, "
- "result = {}",
- i, entries[i].operation, entries[i].length, entries[i].offset, (u8)entries[i].type,
- result);
-
- if (result == 0)
- processed++;
- } else if (entries[i].operation == MemoryOpTypes::ORBIS_KERNEL_MAP_OP_UNMAP) {
+ LOG_INFO(Kernel_Vmm,
+ "entry = {}, operation = {}, len = {:#x}, offset = {:#x}, type = {}, "
+ "result = {}",
+ i, entries[i].operation, entries[i].length, entries[i].offset,
+ (u8)entries[i].type, result);
+ break;
+ }
+ case MemoryOpTypes::ORBIS_KERNEL_MAP_OP_UNMAP: {
result = sceKernelMunmap(entries[i].start, entries[i].length);
- LOG_INFO(Kernel_Vmm, "BatchMap: entry = {}, operation = {}, len = {:#x}, result = {}",
- i, entries[i].operation, entries[i].length, result);
-
- if (result == 0)
- processed++;
- } else if (entries[i].operation == MemoryOpTypes::ORBIS_KERNEL_MAP_OP_MAP_FLEXIBLE) {
+ LOG_INFO(Kernel_Vmm, "entry = {}, operation = {}, len = {:#x}, result = {}", i,
+ entries[i].operation, entries[i].length, result);
+ break;
+ }
+ case MemoryOpTypes::ORBIS_KERNEL_MAP_OP_MAP_FLEXIBLE: {
result = sceKernelMapNamedFlexibleMemory(&entries[i].start, entries[i].length,
entries[i].protection, flags, "");
LOG_INFO(Kernel_Vmm,
- "BatchMap: entry = {}, operation = {}, len = {:#x}, type = {}, "
+ "entry = {}, operation = {}, len = {:#x}, type = {}, "
"result = {}",
i, entries[i].operation, entries[i].length, (u8)entries[i].type, result);
+ break;
+ }
+ case MemoryOpTypes::ORBIS_KERNEL_MAP_OP_TYPE_PROTECT: {
+ // By now, ignore protection and log it instead
+ LOG_WARNING(Kernel_Vmm, "entry = {}, operation = {}, len = {:#x}, type = {} "
+ "is UNSUPPORTED and skipped");
+ break;
+ }
+ default: {
+ UNREACHABLE();
+ }
+ }
- if (result == 0)
- processed++;
- } else {
- UNREACHABLE_MSG("called: Unimplemented Operation = {}", entries[i].operation);
+ if (result != ORBIS_OK) {
+ break;
}
}
if (numEntriesOut != NULL) { // can be zero. do not return an error code.
From af4356bfe1c58ee596f29b17ecb79ddb3132596d Mon Sep 17 00:00:00 2001
From: psucien
Date: Mon, 26 Aug 2024 23:49:36 +0200
Subject: [PATCH 29/69] shader_recompiler: fix for pattern detection in
`TryDisableAnisoLod0`
Also fix for forgotten log message params.
---
src/core/libraries/kernel/memory_management.cpp | 6 ++++--
src/shader_recompiler/ir/passes/resource_tracking_pass.cpp | 5 +++--
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/core/libraries/kernel/memory_management.cpp b/src/core/libraries/kernel/memory_management.cpp
index 05c6e6897..ab6aa3985 100644
--- a/src/core/libraries/kernel/memory_management.cpp
+++ b/src/core/libraries/kernel/memory_management.cpp
@@ -291,8 +291,10 @@ s32 PS4_SYSV_ABI sceKernelBatchMap2(OrbisKernelBatchMapEntry* entries, int numEn
}
case MemoryOpTypes::ORBIS_KERNEL_MAP_OP_TYPE_PROTECT: {
// By now, ignore protection and log it instead
- LOG_WARNING(Kernel_Vmm, "entry = {}, operation = {}, len = {:#x}, type = {} "
- "is UNSUPPORTED and skipped");
+ LOG_WARNING(Kernel_Vmm,
+ "entry = {}, operation = {}, len = {:#x}, type = {} "
+ "is UNSUPPORTED and skipped",
+ i, entries[i].operation, entries[i].length, (u8)entries[i].type);
break;
}
default: {
diff --git a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp
index ccdcfc6e6..ace6a37d8 100644
--- a/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp
+++ b/src/shader_recompiler/ir/passes/resource_tracking_pass.cpp
@@ -293,10 +293,11 @@ std::pair TryDisableAnisoLod0(const IR::Inst* inst) {
return not_found;
}
- // The bits range is for lods
+ // The bits range is for lods (note that constants are changed after constant propagation pass)
const auto* prod0_arg0 = prod0->Arg(0).InstRecursive();
if (prod0_arg0->GetOpcode() != IR::Opcode::BitFieldUExtract ||
- prod0_arg0->Arg(1).InstRecursive()->Arg(0).U32() != 0x0008000cu) {
+ !(prod0_arg0->Arg(1).IsIdentity() && prod0_arg0->Arg(1).U32() == 12) ||
+ !(prod0_arg0->Arg(2).IsIdentity() && prod0_arg0->Arg(2).U32() == 8)) {
return not_found;
}
From 7ecc1d3be0ec13b7370b8c72c80097d2b9c482b1 Mon Sep 17 00:00:00 2001
From: SolidStateDj
Date: Mon, 26 Aug 2024 18:27:31 -0400
Subject: [PATCH 30/69] Add a toggle fullscreen button
Assigns F11 as the key for toggling fullscreen.
---
src/sdl_window.cpp | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/sdl_window.cpp b/src/sdl_window.cpp
index eec31c901..ff44e6c30 100644
--- a/src/sdl_window.cpp
+++ b/src/sdl_window.cpp
@@ -273,6 +273,15 @@ void WindowSDL::onKeyPress(const SDL_Event* event) {
case SDLK_SPACE:
button = OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_TOUCH_PAD;
break;
+ case SDLK_F11:
+ if (event->type == SDL_EVENT_KEY_DOWN) {
+ {
+ SDL_WindowFlags flag = SDL_GetWindowFlags(window);
+ bool is_fullscreen = flag & SDL_WINDOW_FULLSCREEN;
+ SDL_SetWindowFullscreen(window, !is_fullscreen);
+ }
+ }
+ break;
default:
break;
}
From 2d354a095ae41cf58d72cf8ec88fffcd84dd4d68 Mon Sep 17 00:00:00 2001
From: Vladislav Mikhalin
Date: Tue, 27 Aug 2024 09:32:42 +0300
Subject: [PATCH 31/69] AvPlayer: Handle Initialization errors
---
.../avplayer/avplayer_data_streamer.h | 3 +
.../avplayer/avplayer_file_streamer.cpp | 30 +++++----
.../avplayer/avplayer_file_streamer.h | 4 +-
src/core/libraries/avplayer/avplayer_impl.cpp | 9 ++-
.../libraries/avplayer/avplayer_source.cpp | 64 +++++++++++--------
src/core/libraries/avplayer/avplayer_source.h | 8 +--
.../libraries/avplayer/avplayer_state.cpp | 37 +++++++----
src/core/libraries/avplayer/avplayer_state.h | 6 +-
8 files changed, 95 insertions(+), 66 deletions(-)
diff --git a/src/core/libraries/avplayer/avplayer_data_streamer.h b/src/core/libraries/avplayer/avplayer_data_streamer.h
index 04097bb4d..319c88a91 100644
--- a/src/core/libraries/avplayer/avplayer_data_streamer.h
+++ b/src/core/libraries/avplayer/avplayer_data_streamer.h
@@ -7,6 +7,8 @@
#include "common/types.h"
+#include
+
struct AVIOContext;
namespace Libraries::AvPlayer {
@@ -14,6 +16,7 @@ namespace Libraries::AvPlayer {
class IDataStreamer {
public:
virtual ~IDataStreamer() = default;
+ virtual bool Init(std::string_view path) = 0;
virtual AVIOContext* GetContext() = 0;
};
diff --git a/src/core/libraries/avplayer/avplayer_file_streamer.cpp b/src/core/libraries/avplayer/avplayer_file_streamer.cpp
index dc1386a47..c7bd5b5de 100644
--- a/src/core/libraries/avplayer/avplayer_file_streamer.cpp
+++ b/src/core/libraries/avplayer/avplayer_file_streamer.cpp
@@ -18,19 +18,8 @@ extern "C" {
namespace Libraries::AvPlayer {
-AvPlayerFileStreamer::AvPlayerFileStreamer(const SceAvPlayerFileReplacement& file_replacement,
- std::string_view path)
- : m_file_replacement(file_replacement) {
- const auto ptr = m_file_replacement.object_ptr;
- m_fd = m_file_replacement.open(ptr, path.data());
- ASSERT(m_fd >= 0);
- m_file_size = m_file_replacement.size(ptr);
- // avio_buffer is deallocated in `avio_context_free`
- const auto avio_buffer = reinterpret_cast(av_malloc(AVPLAYER_AVIO_BUFFER_SIZE));
- m_avio_context =
- avio_alloc_context(avio_buffer, AVPLAYER_AVIO_BUFFER_SIZE, 0, this,
- &AvPlayerFileStreamer::ReadPacket, nullptr, &AvPlayerFileStreamer::Seek);
-}
+AvPlayerFileStreamer::AvPlayerFileStreamer(const SceAvPlayerFileReplacement& file_replacement)
+ : m_file_replacement(file_replacement) {}
AvPlayerFileStreamer::~AvPlayerFileStreamer() {
if (m_avio_context != nullptr) {
@@ -43,6 +32,21 @@ AvPlayerFileStreamer::~AvPlayerFileStreamer() {
}
}
+bool AvPlayerFileStreamer::Init(std::string_view path) {
+ const auto ptr = m_file_replacement.object_ptr;
+ m_fd = m_file_replacement.open(ptr, path.data());
+ if (m_fd < 0) {
+ return false;
+ }
+ m_file_size = m_file_replacement.size(ptr);
+ // avio_buffer is deallocated in `avio_context_free`
+ const auto avio_buffer = reinterpret_cast(av_malloc(AVPLAYER_AVIO_BUFFER_SIZE));
+ m_avio_context =
+ avio_alloc_context(avio_buffer, AVPLAYER_AVIO_BUFFER_SIZE, 0, this,
+ &AvPlayerFileStreamer::ReadPacket, nullptr, &AvPlayerFileStreamer::Seek);
+ return true;
+}
+
s32 AvPlayerFileStreamer::ReadPacket(void* opaque, u8* buffer, s32 size) {
const auto self = reinterpret_cast(opaque);
if (self->m_position >= self->m_file_size) {
diff --git a/src/core/libraries/avplayer/avplayer_file_streamer.h b/src/core/libraries/avplayer/avplayer_file_streamer.h
index 658ce8c1e..034e40dd4 100644
--- a/src/core/libraries/avplayer/avplayer_file_streamer.h
+++ b/src/core/libraries/avplayer/avplayer_file_streamer.h
@@ -15,9 +15,11 @@ namespace Libraries::AvPlayer {
class AvPlayerFileStreamer : public IDataStreamer {
public:
- AvPlayerFileStreamer(const SceAvPlayerFileReplacement& file_replacement, std::string_view path);
+ AvPlayerFileStreamer(const SceAvPlayerFileReplacement& file_replacement);
~AvPlayerFileStreamer();
+ bool Init(std::string_view path) override;
+
AVIOContext* GetContext() override {
return m_avio_context;
}
diff --git a/src/core/libraries/avplayer/avplayer_impl.cpp b/src/core/libraries/avplayer/avplayer_impl.cpp
index cdfff8277..6de7b4c20 100644
--- a/src/core/libraries/avplayer/avplayer_impl.cpp
+++ b/src/core/libraries/avplayer/avplayer_impl.cpp
@@ -110,7 +110,7 @@ s32 AvPlayer::AddSource(std::string_view path) {
if (path.empty()) {
return ORBIS_AVPLAYER_ERROR_INVALID_PARAMS;
}
- if (AVPLAYER_IS_ERROR(m_state->AddSource(path, GetSourceType(path)))) {
+ if (!m_state->AddSource(path, GetSourceType(path))) {
return ORBIS_AVPLAYER_ERROR_OPERATION_FAILED;
}
return ORBIS_OK;
@@ -128,7 +128,7 @@ s32 AvPlayer::GetStreamCount() {
}
s32 AvPlayer::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info) {
- if (AVPLAYER_IS_ERROR(m_state->GetStreamInfo(stream_index, info))) {
+ if (!m_state->GetStreamInfo(stream_index, info)) {
return ORBIS_AVPLAYER_ERROR_OPERATION_FAILED;
}
return ORBIS_OK;
@@ -145,7 +145,10 @@ s32 AvPlayer::EnableStream(u32 stream_index) {
}
s32 AvPlayer::Start() {
- return m_state->Start();
+ if (!m_state->Start()) {
+ return ORBIS_AVPLAYER_ERROR_OPERATION_FAILED;
+ }
+ return ORBIS_OK;
}
bool AvPlayer::GetVideoData(SceAvPlayerFrameInfo& video_info) {
diff --git a/src/core/libraries/avplayer/avplayer_source.cpp b/src/core/libraries/avplayer/avplayer_source.cpp
index 2e4ea8aab..99ba2e8b6 100644
--- a/src/core/libraries/avplayer/avplayer_source.cpp
+++ b/src/core/libraries/avplayer/avplayer_source.cpp
@@ -24,31 +24,39 @@ namespace Libraries::AvPlayer {
using namespace Kernel;
-AvPlayerSource::AvPlayerSource(AvPlayerStateCallback& state, std::string_view path,
- const SceAvPlayerInitData& init_data,
- SceAvPlayerSourceType source_type)
- : m_state(state), m_memory_replacement(init_data.memory_replacement),
- m_num_output_video_framebuffers(
- std::min(std::max(2, init_data.num_output_video_framebuffers), 16)) {
- AVFormatContext* context = avformat_alloc_context();
- if (init_data.file_replacement.open != nullptr) {
- m_up_data_streamer =
- std::make_unique(init_data.file_replacement, path);
- context->pb = m_up_data_streamer->GetContext();
- ASSERT(!AVPLAYER_IS_ERROR(avformat_open_input(&context, nullptr, nullptr, nullptr)));
- } else {
- const auto mnt = Common::Singleton::Instance();
- const auto filepath = mnt->GetHostPath(path);
- ASSERT(!AVPLAYER_IS_ERROR(
- avformat_open_input(&context, filepath.string().c_str(), nullptr, nullptr)));
- }
- m_avformat_context = AVFormatContextPtr(context, &ReleaseAVFormatContext);
-}
+AvPlayerSource::AvPlayerSource(AvPlayerStateCallback& state) : m_state(state) {}
AvPlayerSource::~AvPlayerSource() {
Stop();
}
+bool AvPlayerSource::Init(const SceAvPlayerInitData& init_data, std::string_view path) {
+ m_memory_replacement = init_data.memory_replacement,
+ m_num_output_video_framebuffers =
+ std::min(std::max(2, init_data.num_output_video_framebuffers), 16);
+
+ AVFormatContext* context = avformat_alloc_context();
+ if (init_data.file_replacement.open != nullptr) {
+ m_up_data_streamer = std::make_unique(init_data.file_replacement);
+ if (!m_up_data_streamer->Init(path)) {
+ return false;
+ }
+ context->pb = m_up_data_streamer->GetContext();
+ if (AVPLAYER_IS_ERROR(avformat_open_input(&context, nullptr, nullptr, nullptr))) {
+ return false;
+ }
+ } else {
+ const auto mnt = Common::Singleton::Instance();
+ const auto filepath = mnt->GetHostPath(path);
+ if (AVPLAYER_IS_ERROR(
+ avformat_open_input(&context, filepath.string().c_str(), nullptr, nullptr))) {
+ return false;
+ }
+ }
+ m_avformat_context = AVFormatContextPtr(context, &ReleaseAVFormatContext);
+ return true;
+}
+
bool AvPlayerSource::FindStreamInfo() {
if (m_avformat_context == nullptr) {
LOG_ERROR(Lib_AvPlayer, "Could not find stream info. NULL context.");
@@ -87,16 +95,16 @@ static f32 AVRationalToF32(const AVRational rational) {
return f32(rational.num) / rational.den;
}
-s32 AvPlayerSource::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info) {
+bool AvPlayerSource::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info) {
info = {};
if (m_avformat_context == nullptr || stream_index >= m_avformat_context->nb_streams) {
LOG_ERROR(Lib_AvPlayer, "Could not get stream {} info.", stream_index);
- return -1;
+ return false;
}
const auto p_stream = m_avformat_context->streams[stream_index];
if (p_stream == nullptr || p_stream->codecpar == nullptr) {
LOG_ERROR(Lib_AvPlayer, "Could not get stream {} info. NULL stream.", stream_index);
- return -1;
+ return false;
}
info.type = CodecTypeToStreamType(p_stream->codecpar->codec_type);
info.start_time = p_stream->start_time;
@@ -140,9 +148,9 @@ s32 AvPlayerSource::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info)
break;
default:
LOG_ERROR(Lib_AvPlayer, "Stream {} type is unknown: {}.", stream_index, info.type);
- return -1;
+ return false;
}
- return 0;
+ return true;
}
bool AvPlayerSource::EnableStream(u32 stream_index) {
@@ -215,12 +223,12 @@ std::optional AvPlayerSource::HasFrames(u32 num_frames) {
return m_video_packets.Size() > num_frames || m_is_eof;
}
-s32 AvPlayerSource::Start() {
+bool AvPlayerSource::Start() {
std::unique_lock lock(m_state_mutex);
if (m_audio_codec_context == nullptr && m_video_codec_context == nullptr) {
LOG_ERROR(Lib_AvPlayer, "Could not start playback. NULL context.");
- return -1;
+ return false;
}
m_demuxer_thread = std::jthread([this](std::stop_token stop) { this->DemuxerThread(stop); });
m_video_decoder_thread =
@@ -228,7 +236,7 @@ s32 AvPlayerSource::Start() {
m_audio_decoder_thread =
std::jthread([this](std::stop_token stop) { this->AudioDecoderThread(stop); });
m_start_time = std::chrono::high_resolution_clock::now();
- return 0;
+ return true;
}
bool AvPlayerSource::Stop() {
diff --git a/src/core/libraries/avplayer/avplayer_source.h b/src/core/libraries/avplayer/avplayer_source.h
index 7144e7ee4..906122142 100644
--- a/src/core/libraries/avplayer/avplayer_source.h
+++ b/src/core/libraries/avplayer/avplayer_source.h
@@ -120,17 +120,17 @@ private:
class AvPlayerSource {
public:
- AvPlayerSource(AvPlayerStateCallback& state, std::string_view path,
- const SceAvPlayerInitData& init_data, SceAvPlayerSourceType source_type);
+ AvPlayerSource(AvPlayerStateCallback& state);
~AvPlayerSource();
+ bool Init(const SceAvPlayerInitData& init_data, std::string_view path);
bool FindStreamInfo();
s32 GetStreamCount();
- s32 GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info);
+ bool GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info);
bool EnableStream(u32 stream_index);
void SetLooping(bool is_looping);
std::optional HasFrames(u32 num_frames);
- s32 Start();
+ bool Start();
bool Stop();
bool GetAudioData(SceAvPlayerFrameInfo& audio_info);
bool GetVideoData(SceAvPlayerFrameInfo& video_info);
diff --git a/src/core/libraries/avplayer/avplayer_state.cpp b/src/core/libraries/avplayer/avplayer_state.cpp
index cb3be2f57..a512063f2 100644
--- a/src/core/libraries/avplayer/avplayer_state.cpp
+++ b/src/core/libraries/avplayer/avplayer_state.cpp
@@ -24,6 +24,7 @@ void PS4_SYSV_ABI AvPlayerState::AutoPlayEventCallback(void* opaque, s32 event_i
s32 timedtext_stream_index = -1;
const s32 stream_count = self->GetStreamCount();
if (AVPLAYER_IS_ERROR(stream_count)) {
+ self->Stop();
return;
}
if (stream_count == 0) {
@@ -32,7 +33,10 @@ void PS4_SYSV_ABI AvPlayerState::AutoPlayEventCallback(void* opaque, s32 event_i
}
for (u32 stream_index = 0; stream_index < stream_count; ++stream_index) {
SceAvPlayerStreamInfo info{};
- self->GetStreamInfo(stream_index, info);
+ if (!self->GetStreamInfo(stream_index, info)) {
+ self->Stop();
+ return;
+ }
const std::string_view default_language(
reinterpret_cast(self->m_default_language));
@@ -116,23 +120,28 @@ AvPlayerState::~AvPlayerState() {
}
// Called inside GAME thread
-s32 AvPlayerState::AddSource(std::string_view path, SceAvPlayerSourceType source_type) {
+bool AvPlayerState::AddSource(std::string_view path, SceAvPlayerSourceType source_type) {
if (path.empty()) {
LOG_ERROR(Lib_AvPlayer, "File path is empty.");
- return -1;
+ return false;
}
{
std::unique_lock lock(m_source_mutex);
if (m_up_source != nullptr) {
LOG_ERROR(Lib_AvPlayer, "Only one source is supported.");
- return -1;
+ return false;
}
- m_up_source = std::make_unique(*this, path, m_init_data, source_type);
+ m_up_source = std::make_unique(*this);
+ if (!m_up_source->Init(m_init_data, path)) {
+ SetState(AvState::Error);
+ m_up_source.reset();
+ return false;
+ }
}
AddSourceEvent();
- return 0;
+ return true;
}
// Called inside GAME thread
@@ -146,25 +155,25 @@ s32 AvPlayerState::GetStreamCount() {
}
// Called inside GAME thread
-s32 AvPlayerState::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info) {
+bool AvPlayerState::GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info) {
std::shared_lock lock(m_source_mutex);
if (m_up_source == nullptr) {
LOG_ERROR(Lib_AvPlayer, "Could not get stream {} info. No source.", stream_index);
- return -1;
+ return false;
}
return m_up_source->GetStreamInfo(stream_index, info);
}
// Called inside GAME thread
-s32 AvPlayerState::Start() {
+bool AvPlayerState::Start() {
std::shared_lock lock(m_source_mutex);
- if (m_up_source == nullptr || m_up_source->Start() < 0) {
+ if (m_up_source == nullptr || !m_up_source->Start()) {
LOG_ERROR(Lib_AvPlayer, "Could not start playback.");
- return -1;
+ return false;
}
SetState(AvState::Play);
OnPlaybackStateChanged(AvState::Play);
- return 0;
+ return true;
}
void AvPlayerState::AvControllerThread(std::stop_token stop) {
@@ -219,10 +228,10 @@ bool AvPlayerState::Stop() {
if (m_up_source == nullptr || m_current_state == AvState::Stop) {
return false;
}
- if (!SetState(AvState::Stop)) {
+ if (!m_up_source->Stop()) {
return false;
}
- if (!m_up_source->Stop()) {
+ if (!SetState(AvState::Stop)) {
return false;
}
OnPlaybackStateChanged(AvState::Stop);
diff --git a/src/core/libraries/avplayer/avplayer_state.h b/src/core/libraries/avplayer/avplayer_state.h
index ff80b6cea..a5a3bd689 100644
--- a/src/core/libraries/avplayer/avplayer_state.h
+++ b/src/core/libraries/avplayer/avplayer_state.h
@@ -24,11 +24,11 @@ public:
AvPlayerState(const SceAvPlayerInitData& init_data);
~AvPlayerState();
- s32 AddSource(std::string_view filename, SceAvPlayerSourceType source_type);
+ bool AddSource(std::string_view filename, SceAvPlayerSourceType source_type);
s32 GetStreamCount();
- s32 GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info);
+ bool GetStreamInfo(u32 stream_index, SceAvPlayerStreamInfo& info);
bool EnableStream(u32 stream_index);
- s32 Start();
+ bool Start();
bool Stop();
bool GetAudioData(SceAvPlayerFrameInfo& audio_info);
bool GetVideoData(SceAvPlayerFrameInfo& video_info);
From 288db9a0cfe2d34041f6f1e5cc0029efa4681de5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gr=C3=A9goire=20Hage?=
<33609333+greggameplayer@users.noreply.github.com>
Date: Tue, 27 Aug 2024 13:15:32 +0200
Subject: [PATCH 32/69] Implement V_LSHL_B64 (#608)
---
src/shader_recompiler/frontend/translate/translate.h | 1 +
.../frontend/translate/vector_alu.cpp | 12 ++++++++++++
2 files changed, 13 insertions(+)
diff --git a/src/shader_recompiler/frontend/translate/translate.h b/src/shader_recompiler/frontend/translate/translate.h
index 6de5e3673..cde9e58e7 100644
--- a/src/shader_recompiler/frontend/translate/translate.h
+++ b/src/shader_recompiler/frontend/translate/translate.h
@@ -117,6 +117,7 @@ public:
void V_AND_B32(const GcnInst& inst);
void V_LSHLREV_B32(const GcnInst& inst);
void V_LSHL_B32(const GcnInst& inst);
+ void V_LSHL_B64(const GcnInst& inst);
void V_ADD_I32(const GcnInst& inst);
void V_ADDC_U32(const GcnInst& inst);
void V_CVT_F32_I32(const GcnInst& inst);
diff --git a/src/shader_recompiler/frontend/translate/vector_alu.cpp b/src/shader_recompiler/frontend/translate/vector_alu.cpp
index 99543a207..274dcff11 100644
--- a/src/shader_recompiler/frontend/translate/vector_alu.cpp
+++ b/src/shader_recompiler/frontend/translate/vector_alu.cpp
@@ -11,6 +11,8 @@ void Translator::EmitVectorAlu(const GcnInst& inst) {
return V_LSHLREV_B32(inst);
case Opcode::V_LSHL_B32:
return V_LSHL_B32(inst);
+ case Opcode::V_LSHL_B64:
+ return V_LSHL_B64(inst);
case Opcode::V_BFREV_B32:
return V_BFREV_B32(inst);
case Opcode::V_BFE_U32:
@@ -390,6 +392,16 @@ void Translator::V_LSHL_B32(const GcnInst& inst) {
SetDst(inst.dst[0], ir.ShiftLeftLogical(src0, ir.BitwiseAnd(src1, ir.Imm32(0x1F))));
}
+void Translator::V_LSHL_B64(const GcnInst& inst) {
+ const IR::U64 src0{GetSrc64(inst.src[0])};
+ const IR::U64 src1{GetSrc64(inst.src[1])};
+ const IR::VectorReg dst_reg{inst.dst[0].code};
+ ASSERT_MSG(src0.IsImmediate() && src0.U64() == 0 && src1.IsImmediate() && src1.U64() == 0,
+ "V_LSHL_B64 with non-zero src0 or src1 is not supported");
+ ir.SetVectorReg(dst_reg, ir.Imm32(0));
+ ir.SetVectorReg(dst_reg + 1, ir.Imm32(0));
+}
+
void Translator::V_ADD_I32(const GcnInst& inst) {
const IR::U32 src0{GetSrc(inst.src[0])};
const IR::U32 src1{ir.GetVectorReg(IR::VectorReg(inst.src[1].code))};
From 59b651be07dd83217f63843a1bbfe149ea6f54e1 Mon Sep 17 00:00:00 2001
From: Lizardy <6063922+lzardy@users.noreply.github.com>
Date: Tue, 27 Aug 2024 08:53:38 -0400
Subject: [PATCH 33/69] [Libs] Error Codes (#612)
* ngs2: all errors w/ official names
* ajm errors
* gnm errors
* random errors
* clang
* random error
* linux
---------
Co-authored-by: microsoftv <6063922+microsoftv@users.noreply.github.com>
---
CMakeLists.txt | 3 +
src/core/libraries/ajm/ajm.cpp | 5 +-
src/core/libraries/ajm/ajm_error.h | 28 +++++
src/core/libraries/error_codes.h | 11 --
src/core/libraries/gnmdriver/gnm_error.h | 85 ++++++++++++++
src/core/libraries/gnmdriver/gnmdriver.cpp | 4 +-
src/core/libraries/ngs2/ngs2_error.h | 124 +++++++++++++++------
src/core/libraries/ngs2/ngs2_impl.cpp | 4 +-
src/core/libraries/random/random.cpp | 6 +-
src/core/libraries/random/random.h | 2 +-
src/core/libraries/random/random_error.h | 8 ++
11 files changed, 230 insertions(+), 50 deletions(-)
create mode 100644 src/core/libraries/ajm/ajm_error.h
create mode 100644 src/core/libraries/gnmdriver/gnm_error.h
create mode 100644 src/core/libraries/random/random_error.h
diff --git a/CMakeLists.txt b/CMakeLists.txt
index decc27b17..6450eaf15 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -152,6 +152,7 @@ set(AUDIO_LIB src/core/libraries/audio/audioin.cpp
set(GNM_LIB src/core/libraries/gnmdriver/gnmdriver.cpp
src/core/libraries/gnmdriver/gnmdriver.h
+ src/core/libraries/gnmdriver/gnm_error.h
)
set(KERNEL_LIB
@@ -233,6 +234,7 @@ set(SYSTEM_LIBS src/core/libraries/system/commondialog.cpp
src/core/libraries/ngs2/ngs2_error.h
src/core/libraries/ngs2/ngs2_impl.cpp
src/core/libraries/ngs2/ngs2_impl.h
+ src/core/libraries/ajm/ajm_error.h
)
set(VIDEOOUT_LIB src/core/libraries/videoout/buffer.h
@@ -268,6 +270,7 @@ set(PLAYGO_LIB src/core/libraries/playgo/playgo.cpp
set(RANDOM_LIB src/core/libraries/random/random.cpp
src/core/libraries/random/random.h
+ src/core/libraries/random/random_error.h
)
set(USBD_LIB src/core/libraries/usbd/usbd.cpp
diff --git a/src/core/libraries/ajm/ajm.cpp b/src/core/libraries/ajm/ajm.cpp
index d8d8304ab..441a07f63 100644
--- a/src/core/libraries/ajm/ajm.cpp
+++ b/src/core/libraries/ajm/ajm.cpp
@@ -1,9 +1,10 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
-// Generated By moduleGenerator
+#include "ajm.h"
+#include "ajm_error.h"
+
#include "common/logging/log.h"
-#include "core/libraries/ajm/ajm.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
diff --git a/src/core/libraries/ajm/ajm_error.h b/src/core/libraries/ajm/ajm_error.h
new file mode 100644
index 000000000..64129554f
--- /dev/null
+++ b/src/core/libraries/ajm/ajm_error.h
@@ -0,0 +1,28 @@
+// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+constexpr int ORBIS_AJM_ERROR_UNKNOWN = 0x80930001;
+constexpr int ORBIS_AJM_ERROR_INVALID_CONTEXT = 0x80930002;
+constexpr int ORBIS_AJM_ERROR_INVALID_INSTANCE = 0x80930003;
+constexpr int ORBIS_AJM_ERROR_INVALID_BATCH = 0x80930004;
+constexpr int ORBIS_AJM_ERROR_INVALID_PARAMETER = 0x80930005;
+constexpr int ORBIS_AJM_ERROR_OUT_OF_MEMORY = 0x80930006;
+constexpr int ORBIS_AJM_ERROR_OUT_OF_RESOURCES = 0x80930007;
+constexpr int ORBIS_AJM_ERROR_CODEC_NOT_SUPPORTED = 0x80930008;
+constexpr int ORBIS_AJM_ERROR_CODEC_ALREADY_REGISTERED = 0x80930009;
+constexpr int ORBIS_AJM_ERROR_CODEC_NOT_REGISTERED = 0x8093000A;
+constexpr int ORBIS_AJM_ERROR_WRONG_REVISION_FLAG = 0x8093000B;
+constexpr int ORBIS_AJM_ERROR_FLAG_NOT_SUPPORTED = 0x8093000C;
+constexpr int ORBIS_AJM_ERROR_BUSY = 0x8093000D;
+constexpr int ORBIS_AJM_ERROR_BAD_PRIORITY = 0x8093000E;
+constexpr int ORBIS_AJM_ERROR_IN_PROGRESS = 0x8093000F;
+constexpr int ORBIS_AJM_ERROR_RETRY = 0x80930010;
+constexpr int ORBIS_AJM_ERROR_MALFORMED_BATCH = 0x80930011;
+constexpr int ORBIS_AJM_ERROR_JOB_CREATION = 0x80930012;
+constexpr int ORBIS_AJM_ERROR_INVALID_OPCODE = 0x80930013;
+constexpr int ORBIS_AJM_ERROR_PRIORITY_VIOLATION = 0x80930014;
+constexpr int ORBIS_AJM_ERROR_BUFFER_TOO_BIG = 0x80930015;
+constexpr int ORBIS_AJM_ERROR_INVALID_ADDRESS = 0x80930016;
+constexpr int ORBIS_AJM_ERROR_CANCELLED = 0x80930017;
diff --git a/src/core/libraries/error_codes.h b/src/core/libraries/error_codes.h
index 123edcee8..1453b0a8f 100644
--- a/src/core/libraries/error_codes.h
+++ b/src/core/libraries/error_codes.h
@@ -233,9 +233,6 @@ constexpr int SCE_KERNEL_ERROR_ESDKVERSION = 0x80020063;
constexpr int SCE_KERNEL_ERROR_ESTART = 0x80020064;
constexpr int SCE_KERNEL_ERROR_ESTOP = 0x80020065;
-// libSceRandom error codes
-constexpr int SCE_RANDOM_ERROR_INVALID = 0x817C0016;
-
// videoOut
constexpr int SCE_VIDEO_OUT_ERROR_INVALID_VALUE = 0x80290001; // invalid argument
constexpr int SCE_VIDEO_OUT_ERROR_INVALID_ADDRESS = 0x80290002; // invalid addresses
@@ -249,14 +246,6 @@ constexpr int SCE_VIDEO_OUT_ERROR_SLOT_OCCUPIED = 0x80290010; // slot alr
constexpr int SCE_VIDEO_OUT_ERROR_FLIP_QUEUE_FULL = 0x80290012; // flip queue is full
constexpr int SCE_VIDEO_OUT_ERROR_INVALID_OPTION = 0x8029001A; // Invalid buffer attribute option
-// GnmDriver
-constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_PIPE_ID = 0x80D17000;
-constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_QUEUE_ID = 0x80D17001;
-constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_RING_BASE_ADDR = 0x80D17003;
-constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_RING_SIZE = 0x80D17002;
-constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_READ_PTR_ADDR = 0x80D17004;
-constexpr int ORBIS_GNM_ERROR_FAILURE = 0x8EEE00FF;
-
// Generic
constexpr int ORBIS_OK = 0x00000000;
constexpr int ORBIS_FAIL = 0xFFFFFFFF;
diff --git a/src/core/libraries/gnmdriver/gnm_error.h b/src/core/libraries/gnmdriver/gnm_error.h
new file mode 100644
index 000000000..eab684a24
--- /dev/null
+++ b/src/core/libraries/gnmdriver/gnm_error.h
@@ -0,0 +1,85 @@
+// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+constexpr int ORBIS_GNM_ERROR_SUBMISSION_FAILED_INVALID_ARGUMENT = 0x80D11000;
+constexpr int ORBIS_GNM_ERROR_SUBMISSION_NOT_ENOUGH_RESOURCES = 0x80D11001;
+constexpr int ORBIS_GNM_ERROR_SUBMISSION_AND_FLIP_FAILED_INVALID_COMMAND_BUFFER = 0x80D11080;
+constexpr int ORBIS_GNM_ERROR_SUBMISSION_AND_FLIP_FAILED_INVALID_QUEUE_FULL = 0x80D11081;
+constexpr int ORBIS_GNM_ERROR_SUBMISSION_AND_FLIP_FAILED_REQUEST_FAILED = 0x80D11082;
+constexpr int ORBIS_GNM_ERROR_SUBMISSION_FAILED_INTERNAL_ERROR = 0x80D110FF;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING = 0x80D12000;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_RWBUFFER_ROTYPE = 0x80D12001;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_BLENDING = 0x80D12002;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_DRAW_CU_MASK = 0x80D12003;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_MRT_SETUP = 0x80D12004;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_DEPTH_RT_SETUP = 0x80D12005;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_WARNING_PS_AND_MRT_FORMAT = 0x80D1200F;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_ERROR = 0x80D13000;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_VSHARP = 0x80D13001;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_TSHARP = 0x80D13002;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_RESOURCE = 0x80D13003;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_TABLE_MEMORY = 0x80D13004;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_WRITE_EVENT_OP = 0x80D13005;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_INDEX_BUFFER = 0x80D13006;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_TESS_FACTOR_BUFFER = 0x80D13007;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_SCRATCH_RING = 0x80D13008;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_PRIMITIVE_TYPE = 0x80D13009;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_INDEX_SIZE = 0x80D1300A;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_INLINE_DRAW_SIZE = 0x80D1300B;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_NUM_INPUT_PATCHES = 0x80D1300C;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_GS_MODE = 0x80D1300D;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_SHADER_ADDRESS = 0x80D1300E;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_BORDER_COLOR_TABLE = 0x80D1300F;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_SSHARP = 0x80D13010;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_DISPATCH_DRAW = 0x80D13011;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_ACTIVE_SHADER_STAGE = 0x80D13012;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_DCB = 0x80D13013;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_MISMATCH_SHADER_STAGE = 0x80D13014;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_MRT_SETUP = 0x80D13015;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_BAD_OP_CODE = 0x80D13016;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_DEPTH_RT_SETUP = 0x80D13017;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_NUM_INSTANCES = 0x80D13018;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_SRT = 0x80D13019;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_INVALID_ARGUMENT = 0x80D13FFD;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_FAILED_INTERNAL_ERROR = 0x80D13FFE;
+constexpr int ORBIS_GNM_ERROR_VALIDATION_NOT_ENABLED = 0x80D13FFF;
+constexpr int ORBIS_GNM_ERROR_CAPTURE_FILE_IO = 0x80D15000;
+constexpr int ORBIS_GNM_ERROR_CAPTURE_RAZOR_NOT_LOADED = 0x80D15001;
+constexpr int ORBIS_GNM_ERROR_CAPTURE_NOTHING_TO_CAPTURE = 0x80D15002;
+constexpr int ORBIS_GNM_ERROR_CAPTURE_FAILED_INTERNAL = 0x80D1500F;
+constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_PIPE_ID = 0x80D17000;
+constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_QUEUE_ID = 0x80D17001;
+constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_RING_SIZE = 0x80D17002;
+constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_RING_BASE_ADDR = 0x80D17003;
+constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_READ_PTR_ADDR = 0x80D17004;
+constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INVALID_PIPE_PRIORITY = 0x80D17005;
+constexpr int ORBIS_GNM_ERROR_COMPUTEQUEUE_INTERNAL = 0x80D170FF;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INVALID_ARGUMENT = 0x80D19000;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INVALID_SHADER = 0x80D19001;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_STALE_HANDLE = 0x80D19002;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_FULL = 0x80D19003;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_NOT_PERMITTED = 0x80D19004;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_OUTPUT_ARGUMENT_IS_NULL = 0x80D19005;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_OWNER_HANDLE_INVALID = 0x80D19006;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_HANDLE_INVALID = 0x80D19007;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_TYPE_INVALID = 0x80D19008;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_GDS_RESOURCE_TYPE_INVALID = 0x80D19009;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_SIZE_INVALID = 0x80D1900A;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_ADDRESS_IS_NULL = 0x80D1900B;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_GDS_OFFSET_INVALID = 0x80D1900C;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_NAME_IS_NULL = 0x80D1900D;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_OWNER_NAME_IS_NULL = 0x80D1900E;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_FIND_CALLBACK_IS_NULL = 0x80D1900F;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_RESOURCE_IS_NOT_SHADER = 0x80D19010;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_USER_MEMORY_PARAM_IS_NULL = 0x80D19011;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_USER_MEMORY_PARAM_NOT_ALIGNED = 0x80D19012;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INVALID_NAME_LENGTH_PARAM = 0x80D19013;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INVALID_SIZE_PARAM = 0x80D19014;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INVALID_NUM_RESOURCES_PARAM = 0x80D19015;
+constexpr int ORBIS_GNM_ERROR_RESOURCE_REGISTRATION_INTERNAL = 0x80D19FFF;
+constexpr int ORBIS_GNM_ERROR_GET_GPU_INFO_PARAMETER_NULL = 0x80D1B000;
+constexpr int ORBIS_GNM_ERROR_GET_GPU_INFO_FAILED = 0x80D1B001;
+constexpr int ORBIS_GNM_ERROR_GET_GPU_INFO_PARAMETER_INVALID = 0x80D1B002;
+constexpr int ORBIS_GNM_ERROR_FAILURE = 0x8EEE00FF;
diff --git a/src/core/libraries/gnmdriver/gnmdriver.cpp b/src/core/libraries/gnmdriver/gnmdriver.cpp
index 95821a03b..6b8b070b8 100644
--- a/src/core/libraries/gnmdriver/gnmdriver.cpp
+++ b/src/core/libraries/gnmdriver/gnmdriver.cpp
@@ -1,6 +1,9 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
+#include "gnm_error.h"
+#include "gnmdriver.h"
+
#include "common/assert.h"
#include "common/config.h"
#include "common/debug.h"
@@ -9,7 +12,6 @@
#include "common/slot_vector.h"
#include "core/address_space.h"
#include "core/libraries/error_codes.h"
-#include "core/libraries/gnmdriver/gnmdriver.h"
#include "core/libraries/kernel/libkernel.h"
#include "core/libraries/libs.h"
#include "core/libraries/videoout/video_out.h"
diff --git a/src/core/libraries/ngs2/ngs2_error.h b/src/core/libraries/ngs2/ngs2_error.h
index 254ae26e6..2773168e2 100644
--- a/src/core/libraries/ngs2/ngs2_error.h
+++ b/src/core/libraries/ngs2/ngs2_error.h
@@ -3,54 +3,116 @@
#pragma once
-constexpr int ORBIS_NGS2_ERROR_INVALID_PARAMETERS = 0x804A0001;
-constexpr int ORBIS_NGS2_ERROR_INVALID_MAXIMUM_GRAIN_SAMPLES = 0x804A0050;
-constexpr int ORBIS_NGS2_ERROR_INVALID_GRAIN_SAMPLES = 0x804A0051;
-constexpr int ORBIS_NGS2_ERROR_INVALID_CHANNELS = 0x804A0052;
-constexpr int ORBIS_NGS2_ERROR_INVALD_ADDRESS = 0x804A0053;
-constexpr int ORBIS_NGS2_ERROR_INVALD_SIZE = 0x804A0054;
+constexpr int ORBIS_NGS2_ERROR_FAIL = 0x804A0001;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_GRAIN_SAMPLES = 0x804A0050;
+constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_GRAIN_SAMPLES = 0x804A0051;
+constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_CHANNELS = 0x804A0052;
+constexpr int ORBIS_NGS2_ERROR_INVALID_OUT_ADDRESS = 0x804A0053;
+constexpr int ORBIS_NGS2_ERROR_INVALID_OUT_SIZE = 0x804A0054;
+constexpr int ORBIS_NGS2_ERROR_INVALID_OPTION_ADDRESS = 0x804A0080;
constexpr int ORBIS_NGS2_ERROR_INVALID_OPTION_SIZE = 0x804A0081;
-constexpr int ORBIS_NGS2_ERROR_INVALID_RACK_OPTION_MAX_MATRICES = 0x804A0100;
-constexpr int ORBIS_NGS2_ERROR_INVALID_RACK_OPTION_MAX_PORTS = 0x804A0101;
-constexpr int ORBIS_NGS2_ERROR_INVALID_RACK_OPTION_MAX_INPUT_DELAY_BLOCKS = 0x804A0102;
-constexpr int ORBIS_NGS2_ERROR_INVALID_MATRIX_LEVELS = 0x804A0150;
-constexpr int ORBIS_NGS2_ERROR_SAMPLER_WAVEFORM_TERMINATED = 0x804A0151;
-constexpr int ORBIS_NGS2_ERROR_INVALID_ENVELOPE_POINTS = 0x804A0152;
+constexpr int ORBIS_NGS2_ERROR_INVALID_OPTION_FLAG = 0x804A0082;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_MATRICES = 0x804A0100;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_PORTS = 0x804A0101;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_INPUT_DELAY_BLOCKS = 0x804A0102;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_VOICES = 0x804A0103;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_CHANNELS = 0x804A0104;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_CHANNEL_WORKS = 0x804A0105;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_WAVEFORM_BLOCKS = 0x804A0106;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_ENVELOPE_POINTS = 0x804A0107;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_FILTERS = 0x804A0108;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_CODEC_CACHES = 0x804A0109;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_ATRAC9_DECODERS = 0x804A010A;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_ATRAC9_CHANNEL_WORKS = 0x804A010B;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_INPUTS = 0x804A010C;
+constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_MATRIX_LEVELS = 0x804A0150;
+constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_WAVEFORM_BLOCKS = 0x804A0151;
+constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_ENVELOPE_POINTS = 0x804A0152;
constexpr int ORBIS_NGS2_ERROR_INVALID_MATRIX_LEVEL_ADDRESS = 0x804A0153;
-constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_BLOCK_ADDRESS = 0x804A0154;
+constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_BLOCK_ADDRESS = 0x804A0154;
constexpr int ORBIS_NGS2_ERROR_INVALID_ENVELOPE_POINT_ADDRESS = 0x804A0155;
+constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_PEAKMETER_BLOCKS = 0x804A0156;
constexpr int ORBIS_NGS2_ERROR_INVALID_HANDLE = 0x804A0200;
constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLE_RATE = 0x804A0201;
+constexpr int ORBIS_NGS2_ERROR_INVALID_REPORT_TYPE = 0x804A0202;
+constexpr int ORBIS_NGS2_ERROR_INVALID_REPORT_HANDLER = 0x804A0203;
constexpr int ORBIS_NGS2_ERROR_INVALID_REPORT_HANDLE = 0x804A0204;
+constexpr int ORBIS_NGS2_ERROR_EMPTY_REPORT_HANDLE = 0x804A0205;
constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_INFO = 0x804A0206;
constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_ADDRESS = 0x804A0207;
-constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_ALIGNMENT = 0x804A0208;
+constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_ALIGN = 0x804A0208;
constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_SIZE = 0x804A0209;
constexpr int ORBIS_NGS2_ERROR_INVALID_BUFFER_ALLOCATOR = 0x804A020A;
-constexpr int ORBIS_NGS2_ERROR_BUFFER_VERIFY_FAILED = 0x804A020B;
-constexpr int ORBIS_NGS2_ERROR_MODULE_PLAYER_DATA_EMPTY = 0x804A020C;
+constexpr int ORBIS_NGS2_ERROR_BUFFER_BROKEN = 0x804A020B;
+constexpr int ORBIS_NGS2_ERROR_EMPTY_BUFFER = 0x804A020C;
constexpr int ORBIS_NGS2_ERROR_INVALID_SYSTEM_HANDLE = 0x804A0230;
constexpr int ORBIS_NGS2_ERROR_INVALID_RACK_ID = 0x804A0260;
constexpr int ORBIS_NGS2_ERROR_INVALID_RACK_HANDLE = 0x804A0261;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_HANDLE = 0x804A0300;
+constexpr int ORBIS_NGS2_ERROR_UNINIT_VOICE = 0x804A0301;
constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_INDEX = 0x804A0302;
-constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_EVENT = 0x804A0303;
-constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_PORT_INDEX = 0x804A0304;
-constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_INPUT_OR_RACK_OCCUPIED = 0x804A0305;
-constexpr int ORBIS_NGS2_ERROR_INVALID_CONTROL_ID = 0x804A0308;
-constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_CONTROL_PARAMETER = 0x804A0309;
-constexpr int ORBIS_NGS2_ERROR_INVALID_PARAMETER_SIZE = 0x804A030A;
+constexpr int ORBIS_NGS2_ERROR_INVALID_EVENT_TYPE = 0x804A0303;
+constexpr int ORBIS_NGS2_ERROR_INVALID_PORT_INDEX = 0x804A0304;
+constexpr int ORBIS_NGS2_ERROR_INVALID_PATCH = 0x804A0305;
+constexpr int ORBIS_NGS2_ERROR_EMPTY_CHANNEL_WORK = 0x804A0306;
+constexpr int ORBIS_NGS2_ERROR_EMPTY_CODEC_DECODER = 0x804A0307;
+constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_CONTROL_ID = 0x804A0308;
+constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_CONTROL_ADDRESS = 0x804A0309;
+constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_CONTROL_SIZE = 0x804A030A;
constexpr int ORBIS_NGS2_ERROR_DETECTED_CIRCULAR_VOICE_CONTROL = 0x804A030B;
-constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_DATA = 0x804A0400;
-constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_FORMAT = 0x804A0401;
-constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_TYPE_NO_ATRAC9_DECODERS = 0x804A0402;
-constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_ATRAC9_CONFIG_DATA = 0x804A0403;
-constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_SAMPLE_RATE = 0x804A0404;
-constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_FRAME = 0x804A0405;
-constexpr int ORBIS_NGS2_ERROR_INVALID_SAMPLER_WAVEFORM_ADDRESS = 0x804A0406;
+constexpr int ORBIS_NGS2_ERROR_UNABLE_CALLBACK = 0x804A030C;
+constexpr int ORBIS_NGS2_ERROR_INVALID_CALLBACK_FLAG = 0x804A030D;
+constexpr int ORBIS_NGS2_ERROR_INVALID_CALLBACK_HANDLER = 0x804A030E;
+constexpr int ORBIS_NGS2_ERROR_INVALID_OPERATION = 0x804A030F;
+constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_FORMAT = 0x804A0400;
+constexpr int ORBIS_NGS2_ERROR_UNKNOWN_WAVEFORM_FORMAT = 0x804A0401;
+constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_TYPE = 0x804A0402;
+constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_CONFIG = 0x804A0403;
+constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_SAMPLE_RATE = 0x804A0404;
+constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_FRAME = 0x804A0405;
+constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_ADDRESS = 0x804A0406;
+constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_SIZE = 0x804A0407;
+constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_DATA = 0x804A0408;
+constexpr int ORBIS_NGS2_ERROR_INVALID_WAVEFORM_BLOCK_NUM_REPEATS = 0x804A0409;
constexpr int ORBIS_NGS2_ERROR_INVALID_ENVELOPE_CURVE = 0x804A0500;
+constexpr int ORBIS_NGS2_ERROR_INVALID_PEAKMETER_FLAG = 0x804A0510;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_CHORUS_PHASES = 0x804A0520;
+constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_CHORUS_PHASES = 0x804A0521;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_DELAY_LENGTH = 0x804A0530;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MAX_DELAY_TAPS = 0x804A0531;
+constexpr int ORBIS_NGS2_ERROR_INVALID_DELAY_TYPE = 0x804A0532;
+constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_DELAY_TAPS = 0x804A0533;
+constexpr int ORBIS_NGS2_ERROR_INVALID_DELAY_TAP_INFO = 0x804A0534;
+constexpr int ORBIS_NGS2_ERROR_INVALID_PITCH_SHIFT_QUALITY = 0x804A0540;
constexpr int ORBIS_NGS2_ERROR_INVALID_FILTER_INDEX = 0x804A0600;
constexpr int ORBIS_NGS2_ERROR_INVALID_FILTER_TYPE = 0x804A0601;
constexpr int ORBIS_NGS2_ERROR_INVALID_FILTER_LOCATION = 0x804A0602;
-constexpr int ORBIS_NGS2_ERROR_INVALID_LFE_CUT_OFF_FREQUENCY = 0x804A0603;
-constexpr int ORBIS_NGS2_ERROR_INVALID_MATRIX_INDEX_OR_TYPE = 0x804A0700;
\ No newline at end of file
+constexpr int ORBIS_NGS2_ERROR_INVALID_LFE_FC = 0x804A0603;
+constexpr int ORBIS_NGS2_ERROR_INVALID_USER_FX_PARAM_SIZE = 0x804A0650;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MATRIX_INDEX = 0x804A0700;
+constexpr int ORBIS_NGS2_ERROR_CODEC_UNKNOWN_WAVEFORM = 0x804A0800;
+constexpr int ORBIS_NGS2_ERROR_CODEC_EMPTY_INSTANCE = 0x804A0801;
+constexpr int ORBIS_NGS2_ERROR_CODEC_EMPTY_CHANNEL = 0x804A0802;
+constexpr int ORBIS_NGS2_ERROR_CODEC_SETUP_FAIL = 0x804A0803;
+constexpr int ORBIS_NGS2_ERROR_CODEC_RESET_FAIL = 0x804A0804;
+constexpr int ORBIS_NGS2_ERROR_CODEC_DECODE_FAIL = 0x804A0805;
+constexpr int ORBIS_NGS2_ERROR_INVALID_REVERB_SIZE = 0x804A0900;
+constexpr int ORBIS_NGS2_ERROR_INVALID_PAN_UNIT_ANGLE = 0x804A0910;
+constexpr int ORBIS_NGS2_ERROR_INVALID_PAN_SPEAKER = 0x804A0911;
+constexpr int ORBIS_NGS2_ERROR_INVALID_PAN_MATRIX_FORMAT = 0x804A0912;
+constexpr int ORBIS_NGS2_ERROR_INVALID_PAN_WORK = 0x804A0913;
+constexpr int ORBIS_NGS2_ERROR_INVALID_PAN_PARAM = 0x804A0914;
+constexpr int ORBIS_NGS2_ERROR_INVALID_GEOM_DISTANCE = 0x804A0920;
+constexpr int ORBIS_NGS2_ERROR_INVALID_GEOM_LISTENER_ADDRESS = 0x804A0921;
+constexpr int ORBIS_NGS2_ERROR_INVALID_GEOM_SOURCE_ADDRESS = 0x804A0922;
+constexpr int ORBIS_NGS2_ERROR_INVALID_GEOM_FLAG = 0x804A0923;
+constexpr int ORBIS_NGS2_ERROR_INVALID_GEOM_CONE = 0x804A0924;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_ID = 0x804A0A00;
+constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_MODULES = 0x804A0A01;
+constexpr int ORBIS_NGS2_ERROR_INVALID_NUM_MODULE_BUFFERS = 0x804A0A02;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_BUFFER_ID = 0x804A0A03;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_STATE_OFFSET = 0x804A0A04;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_STATE_SIZE = 0x804A0A05;
+constexpr int ORBIS_NGS2_ERROR_INVALID_VOICE_STATE_SIZE = 0x804A0A06;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_INDEX = 0x804A0B00;
+constexpr int ORBIS_NGS2_ERROR_INVALID_MODULE_INFO_SIZE = 0x804A0B01;
\ No newline at end of file
diff --git a/src/core/libraries/ngs2/ngs2_impl.cpp b/src/core/libraries/ngs2/ngs2_impl.cpp
index 50c62f5e4..793435d83 100644
--- a/src/core/libraries/ngs2/ngs2_impl.cpp
+++ b/src/core/libraries/ngs2/ngs2_impl.cpp
@@ -138,13 +138,13 @@ s32 Ngs2::SystemSetupCore(StackBuffer* buf, SystemOptions* options, Ngs2Handle**
// Validate maxGrainSamples
if (maxGrainSamples < 64 || maxGrainSamples > 1024 || (maxGrainSamples & 0x3F) != 0) {
LOG_ERROR(Lib_Ngs2, "Invalid system option (maxGrainSamples={},x64)", maxGrainSamples);
- return ORBIS_NGS2_ERROR_INVALID_MAXIMUM_GRAIN_SAMPLES;
+ return ORBIS_NGS2_ERROR_INVALID_MAX_GRAIN_SAMPLES;
}
// Validate numGrainSamples
if (numGrainSamples < 64 || numGrainSamples > 1024 || (numGrainSamples & 0x3F) != 0) {
LOG_ERROR(Lib_Ngs2, "Invalid system option (numGrainSamples={},x64)", numGrainSamples);
- return ORBIS_NGS2_ERROR_INVALID_GRAIN_SAMPLES;
+ return ORBIS_NGS2_ERROR_INVALID_NUM_GRAIN_SAMPLES;
}
// Validate sampleRate
diff --git a/src/core/libraries/random/random.cpp b/src/core/libraries/random/random.cpp
index 8147c5183..f7cc3fd2c 100644
--- a/src/core/libraries/random/random.cpp
+++ b/src/core/libraries/random/random.cpp
@@ -1,14 +1,16 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
+#include "random.h"
+#include "random_error.h"
+
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
-#include "random.h"
namespace Libraries::Random {
-s32 PS4_SYSV_ABI sceRandomGetRandomNumber(u8* buf, size_t size) {
+s32 PS4_SYSV_ABI sceRandomGetRandomNumber(u8* buf, std::size_t size) {
LOG_TRACE(Lib_Random, "called");
if (size > SCE_RANDOM_MAX_SIZE) {
return SCE_RANDOM_ERROR_INVALID;
diff --git a/src/core/libraries/random/random.h b/src/core/libraries/random/random.h
index b5f87f877..7bb41f016 100644
--- a/src/core/libraries/random/random.h
+++ b/src/core/libraries/random/random.h
@@ -11,7 +11,7 @@ class SymbolsResolver;
namespace Libraries::Random {
constexpr int32_t SCE_RANDOM_MAX_SIZE = 64;
-s32 PS4_SYSV_ABI sceRandomGetRandomNumber(u8* buf, size_t size);
+s32 PS4_SYSV_ABI sceRandomGetRandomNumber(u8* buf, std::size_t size);
void RegisterlibSceRandom(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::Random
\ No newline at end of file
diff --git a/src/core/libraries/random/random_error.h b/src/core/libraries/random/random_error.h
new file mode 100644
index 000000000..772316ae5
--- /dev/null
+++ b/src/core/libraries/random/random_error.h
@@ -0,0 +1,8 @@
+// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+constexpr int SCE_RANDOM_ERROR_INVALID = 0x817C0016;
+constexpr int SCE_RANDOM_ERROR_OUT_OF_RESOURCES = 0x817C001C;
+constexpr int SCE_RANDOM_ERROR_FATAL = 0x817C00FF;
\ No newline at end of file
From 371d1d009aa936d9c3d7b022e616714f2ae762be Mon Sep 17 00:00:00 2001
From: psucien
Date: Tue, 27 Aug 2024 19:17:23 +0200
Subject: [PATCH 34/69] Added missing headers and 2D MSAA image type
---
src/shader_recompiler/frontend/structured_control_flow.cpp | 1 +
src/video_core/buffer_cache/buffer.h | 1 +
src/video_core/texture_cache/image_info.cpp | 1 +
src/video_core/texture_cache/image_view.cpp | 1 +
4 files changed, 4 insertions(+)
diff --git a/src/shader_recompiler/frontend/structured_control_flow.cpp b/src/shader_recompiler/frontend/structured_control_flow.cpp
index b50205d46..fefc623fc 100644
--- a/src/shader_recompiler/frontend/structured_control_flow.cpp
+++ b/src/shader_recompiler/frontend/structured_control_flow.cpp
@@ -3,6 +3,7 @@
#include
#include
+#include
#include
#include
#include
diff --git a/src/video_core/buffer_cache/buffer.h b/src/video_core/buffer_cache/buffer.h
index 5c64ba65e..87293c768 100644
--- a/src/video_core/buffer_cache/buffer.h
+++ b/src/video_core/buffer_cache/buffer.h
@@ -4,6 +4,7 @@
#pragma once
#include
+#include
#include
#include
#include "common/types.h"
diff --git a/src/video_core/texture_cache/image_info.cpp b/src/video_core/texture_cache/image_info.cpp
index a073d046e..4ac4aee8f 100644
--- a/src/video_core/texture_cache/image_info.cpp
+++ b/src/video_core/texture_cache/image_info.cpp
@@ -34,6 +34,7 @@ static vk::ImageType ConvertImageType(AmdGpu::ImageType type) noexcept {
case AmdGpu::ImageType::Color1DArray:
return vk::ImageType::e1D;
case AmdGpu::ImageType::Color2D:
+ case AmdGpu::ImageType::Color2DMsaa:
case AmdGpu::ImageType::Cube:
case AmdGpu::ImageType::Color2DArray:
return vk::ImageType::e2D;
diff --git a/src/video_core/texture_cache/image_view.cpp b/src/video_core/texture_cache/image_view.cpp
index 08be6bdc5..00c3833fe 100644
--- a/src/video_core/texture_cache/image_view.cpp
+++ b/src/video_core/texture_cache/image_view.cpp
@@ -17,6 +17,7 @@ vk::ImageViewType ConvertImageViewType(AmdGpu::ImageType type) {
case AmdGpu::ImageType::Color1DArray:
return vk::ImageViewType::e1DArray;
case AmdGpu::ImageType::Color2D:
+ case AmdGpu::ImageType::Color2DMsaa:
return vk::ImageViewType::e2D;
case AmdGpu::ImageType::Cube:
return vk::ImageViewType::eCube;
From 3eb47226d99d49f8750238b085d5b11adfe6f963 Mon Sep 17 00:00:00 2001
From: psucien
Date: Tue, 27 Aug 2024 22:24:26 +0200
Subject: [PATCH 35/69] libraries: kernel: fix `scePthreadMutexattrSettype`
error value return
---
src/core/libraries/kernel/thread_management.cpp | 13 +++++++------
src/core/libraries/kernel/thread_management.h | 5 +++++
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/src/core/libraries/kernel/thread_management.cpp b/src/core/libraries/kernel/thread_management.cpp
index 567fff184..567ac867e 100644
--- a/src/core/libraries/kernel/thread_management.cpp
+++ b/src/core/libraries/kernel/thread_management.cpp
@@ -510,23 +510,24 @@ int PS4_SYSV_ABI scePthreadMutexattrInit(ScePthreadMutexattr* attr) {
int PS4_SYSV_ABI scePthreadMutexattrSettype(ScePthreadMutexattr* attr, int type) {
int ptype = PTHREAD_MUTEX_DEFAULT;
switch (type) {
- case 1:
+ case ORBIS_PTHREAD_MUTEX_ERRORCHECK:
ptype = PTHREAD_MUTEX_ERRORCHECK;
break;
- case 2:
+ case ORBIS_PTHREAD_MUTEX_RECURSIVE:
ptype = PTHREAD_MUTEX_RECURSIVE;
break;
- case 3:
- case 4:
+ case ORBIS_PTHREAD_MUTEX_NORMAL:
+ case ORBIS_PTHREAD_MUTEX_ADAPTIVE:
ptype = PTHREAD_MUTEX_NORMAL;
break;
default:
- UNREACHABLE_MSG("Invalid type: {}", type);
+ return SCE_KERNEL_ERROR_EINVAL;
}
int result = pthread_mutexattr_settype(&(*attr)->pth_mutex_attr, ptype);
+ ASSERT(result == 0);
- return result == 0 ? SCE_OK : SCE_KERNEL_ERROR_EINVAL;
+ return SCE_OK;
}
int PS4_SYSV_ABI scePthreadMutexattrSetprotocol(ScePthreadMutexattr* attr, int protocol) {
diff --git a/src/core/libraries/kernel/thread_management.h b/src/core/libraries/kernel/thread_management.h
index c5935275f..3679af84f 100644
--- a/src/core/libraries/kernel/thread_management.h
+++ b/src/core/libraries/kernel/thread_management.h
@@ -20,6 +20,11 @@ constexpr int ORBIS_KERNEL_PRIO_FIFO_DEFAULT = 700;
constexpr int ORBIS_KERNEL_PRIO_FIFO_HIGHEST = 256;
constexpr int ORBIS_KERNEL_PRIO_FIFO_LOWEST = 767;
+constexpr int ORBIS_PTHREAD_MUTEX_ERRORCHECK = 1;
+constexpr int ORBIS_PTHREAD_MUTEX_RECURSIVE = 2;
+constexpr int ORBIS_PTHREAD_MUTEX_NORMAL = 3;
+constexpr int ORBIS_PTHREAD_MUTEX_ADAPTIVE = 4;
+
struct PthreadInternal;
struct PthreadAttrInternal;
struct PthreadMutexInternal;
From 659e7a467549ebca374acc859c8a0e3d47c0e0b6 Mon Sep 17 00:00:00 2001
From: Anton Kovalev
Date: Tue, 27 Aug 2024 23:16:14 +0200
Subject: [PATCH 36/69] video_core: Added copyGPUCmdBuffers option
---
src/common/config.cpp | 11 +++++++++
src/common/config.h | 2 ++
src/video_core/amdgpu/liverpool.cpp | 37 +++++++++++++++++++++++++++++
src/video_core/amdgpu/liverpool.h | 8 +++++++
4 files changed, 58 insertions(+)
diff --git a/src/common/config.cpp b/src/common/config.cpp
index 9f55cbd40..04d67d44b 100644
--- a/src/common/config.cpp
+++ b/src/common/config.cpp
@@ -20,6 +20,7 @@ static std::string userName = "shadPS4";
static bool isDebugDump = false;
static bool isShowSplash = false;
static bool isNullGpu = false;
+static bool shouldCopyGPUBuffers = false;
static bool shouldDumpShaders = false;
static bool shouldDumpPM4 = false;
static u32 vblankDivider = 1;
@@ -93,6 +94,10 @@ bool nullGpu() {
return isNullGpu;
}
+bool copyGPUCmdBuffers() {
+ return shouldCopyGPUBuffers;
+}
+
bool dumpShaders() {
return shouldDumpShaders;
}
@@ -149,6 +154,10 @@ void setNullGpu(bool enable) {
isNullGpu = enable;
}
+void setCopyGPUCmdBuffers(bool enable) {
+ shouldCopyGPUBuffers = enable;
+}
+
void setDumpShaders(bool enable) {
shouldDumpShaders = enable;
}
@@ -336,6 +345,7 @@ void load(const std::filesystem::path& path) {
screenWidth = toml::find_or(gpu, "screenWidth", screenWidth);
screenHeight = toml::find_or(gpu, "screenHeight", screenHeight);
isNullGpu = toml::find_or(gpu, "nullGpu", false);
+ shouldCopyGPUBuffers = toml::find_or(gpu, "copyGPUBuffers", false);
shouldDumpShaders = toml::find_or(gpu, "dumpShaders", false);
shouldDumpPM4 = toml::find_or(gpu, "dumpPM4", false);
vblankDivider = toml::find_or(gpu, "vblankDivider", 1);
@@ -414,6 +424,7 @@ void save(const std::filesystem::path& path) {
data["GPU"]["screenWidth"] = screenWidth;
data["GPU"]["screenHeight"] = screenHeight;
data["GPU"]["nullGpu"] = isNullGpu;
+ data["GPU"]["copyGPUBuffers"] = shouldCopyGPUBuffers;
data["GPU"]["dumpShaders"] = shouldDumpShaders;
data["GPU"]["dumpPM4"] = shouldDumpPM4;
data["GPU"]["vblankDivider"] = vblankDivider;
diff --git a/src/common/config.h b/src/common/config.h
index 554515a44..f1347b076 100644
--- a/src/common/config.h
+++ b/src/common/config.h
@@ -24,6 +24,7 @@ s32 getGpuId();
bool debugDump();
bool showSplash();
bool nullGpu();
+bool copyGPUCmdBuffers();
bool dumpShaders();
bool dumpPM4();
bool isRdocEnabled();
@@ -33,6 +34,7 @@ u32 vblankDiv();
void setDebugDump(bool enable);
void setShowSplash(bool enable);
void setNullGpu(bool enable);
+void setCopyGPUCmdBuffers(bool enable);
void setDumpShaders(bool enable);
void setDumpPM4(bool enable);
void setVblankDiv(u32 value);
diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp
index 5b3db603a..cec3b06bb 100644
--- a/src/video_core/amdgpu/liverpool.cpp
+++ b/src/video_core/amdgpu/liverpool.cpp
@@ -5,6 +5,7 @@
#include "common/debug.h"
#include "common/polyfill_thread.h"
#include "common/thread.h"
+#include "common/config.h"
#include "core/libraries/videoout/driver.h"
#include "video_core/amdgpu/liverpool.h"
#include "video_core/amdgpu/pm4_cmds.h"
@@ -568,9 +569,45 @@ Liverpool::Task Liverpool::ProcessCompute(std::span acb, int vqid) {
TracyFiberLeave;
}
+void Liverpool::CopyCmdBuffers(std::span& dcb, std::span& ccb) {
+ auto& queue = mapped_queues[GfxQueueId];
+
+ // This is fine because resize doesn't reallocate the buffer on shrink
+ queue.dcb_buffer.resize(queue.dcb_buffer_offset + dcb.size());
+ queue.ccb_buffer.resize(queue.ccb_buffer_offset + dcb.size());
+
+ u32 prev_dcb_buffer_offset = queue.dcb_buffer_offset;
+ u32 prev_ccb_buffer_offset = queue.ccb_buffer_offset;
+ if (!dcb.empty()) {
+ std::memcpy(queue.dcb_buffer.data() + queue.dcb_buffer_offset, dcb.data(),
+ dcb.size_bytes());
+ queue.dcb_buffer_offset += dcb.size();
+ }
+
+ if (!ccb.empty()) {
+ std::memcpy(queue.ccb_buffer.data() + queue.ccb_buffer_offset, ccb.data(),
+ ccb.size_bytes());
+ queue.ccb_buffer_offset += dcb.size();
+ }
+
+ if (!queue.dcb_buffer.empty()) {
+ dcb = std::span{queue.dcb_buffer.begin() + prev_dcb_buffer_offset,
+ queue.dcb_buffer.begin() + queue.dcb_buffer_offset};
+ }
+
+ if (!queue.ccb_buffer.empty()) {
+ ccb = std::span{queue.ccb_buffer.begin() + prev_ccb_buffer_offset,
+ queue.ccb_buffer.begin() + queue.ccb_buffer_offset};
+ }
+}
+
void Liverpool::SubmitGfx(std::span dcb, std::span ccb) {
auto& queue = mapped_queues[GfxQueueId];
+ if (Config::copyGPUCmdBuffers()) {
+ CopyCmdBuffers(dcb, ccb);
+ }
+
auto task = ProcessGraphics(dcb, ccb);
{
std::scoped_lock lock{queue.m_access};
diff --git a/src/video_core/amdgpu/liverpool.h b/src/video_core/amdgpu/liverpool.h
index 2806f3308..a4e61c92a 100644
--- a/src/video_core/amdgpu/liverpool.h
+++ b/src/video_core/amdgpu/liverpool.h
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
#include "common/assert.h"
#include "common/bit_field.h"
@@ -1047,6 +1048,8 @@ public:
void SubmitDone() noexcept {
std::scoped_lock lk{submit_mutex};
+ mapped_queues[GfxQueueId].ccb_buffer_offset = 0;
+ mapped_queues[GfxQueueId].dcb_buffer_offset = 0;
submit_done = true;
submit_cv.notify_one();
}
@@ -1108,6 +1111,7 @@ private:
Handle handle;
};
+ void CopyCmdBuffers(std::span& dcb, std::span& ccb);
Task ProcessGraphics(std::span dcb, std::span ccb);
Task ProcessCeUpdate(std::span ccb);
Task ProcessCompute(std::span acb, int vqid);
@@ -1116,6 +1120,10 @@ private:
struct GpuQueue {
std::mutex m_access{};
+ std::atomic_uint32_t dcb_buffer_offset;
+ std::atomic_uint32_t ccb_buffer_offset;
+ std::vector dcb_buffer;
+ std::vector ccb_buffer;
std::queue submits{};
ComputeProgram cs_state{};
};
From 595b845df0f6776cb44201217a7cdc2f7cb679d3 Mon Sep 17 00:00:00 2001
From: Anton Kovalev
Date: Tue, 27 Aug 2024 23:31:04 +0200
Subject: [PATCH 37/69] clang-format fix
---
src/video_core/amdgpu/liverpool.cpp | 4 ++--
src/video_core/amdgpu/liverpool.h | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp
index cec3b06bb..4b8a83152 100644
--- a/src/video_core/amdgpu/liverpool.cpp
+++ b/src/video_core/amdgpu/liverpool.cpp
@@ -593,8 +593,8 @@ void Liverpool::CopyCmdBuffers(std::span& dcb, std::span&
if (!queue.dcb_buffer.empty()) {
dcb = std::span{queue.dcb_buffer.begin() + prev_dcb_buffer_offset,
queue.dcb_buffer.begin() + queue.dcb_buffer_offset};
- }
-
+ }
+
if (!queue.ccb_buffer.empty()) {
ccb = std::span{queue.ccb_buffer.begin() + prev_ccb_buffer_offset,
queue.ccb_buffer.begin() + queue.ccb_buffer_offset};
diff --git a/src/video_core/amdgpu/liverpool.h b/src/video_core/amdgpu/liverpool.h
index a4e61c92a..c12c8fdb6 100644
--- a/src/video_core/amdgpu/liverpool.h
+++ b/src/video_core/amdgpu/liverpool.h
@@ -10,8 +10,8 @@
#include
#include
#include
-#include
#include
+#include
#include "common/assert.h"
#include "common/bit_field.h"
From 3d46a5d4920fdf5ab04fb20e6f86bde87235d77c Mon Sep 17 00:00:00 2001
From: Anton Kovalev
Date: Tue, 27 Aug 2024 23:33:24 +0200
Subject: [PATCH 38/69] Do not shrink buffer's size on submit
---
src/video_core/amdgpu/liverpool.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp
index 4b8a83152..93099266a 100644
--- a/src/video_core/amdgpu/liverpool.cpp
+++ b/src/video_core/amdgpu/liverpool.cpp
@@ -573,8 +573,10 @@ void Liverpool::CopyCmdBuffers(std::span& dcb, std::span&
auto& queue = mapped_queues[GfxQueueId];
// This is fine because resize doesn't reallocate the buffer on shrink
- queue.dcb_buffer.resize(queue.dcb_buffer_offset + dcb.size());
- queue.ccb_buffer.resize(queue.ccb_buffer_offset + dcb.size());
+ queue.dcb_buffer.resize(
+ std::max(queue.dcb_buffer.size(), queue.dcb_buffer_offset + dcb.size()));
+ queue.ccb_buffer.resize(
+ std::max(queue.ccb_buffer.size(), queue.ccb_buffer_offset + dcb.size()));
u32 prev_dcb_buffer_offset = queue.dcb_buffer_offset;
u32 prev_ccb_buffer_offset = queue.ccb_buffer_offset;
From 3842993a4310e5f6c392f0898c795a50e5a731a2 Mon Sep 17 00:00:00 2001
From: Anton Kovalev
Date: Wed, 28 Aug 2024 00:21:12 +0200
Subject: [PATCH 39/69] Use input dcb and ccb instead of copy
---
src/video_core/amdgpu/liverpool.cpp | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp
index 93099266a..3db9ff0d1 100644
--- a/src/video_core/amdgpu/liverpool.cpp
+++ b/src/video_core/amdgpu/liverpool.cpp
@@ -572,7 +572,6 @@ Liverpool::Task Liverpool::ProcessCompute(std::span acb, int vqid) {
void Liverpool::CopyCmdBuffers(std::span& dcb, std::span& ccb) {
auto& queue = mapped_queues[GfxQueueId];
- // This is fine because resize doesn't reallocate the buffer on shrink
queue.dcb_buffer.resize(
std::max(queue.dcb_buffer.size(), queue.dcb_buffer_offset + dcb.size()));
queue.ccb_buffer.resize(
@@ -584,20 +583,14 @@ void Liverpool::CopyCmdBuffers(std::span& dcb, std::span&
std::memcpy(queue.dcb_buffer.data() + queue.dcb_buffer_offset, dcb.data(),
dcb.size_bytes());
queue.dcb_buffer_offset += dcb.size();
+ dcb = std::span{queue.dcb_buffer.begin() + prev_dcb_buffer_offset,
+ queue.dcb_buffer.begin() + queue.dcb_buffer_offset};
}
if (!ccb.empty()) {
std::memcpy(queue.ccb_buffer.data() + queue.ccb_buffer_offset, ccb.data(),
ccb.size_bytes());
queue.ccb_buffer_offset += dcb.size();
- }
-
- if (!queue.dcb_buffer.empty()) {
- dcb = std::span{queue.dcb_buffer.begin() + prev_dcb_buffer_offset,
- queue.dcb_buffer.begin() + queue.dcb_buffer_offset};
- }
-
- if (!queue.ccb_buffer.empty()) {
ccb = std::span{queue.ccb_buffer.begin() + prev_ccb_buffer_offset,
queue.ccb_buffer.begin() + queue.ccb_buffer_offset};
}
From 860b93505423dffed0e2abeb0e278aee2d759210 Mon Sep 17 00:00:00 2001
From: Semenov Herman
Date: Wed, 28 Aug 2024 01:32:14 +0300
Subject: [PATCH 40/69] crypto: added destructors fix memleak FakeKeyset,
DebugRifKeyset, PkgDerivedKey3Keyset
---
src/core/crypto/keys.h | 43 ++++++++++++++++++++++++++++++++++++------
1 file changed, 37 insertions(+), 6 deletions(-)
diff --git a/src/core/crypto/keys.h b/src/core/crypto/keys.h
index 37b66bd09..58466b764 100644
--- a/src/core/crypto/keys.h
+++ b/src/core/crypto/keys.h
@@ -132,11 +132,22 @@ public:
0x79, 0x9E, 0x7D, 0x8D, 0xCA, 0x18, 0x6D, 0xBD, 0x9E, 0xA1, 0x80, 0x28, 0x6B,
0x2A, 0xFE, 0x51, 0x24, 0x9B, 0x6F, 0x4D, 0x84, 0x77, 0x80, 0x23};
};
+
+ // Destructor
+ ~FakeKeyset() {
+ delete[] PrivateExponent;
+ delete[] Exponent1;
+ delete[] Exponent2;
+ delete[] PublicExponent;
+ delete[] Coefficient;
+ delete[] Modulus;
+ delete[] Prime1;
+ delete[] Prime2;
+ };
};
class DebugRifKeyset {
public:
- // Constructor
// std::uint8_t* PrivateExponent;
const CryptoPP::byte* Exponent1;
// exponent2 = d mod (q - 1)
@@ -263,14 +274,22 @@ public:
0x81, 0x1F, 0xDE, 0x5E, 0xA8, 0x6E, 0x3E, 0x87, 0xEC, 0x44, 0xD2, 0x69, 0xC6,
0x54, 0x91, 0x6B, 0x5E, 0x13, 0x8A, 0x03, 0x87, 0x05, 0x31, 0x8D};
};
+
+ // Destructor
+ ~DebugRifKeyset() {
+ delete[] PrivateExponent;
+ delete[] Exponent1;
+ delete[] Exponent2;
+ delete[] PublicExponent;
+ delete[] Coefficient;
+ delete[] Modulus;
+ delete[] Prime1;
+ delete[] Prime2;
+ };
};
class PkgDerivedKey3Keyset {
public:
- // PkgDerivedKey3Keyset();
- //~PkgDerivedKey3Keyset();
-
- // Constructor
// std::uint8_t* PrivateExponent;
const CryptoPP::byte* Exponent1;
// exponent2 = d mod (q - 1)
@@ -287,8 +306,8 @@ public:
const CryptoPP::byte* Prime2;
const CryptoPP::byte* PrivateExponent;
+ // Constructor
PkgDerivedKey3Keyset() {
-
Prime1 = new CryptoPP::byte[0x80]{
0xF9, 0x67, 0xAD, 0x99, 0x12, 0x31, 0x0C, 0x56, 0xA2, 0x2E, 0x16, 0x1C, 0x46,
0xB3, 0x4D, 0x5B, 0x43, 0xBE, 0x42, 0xA2, 0xF6, 0x86, 0x96, 0x80, 0x42, 0xC3,
@@ -387,4 +406,16 @@ public:
0xf9, 0xc9, 0xa3, 0xc1};
PublicExponent = new CryptoPP::byte[4]{0, 1, 0, 1};
};
+
+ // Destructor
+ ~PkgDerivedKey3Keyset() {
+ delete[] Prime1;
+ delete[] Prime2;
+ delete[] PrivateExponent;
+ delete[] Exponent1;
+ delete[] Exponent2;
+ delete[] Coefficient;
+ delete[] Modulus;
+ delete[] PublicExponent;
+ };
};
\ No newline at end of file
From 1a02efbd156ff7b07bfa306cd94c39862cba8d56 Mon Sep 17 00:00:00 2001
From: Anton Kovalev
Date: Wed, 28 Aug 2024 05:42:48 +0200
Subject: [PATCH 41/69] clang-format style fix
---
src/video_core/amdgpu/liverpool.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp
index 3db9ff0d1..6e49aec41 100644
--- a/src/video_core/amdgpu/liverpool.cpp
+++ b/src/video_core/amdgpu/liverpool.cpp
@@ -2,10 +2,10 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "common/assert.h"
+#include "common/config.h"
#include "common/debug.h"
#include "common/polyfill_thread.h"
#include "common/thread.h"
-#include "common/config.h"
#include "core/libraries/videoout/driver.h"
#include "video_core/amdgpu/liverpool.h"
#include "video_core/amdgpu/pm4_cmds.h"
From ed42db47af3ab0cbe92be922110023eda895d34a Mon Sep 17 00:00:00 2001
From: Exhigh
Date: Wed, 28 Aug 2024 08:52:20 +0400
Subject: [PATCH 42/69] savedata: Add another missed case in saveDataMount
This should potentially fix Deadpool (CUSA03528) #554.
---
src/core/libraries/save_data/savedata.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/core/libraries/save_data/savedata.cpp b/src/core/libraries/save_data/savedata.cpp
index a6117cba5..eb309183f 100644
--- a/src/core/libraries/save_data/savedata.cpp
+++ b/src/core/libraries/save_data/savedata.cpp
@@ -505,6 +505,7 @@ s32 saveDataMount(u32 user_id, char* dir_name, u32 mount_mode,
ORBIS_SAVE_DATA_MOUNT_MODE_DESTRUCT_OFF:
case ORBIS_SAVE_DATA_MOUNT_MODE_CREATE | ORBIS_SAVE_DATA_MOUNT_MODE_RDWR |
ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON:
+ case ORBIS_SAVE_DATA_MOUNT_MODE_CREATE | ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON:
case ORBIS_SAVE_DATA_MOUNT_MODE_CREATE | ORBIS_SAVE_DATA_MOUNT_MODE_DESTRUCT_OFF |
ORBIS_SAVE_DATA_MOUNT_MODE_COPY_ICON:
case ORBIS_SAVE_DATA_MOUNT_MODE_CREATE | ORBIS_SAVE_DATA_MOUNT_MODE_RDWR |
From 87ccfdfbbdb7b98ba1169174096baffcd1d93729 Mon Sep 17 00:00:00 2001
From: Anton Kovalev
Date: Wed, 28 Aug 2024 09:42:31 +0200
Subject: [PATCH 43/69] Fixed type on function
---
src/video_core/amdgpu/liverpool.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp
index 6e49aec41..931b5ea84 100644
--- a/src/video_core/amdgpu/liverpool.cpp
+++ b/src/video_core/amdgpu/liverpool.cpp
@@ -575,7 +575,7 @@ void Liverpool::CopyCmdBuffers(std::span& dcb, std::span&
queue.dcb_buffer.resize(
std::max(queue.dcb_buffer.size(), queue.dcb_buffer_offset + dcb.size()));
queue.ccb_buffer.resize(
- std::max(queue.ccb_buffer.size(), queue.ccb_buffer_offset + dcb.size()));
+ std::max(queue.ccb_buffer.size(), queue.ccb_buffer_offset + ccb.size()));
u32 prev_dcb_buffer_offset = queue.dcb_buffer_offset;
u32 prev_ccb_buffer_offset = queue.ccb_buffer_offset;
@@ -590,7 +590,7 @@ void Liverpool::CopyCmdBuffers(std::span& dcb, std::span&
if (!ccb.empty()) {
std::memcpy(queue.ccb_buffer.data() + queue.ccb_buffer_offset, ccb.data(),
ccb.size_bytes());
- queue.ccb_buffer_offset += dcb.size();
+ queue.ccb_buffer_offset += ccb.size();
ccb = std::span{queue.ccb_buffer.begin() + prev_ccb_buffer_offset,
queue.ccb_buffer.begin() + queue.ccb_buffer_offset};
}
From c37679154eeb59e6bfe73ec2ff99b15096094942 Mon Sep 17 00:00:00 2001
From: Random <28494085+Random06457@users.noreply.github.com>
Date: Wed, 28 Aug 2024 09:53:27 +0200
Subject: [PATCH 44/69] Handle PM4 type-2 packets (#556)
* video_core: handle PM4 type-2 packets
* video_core: rewrite pm4 comand type handling into a switch statement
---
src/video_core/amdgpu/liverpool.cpp | 563 ++++++++++++++--------------
1 file changed, 287 insertions(+), 276 deletions(-)
diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp
index 5b3db603a..7e6ca14da 100644
--- a/src/video_core/amdgpu/liverpool.cpp
+++ b/src/video_core/amdgpu/liverpool.cpp
@@ -175,294 +175,305 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(dcb.data());
const u32 type = header->type;
- if (type != 3) {
- // No other types of packets were spotted so far
- UNREACHABLE_MSG("Invalid PM4 type {}", type);
- }
- const u32 count = header->type3.NumWords();
- const PM4ItOpcode opcode = header->type3.opcode;
- switch (opcode) {
- case PM4ItOpcode::Nop: {
- const auto* nop = reinterpret_cast(header);
- if (nop->header.count.Value() == 0) {
- break;
- }
+ switch (type) {
+ case 0:
+ case 1:
+ UNREACHABLE_MSG("Unsupported PM4 type {}", type);
+ break;
+ case 2:
+ // Type-2 packet are used for padding purposes
+ dcb = dcb.subspan(1);
+ continue;
+ case 3:
+ const u32 count = header->type3.NumWords();
+ const PM4ItOpcode opcode = header->type3.opcode;
+ switch (opcode) {
+ case PM4ItOpcode::Nop: {
+ const auto* nop = reinterpret_cast(header);
+ if (nop->header.count.Value() == 0) {
+ break;
+ }
- switch (nop->data_block[0]) {
- case PM4CmdNop::PayloadType::PatchedFlip: {
- // There is no evidence that GPU CP drives flip events by parsing
- // special NOP packets. For convenience lets assume that it does.
- Platform::IrqC::Instance()->Signal(Platform::InterruptId::GfxFlip);
+ switch (nop->data_block[0]) {
+ case PM4CmdNop::PayloadType::PatchedFlip: {
+ // There is no evidence that GPU CP drives flip events by parsing
+ // special NOP packets. For convenience lets assume that it does.
+ Platform::IrqC::Instance()->Signal(Platform::InterruptId::GfxFlip);
+ break;
+ }
+ case PM4CmdNop::PayloadType::DebugMarkerPush: {
+ const auto marker_sz = nop->header.count.Value() * 2;
+ const std::string_view label{reinterpret_cast(&nop->data_block[1]),
+ marker_sz};
+ rasterizer->ScopeMarkerBegin(label);
+ break;
+ }
+ case PM4CmdNop::PayloadType::DebugMarkerPop: {
+ rasterizer->ScopeMarkerEnd();
+ break;
+ }
+ default:
+ break;
+ }
break;
}
- case PM4CmdNop::PayloadType::DebugMarkerPush: {
- const auto marker_sz = nop->header.count.Value() * 2;
- const std::string_view label{reinterpret_cast(&nop->data_block[1]),
- marker_sz};
- rasterizer->ScopeMarkerBegin(label);
+ case PM4ItOpcode::ContextControl: {
break;
}
- case PM4CmdNop::PayloadType::DebugMarkerPop: {
- rasterizer->ScopeMarkerEnd();
+ case PM4ItOpcode::ClearState: {
+ regs.SetDefaults();
+ break;
+ }
+ case PM4ItOpcode::SetConfigReg: {
+ const auto* set_data = reinterpret_cast(header);
+ const auto reg_addr = ConfigRegWordOffset + set_data->reg_offset;
+ const auto* payload = reinterpret_cast(header + 2);
+ std::memcpy(®s.reg_array[reg_addr], payload, (count - 1) * sizeof(u32));
+ break;
+ }
+ case PM4ItOpcode::SetContextReg: {
+ const auto* set_data = reinterpret_cast(header);
+ const auto reg_addr = ContextRegWordOffset + set_data->reg_offset;
+ const auto* payload = reinterpret_cast(header + 2);
+
+ std::memcpy(®s.reg_array[reg_addr], payload, (count - 1) * sizeof(u32));
+
+ // In the case of HW, render target memory has alignment as color block operates on
+ // tiles. There is no information of actual resource extents stored in CB context
+ // regs, so any deduction of it from slices/pitch will lead to a larger surface
+ // created. The same applies to the depth targets. Fortunately, the guest always
+ // sends a trailing NOP packet right after the context regs setup, so we can use the
+ // heuristic below and extract the hint to determine actual resource dims.
+
+ switch (reg_addr) {
+ case ContextRegs::CbColor0Base:
+ case ContextRegs::CbColor1Base:
+ case ContextRegs::CbColor2Base:
+ case ContextRegs::CbColor3Base:
+ case ContextRegs::CbColor4Base:
+ case ContextRegs::CbColor5Base:
+ case ContextRegs::CbColor6Base:
+ case ContextRegs::CbColor7Base: {
+ const auto col_buf_id = (reg_addr - ContextRegs::CbColor0Base) /
+ (ContextRegs::CbColor1Base - ContextRegs::CbColor0Base);
+ ASSERT(col_buf_id < NumColorBuffers);
+
+ const auto nop_offset = header->type3.count;
+ if (nop_offset == 0x0e || nop_offset == 0x0d || nop_offset == 0x0b) {
+ ASSERT_MSG(payload[nop_offset] == 0xc0001000,
+ "NOP hint is missing in CB setup sequence");
+ last_cb_extent[col_buf_id].raw = payload[nop_offset + 1];
+ } else {
+ last_cb_extent[col_buf_id].raw = 0;
+ }
+ break;
+ }
+ case ContextRegs::CbColor0Cmask:
+ case ContextRegs::CbColor1Cmask:
+ case ContextRegs::CbColor2Cmask:
+ case ContextRegs::CbColor3Cmask:
+ case ContextRegs::CbColor4Cmask:
+ case ContextRegs::CbColor5Cmask:
+ case ContextRegs::CbColor6Cmask:
+ case ContextRegs::CbColor7Cmask: {
+ const auto col_buf_id =
+ (reg_addr - ContextRegs::CbColor0Cmask) /
+ (ContextRegs::CbColor1Cmask - ContextRegs::CbColor0Cmask);
+ ASSERT(col_buf_id < NumColorBuffers);
+
+ const auto nop_offset = header->type3.count;
+ if (nop_offset == 0x04) {
+ ASSERT_MSG(payload[nop_offset] == 0xc0001000,
+ "NOP hint is missing in CB setup sequence");
+ last_cb_extent[col_buf_id].raw = payload[nop_offset + 1];
+ }
+ break;
+ }
+ case ContextRegs::DbZInfo: {
+ if (header->type3.count == 8) {
+ ASSERT_MSG(payload[20] == 0xc0001000,
+ "NOP hint is missing in DB setup sequence");
+ last_db_extent.raw = payload[21];
+ } else {
+ last_db_extent.raw = 0;
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ break;
+ }
+ case PM4ItOpcode::SetShReg: {
+ const auto* set_data = reinterpret_cast(header);
+ std::memcpy(®s.reg_array[ShRegWordOffset + set_data->reg_offset], header + 2,
+ (count - 1) * sizeof(u32));
+ break;
+ }
+ case PM4ItOpcode::SetUconfigReg: {
+ const auto* set_data = reinterpret_cast(header);
+ std::memcpy(®s.reg_array[UconfigRegWordOffset + set_data->reg_offset],
+ header + 2, (count - 1) * sizeof(u32));
+ break;
+ }
+ case PM4ItOpcode::IndexType: {
+ const auto* index_type = reinterpret_cast(header);
+ regs.index_buffer_type.raw = index_type->raw;
+ break;
+ }
+ case PM4ItOpcode::DrawIndex2: {
+ const auto* draw_index = reinterpret_cast(header);
+ regs.max_index_size = draw_index->max_size;
+ regs.index_base_address.base_addr_lo = draw_index->index_base_lo;
+ regs.index_base_address.base_addr_hi.Assign(draw_index->index_base_hi);
+ regs.num_indices = draw_index->index_count;
+ regs.draw_initiator = draw_index->draw_initiator;
+ if (rasterizer) {
+ const auto cmd_address = reinterpret_cast(header);
+ rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:DrawIndex2", cmd_address));
+ rasterizer->Breadcrumb(u64(cmd_address));
+ rasterizer->Draw(true);
+ rasterizer->ScopeMarkerEnd();
+ }
+ break;
+ }
+ case PM4ItOpcode::DrawIndexOffset2: {
+ const auto* draw_index_off =
+ reinterpret_cast(header);
+ regs.max_index_size = draw_index_off->max_size;
+ regs.num_indices = draw_index_off->index_count;
+ regs.draw_initiator = draw_index_off->draw_initiator;
+ if (rasterizer) {
+ const auto cmd_address = reinterpret_cast(header);
+ rasterizer->ScopeMarkerBegin(
+ fmt::format("dcb:{}:DrawIndexOffset2", cmd_address));
+ rasterizer->Breadcrumb(u64(cmd_address));
+ rasterizer->Draw(true, draw_index_off->index_offset);
+ rasterizer->ScopeMarkerEnd();
+ }
+ break;
+ }
+ case PM4ItOpcode::DrawIndexAuto: {
+ const auto* draw_index = reinterpret_cast(header);
+ regs.num_indices = draw_index->index_count;
+ regs.draw_initiator = draw_index->draw_initiator;
+ if (rasterizer) {
+ const auto cmd_address = reinterpret_cast(header);
+ rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:DrawIndexAuto", cmd_address));
+ rasterizer->Breadcrumb(u64(cmd_address));
+ rasterizer->Draw(false);
+ rasterizer->ScopeMarkerEnd();
+ }
+ break;
+ }
+ case PM4ItOpcode::DispatchDirect: {
+ const auto* dispatch_direct = reinterpret_cast(header);
+ regs.cs_program.dim_x = dispatch_direct->dim_x;
+ regs.cs_program.dim_y = dispatch_direct->dim_y;
+ regs.cs_program.dim_z = dispatch_direct->dim_z;
+ regs.cs_program.dispatch_initiator = dispatch_direct->dispatch_initiator;
+ if (rasterizer && (regs.cs_program.dispatch_initiator & 1)) {
+ const auto cmd_address = reinterpret_cast(header);
+ rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:Dispatch", cmd_address));
+ rasterizer->Breadcrumb(u64(cmd_address));
+ rasterizer->DispatchDirect();
+ rasterizer->ScopeMarkerEnd();
+ }
+ break;
+ }
+ case PM4ItOpcode::NumInstances: {
+ const auto* num_instances = reinterpret_cast(header);
+ regs.num_instances.num_instances = num_instances->num_instances;
+ break;
+ }
+ case PM4ItOpcode::IndexBase: {
+ const auto* index_base = reinterpret_cast(header);
+ regs.index_base_address.base_addr_lo = index_base->addr_lo;
+ regs.index_base_address.base_addr_hi.Assign(index_base->addr_hi);
+ break;
+ }
+ case PM4ItOpcode::IndexBufferSize: {
+ const auto* index_size = reinterpret_cast(header);
+ regs.num_indices = index_size->num_indices;
+ break;
+ }
+ case PM4ItOpcode::EventWrite: {
+ // const auto* event = reinterpret_cast(header);
+ break;
+ }
+ case PM4ItOpcode::EventWriteEos: {
+ const auto* event_eos = reinterpret_cast(header);
+ event_eos->SignalFence();
+ break;
+ }
+ case PM4ItOpcode::EventWriteEop: {
+ const auto* event_eop = reinterpret_cast(header);
+ event_eop->SignalFence();
+ break;
+ }
+ case PM4ItOpcode::DmaData: {
+ const auto* dma_data = reinterpret_cast(header);
+ break;
+ }
+ case PM4ItOpcode::WriteData: {
+ const auto* write_data = reinterpret_cast(header);
+ ASSERT(write_data->dst_sel.Value() == 2 || write_data->dst_sel.Value() == 5);
+ const u32 data_size = (header->type3.count.Value() - 2) * 4;
+ u64* address = write_data->Address();
+ if (!write_data->wr_one_addr.Value()) {
+ std::memcpy(address, write_data->data, data_size);
+ } else {
+ UNREACHABLE();
+ }
+ break;
+ }
+ case PM4ItOpcode::AcquireMem: {
+ // const auto* acquire_mem = reinterpret_cast(header);
+ break;
+ }
+ case PM4ItOpcode::WaitRegMem: {
+ const auto* wait_reg_mem = reinterpret_cast(header);
+ // ASSERT(wait_reg_mem->engine.Value() == PM4CmdWaitRegMem::Engine::Me);
+ // Optimization: VO label waits are special because the emulator
+ // will write to the label when presentation is finished. So if
+ // there are no other submits to yield to we can sleep the thread
+ // instead and allow other tasks to run.
+ const u64* wait_addr = wait_reg_mem->Address();
+ if (vo_port->IsVoLabel(wait_addr) && num_submits == 1) {
+ vo_port->WaitVoLabel([&] { return wait_reg_mem->Test(); });
+ }
+ while (!wait_reg_mem->Test()) {
+ mapped_queues[GfxQueueId].cs_state = regs.cs_program;
+ TracyFiberLeave;
+ co_yield {};
+ TracyFiberEnter(dcb_task_name);
+ regs.cs_program = mapped_queues[GfxQueueId].cs_state;
+ }
+ break;
+ }
+ case PM4ItOpcode::IncrementDeCounter: {
+ ++cblock.de_count;
+ break;
+ }
+ case PM4ItOpcode::WaitOnCeCounter: {
+ while (cblock.ce_count <= cblock.de_count) {
+ TracyFiberLeave;
+ ce_task.handle.resume();
+ TracyFiberEnter(dcb_task_name);
+ }
+ break;
+ }
+ case PM4ItOpcode::PfpSyncMe: {
break;
}
default:
- break;
+ UNREACHABLE_MSG("Unknown PM4 type 3 opcode {:#x} with count {}",
+ static_cast(opcode), count);
}
+ dcb = dcb.subspan(header->type3.NumWords() + 1);
break;
}
- case PM4ItOpcode::ContextControl: {
- break;
- }
- case PM4ItOpcode::ClearState: {
- regs.SetDefaults();
- break;
- }
- case PM4ItOpcode::SetConfigReg: {
- const auto* set_data = reinterpret_cast(header);
- const auto reg_addr = ConfigRegWordOffset + set_data->reg_offset;
- const auto* payload = reinterpret_cast(header + 2);
- std::memcpy(®s.reg_array[reg_addr], payload, (count - 1) * sizeof(u32));
- break;
- }
- case PM4ItOpcode::SetContextReg: {
- const auto* set_data = reinterpret_cast(header);
- const auto reg_addr = ContextRegWordOffset + set_data->reg_offset;
- const auto* payload = reinterpret_cast(header + 2);
-
- std::memcpy(®s.reg_array[reg_addr], payload, (count - 1) * sizeof(u32));
-
- // In the case of HW, render target memory has alignment as color block operates on
- // tiles. There is no information of actual resource extents stored in CB context
- // regs, so any deduction of it from slices/pitch will lead to a larger surface created.
- // The same applies to the depth targets. Fortunately, the guest always sends
- // a trailing NOP packet right after the context regs setup, so we can use the heuristic
- // below and extract the hint to determine actual resource dims.
-
- switch (reg_addr) {
- case ContextRegs::CbColor0Base:
- case ContextRegs::CbColor1Base:
- case ContextRegs::CbColor2Base:
- case ContextRegs::CbColor3Base:
- case ContextRegs::CbColor4Base:
- case ContextRegs::CbColor5Base:
- case ContextRegs::CbColor6Base:
- case ContextRegs::CbColor7Base: {
- const auto col_buf_id = (reg_addr - ContextRegs::CbColor0Base) /
- (ContextRegs::CbColor1Base - ContextRegs::CbColor0Base);
- ASSERT(col_buf_id < NumColorBuffers);
-
- const auto nop_offset = header->type3.count;
- if (nop_offset == 0x0e || nop_offset == 0x0d || nop_offset == 0x0b) {
- ASSERT_MSG(payload[nop_offset] == 0xc0001000,
- "NOP hint is missing in CB setup sequence");
- last_cb_extent[col_buf_id].raw = payload[nop_offset + 1];
- } else {
- last_cb_extent[col_buf_id].raw = 0;
- }
- break;
- }
- case ContextRegs::CbColor0Cmask:
- case ContextRegs::CbColor1Cmask:
- case ContextRegs::CbColor2Cmask:
- case ContextRegs::CbColor3Cmask:
- case ContextRegs::CbColor4Cmask:
- case ContextRegs::CbColor5Cmask:
- case ContextRegs::CbColor6Cmask:
- case ContextRegs::CbColor7Cmask: {
- const auto col_buf_id = (reg_addr - ContextRegs::CbColor0Cmask) /
- (ContextRegs::CbColor1Cmask - ContextRegs::CbColor0Cmask);
- ASSERT(col_buf_id < NumColorBuffers);
-
- const auto nop_offset = header->type3.count;
- if (nop_offset == 0x04) {
- ASSERT_MSG(payload[nop_offset] == 0xc0001000,
- "NOP hint is missing in CB setup sequence");
- last_cb_extent[col_buf_id].raw = payload[nop_offset + 1];
- }
- break;
- }
- case ContextRegs::DbZInfo: {
- if (header->type3.count == 8) {
- ASSERT_MSG(payload[20] == 0xc0001000,
- "NOP hint is missing in DB setup sequence");
- last_db_extent.raw = payload[21];
- } else {
- last_db_extent.raw = 0;
- }
- break;
- }
- default:
- break;
- }
- break;
- }
- case PM4ItOpcode::SetShReg: {
- const auto* set_data = reinterpret_cast(header);
- std::memcpy(®s.reg_array[ShRegWordOffset + set_data->reg_offset], header + 2,
- (count - 1) * sizeof(u32));
- break;
- }
- case PM4ItOpcode::SetUconfigReg: {
- const auto* set_data = reinterpret_cast(header);
- std::memcpy(®s.reg_array[UconfigRegWordOffset + set_data->reg_offset], header + 2,
- (count - 1) * sizeof(u32));
- break;
- }
- case PM4ItOpcode::IndexType: {
- const auto* index_type = reinterpret_cast(header);
- regs.index_buffer_type.raw = index_type->raw;
- break;
- }
- case PM4ItOpcode::DrawIndex2: {
- const auto* draw_index = reinterpret_cast(header);
- regs.max_index_size = draw_index->max_size;
- regs.index_base_address.base_addr_lo = draw_index->index_base_lo;
- regs.index_base_address.base_addr_hi.Assign(draw_index->index_base_hi);
- regs.num_indices = draw_index->index_count;
- regs.draw_initiator = draw_index->draw_initiator;
- if (rasterizer) {
- const auto cmd_address = reinterpret_cast(header);
- rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:DrawIndex2", cmd_address));
- rasterizer->Breadcrumb(u64(cmd_address));
- rasterizer->Draw(true);
- rasterizer->ScopeMarkerEnd();
- }
- break;
- }
- case PM4ItOpcode::DrawIndexOffset2: {
- const auto* draw_index_off = reinterpret_cast(header);
- regs.max_index_size = draw_index_off->max_size;
- regs.num_indices = draw_index_off->index_count;
- regs.draw_initiator = draw_index_off->draw_initiator;
- if (rasterizer) {
- const auto cmd_address = reinterpret_cast(header);
- rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:DrawIndexOffset2", cmd_address));
- rasterizer->Breadcrumb(u64(cmd_address));
- rasterizer->Draw(true, draw_index_off->index_offset);
- rasterizer->ScopeMarkerEnd();
- }
- break;
- }
- case PM4ItOpcode::DrawIndexAuto: {
- const auto* draw_index = reinterpret_cast(header);
- regs.num_indices = draw_index->index_count;
- regs.draw_initiator = draw_index->draw_initiator;
- if (rasterizer) {
- const auto cmd_address = reinterpret_cast(header);
- rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:DrawIndexAuto", cmd_address));
- rasterizer->Breadcrumb(u64(cmd_address));
- rasterizer->Draw(false);
- rasterizer->ScopeMarkerEnd();
- }
- break;
- }
- case PM4ItOpcode::DispatchDirect: {
- const auto* dispatch_direct = reinterpret_cast(header);
- regs.cs_program.dim_x = dispatch_direct->dim_x;
- regs.cs_program.dim_y = dispatch_direct->dim_y;
- regs.cs_program.dim_z = dispatch_direct->dim_z;
- regs.cs_program.dispatch_initiator = dispatch_direct->dispatch_initiator;
- if (rasterizer && (regs.cs_program.dispatch_initiator & 1)) {
- const auto cmd_address = reinterpret_cast(header);
- rasterizer->ScopeMarkerBegin(fmt::format("dcb:{}:Dispatch", cmd_address));
- rasterizer->Breadcrumb(u64(cmd_address));
- rasterizer->DispatchDirect();
- rasterizer->ScopeMarkerEnd();
- }
- break;
- }
- case PM4ItOpcode::NumInstances: {
- const auto* num_instances = reinterpret_cast(header);
- regs.num_instances.num_instances = num_instances->num_instances;
- break;
- }
- case PM4ItOpcode::IndexBase: {
- const auto* index_base = reinterpret_cast(header);
- regs.index_base_address.base_addr_lo = index_base->addr_lo;
- regs.index_base_address.base_addr_hi.Assign(index_base->addr_hi);
- break;
- }
- case PM4ItOpcode::IndexBufferSize: {
- const auto* index_size = reinterpret_cast(header);
- regs.num_indices = index_size->num_indices;
- break;
- }
- case PM4ItOpcode::EventWrite: {
- // const auto* event = reinterpret_cast(header);
- break;
- }
- case PM4ItOpcode::EventWriteEos: {
- const auto* event_eos = reinterpret_cast(header);
- event_eos->SignalFence();
- break;
- }
- case PM4ItOpcode::EventWriteEop: {
- const auto* event_eop = reinterpret_cast(header);
- event_eop->SignalFence();
- break;
- }
- case PM4ItOpcode::DmaData: {
- const auto* dma_data = reinterpret_cast(header);
- break;
- }
- case PM4ItOpcode::WriteData: {
- const auto* write_data = reinterpret_cast(header);
- ASSERT(write_data->dst_sel.Value() == 2 || write_data->dst_sel.Value() == 5);
- const u32 data_size = (header->type3.count.Value() - 2) * 4;
- u64* address = write_data->Address();
- if (!write_data->wr_one_addr.Value()) {
- std::memcpy(address, write_data->data, data_size);
- } else {
- UNREACHABLE();
- }
- break;
- }
- case PM4ItOpcode::AcquireMem: {
- // const auto* acquire_mem = reinterpret_cast(header);
- break;
- }
- case PM4ItOpcode::WaitRegMem: {
- const auto* wait_reg_mem = reinterpret_cast(header);
- // ASSERT(wait_reg_mem->engine.Value() == PM4CmdWaitRegMem::Engine::Me);
- // Optimization: VO label waits are special because the emulator
- // will write to the label when presentation is finished. So if
- // there are no other submits to yield to we can sleep the thread
- // instead and allow other tasks to run.
- const u64* wait_addr = wait_reg_mem->Address();
- if (vo_port->IsVoLabel(wait_addr) && num_submits == 1) {
- vo_port->WaitVoLabel([&] { return wait_reg_mem->Test(); });
- }
- while (!wait_reg_mem->Test()) {
- mapped_queues[GfxQueueId].cs_state = regs.cs_program;
- TracyFiberLeave;
- co_yield {};
- TracyFiberEnter(dcb_task_name);
- regs.cs_program = mapped_queues[GfxQueueId].cs_state;
- }
- break;
- }
- case PM4ItOpcode::IncrementDeCounter: {
- ++cblock.de_count;
- break;
- }
- case PM4ItOpcode::WaitOnCeCounter: {
- while (cblock.ce_count <= cblock.de_count) {
- TracyFiberLeave;
- ce_task.handle.resume();
- TracyFiberEnter(dcb_task_name);
- }
- break;
- }
- case PM4ItOpcode::PfpSyncMe: {
- break;
- }
- default:
- UNREACHABLE_MSG("Unknown PM4 type 3 opcode {:#x} with count {}",
- static_cast(opcode), count);
- }
- dcb = dcb.subspan(header->type3.NumWords() + 1);
}
if (ce_task.handle) {
From dfb30ea955279e82f3c86cf9f0f8a0b59c2dcdfd Mon Sep 17 00:00:00 2001
From: Anton Kovalev
Date: Wed, 28 Aug 2024 11:24:15 +0200
Subject: [PATCH 45/69] Use pair of spans instead of references in copy command
buffers function
---
src/video_core/amdgpu/liverpool.cpp | 7 +++++--
src/video_core/amdgpu/liverpool.h | 7 ++++---
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp
index 931b5ea84..a3e64b7c0 100644
--- a/src/video_core/amdgpu/liverpool.cpp
+++ b/src/video_core/amdgpu/liverpool.cpp
@@ -569,7 +569,8 @@ Liverpool::Task Liverpool::ProcessCompute(std::span acb, int vqid) {
TracyFiberLeave;
}
-void Liverpool::CopyCmdBuffers(std::span& dcb, std::span& ccb) {
+std::pair, std::span> Liverpool::CopyCmdBuffers(
+ std::span dcb, std::span ccb) {
auto& queue = mapped_queues[GfxQueueId];
queue.dcb_buffer.resize(
@@ -594,13 +595,15 @@ void Liverpool::CopyCmdBuffers(std::span& dcb, std::span&
ccb = std::span{queue.ccb_buffer.begin() + prev_ccb_buffer_offset,
queue.ccb_buffer.begin() + queue.ccb_buffer_offset};
}
+
+ return std::make_pair(dcb, ccb);
}
void Liverpool::SubmitGfx(std::span dcb, std::span ccb) {
auto& queue = mapped_queues[GfxQueueId];
if (Config::copyGPUCmdBuffers()) {
- CopyCmdBuffers(dcb, ccb);
+ std::tie(dcb, ccb) = CopyCmdBuffers(dcb, ccb);
}
auto task = ProcessGraphics(dcb, ccb);
diff --git a/src/video_core/amdgpu/liverpool.h b/src/video_core/amdgpu/liverpool.h
index c12c8fdb6..14284bbc6 100644
--- a/src/video_core/amdgpu/liverpool.h
+++ b/src/video_core/amdgpu/liverpool.h
@@ -1111,7 +1111,8 @@ private:
Handle handle;
};
- void CopyCmdBuffers(std::span& dcb, std::span& ccb);
+ std::pair, std::span> CopyCmdBuffers(std::span dcb,
+ std::span ccb);
Task ProcessGraphics(std::span dcb, std::span ccb);
Task ProcessCeUpdate(std::span ccb);
Task ProcessCompute(std::span acb, int vqid);
@@ -1120,8 +1121,8 @@ private:
struct GpuQueue {
std::mutex m_access{};
- std::atomic_uint32_t dcb_buffer_offset;
- std::atomic_uint32_t ccb_buffer_offset;
+ std::atomic dcb_buffer_offset;
+ std::atomic ccb_buffer_offset;
std::vector dcb_buffer;
std::vector ccb_buffer;
std::queue submits{};
From 79e86a39fcc022f38104986c10252340025cfeda Mon Sep 17 00:00:00 2001
From: InvoxiPlayGames