mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-04 00:13:08 +00:00
Merge branch 'main' into main
This commit is contained in:
commit
657237991c
@ -102,7 +102,7 @@ PAD DOWN | DOWN |
|
|||||||
PAD LEFT | LEFT |
|
PAD LEFT | LEFT |
|
||||||
PAD RIGHT | RIGHT |
|
PAD RIGHT | RIGHT |
|
||||||
OPTIONS | RETURN |
|
OPTIONS | RETURN |
|
||||||
TOUCH PAD | SPACE |
|
BACK BUTTON / TOUCH PAD | SPACE |
|
||||||
L1 | Q |
|
L1 | Q |
|
||||||
R1 | U |
|
R1 | U |
|
||||||
L2 | E |
|
L2 | E |
|
||||||
|
@ -41,6 +41,7 @@ static std::string logFilter;
|
|||||||
static std::string logType = "async";
|
static std::string logType = "async";
|
||||||
static std::string userName = "shadPS4";
|
static std::string userName = "shadPS4";
|
||||||
static std::string updateChannel;
|
static std::string updateChannel;
|
||||||
|
static std::string backButtonBehavior = "left";
|
||||||
static bool useSpecialPad = false;
|
static bool useSpecialPad = false;
|
||||||
static int specialPadClass = 1;
|
static int specialPadClass = 1;
|
||||||
static bool isDebugDump = false;
|
static bool isDebugDump = false;
|
||||||
@ -56,6 +57,8 @@ static bool vkValidationGpu = false;
|
|||||||
static bool rdocEnable = false;
|
static bool rdocEnable = false;
|
||||||
static bool vkMarkers = false;
|
static bool vkMarkers = false;
|
||||||
static bool vkCrashDiagnostic = false;
|
static bool vkCrashDiagnostic = false;
|
||||||
|
static s16 cursorState = HideCursorState::Idle;
|
||||||
|
static int cursorHideTimeout = 5; // 5 seconds (default)
|
||||||
|
|
||||||
// Gui
|
// Gui
|
||||||
std::filesystem::path settings_install_dir = {};
|
std::filesystem::path settings_install_dir = {};
|
||||||
@ -95,6 +98,14 @@ int getBGMvolume() {
|
|||||||
return BGMvolume;
|
return BGMvolume;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s16 getCursorState() {
|
||||||
|
return cursorState;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getCursorHideTimeout() {
|
||||||
|
return cursorHideTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
u32 getScreenWidth() {
|
u32 getScreenWidth() {
|
||||||
return screenWidth;
|
return screenWidth;
|
||||||
}
|
}
|
||||||
@ -123,6 +134,10 @@ std::string getUpdateChannel() {
|
|||||||
return updateChannel;
|
return updateChannel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string getBackButtonBehavior() {
|
||||||
|
return backButtonBehavior;
|
||||||
|
}
|
||||||
|
|
||||||
bool getUseSpecialPad() {
|
bool getUseSpecialPad() {
|
||||||
return useSpecialPad;
|
return useSpecialPad;
|
||||||
}
|
}
|
||||||
@ -251,6 +266,14 @@ void setBGMvolume(int volume) {
|
|||||||
BGMvolume = volume;
|
BGMvolume = volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setCursorState(s16 newCursorState) {
|
||||||
|
cursorState = newCursorState;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setCursorHideTimeout(int newcursorHideTimeout) {
|
||||||
|
cursorHideTimeout = newcursorHideTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
void setLanguage(u32 language) {
|
void setLanguage(u32 language) {
|
||||||
m_language = language;
|
m_language = language;
|
||||||
}
|
}
|
||||||
@ -275,6 +298,10 @@ void setUpdateChannel(const std::string& type) {
|
|||||||
updateChannel = type;
|
updateChannel = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setBackButtonBehavior(const std::string& type) {
|
||||||
|
backButtonBehavior = type;
|
||||||
|
}
|
||||||
|
|
||||||
void setUseSpecialPad(bool use) {
|
void setUseSpecialPad(bool use) {
|
||||||
useSpecialPad = use;
|
useSpecialPad = use;
|
||||||
}
|
}
|
||||||
@ -435,11 +462,14 @@ void load(const std::filesystem::path& path) {
|
|||||||
}
|
}
|
||||||
isShowSplash = toml::find_or<bool>(general, "showSplash", true);
|
isShowSplash = toml::find_or<bool>(general, "showSplash", true);
|
||||||
isAutoUpdate = toml::find_or<bool>(general, "autoUpdate", false);
|
isAutoUpdate = toml::find_or<bool>(general, "autoUpdate", false);
|
||||||
|
backButtonBehavior = toml::find_or<std::string>(general, "backButtonBehavior", "left");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.contains("Input")) {
|
if (data.contains("Input")) {
|
||||||
const toml::value& input = data.at("Input");
|
const toml::value& input = data.at("Input");
|
||||||
|
|
||||||
|
cursorState = toml::find_or<int>(input, "cursorState", HideCursorState::Idle);
|
||||||
|
cursorHideTimeout = toml::find_or<int>(input, "cursorHideTimeout", 5);
|
||||||
useSpecialPad = toml::find_or<bool>(input, "useSpecialPad", false);
|
useSpecialPad = toml::find_or<bool>(input, "useSpecialPad", false);
|
||||||
specialPadClass = toml::find_or<int>(input, "specialPadClass", 1);
|
specialPadClass = toml::find_or<int>(input, "specialPadClass", 1);
|
||||||
}
|
}
|
||||||
@ -533,6 +563,9 @@ void save(const std::filesystem::path& path) {
|
|||||||
data["General"]["updateChannel"] = updateChannel;
|
data["General"]["updateChannel"] = updateChannel;
|
||||||
data["General"]["showSplash"] = isShowSplash;
|
data["General"]["showSplash"] = isShowSplash;
|
||||||
data["General"]["autoUpdate"] = isAutoUpdate;
|
data["General"]["autoUpdate"] = isAutoUpdate;
|
||||||
|
data["Input"]["cursorState"] = cursorState;
|
||||||
|
data["Input"]["cursorHideTimeout"] = cursorHideTimeout;
|
||||||
|
data["General"]["backButtonBehavior"] = backButtonBehavior;
|
||||||
data["Input"]["useSpecialPad"] = useSpecialPad;
|
data["Input"]["useSpecialPad"] = useSpecialPad;
|
||||||
data["Input"]["specialPadClass"] = specialPadClass;
|
data["Input"]["specialPadClass"] = specialPadClass;
|
||||||
data["GPU"]["screenWidth"] = screenWidth;
|
data["GPU"]["screenWidth"] = screenWidth;
|
||||||
@ -581,6 +614,8 @@ void setDefaultValues() {
|
|||||||
isFullscreen = false;
|
isFullscreen = false;
|
||||||
playBGM = false;
|
playBGM = false;
|
||||||
BGMvolume = 50;
|
BGMvolume = 50;
|
||||||
|
cursorState = HideCursorState::Idle;
|
||||||
|
cursorHideTimeout = 5;
|
||||||
screenWidth = 1280;
|
screenWidth = 1280;
|
||||||
screenHeight = 720;
|
screenHeight = 720;
|
||||||
logFilter = "";
|
logFilter = "";
|
||||||
@ -591,6 +626,7 @@ void setDefaultValues() {
|
|||||||
} else {
|
} else {
|
||||||
updateChannel = "Nightly";
|
updateChannel = "Nightly";
|
||||||
}
|
}
|
||||||
|
backButtonBehavior = "left";
|
||||||
useSpecialPad = false;
|
useSpecialPad = false;
|
||||||
specialPadClass = 1;
|
specialPadClass = 1;
|
||||||
isDebugDump = false;
|
isDebugDump = false;
|
||||||
|
@ -8,6 +8,9 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
namespace Config {
|
namespace Config {
|
||||||
|
|
||||||
|
enum HideCursorState : s16 { Never, Idle, Always };
|
||||||
|
|
||||||
void load(const std::filesystem::path& path);
|
void load(const std::filesystem::path& path);
|
||||||
void save(const std::filesystem::path& path);
|
void save(const std::filesystem::path& path);
|
||||||
|
|
||||||
@ -16,10 +19,14 @@ bool isFullscreenMode();
|
|||||||
bool getPlayBGM();
|
bool getPlayBGM();
|
||||||
int getBGMvolume();
|
int getBGMvolume();
|
||||||
|
|
||||||
|
s16 getCursorState();
|
||||||
|
int getCursorHideTimeout();
|
||||||
|
|
||||||
std::string getLogFilter();
|
std::string getLogFilter();
|
||||||
std::string getLogType();
|
std::string getLogType();
|
||||||
std::string getUserName();
|
std::string getUserName();
|
||||||
std::string getUpdateChannel();
|
std::string getUpdateChannel();
|
||||||
|
std::string getBackButtonBehavior();
|
||||||
|
|
||||||
bool getUseSpecialPad();
|
bool getUseSpecialPad();
|
||||||
int getSpecialPadClass();
|
int getSpecialPadClass();
|
||||||
@ -50,10 +57,13 @@ void setScreenHeight(u32 height);
|
|||||||
void setFullscreenMode(bool enable);
|
void setFullscreenMode(bool enable);
|
||||||
void setPlayBGM(bool enable);
|
void setPlayBGM(bool enable);
|
||||||
void setBGMvolume(int volume);
|
void setBGMvolume(int volume);
|
||||||
|
void setCursorState(s16 cursorState);
|
||||||
|
void setCursorHideTimeout(int newcursorHideTimeout);
|
||||||
void setLanguage(u32 language);
|
void setLanguage(u32 language);
|
||||||
void setNeoMode(bool enable);
|
void setNeoMode(bool enable);
|
||||||
void setUserName(const std::string& type);
|
void setUserName(const std::string& type);
|
||||||
void setUpdateChannel(const std::string& type);
|
void setUpdateChannel(const std::string& type);
|
||||||
|
void setBackButtonBehavior(const std::string& type);
|
||||||
|
|
||||||
void setUseSpecialPad(bool use);
|
void setUseSpecialPad(bool use);
|
||||||
void setSpecialPadClass(int type);
|
void setSpecialPadClass(int type);
|
||||||
|
@ -25,7 +25,7 @@ asm(".zerofill GUEST_SYSTEM,GUEST_SYSTEM,__guest_system,0xFBFC00000");
|
|||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|
||||||
static constexpr size_t BackingSize = SCE_KERNEL_MAIN_DMEM_SIZE;
|
static constexpr size_t BackingSize = SCE_KERNEL_MAIN_DMEM_SIZE_PRO;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
|
@ -227,6 +227,12 @@ void PSF::AddBinary(std::string key, std::vector<u8> value, bool update) {
|
|||||||
map_binaries.emplace(entry_list.size() - 1, std::move(value));
|
map_binaries.emplace(entry_list.size() - 1, std::move(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PSF::AddBinary(std::string key, uint64_t value, bool update) {
|
||||||
|
std::vector<u8> data(8);
|
||||||
|
std::memcpy(data.data(), &value, 8);
|
||||||
|
return AddBinary(std::move(key), std::move(data), update);
|
||||||
|
}
|
||||||
|
|
||||||
void PSF::AddString(std::string key, std::string value, bool update) {
|
void PSF::AddString(std::string key, std::string value, bool update) {
|
||||||
auto [it, index] = FindEntry(key);
|
auto [it, index] = FindEntry(key);
|
||||||
bool exist = it != entry_list.end();
|
bool exist = it != entry_list.end();
|
||||||
|
@ -67,6 +67,7 @@ public:
|
|||||||
std::optional<s32> GetInteger(std::string_view key) const;
|
std::optional<s32> GetInteger(std::string_view key) const;
|
||||||
|
|
||||||
void AddBinary(std::string key, std::vector<u8> value, bool update = false);
|
void AddBinary(std::string key, std::vector<u8> value, bool update = false);
|
||||||
|
void AddBinary(std::string key, uint64_t value, bool update = false); // rsv4 format
|
||||||
void AddString(std::string key, std::string value, bool update = false);
|
void AddString(std::string key, std::string value, bool update = false);
|
||||||
void AddInteger(std::string key, s32 value, bool update = false);
|
void AddInteger(std::string key, s32 value, bool update = false);
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
|
|
||||||
constexpr u64 SCE_KERNEL_MAIN_DMEM_SIZE = 5056_MB; // ~ 5GB
|
constexpr u64 SCE_KERNEL_MAIN_DMEM_SIZE = 5056_MB; // ~ 5GB
|
||||||
|
// TODO: Confirm this value on hardware.
|
||||||
|
constexpr u64 SCE_KERNEL_MAIN_DMEM_SIZE_PRO = 5568_MB; // ~ 5.5GB
|
||||||
|
|
||||||
namespace Libraries::Kernel {
|
namespace Libraries::Kernel {
|
||||||
|
|
||||||
|
@ -12,9 +12,9 @@
|
|||||||
#include "core/file_sys/fs.h"
|
#include "core/file_sys/fs.h"
|
||||||
#include "save_instance.h"
|
#include "save_instance.h"
|
||||||
|
|
||||||
constexpr u32 OrbisSaveDataBlocksMax = 32768; // 1 GiB
|
constexpr auto OrbisSaveDataBlocksMin2 = 96; // 3MiB
|
||||||
|
constexpr auto OrbisSaveDataBlocksMax = 32768; // 1 GiB
|
||||||
constexpr std::string_view sce_sys = "sce_sys"; // system folder inside save
|
constexpr std::string_view sce_sys = "sce_sys"; // system folder inside save
|
||||||
constexpr std::string_view max_block_file_name = "max_block.txt";
|
|
||||||
|
|
||||||
static Core::FileSys::MntPoints* g_mnt = Common::Singleton<Core::FileSys::MntPoints>::Instance();
|
static Core::FileSys::MntPoints* g_mnt = Common::Singleton<Core::FileSys::MntPoints>::Instance();
|
||||||
|
|
||||||
@ -58,18 +58,13 @@ std::filesystem::path SaveInstance::MakeDirSavePath(OrbisUserServiceUserId user_
|
|||||||
game_serial / dir_name;
|
game_serial / dir_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SaveInstance::GetMaxBlocks(const std::filesystem::path& save_path) {
|
uint64_t SaveInstance::GetMaxBlockFromSFO(const PSF& psf) {
|
||||||
Common::FS::IOFile max_blocks_file{save_path / sce_sys / max_block_file_name,
|
const auto vec = psf.GetBinary(std::string{SaveParams::SAVEDATA_BLOCKS});
|
||||||
Common::FS::FileAccessMode::Read};
|
if (!vec.has_value()) {
|
||||||
int max_blocks = 0;
|
return OrbisSaveDataBlocksMax;
|
||||||
if (max_blocks_file.IsOpen()) {
|
|
||||||
max_blocks = std::atoi(max_blocks_file.ReadString(16).c_str());
|
|
||||||
}
|
}
|
||||||
if (max_blocks <= 0) {
|
auto value = vec.value();
|
||||||
max_blocks = OrbisSaveDataBlocksMax;
|
return *(uint64_t*)value.data();
|
||||||
}
|
|
||||||
|
|
||||||
return max_blocks;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::filesystem::path SaveInstance::GetParamSFOPath(const std::filesystem::path& dir_path) {
|
std::filesystem::path SaveInstance::GetParamSFOPath(const std::filesystem::path& dir_path) {
|
||||||
@ -92,13 +87,15 @@ void SaveInstance::SetupDefaultParamSFO(PSF& param_sfo, std::string dir_name,
|
|||||||
P(String, SaveParams::SAVEDATA_DIRECTORY, std::move(dir_name));
|
P(String, SaveParams::SAVEDATA_DIRECTORY, std::move(dir_name));
|
||||||
P(Integer, SaveParams::SAVEDATA_LIST_PARAM, 0);
|
P(Integer, SaveParams::SAVEDATA_LIST_PARAM, 0);
|
||||||
P(String, SaveParams::TITLE_ID, std::move(game_serial));
|
P(String, SaveParams::TITLE_ID, std::move(game_serial));
|
||||||
|
P(Binary, SaveParams::SAVEDATA_BLOCKS, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00});
|
||||||
#undef P
|
#undef P
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveInstance::SaveInstance(int slot_num, OrbisUserServiceUserId user_id, std::string _game_serial,
|
SaveInstance::SaveInstance(int slot_num, OrbisUserServiceUserId user_id, std::string _game_serial,
|
||||||
std::string_view _dir_name, int max_blocks)
|
std::string_view _dir_name, int max_blocks)
|
||||||
: slot_num(slot_num), user_id(user_id), game_serial(std::move(_game_serial)),
|
: slot_num(slot_num), user_id(user_id), game_serial(std::move(_game_serial)),
|
||||||
dir_name(_dir_name), max_blocks(max_blocks) {
|
dir_name(_dir_name),
|
||||||
|
max_blocks(std::clamp(max_blocks, OrbisSaveDataBlocksMin2, OrbisSaveDataBlocksMax)) {
|
||||||
ASSERT(slot_num >= 0 && slot_num < 16);
|
ASSERT(slot_num >= 0 && slot_num < 16);
|
||||||
|
|
||||||
save_path = MakeDirSavePath(user_id, game_serial, dir_name);
|
save_path = MakeDirSavePath(user_id, game_serial, dir_name);
|
||||||
@ -187,7 +184,7 @@ void SaveInstance::SetupAndMount(bool read_only, bool copy_icon, bool ignore_cor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
max_blocks = GetMaxBlocks(save_path);
|
max_blocks = static_cast<int>(GetMaxBlockFromSFO(param_sfo));
|
||||||
|
|
||||||
g_mnt->Mount(save_path, mount_point, read_only);
|
g_mnt->Mount(save_path, mount_point, read_only);
|
||||||
mounted = true;
|
mounted = true;
|
||||||
@ -217,16 +214,13 @@ void SaveInstance::CreateFiles() {
|
|||||||
fs::create_directories(sce_sys_dir);
|
fs::create_directories(sce_sys_dir);
|
||||||
|
|
||||||
SetupDefaultParamSFO(param_sfo, dir_name, game_serial);
|
SetupDefaultParamSFO(param_sfo, dir_name, game_serial);
|
||||||
|
param_sfo.AddBinary(std::string{SaveParams::SAVEDATA_BLOCKS}, max_blocks, true);
|
||||||
|
|
||||||
const bool ok = param_sfo.Encode(param_sfo_path);
|
const bool ok = param_sfo.Encode(param_sfo_path);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
throw std::filesystem::filesystem_error("Failed to write param.sfo", param_sfo_path,
|
throw std::filesystem::filesystem_error("Failed to write param.sfo", param_sfo_path,
|
||||||
std::make_error_code(std::errc::permission_denied));
|
std::make_error_code(std::errc::permission_denied));
|
||||||
}
|
}
|
||||||
|
|
||||||
Common::FS::IOFile max_block{sce_sys_dir / max_block_file_name,
|
|
||||||
Common::FS::FileAccessMode::Write};
|
|
||||||
max_block.WriteString(std::to_string(max_blocks == 0 ? OrbisSaveDataBlocksMax : max_blocks));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Libraries::SaveData
|
} // namespace Libraries::SaveData
|
@ -62,7 +62,7 @@ public:
|
|||||||
std::string_view game_serial,
|
std::string_view game_serial,
|
||||||
std::string_view dir_name);
|
std::string_view dir_name);
|
||||||
|
|
||||||
static int GetMaxBlocks(const std::filesystem::path& save_path);
|
static uint64_t GetMaxBlockFromSFO(const PSF& psf);
|
||||||
|
|
||||||
// Get param.sfo path from a dir_path generated by MakeDirSavePath
|
// Get param.sfo path from a dir_path generated by MakeDirSavePath
|
||||||
static std::filesystem::path GetParamSFOPath(const std::filesystem::path& dir_path);
|
static std::filesystem::path GetParamSFOPath(const std::filesystem::path& dir_path);
|
||||||
|
@ -445,7 +445,7 @@ static Error saveDataMount(const OrbisSaveDataMount2* mount_info,
|
|||||||
fs::create_directories(root_save);
|
fs::create_directories(root_save);
|
||||||
const auto available = fs::space(root_save).available;
|
const auto available = fs::space(root_save).available;
|
||||||
|
|
||||||
auto requested_size = mount_info->blocks * OrbisSaveDataBlockSize;
|
auto requested_size = save_instance.GetMaxBlocks() * OrbisSaveDataBlockSize;
|
||||||
if (requested_size > available) {
|
if (requested_size > available) {
|
||||||
mount_result->required_blocks = (requested_size - available) / OrbisSaveDataBlockSize;
|
mount_result->required_blocks = (requested_size - available) / OrbisSaveDataBlockSize;
|
||||||
return Error::NO_SPACE_FS;
|
return Error::NO_SPACE_FS;
|
||||||
@ -830,10 +830,11 @@ Error PS4_SYSV_ABI sceSaveDataDirNameSearch(const OrbisSaveDataDirNameSearchCond
|
|||||||
LOG_ERROR(Lib_SaveData, "Failed to read SFO: {}", fmt::UTF(sfo_path.u8string()));
|
LOG_ERROR(Lib_SaveData, "Failed to read SFO: {}", fmt::UTF(sfo_path.u8string()));
|
||||||
ASSERT_MSG(false, "Failed to read SFO");
|
ASSERT_MSG(false, "Failed to read SFO");
|
||||||
}
|
}
|
||||||
map_dir_sfo.emplace(dir_name, std::move(sfo));
|
|
||||||
|
|
||||||
size_t size = Common::FS::GetDirectorySize(dir_path);
|
size_t size = Common::FS::GetDirectorySize(dir_path);
|
||||||
size_t total = SaveInstance::GetMaxBlocks(dir_path);
|
size_t total = SaveInstance::GetMaxBlockFromSFO(sfo);
|
||||||
|
|
||||||
|
map_dir_sfo.emplace(dir_name, std::move(sfo));
|
||||||
map_free_size.emplace(dir_name, total - size / OrbisSaveDataBlockSize);
|
map_free_size.emplace(dir_name, total - size / OrbisSaveDataBlockSize);
|
||||||
map_max_blocks.emplace(dir_name, total);
|
map_max_blocks.emplace(dir_name, total);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "common/alignment.h"
|
#include "common/alignment.h"
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
|
#include "common/config.h"
|
||||||
#include "common/debug.h"
|
#include "common/debug.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
#include "core/libraries/kernel/memory_management.h"
|
#include "core/libraries/kernel/memory_management.h"
|
||||||
@ -39,8 +40,10 @@ MemoryManager::MemoryManager() {
|
|||||||
MemoryManager::~MemoryManager() = default;
|
MemoryManager::~MemoryManager() = default;
|
||||||
|
|
||||||
void MemoryManager::SetupMemoryRegions(u64 flexible_size) {
|
void MemoryManager::SetupMemoryRegions(u64 flexible_size) {
|
||||||
|
const auto total_size =
|
||||||
|
Config::isNeoMode() ? SCE_KERNEL_MAIN_DMEM_SIZE_PRO : SCE_KERNEL_MAIN_DMEM_SIZE;
|
||||||
total_flexible_size = flexible_size;
|
total_flexible_size = flexible_size;
|
||||||
total_direct_size = SCE_KERNEL_MAIN_DMEM_SIZE - flexible_size;
|
total_direct_size = total_size - flexible_size;
|
||||||
|
|
||||||
// Insert an area that covers direct memory physical block.
|
// Insert an area that covers direct memory physical block.
|
||||||
// Note that this should never be called after direct memory allocations have been made.
|
// Note that this should never be called after direct memory allocations have been made.
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
// Based on imgui_impl_sdl3.cpp from Dear ImGui repository
|
// Based on imgui_impl_sdl3.cpp from Dear ImGui repository
|
||||||
|
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
|
#include "common/config.h"
|
||||||
#include "imgui_impl_sdl3.h"
|
#include "imgui_impl_sdl3.h"
|
||||||
|
|
||||||
// SDL
|
// SDL
|
||||||
@ -36,6 +37,8 @@ struct SdlData {
|
|||||||
SDL_Cursor* mouse_cursors[ImGuiMouseCursor_COUNT]{};
|
SDL_Cursor* mouse_cursors[ImGuiMouseCursor_COUNT]{};
|
||||||
SDL_Cursor* mouse_last_cursor{};
|
SDL_Cursor* mouse_last_cursor{};
|
||||||
int mouse_pending_leave_frame{};
|
int mouse_pending_leave_frame{};
|
||||||
|
ImVec2 prev_mouse_pos{0, 0};
|
||||||
|
Uint64 lastCursorMoveTime{};
|
||||||
|
|
||||||
// Gamepad handling
|
// Gamepad handling
|
||||||
ImVector<SDL_Gamepad*> gamepads{};
|
ImVector<SDL_Gamepad*> gamepads{};
|
||||||
@ -371,6 +374,13 @@ bool ProcessEvent(const SDL_Event* event) {
|
|||||||
? ImGuiMouseSource_TouchScreen
|
? ImGuiMouseSource_TouchScreen
|
||||||
: ImGuiMouseSource_Mouse);
|
: ImGuiMouseSource_Mouse);
|
||||||
io.AddMousePosEvent(mouse_pos.x, mouse_pos.y);
|
io.AddMousePosEvent(mouse_pos.x, mouse_pos.y);
|
||||||
|
if (mouse_pos.x != bd->prev_mouse_pos.x || mouse_pos.y != bd->prev_mouse_pos.y) {
|
||||||
|
bd->prev_mouse_pos.x = mouse_pos.x;
|
||||||
|
bd->prev_mouse_pos.y = mouse_pos.y;
|
||||||
|
if (Config::getCursorState() == Config::HideCursorState::Idle) {
|
||||||
|
bd->lastCursorMoveTime = bd->time;
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case SDL_EVENT_MOUSE_WHEEL: {
|
case SDL_EVENT_MOUSE_WHEEL: {
|
||||||
@ -447,6 +457,7 @@ bool ProcessEvent(const SDL_Event* event) {
|
|||||||
return false;
|
return false;
|
||||||
bd->mouse_window_id = event->window.windowID;
|
bd->mouse_window_id = event->window.windowID;
|
||||||
bd->mouse_pending_leave_frame = 0;
|
bd->mouse_pending_leave_frame = 0;
|
||||||
|
bd->lastCursorMoveTime = bd->time;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// - In some cases, when detaching a window from main viewport SDL may send
|
// - In some cases, when detaching a window from main viewport SDL may send
|
||||||
@ -459,6 +470,7 @@ bool ProcessEvent(const SDL_Event* event) {
|
|||||||
if (GetViewportForWindowId(event->window.windowID) == NULL)
|
if (GetViewportForWindowId(event->window.windowID) == NULL)
|
||||||
return false;
|
return false;
|
||||||
bd->mouse_pending_leave_frame = ImGui::GetFrameCount() + 1;
|
bd->mouse_pending_leave_frame = ImGui::GetFrameCount() + 1;
|
||||||
|
bd->lastCursorMoveTime = bd->time;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case SDL_EVENT_WINDOW_FOCUS_GAINED:
|
case SDL_EVENT_WINDOW_FOCUS_GAINED:
|
||||||
@ -600,7 +612,18 @@ static void UpdateMouseData() {
|
|||||||
int window_x, window_y;
|
int window_x, window_y;
|
||||||
SDL_GetGlobalMouseState(&mouse_x_global, &mouse_y_global);
|
SDL_GetGlobalMouseState(&mouse_x_global, &mouse_y_global);
|
||||||
SDL_GetWindowPosition(focused_window, &window_x, &window_y);
|
SDL_GetWindowPosition(focused_window, &window_x, &window_y);
|
||||||
io.AddMousePosEvent(mouse_x_global - (float)window_x, mouse_y_global - (float)window_y);
|
mouse_x_global -= (float)window_x;
|
||||||
|
mouse_y_global -= (float)window_y;
|
||||||
|
io.AddMousePosEvent(mouse_x_global, mouse_y_global);
|
||||||
|
// SDL_EVENT_MOUSE_MOTION isn't triggered before the first frame is rendered
|
||||||
|
// force update the prev_cursor coords
|
||||||
|
if (mouse_x_global != bd->prev_mouse_pos.x || mouse_y_global != bd->prev_mouse_pos.y &&
|
||||||
|
bd->prev_mouse_pos.y == 0 &&
|
||||||
|
bd->prev_mouse_pos.x == 0) {
|
||||||
|
bd->prev_mouse_pos.x = mouse_x_global;
|
||||||
|
bd->prev_mouse_pos.y = mouse_y_global;
|
||||||
|
bd->lastCursorMoveTime = bd->time;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -611,10 +634,25 @@ static void UpdateMouseCursor() {
|
|||||||
return;
|
return;
|
||||||
SdlData* bd = GetBackendData();
|
SdlData* bd = GetBackendData();
|
||||||
|
|
||||||
|
s16 cursorState = Config::getCursorState();
|
||||||
ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor();
|
ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor();
|
||||||
if (io.MouseDrawCursor || imgui_cursor == ImGuiMouseCursor_None) {
|
if (io.MouseDrawCursor || imgui_cursor == ImGuiMouseCursor_None ||
|
||||||
|
cursorState == Config::HideCursorState::Always) {
|
||||||
// Hide OS mouse cursor if imgui is drawing it or if it wants no cursor
|
// Hide OS mouse cursor if imgui is drawing it or if it wants no cursor
|
||||||
SDL_HideCursor();
|
SDL_HideCursor();
|
||||||
|
|
||||||
|
} else if (cursorState == Config::HideCursorState::Idle &&
|
||||||
|
bd->time - bd->lastCursorMoveTime >=
|
||||||
|
Config::getCursorHideTimeout() * SDL_GetPerformanceFrequency()) {
|
||||||
|
|
||||||
|
bool wasCursorVisible = SDL_CursorVisible();
|
||||||
|
SDL_HideCursor();
|
||||||
|
|
||||||
|
if (wasCursorVisible) {
|
||||||
|
SDL_WarpMouseInWindow(SDL_GetKeyboardFocus(), bd->prev_mouse_pos.x,
|
||||||
|
bd->prev_mouse_pos.y); // Force refresh the cursor state
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Show OS mouse cursor
|
// Show OS mouse cursor
|
||||||
SDL_Cursor* expected_cursor = bd->mouse_cursors[imgui_cursor]
|
SDL_Cursor* expected_cursor = bd->mouse_cursors[imgui_cursor]
|
||||||
|
@ -374,11 +374,17 @@ void CheckUpdate::Install() {
|
|||||||
QString userPath;
|
QString userPath;
|
||||||
Common::FS::PathToQString(userPath, Common::FS::GetUserPath(Common::FS::PathType::UserDir));
|
Common::FS::PathToQString(userPath, Common::FS::GetUserPath(Common::FS::PathType::UserDir));
|
||||||
|
|
||||||
QString startingUpdate = tr("Starting Update...");
|
|
||||||
QString tempDirPath = userPath + "/temp_download_update";
|
|
||||||
QString rootPath;
|
QString rootPath;
|
||||||
Common::FS::PathToQString(rootPath, std::filesystem::current_path());
|
Common::FS::PathToQString(rootPath, std::filesystem::current_path());
|
||||||
|
|
||||||
|
QString tempDirPath = userPath + "/temp_download_update";
|
||||||
|
QString startingUpdate = tr("Starting Update...");
|
||||||
|
|
||||||
|
QString binaryStartingUpdate;
|
||||||
|
for (QChar c : startingUpdate) {
|
||||||
|
binaryStartingUpdate.append(QString::number(c.unicode(), 2).rightJustified(16, '0'));
|
||||||
|
}
|
||||||
|
|
||||||
QString scriptContent;
|
QString scriptContent;
|
||||||
QString scriptFileName;
|
QString scriptFileName;
|
||||||
QStringList arguments;
|
QStringList arguments;
|
||||||
@ -389,7 +395,13 @@ void CheckUpdate::Install() {
|
|||||||
scriptFileName = tempDirPath + "/update.ps1";
|
scriptFileName = tempDirPath + "/update.ps1";
|
||||||
scriptContent = QStringLiteral(
|
scriptContent = QStringLiteral(
|
||||||
"Set-ExecutionPolicy Bypass -Scope Process -Force\n"
|
"Set-ExecutionPolicy Bypass -Scope Process -Force\n"
|
||||||
"Write-Output '%1'\n"
|
"$binaryStartingUpdate = '%1'\n"
|
||||||
|
"$chars = @()\n"
|
||||||
|
"for ($i = 0; $i -lt $binaryStartingUpdate.Length; $i += 16) {\n"
|
||||||
|
" $chars += [char]([convert]::ToInt32($binaryStartingUpdate.Substring($i, 16), 2))\n"
|
||||||
|
"}\n"
|
||||||
|
"$startingUpdate = -join $chars\n"
|
||||||
|
"Write-Output $startingUpdate\n"
|
||||||
"Expand-Archive -Path '%2\\temp_download_update.zip' -DestinationPath '%2' -Force\n"
|
"Expand-Archive -Path '%2\\temp_download_update.zip' -DestinationPath '%2' -Force\n"
|
||||||
"Start-Sleep -Seconds 3\n"
|
"Start-Sleep -Seconds 3\n"
|
||||||
"Copy-Item -Recurse -Force '%2\\*' '%3\\'\n"
|
"Copy-Item -Recurse -Force '%2\\*' '%3\\'\n"
|
||||||
@ -454,6 +466,10 @@ void CheckUpdate::Install() {
|
|||||||
" sleep 2\n"
|
" sleep 2\n"
|
||||||
" extract_file\n"
|
" extract_file\n"
|
||||||
" sleep 2\n"
|
" sleep 2\n"
|
||||||
|
" if pgrep -f \"Shadps4-qt.AppImage\" > /dev/null; then\n"
|
||||||
|
" pkill -f \"Shadps4-qt.AppImage\"\n"
|
||||||
|
" sleep 2\n"
|
||||||
|
" fi\n"
|
||||||
" cp -r \"%2/\"* \"%3/\"\n"
|
" cp -r \"%2/\"* \"%3/\"\n"
|
||||||
" sleep 2\n"
|
" sleep 2\n"
|
||||||
" rm \"%3/update.sh\"\n"
|
" rm \"%3/update.sh\"\n"
|
||||||
@ -508,7 +524,12 @@ void CheckUpdate::Install() {
|
|||||||
QFile scriptFile(scriptFileName);
|
QFile scriptFile(scriptFileName);
|
||||||
if (scriptFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
if (scriptFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||||
QTextStream out(&scriptFile);
|
QTextStream out(&scriptFile);
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
out << scriptContent.arg(binaryStartingUpdate).arg(tempDirPath).arg(rootPath);
|
||||||
|
#endif
|
||||||
|
#if defined(Q_OS_LINUX) || defined(Q_OS_MAC)
|
||||||
out << scriptContent.arg(startingUpdate).arg(tempDirPath).arg(rootPath);
|
out << scriptContent.arg(startingUpdate).arg(tempDirPath).arg(rootPath);
|
||||||
|
#endif
|
||||||
scriptFile.close();
|
scriptFile.close();
|
||||||
|
|
||||||
// Make the script executable on Unix-like systems
|
// Make the script executable on Unix-like systems
|
||||||
@ -525,4 +546,4 @@ void CheckUpdate::Install() {
|
|||||||
this, tr("Error"),
|
this, tr("Error"),
|
||||||
QString(tr("Failed to create the update script file") + ":\n" + scriptFileName));
|
QString(tr("Failed to create the update script file") + ":\n" + scriptFileName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,8 @@ QStringList languageNames = {"Arabic",
|
|||||||
const QVector<int> languageIndexes = {21, 23, 14, 6, 18, 1, 12, 22, 2, 4, 25, 24, 29, 5, 0,
|
const QVector<int> languageIndexes = {21, 23, 14, 6, 18, 1, 12, 22, 2, 4, 25, 24, 29, 5, 0,
|
||||||
9, 15, 16, 17, 7, 26, 8, 11, 20, 3, 13, 27, 10, 19, 28};
|
9, 15, 16, 17, 7, 26, 8, 11, 20, 3, 13, 27, 10, 19, 28};
|
||||||
|
|
||||||
|
QStringList hideCursorStates = {"Never", "Idle", "Always"};
|
||||||
|
|
||||||
SettingsDialog::SettingsDialog(std::span<const QString> physical_devices, QWidget* parent)
|
SettingsDialog::SettingsDialog(std::span<const QString> physical_devices, QWidget* parent)
|
||||||
: QDialog(parent), ui(new Ui::SettingsDialog) {
|
: QDialog(parent), ui(new Ui::SettingsDialog) {
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
@ -67,6 +69,8 @@ SettingsDialog::SettingsDialog(std::span<const QString> physical_devices, QWidge
|
|||||||
completer->setCaseSensitivity(Qt::CaseInsensitive);
|
completer->setCaseSensitivity(Qt::CaseInsensitive);
|
||||||
ui->consoleLanguageComboBox->setCompleter(completer);
|
ui->consoleLanguageComboBox->setCompleter(completer);
|
||||||
|
|
||||||
|
ui->hideCursorComboBox->addItems(hideCursorStates);
|
||||||
|
|
||||||
InitializeEmulatorLanguages();
|
InitializeEmulatorLanguages();
|
||||||
LoadValuesFromConfig();
|
LoadValuesFromConfig();
|
||||||
|
|
||||||
@ -98,6 +102,15 @@ SettingsDialog::SettingsDialog(std::span<const QString> physical_devices, QWidge
|
|||||||
ui->buttonBox->button(QDialogButtonBox::RestoreDefaults)->setText(tr("Restore Defaults"));
|
ui->buttonBox->button(QDialogButtonBox::RestoreDefaults)->setText(tr("Restore Defaults"));
|
||||||
ui->buttonBox->button(QDialogButtonBox::Close)->setText(tr("Close"));
|
ui->buttonBox->button(QDialogButtonBox::Close)->setText(tr("Close"));
|
||||||
|
|
||||||
|
ui->backButtonBehaviorComboBox->addItem(tr("Touchpad Left"), "left");
|
||||||
|
ui->backButtonBehaviorComboBox->addItem(tr("Touchpad Center"), "center");
|
||||||
|
ui->backButtonBehaviorComboBox->addItem(tr("Touchpad Right"), "right");
|
||||||
|
ui->backButtonBehaviorComboBox->addItem(tr("None"), "none");
|
||||||
|
|
||||||
|
QString currentBackButtonBehavior = QString::fromStdString(Config::getBackButtonBehavior());
|
||||||
|
int index = ui->backButtonBehaviorComboBox->findData(currentBackButtonBehavior);
|
||||||
|
ui->backButtonBehaviorComboBox->setCurrentIndex(index != -1 ? index : 0);
|
||||||
|
|
||||||
connect(ui->tabWidgetSettings, &QTabWidget::currentChanged, this,
|
connect(ui->tabWidgetSettings, &QTabWidget::currentChanged, this,
|
||||||
[this]() { ui->buttonBox->button(QDialogButtonBox::Close)->setFocus(); });
|
[this]() { ui->buttonBox->button(QDialogButtonBox::Close)->setFocus(); });
|
||||||
|
|
||||||
@ -151,6 +164,26 @@ SettingsDialog::SettingsDialog(std::span<const QString> physical_devices, QWidge
|
|||||||
Config::setBGMvolume(val);
|
Config::setBGMvolume(val);
|
||||||
BackgroundMusicPlayer::getInstance().setVolume(val);
|
BackgroundMusicPlayer::getInstance().setVolume(val);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
connect(ui->backButtonBehaviorComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||||
|
this, [this](int index) {
|
||||||
|
if (index >= 0 && index < ui->backButtonBehaviorComboBox->count()) {
|
||||||
|
QString data = ui->backButtonBehaviorComboBox->itemData(index).toString();
|
||||||
|
Config::setBackButtonBehavior(data.toStdString());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Input TAB
|
||||||
|
{
|
||||||
|
connect(ui->hideCursorComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
|
||||||
|
[this](s16 index) {
|
||||||
|
Config::setCursorState(index);
|
||||||
|
OnCursorStateChanged(index);
|
||||||
|
});
|
||||||
|
|
||||||
|
connect(ui->idleTimeoutSpinBox, &QSpinBox::valueChanged, this,
|
||||||
|
[](int index) { Config::setCursorHideTimeout(index); });
|
||||||
}
|
}
|
||||||
|
|
||||||
// GPU TAB
|
// GPU TAB
|
||||||
@ -204,6 +237,7 @@ SettingsDialog::SettingsDialog(std::span<const QString> physical_devices, QWidge
|
|||||||
ui->logFilter->installEventFilter(this);
|
ui->logFilter->installEventFilter(this);
|
||||||
ui->updaterGroupBox->installEventFilter(this);
|
ui->updaterGroupBox->installEventFilter(this);
|
||||||
ui->GUIgroupBox->installEventFilter(this);
|
ui->GUIgroupBox->installEventFilter(this);
|
||||||
|
ui->backButtonBehaviorGroupBox->installEventFilter(this);
|
||||||
|
|
||||||
// Graphics
|
// Graphics
|
||||||
ui->graphicsAdapterGroupBox->installEventFilter(this);
|
ui->graphicsAdapterGroupBox->installEventFilter(this);
|
||||||
@ -228,6 +262,9 @@ void SettingsDialog::LoadValuesFromConfig() {
|
|||||||
std::find(languageIndexes.begin(), languageIndexes.end(), Config::GetLanguage())) %
|
std::find(languageIndexes.begin(), languageIndexes.end(), Config::GetLanguage())) %
|
||||||
languageIndexes.size());
|
languageIndexes.size());
|
||||||
ui->emulatorLanguageComboBox->setCurrentIndex(languages[Config::getEmulatorLanguage()]);
|
ui->emulatorLanguageComboBox->setCurrentIndex(languages[Config::getEmulatorLanguage()]);
|
||||||
|
ui->hideCursorComboBox->setCurrentIndex(Config::getCursorState());
|
||||||
|
OnCursorStateChanged(Config::getCursorState());
|
||||||
|
ui->idleTimeoutSpinBox->setValue(Config::getCursorHideTimeout());
|
||||||
ui->graphicsAdapterBox->setCurrentIndex(Config::getGpuId() + 1);
|
ui->graphicsAdapterBox->setCurrentIndex(Config::getGpuId() + 1);
|
||||||
ui->widthSpinBox->setValue(Config::getScreenWidth());
|
ui->widthSpinBox->setValue(Config::getScreenWidth());
|
||||||
ui->heightSpinBox->setValue(Config::getScreenHeight());
|
ui->heightSpinBox->setValue(Config::getScreenHeight());
|
||||||
@ -258,6 +295,10 @@ void SettingsDialog::LoadValuesFromConfig() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ui->updateComboBox->setCurrentText(QString::fromStdString(updateChannel));
|
ui->updateComboBox->setCurrentText(QString::fromStdString(updateChannel));
|
||||||
|
|
||||||
|
QString backButtonBehavior = QString::fromStdString(Config::getBackButtonBehavior());
|
||||||
|
int index = ui->backButtonBehaviorComboBox->findData(backButtonBehavior);
|
||||||
|
ui->backButtonBehaviorComboBox->setCurrentIndex(index != -1 ? index : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsDialog::InitializeEmulatorLanguages() {
|
void SettingsDialog::InitializeEmulatorLanguages() {
|
||||||
@ -289,6 +330,18 @@ void SettingsDialog::OnLanguageChanged(int index) {
|
|||||||
emit LanguageChanged(ui->emulatorLanguageComboBox->itemData(index).toString().toStdString());
|
emit LanguageChanged(ui->emulatorLanguageComboBox->itemData(index).toString().toStdString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsDialog::OnCursorStateChanged(s16 index) {
|
||||||
|
if (index == -1)
|
||||||
|
return;
|
||||||
|
if (index == Config::HideCursorState::Idle) {
|
||||||
|
ui->idleTimeoutGroupBox->show();
|
||||||
|
} else {
|
||||||
|
if (!ui->idleTimeoutGroupBox->isHidden()) {
|
||||||
|
ui->idleTimeoutGroupBox->hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int SettingsDialog::exec() {
|
int SettingsDialog::exec() {
|
||||||
return QDialog::exec();
|
return QDialog::exec();
|
||||||
}
|
}
|
||||||
@ -319,6 +372,8 @@ void SettingsDialog::updateNoteTextEdit(const QString& elementName) {
|
|||||||
text = tr("updaterGroupBox");
|
text = tr("updaterGroupBox");
|
||||||
} else if (elementName == "GUIgroupBox") {
|
} else if (elementName == "GUIgroupBox") {
|
||||||
text = tr("GUIgroupBox");
|
text = tr("GUIgroupBox");
|
||||||
|
} else if (elementName == "backButtonBehaviorGroupBox") {
|
||||||
|
text = tr("backButtonBehaviorGroupBox");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Graphics
|
// Graphics
|
||||||
@ -334,8 +389,6 @@ void SettingsDialog::updateNoteTextEdit(const QString& elementName) {
|
|||||||
text = tr("dumpShadersCheckBox");
|
text = tr("dumpShadersCheckBox");
|
||||||
} else if (elementName == "nullGpuCheckBox") {
|
} else if (elementName == "nullGpuCheckBox") {
|
||||||
text = tr("nullGpuCheckBox");
|
text = tr("nullGpuCheckBox");
|
||||||
} else if (elementName == "dumpPM4CheckBox") {
|
|
||||||
text = tr("dumpPM4CheckBox");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debug
|
// Debug
|
||||||
@ -352,7 +405,7 @@ void SettingsDialog::updateNoteTextEdit(const QString& elementName) {
|
|||||||
ui->descriptionText->setText(text.replace("\\n", "\n"));
|
ui->descriptionText->setText(text.replace("\\n", "\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SettingsDialog::override(QObject* obj, QEvent* event) {
|
bool SettingsDialog::eventFilter(QObject* obj, QEvent* event) {
|
||||||
if (event->type() == QEvent::Enter || event->type() == QEvent::Leave) {
|
if (event->type() == QEvent::Enter || event->type() == QEvent::Leave) {
|
||||||
if (qobject_cast<QWidget*>(obj)) {
|
if (qobject_cast<QWidget*>(obj)) {
|
||||||
bool hovered = (event->type() == QEvent::Enter);
|
bool hovered = (event->type() == QEvent::Enter);
|
||||||
|
@ -21,7 +21,7 @@ public:
|
|||||||
explicit SettingsDialog(std::span<const QString> physical_devices, QWidget* parent = nullptr);
|
explicit SettingsDialog(std::span<const QString> physical_devices, QWidget* parent = nullptr);
|
||||||
~SettingsDialog();
|
~SettingsDialog();
|
||||||
|
|
||||||
bool override(QObject* obj, QEvent* event);
|
bool eventFilter(QObject* obj, QEvent* event) override;
|
||||||
void updateNoteTextEdit(const QString& groupName);
|
void updateNoteTextEdit(const QString& groupName);
|
||||||
|
|
||||||
int exec() override;
|
int exec() override;
|
||||||
@ -33,6 +33,7 @@ private:
|
|||||||
void LoadValuesFromConfig();
|
void LoadValuesFromConfig();
|
||||||
void InitializeEmulatorLanguages();
|
void InitializeEmulatorLanguages();
|
||||||
void OnLanguageChanged(int index);
|
void OnLanguageChanged(int index);
|
||||||
|
void OnCursorStateChanged(s16 index);
|
||||||
|
|
||||||
std::unique_ptr<Ui::SettingsDialog> ui;
|
std::unique_ptr<Ui::SettingsDialog> ui;
|
||||||
|
|
||||||
|
@ -34,9 +34,18 @@
|
|||||||
<iconset>
|
<iconset>
|
||||||
<normaloff>:/images/shadps4.ico</normaloff>:/images/shadps4.ico</iconset>
|
<normaloff>:/images/shadps4.ico</normaloff>:/images/shadps4.ico</iconset>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="sizeGripEnabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="modal">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<layout class="QVBoxLayout" name="settingsDialogLayout">
|
<layout class="QVBoxLayout" name="settingsDialogLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QScrollArea" name="scrollArea">
|
<widget class="QScrollArea" name="scrollArea">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
<property name="frameShape">
|
<property name="frameShape">
|
||||||
<enum>QFrame::Shape::NoFrame</enum>
|
<enum>QFrame::Shape::NoFrame</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -51,8 +60,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>836</width>
|
<width>832</width>
|
||||||
<height>446</height>
|
<height>431</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -62,7 +71,7 @@
|
|||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>0</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="generalTab">
|
<widget class="QWidget" name="generalTab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
@ -369,7 +378,7 @@
|
|||||||
<x>10</x>
|
<x>10</x>
|
||||||
<y>30</y>
|
<y>30</y>
|
||||||
<width>241</width>
|
<width>241</width>
|
||||||
<height>71</height>
|
<height>92</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
@ -442,17 +451,220 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer">
|
<layout class="QVBoxLayout" name="ControllerTabLayoutRight" stretch="1">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="ControllerGroupBox">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Controller Settings</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QGroupBox" name="backButtonBehaviorGroupBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>12</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>241</width>
|
||||||
|
<height>65</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Back Button Behavior</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QComboBox" name="backButtonBehaviorComboBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>12</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>217</width>
|
||||||
|
<height>28</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="inputTab">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Input</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="inputTabVLayout" stretch="0,0">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="inputTabHLayoutTop" stretch="1,1,1">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="cursorTabLayoutLeft">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="HideCursor">
|
||||||
|
<property name="title">
|
||||||
|
<string>Cursor</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="inputCursorLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="hideCursorGroupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Hide Cursor</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="hideCursorLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="hideCursorComboBox"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="idleTimeoutGroupBox">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>85</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Hide Cursor Idle Timeout</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop</set>
|
||||||
|
</property>
|
||||||
|
<property name="flat">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="IdleTimeoutLayout" stretch="0,0">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>70</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>11</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="idleTimeoutSpinBox">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>80</width>
|
||||||
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="layoutDirection">
|
||||||
|
<enum>Qt::LayoutDirection::LeftToRight</enum>
|
||||||
|
</property>
|
||||||
|
<property name="wrapping">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="buttonSymbols">
|
||||||
|
<enum>QAbstractSpinBox::ButtonSymbols::UpDownArrows</enum>
|
||||||
|
</property>
|
||||||
|
<property name="suffix">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>3600</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<property name="displayIntegerBase">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="idleTimeoutDurationLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>s</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="emptyTabLayoutMiddle">
|
||||||
|
<item>
|
||||||
|
<spacer name="emptyHorizontalSpacerMiddle">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="emptyTabLayoutRight">
|
||||||
|
<item>
|
||||||
|
<spacer name="emptyHorizontalSpacerRight">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="inputTabHLayoutBottom">
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<spacer name="emptyVerticalSpacerBottom">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Orientation::Horizontal</enum>
|
<enum>Qt::Orientation::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeType">
|
<property name="sizeType">
|
||||||
<enum>QSizePolicy::Policy::Expanding</enum>
|
<enum>QSizePolicy::Policy::MinimumExpanding</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
<width>0</width>
|
<width>20</width>
|
||||||
<height>0</height>
|
<height>20</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>تمكين وحدة معالجة الرسومات الفارغة</translation>
|
<translation>تمكين وحدة معالجة الرسومات الفارغة</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>PM4 تمكين تفريغ</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>تمكين GPU الافتراضية:\nلأغراض تصحيح الأخطاء التقنية، يقوم بتعطيل عرض اللعبة كما لو لم يكن هناك بطاقة رسومات.</translation>
|
<translation>تمكين GPU الافتراضية:\nلأغراض تصحيح الأخطاء التقنية، يقوم بتعطيل عرض اللعبة كما لو لم يكن هناك بطاقة رسومات.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>تمكين تفريغ PM4:\nلأغراض تصحيح الأخطاء التقنية، يحفظ بيانات تعليمات GPU الأولية في مجلد أثناء معالجتها.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Aktiver virtuel GPU:\nTil teknisk fejlfinding deaktiverer det spilvisning, som om der ikke var et grafikkort.</translation>
|
<translation>Aktiver virtuel GPU:\nTil teknisk fejlfinding deaktiverer det spilvisning, som om der ikke var et grafikkort.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Aktiver dumping af PM4:\nTil teknisk fejlfinding gemmer det rå GPU-kommandoer i en mappe under behandling.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>NULL GPU aktivieren</translation>
|
<translation>NULL GPU aktivieren</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>PM4-Dumping aktivieren</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Virtuelle GPU aktivieren:\nFür das technische Debugging deaktiviert es die Spielanzeige, als ob keine Grafikkarte vorhanden wäre.</translation>
|
<translation>Virtuelle GPU aktivieren:\nFür das technische Debugging deaktiviert es die Spielanzeige, als ob keine Grafikkarte vorhanden wäre.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>PM4-Dumping aktivieren:\nZum technischen Debuggen speichert es rohe GPU-Befehlsdaten in einem Ordner während der Verarbeitung.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Ενεργοποίηση Εικονικής GPU:\nΓια τεχνικό εντοπισμό σφαλμάτων, απενεργοποιεί την εμφάνιση του παιχνιδιού σαν να μην υπάρχει κάρτα γραφικών.</translation>
|
<translation>Ενεργοποίηση Εικονικής GPU:\nΓια τεχνικό εντοπισμό σφαλμάτων, απενεργοποιεί την εμφάνιση του παιχνιδιού σαν να μην υπάρχει κάρτα γραφικών.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Ενεργοποίηση Καταγραφής PM4:\nΓια τεχνικό εντοπισμό σφαλμάτων, αποθηκεύει τις ακατέργαστες εντολές της GPU σε φάκελο κατά την επεξεργασία.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -539,6 +534,16 @@
|
|||||||
<source>Volume</source>
|
<source>Volume</source>
|
||||||
<translation>Volume</translation>
|
<translation>Volume</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../settings_dialog.ui" line="455"/>
|
||||||
|
<source>Controller Settings</source>
|
||||||
|
<translation>Controller Settings</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../settings_dialog.ui" line="467"/>
|
||||||
|
<source>Back Button Behavior</source>
|
||||||
|
<translation>Back Button Behavior</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MainWindow</name>
|
<name>MainWindow</name>
|
||||||
@ -1028,6 +1033,31 @@
|
|||||||
<source>GUIgroupBox</source>
|
<source>GUIgroupBox</source>
|
||||||
<translation>Play Title Music:\nIf a game supports it, enable playing special music when selecting the game in the GUI.</translation>
|
<translation>Play Title Music:\nIf a game supports it, enable playing special music when selecting the game in the GUI.</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../settings_dialog.cpp" line="330"/>
|
||||||
|
<source>backButtonBehaviorGroupBox</source>
|
||||||
|
<translation>Back Button Behavior:\nAllows setting which part of the touchpad the back button will emulate a touch on.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../settings_dialog.cpp" line="101"/>
|
||||||
|
<source>Touchpad Left</source>
|
||||||
|
<translation>Touchpad Left</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../settings_dialog.cpp" line="102"/>
|
||||||
|
<source>Touchpad Right</source>
|
||||||
|
<translation>Touchpad Right</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../settings_dialog.cpp" line="103"/>
|
||||||
|
<source>Touchpad Center</source>
|
||||||
|
<translation>Touchpad Center</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../settings_dialog.cpp" line="104"/>
|
||||||
|
<source>None</source>
|
||||||
|
<translation>None</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="312"/>
|
<location filename="../settings_dialog.cpp" line="312"/>
|
||||||
<source>graphicsAdapterGroupBox</source>
|
<source>graphicsAdapterGroupBox</source>
|
||||||
@ -1053,11 +1083,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Enable Null GPU:\nFor the sake of technical debugging, disables game rendering as if there were no graphics card.</translation>
|
<translation>Enable Null GPU:\nFor the sake of technical debugging, disables game rendering as if there were no graphics card.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Enable PM4 Dumping:\nFor the sake of technical debugging, saves raw GPU instruction data to a folder as the emulator processes it.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Habilitar GPU NULL</translation>
|
<translation>Habilitar GPU NULL</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Habilitar volcado de PM4</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Habilitar GPU Nula:\nPor el bien de la depuración técnica, desactiva el renderizado del juego como si no hubiera tarjeta gráfica.</translation>
|
<translation>Habilitar GPU Nula:\nPor el bien de la depuración técnica, desactiva el renderizado del juego como si no hubiera tarjeta gráfica.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Habilitar la Volcadura de PM4:\nPor el bien de la depuración técnica, guarda los datos de instrucciones crudas de GPU en una carpeta a medida que el emulador los procesa.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>NULL GPU فعال کردن</translation>
|
<translation>NULL GPU فعال کردن</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>PM4 Dumping فعال کردن</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Enable Null GPU:\nFor the sake of technical debugging, disables game rendering as if there were no graphics card.</translation>
|
<translation>Enable Null GPU:\nFor the sake of technical debugging, disables game rendering as if there were no graphics card.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Enable PM4 Dumping:\nFor the sake of technical debugging, saves raw GPU instruction data to a folder as the emulator processes it.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Ota Null GPU käyttöön:\nTeknistä vianetsintää varten pelin renderöinti estetään niin, että ikään kuin grafiikkakorttia ei olisi.</translation>
|
<translation>Ota Null GPU käyttöön:\nTeknistä vianetsintää varten pelin renderöinti estetään niin, että ikään kuin grafiikkakorttia ei olisi.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Ota PM4 dumpaus käyttöön:\nTeknistä vianetsintää varten raakoja GPU-ohjeita tallennetaan kansioon emulaattorin käsitellessä sitä.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>NULL GPU</translation>
|
<translation>NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Dumper le PM4</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Activer le GPU nul :\nPour le débogage technique, désactive le rendu du jeu comme s'il n'y avait pas de carte graphique.</translation>
|
<translation>Activer le GPU nul :\nPour le débogage technique, désactive le rendu du jeu comme s'il n'y avait pas de carte graphique.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Activer l'exportation PM4 :\nPour le débogage technique, enregistre les données brutes des instructions GPU dans un dossier pendant que l'émulateur les traite.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>NULL GPU Engedélyezése</translation>
|
<translation>NULL GPU Engedélyezése</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>PM4 Dumpolás Engedélyezése</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Null GPU engedélyezése:\nMűszaki hibaelhárítás céljából letiltja a játék renderelését, mintha nem lenne grafikus kártya.</translation>
|
<translation>Null GPU engedélyezése:\nMűszaki hibaelhárítás céljából letiltja a játék renderelését, mintha nem lenne grafikus kártya.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>PM4 dumpolás engedélyezése:\nMűszaki hibaelhárítás céljából a nyers GPU utasítási adatokat elmenti egy mappába, ahogy az emulátor feldolgozza őket.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Aktifkan GPU Null:\nUntuk tujuan debugging teknis, menonaktifkan rendering permainan seolah-olah tidak ada kartu grafis.</translation>
|
<translation>Aktifkan GPU Null:\nUntuk tujuan debugging teknis, menonaktifkan rendering permainan seolah-olah tidak ada kartu grafis.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Aktifkan Pembuangan PM4:\nUntuk tujuan debugging teknis, menyimpan data instruksi GPU mentah ke folder saat emulator memprosesnya.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Abilita NULL GPU</translation>
|
<translation>Abilita NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Abilita Dump PM4</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Abilita GPU Null:\nPer scopi di debug tecnico, disabilita il rendering del gioco come se non ci fosse alcuna scheda grafica.</translation>
|
<translation>Abilita GPU Null:\nPer scopi di debug tecnico, disabilita il rendering del gioco come se non ci fosse alcuna scheda grafica.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Abilita Pompaggio PM4:\nPer scopi di debug tecnico, salva i dati delle istruzioni GPU grezze in una cartella mentre l'emulatore li elabora.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>NULL GPUを有効にする</translation>
|
<translation>NULL GPUを有効にする</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>PM4ダンプを有効にする</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Null GPUを有効にする:\n技術的なデバッグの目的で、グラフィックスカードがないかのようにゲームのレンダリングを無効にします。</translation>
|
<translation>Null GPUを有効にする:\n技術的なデバッグの目的で、グラフィックスカードがないかのようにゲームのレンダリングを無効にします。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>PM4ダンプを有効にする:\n技術的なデバッグの目的で、エミュレーターが処理している間に生のGPU命令データをフォルダーに保存します。</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Enable Null GPU:\nFor the sake of technical debugging, disables game rendering as if there were no graphics card.</translation>
|
<translation>Enable Null GPU:\nFor the sake of technical debugging, disables game rendering as if there were no graphics card.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Enable PM4 Dumping:\nFor the sake of technical debugging, saves raw GPU instruction data to a folder as the emulator processes it.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Įjungti tuščią GPU:\nTechninio derinimo tikslais išjungia žaidimo renderiavimą, tarsi nebūtų grafikos plokštės.</translation>
|
<translation>Įjungti tuščią GPU:\nTechninio derinimo tikslais išjungia žaidimo renderiavimą, tarsi nebūtų grafikos plokštės.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Įjungti PM4 išmetimą:\nTechninio derinimo tikslais saugo žalius GPU nurodymų duomenis į aplanką, kai emuliatorius juos apdoroja.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Aktiver Null GPU:\nFor teknisk feilsøking deaktiverer spillrendering som om det ikke var noe grafikkort.</translation>
|
<translation>Aktiver Null GPU:\nFor teknisk feilsøking deaktiverer spillrendering som om det ikke var noe grafikkort.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Aktiver PM4 dumping:\nFor teknisk feilsøking lagrer rå GPU-instruksjonsdata i en mappe mens emulatoren behandler dem.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Null GPU inschakelen:\nVoor technische foutopsporing schakelt de game-rendering uit alsof er geen grafische kaart is.</translation>
|
<translation>Null GPU inschakelen:\nVoor technische foutopsporing schakelt de game-rendering uit alsof er geen grafische kaart is.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>PM4 dumpen inschakelen:\nVoor technische foutopsporing slaat het ruwe GPU-instructiegegevens op in een map terwijl de emulator ze verwerkt.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Wyłącz kartę graficzną</translation>
|
<translation>Wyłącz kartę graficzną</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Włącz zgrywanie PM4</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Włącz Null GPU:\nDla technicznego debugowania dezaktywuje renderowanie gry tak, jakby nie było karty graficznej.</translation>
|
<translation>Włącz Null GPU:\nDla technicznego debugowania dezaktywuje renderowanie gry tak, jakby nie było karty graficznej.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Włącz zrzucanie PM4:\nDla technicznego debugowania zapisuje surowe dane instrukcji GPU w folderze, gdy emulator je przetwarza.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Ativar GPU NULA</translation>
|
<translation>Ativar GPU NULA</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Ativar Dumping de PM4</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Ativar GPU NULA:\nDesativa a renderização do jogo para fins de depuração técnica, como se não houvesse nenhuma placa gráfica.</translation>
|
<translation>Ativar GPU NULA:\nDesativa a renderização do jogo para fins de depuração técnica, como se não houvesse nenhuma placa gráfica.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Ativar Dumping de PM4:\nArmazena os dados de instrução bruta da GPU em uma pasta enquanto o emulador os processa, para fins de depuração técnica. Recomendado deixar desativado.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Activează GPU Null:\nÎn scopuri de depanare tehnică, dezactivează redarea jocului ca și cum nu ar exista o placă grafică.</translation>
|
<translation>Activează GPU Null:\nÎn scopuri de depanare tehnică, dezactivează redarea jocului ca și cum nu ar exista o placă grafică.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Activează salvarea PM4:\nÎn scopuri de depanare tehnică, salvează datele brute ale instrucțiunilor GPU într-un folder pe măsură ce emulatorul le procesează.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Включить NULL GPU</translation>
|
<translation>Включить NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Включить дамп PM4</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Включить NULL GPU:\nДля технической отладки отключает рендеринг игры так, как будто графической карты нет.</translation>
|
<translation>Включить NULL GPU:\nДля технической отладки отключает рендеринг игры так, как будто графической карты нет.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Включить дамп PM4:\nДля технической отладки сохраняет необработанные данные инструкций GPU в папку, пока эмулятор их обрабатывает.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Aktivizo GPU-në NULL</translation>
|
<translation>Aktivizo GPU-në NULL</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Aktivizo Zbrazjen PM4</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Aktivizo GPU-në Null:\nPër qëllime të korrigjimit teknik, çaktivizon pasqyrimin e lojës sikur nuk ka një kartë grafike.</translation>
|
<translation>Aktivizo GPU-në Null:\nPër qëllime të korrigjimit teknik, çaktivizon pasqyrimin e lojës sikur nuk ka një kartë grafike.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Aktivizo zbrazjen PM4:\nPër qëllime të korrigjimit teknik, ruan të dhënat e instruksioneve të GPU-së në një dosje ndërsa emulatori i përpunon ato.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>NULL GPU'yu Etkinleştir</translation>
|
<translation>NULL GPU'yu Etkinleştir</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>PM4 Kaydını Etkinleştir</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Null GPU'yu Etkinleştir:\nTeknik hata ayıklama amacıyla, oyunun render edilmesini grafik kartı yokmuş gibi devre dışı bırakır.</translation>
|
<translation>Null GPU'yu Etkinleştir:\nTeknik hata ayıklama amacıyla, oyunun render edilmesini grafik kartı yokmuş gibi devre dışı bırakır.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>PM4 Dışa Aktarmayı Etkinleştir:\nTeknik hata ayıklama amacıyla, emülatör bunları işlerken GPU komut verilerini bir klasöre kaydeder.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>Bật GPU Null:\nĐể mục đích gỡ lỗi kỹ thuật, vô hiệu hóa việc kết xuất trò chơi như thể không có card đồ họa.</translation>
|
<translation>Bật GPU Null:\nĐể mục đích gỡ lỗi kỹ thuật, vô hiệu hóa việc kết xuất trò chơi như thể không có card đồ họa.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>Bật xuất PM4:\nĐể mục đích gỡ lỗi kỹ thuật, lưu dữ liệu lệnh GPU vào một thư mục khi trình giả lập xử lý chúng.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>启用 NULL GPU</translation>
|
<translation>启用 NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>启用 PM4 转储</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>启用空 GPU:\n为了技术调试,将游戏渲染禁用,仿佛没有图形卡。</translation>
|
<translation>启用空 GPU:\n为了技术调试,将游戏渲染禁用,仿佛没有图形卡。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>启用 PM4 转储:\n为了技术调试,在模拟器处理时将原始 GPU 指令数据保存到文件夹中。</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -474,11 +474,6 @@
|
|||||||
<source>Enable NULL GPU</source>
|
<source>Enable NULL GPU</source>
|
||||||
<translation>Enable NULL GPU</translation>
|
<translation>Enable NULL GPU</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.ui" line="476"/>
|
|
||||||
<source>Enable PM4 Dumping</source>
|
|
||||||
<translation>Enable PM4 Dumping</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="517"/>
|
<location filename="../settings_dialog.ui" line="517"/>
|
||||||
<source>Debug</source>
|
<source>Debug</source>
|
||||||
@ -1053,11 +1048,6 @@
|
|||||||
<source>nullGpuCheckBox</source>
|
<source>nullGpuCheckBox</source>
|
||||||
<translation>啟用空GPU:\n為了技術調試,禁用遊戲渲染,彷彿沒有顯示卡。</translation>
|
<translation>啟用空GPU:\n為了技術調試,禁用遊戲渲染,彷彿沒有顯示卡。</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../settings_dialog.cpp" line="323"/>
|
|
||||||
<source>dumpPM4CheckBox</source>
|
|
||||||
<translation>啟用PM4轉儲:\n為了技術調試,將原始GPU指令數據在模擬器處理時保存到文件夾中。</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="329"/>
|
<location filename="../settings_dialog.cpp" line="329"/>
|
||||||
<source>debugDump</source>
|
<source>debugDump</source>
|
||||||
|
@ -145,6 +145,7 @@ void WindowSDL::onKeyPress(const SDL_Event* event) {
|
|||||||
Input::Axis axis = Input::Axis::AxisMax;
|
Input::Axis axis = Input::Axis::AxisMax;
|
||||||
int axisvalue = 0;
|
int axisvalue = 0;
|
||||||
int ax = 0;
|
int ax = 0;
|
||||||
|
std::string backButtonBehavior = Config::getBackButtonBehavior();
|
||||||
switch (event->key.key) {
|
switch (event->key.key) {
|
||||||
case SDLK_UP:
|
case SDLK_UP:
|
||||||
button = OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_UP;
|
button = OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_UP;
|
||||||
@ -278,7 +279,15 @@ void WindowSDL::onKeyPress(const SDL_Event* event) {
|
|||||||
ax = Input::GetAxis(0, 0x80, axisvalue);
|
ax = Input::GetAxis(0, 0x80, axisvalue);
|
||||||
break;
|
break;
|
||||||
case SDLK_SPACE:
|
case SDLK_SPACE:
|
||||||
button = OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_TOUCH_PAD;
|
if (backButtonBehavior != "none") {
|
||||||
|
float x = backButtonBehavior == "left" ? 0.25f
|
||||||
|
: (backButtonBehavior == "right" ? 0.75f : 0.5f);
|
||||||
|
// trigger a touchpad event so that the touchpad emulation for back button works
|
||||||
|
controller->SetTouchpadState(0, true, x, 0.5f);
|
||||||
|
button = OrbisPadButtonDataOffset::ORBIS_PAD_BUTTON_TOUCH_PAD;
|
||||||
|
} else {
|
||||||
|
button = 0;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SDLK_F11:
|
case SDLK_F11:
|
||||||
if (event->type == SDL_EVENT_KEY_DOWN) {
|
if (event->type == SDL_EVENT_KEY_DOWN) {
|
||||||
@ -304,9 +313,6 @@ void WindowSDL::onKeyPress(const SDL_Event* event) {
|
|||||||
if (axis != Input::Axis::AxisMax) {
|
if (axis != Input::Axis::AxisMax) {
|
||||||
controller->Axis(0, axis, ax);
|
controller->Axis(0, axis, ax);
|
||||||
}
|
}
|
||||||
if (SDL_GetCursor() != NULL) {
|
|
||||||
SDL_HideCursor();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowSDL::onGamepadEvent(const SDL_Event* event) {
|
void WindowSDL::onGamepadEvent(const SDL_Event* event) {
|
||||||
@ -330,10 +336,20 @@ void WindowSDL::onGamepadEvent(const SDL_Event* event) {
|
|||||||
case SDL_EVENT_GAMEPAD_BUTTON_UP:
|
case SDL_EVENT_GAMEPAD_BUTTON_UP:
|
||||||
button = sdlGamepadToOrbisButton(event->gbutton.button);
|
button = sdlGamepadToOrbisButton(event->gbutton.button);
|
||||||
if (button != 0) {
|
if (button != 0) {
|
||||||
controller->CheckButton(0, button, event->type == SDL_EVENT_GAMEPAD_BUTTON_DOWN);
|
if (event->gbutton.button == SDL_GAMEPAD_BUTTON_BACK) {
|
||||||
}
|
std::string backButtonBehavior = Config::getBackButtonBehavior();
|
||||||
if (SDL_GetCursor() != NULL) {
|
if (backButtonBehavior != "none") {
|
||||||
SDL_HideCursor();
|
float x = backButtonBehavior == "left"
|
||||||
|
? 0.25f
|
||||||
|
: (backButtonBehavior == "right" ? 0.75f : 0.5f);
|
||||||
|
// trigger a touchpad event so that the touchpad emulation for back button works
|
||||||
|
controller->SetTouchpadState(0, true, x, 0.5f);
|
||||||
|
controller->CheckButton(0, button,
|
||||||
|
event->type == SDL_EVENT_GAMEPAD_BUTTON_DOWN);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
controller->CheckButton(0, button, event->type == SDL_EVENT_GAMEPAD_BUTTON_DOWN);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
||||||
|
@ -3642,8 +3642,8 @@ constexpr std::array<InstFormat, 112> InstructionFormatMIMG = {{
|
|||||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
||||||
ScalarType::Undefined},
|
ScalarType::Undefined},
|
||||||
// 95 = IMAGE_GATHER4_C_LZ_O
|
// 95 = IMAGE_GATHER4_C_LZ_O
|
||||||
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Undefined,
|
{InstClass::VectorMemImgSmp, InstCategory::VectorMemory, 4, 1, ScalarType::Uint32,
|
||||||
ScalarType::Undefined},
|
ScalarType::Float32},
|
||||||
// 96 = IMAGE_GET_LOD
|
// 96 = IMAGE_GET_LOD
|
||||||
{InstClass::VectorMemImgUt, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
{InstClass::VectorMemImgUt, InstCategory::VectorMemory, 4, 1, ScalarType::Float32,
|
||||||
ScalarType::Float32},
|
ScalarType::Float32},
|
||||||
|
@ -147,6 +147,7 @@ void Translator::EmitVectorMemory(const GcnInst& inst) {
|
|||||||
case Opcode::IMAGE_GATHER4_C_O:
|
case Opcode::IMAGE_GATHER4_C_O:
|
||||||
case Opcode::IMAGE_GATHER4_C_LZ:
|
case Opcode::IMAGE_GATHER4_C_LZ:
|
||||||
case Opcode::IMAGE_GATHER4_LZ_O:
|
case Opcode::IMAGE_GATHER4_LZ_O:
|
||||||
|
case Opcode::IMAGE_GATHER4_C_LZ_O:
|
||||||
return IMAGE_GATHER(inst);
|
return IMAGE_GATHER(inst);
|
||||||
|
|
||||||
// Image misc operations
|
// Image misc operations
|
||||||
|
@ -142,6 +142,9 @@ struct PageManager::Impl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Protect(VAddr address, size_t size, bool allow_write) {
|
void Protect(VAddr address, size_t size, bool allow_write) {
|
||||||
|
ASSERT_MSG(owned_ranges.find(address) != owned_ranges.end(),
|
||||||
|
"Attempted to track non-GPU memory at address {:#x}, size {:#x}.", address,
|
||||||
|
size);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
DWORD prot = allow_write ? PAGE_READWRITE : PAGE_READONLY;
|
DWORD prot = allow_write ? PAGE_READWRITE : PAGE_READONLY;
|
||||||
DWORD old_prot{};
|
DWORD old_prot{};
|
||||||
|
Loading…
Reference in New Issue
Block a user