Merge pull request #281 from shadps4-emu/miscFixes6
Misc Fixes (forgot the number)
This commit is contained in:
commit
60b1aa62a3
|
@ -1 +1 @@
|
||||||
Subproject commit a96259701e1d16e2f8c8299c668e863ec0ac0119
|
Subproject commit bc8d32e9643d2be5fc070abf2a50bc021544545d
|
|
@ -1 +1 @@
|
||||||
Subproject commit 5939e32b87487fa9c72ab336ebfcc5ae26d9ab6d
|
Subproject commit 52f68dc6b2a9d017b43161f31f13a6f44636ee7c
|
|
@ -1 +1 @@
|
||||||
Subproject commit ec1adc5763f684e0f32888b157bfc0b86021b8e9
|
Subproject commit 664ee62c12570948b0e025d15b42d641fba8d54a
|
|
@ -1 +1 @@
|
||||||
Subproject commit 257138b8f5686ae84491a3df9f90a77d5660c3bd
|
Subproject commit 871913da6a4b132b567d7b65c509600363c0041e
|
|
@ -1 +1 @@
|
||||||
Subproject commit 190d2cb24e90e5bf2bec0a75604a9b3586485b6d
|
Subproject commit b379292b2ab6df5771ba9870d53cf8b2c9295daf
|
|
@ -1 +1 @@
|
||||||
Subproject commit d937b60055aaea313422672ebd5cc8bfa87a1682
|
Subproject commit f00c973a6ab2a23573708568b8ef4acc20a9d36b
|
|
@ -1 +1 @@
|
||||||
Subproject commit 805c00b68fa754200ada0c207ffeaa7a4409377c
|
Subproject commit a57f6cce2698049863af8c25787084ae0489d849
|
|
@ -1 +1 @@
|
||||||
Subproject commit 5a68f639e4f01604cc7bfc8d313f583a8137e3d3
|
Subproject commit 16c6a369c193981e9cf314126589eaa8763f92c3
|
|
@ -56,7 +56,6 @@ int PS4_SYSV_ABI sceImeDialogGetStatus() {
|
||||||
if (g_ime_dlg_status == OrbisImeDialogStatus::ORBIS_IME_DIALOG_STATUS_RUNNING) {
|
if (g_ime_dlg_status == OrbisImeDialogStatus::ORBIS_IME_DIALOG_STATUS_RUNNING) {
|
||||||
return OrbisImeDialogStatus::ORBIS_IME_DIALOG_STATUS_FINISHED;
|
return OrbisImeDialogStatus::ORBIS_IME_DIALOG_STATUS_FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
return g_ime_dlg_status;
|
return g_ime_dlg_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -463,6 +463,7 @@ void fileSystemSymbolsRegister(Core::Loader::SymbolsResolver* sym) {
|
||||||
LIB_FUNCTION("1G3lF1Gg1k8", "libkernel", 1, "libkernel", 1, 1, sceKernelOpen);
|
LIB_FUNCTION("1G3lF1Gg1k8", "libkernel", 1, "libkernel", 1, 1, sceKernelOpen);
|
||||||
LIB_FUNCTION("wuCroIGjt2g", "libScePosix", 1, "libkernel", 1, 1, posix_open);
|
LIB_FUNCTION("wuCroIGjt2g", "libScePosix", 1, "libkernel", 1, 1, posix_open);
|
||||||
LIB_FUNCTION("UK2Tl2DWUns", "libkernel", 1, "libkernel", 1, 1, sceKernelClose);
|
LIB_FUNCTION("UK2Tl2DWUns", "libkernel", 1, "libkernel", 1, 1, sceKernelClose);
|
||||||
|
LIB_FUNCTION("bY-PO6JhzhQ", "libkernel", 1, "libkernel", 1, 1, posix_close);
|
||||||
LIB_FUNCTION("bY-PO6JhzhQ", "libScePosix", 1, "libkernel", 1, 1, posix_close);
|
LIB_FUNCTION("bY-PO6JhzhQ", "libScePosix", 1, "libkernel", 1, 1, posix_close);
|
||||||
LIB_FUNCTION("4wSze92BhLI", "libkernel", 1, "libkernel", 1, 1, sceKernelWrite);
|
LIB_FUNCTION("4wSze92BhLI", "libkernel", 1, "libkernel", 1, 1, sceKernelWrite);
|
||||||
|
|
||||||
|
|
|
@ -351,6 +351,10 @@ int PS4_SYSV_ABI _sigprocmask() {
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI posix_getpagesize() {
|
||||||
|
return 4096;
|
||||||
|
}
|
||||||
|
|
||||||
void LibKernel_Register(Core::Loader::SymbolsResolver* sym) {
|
void LibKernel_Register(Core::Loader::SymbolsResolver* sym) {
|
||||||
service_thread = std::jthread{KernelServiceThread};
|
service_thread = std::jthread{KernelServiceThread};
|
||||||
|
|
||||||
|
@ -414,6 +418,7 @@ void LibKernel_Register(Core::Loader::SymbolsResolver* sym) {
|
||||||
LIB_FUNCTION("-o5uEDpN+oY", "libkernel", 1, "libkernel", 1, 1, sceKernelConvertUtcToLocaltime);
|
LIB_FUNCTION("-o5uEDpN+oY", "libkernel", 1, "libkernel", 1, 1, sceKernelConvertUtcToLocaltime);
|
||||||
LIB_FUNCTION("WB66evu8bsU", "libkernel", 1, "libkernel", 1, 1, sceKernelGetCompiledSdkVersion);
|
LIB_FUNCTION("WB66evu8bsU", "libkernel", 1, "libkernel", 1, 1, sceKernelGetCompiledSdkVersion);
|
||||||
LIB_FUNCTION("DRuBt2pvICk", "libkernel", 1, "libkernel", 1, 1, ps4__read);
|
LIB_FUNCTION("DRuBt2pvICk", "libkernel", 1, "libkernel", 1, 1, ps4__read);
|
||||||
|
LIB_FUNCTION("k+AXqu2-eBc", "libScePosix", 1, "libkernel", 1, 1, posix_getpagesize);
|
||||||
|
|
||||||
Libraries::Kernel::fileSystemSymbolsRegister(sym);
|
Libraries::Kernel::fileSystemSymbolsRegister(sym);
|
||||||
Libraries::Kernel::timeSymbolsRegister(sym);
|
Libraries::Kernel::timeSymbolsRegister(sym);
|
||||||
|
|
|
@ -1329,6 +1329,26 @@ int PS4_SYSV_ABI scePthreadSetprio(ScePthread thread, int prio) {
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI posix_pthread_condattr_init(ScePthreadCondattr* attr) {
|
||||||
|
int result = scePthreadCondattrInit(attr);
|
||||||
|
LOG_INFO(Kernel_Pthread,
|
||||||
|
"posix_pthread_condattr_init redirect to scePthreadCondattrInit, result = {}", result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI posix_pthread_condattr_destroy(ScePthreadCondattr* attr) {
|
||||||
|
int result = scePthreadCondattrDestroy(attr);
|
||||||
|
LOG_INFO(Kernel_Pthread,
|
||||||
|
"posix_pthread_condattr_destroy redirect to scePthreadCondattrDestroy, result = {}",
|
||||||
|
result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI posix_pthread_condattr_setclock(ScePthreadCondattr* attr, clockid_t clock) {
|
||||||
|
(*attr)->clock = clock;
|
||||||
|
return SCE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
void pthreadSymbolsRegister(Core::Loader::SymbolsResolver* sym) {
|
void pthreadSymbolsRegister(Core::Loader::SymbolsResolver* sym) {
|
||||||
LIB_FUNCTION("lZzFeSxPl08", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_setcancelstate);
|
LIB_FUNCTION("lZzFeSxPl08", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_setcancelstate);
|
||||||
LIB_FUNCTION("0TyVk4MSLt0", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_cond_init);
|
LIB_FUNCTION("0TyVk4MSLt0", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_cond_init);
|
||||||
|
@ -1416,6 +1436,11 @@ void pthreadSymbolsRegister(Core::Loader::SymbolsResolver* sym) {
|
||||||
posix_pthread_mutexattr_setprotocol);
|
posix_pthread_mutexattr_setprotocol);
|
||||||
LIB_FUNCTION("HF7lK46xzjY", "libScePosix", 1, "libkernel", 1, 1,
|
LIB_FUNCTION("HF7lK46xzjY", "libScePosix", 1, "libkernel", 1, 1,
|
||||||
posix_pthread_mutexattr_destroy);
|
posix_pthread_mutexattr_destroy);
|
||||||
|
LIB_FUNCTION("mKoTx03HRWA", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_condattr_init);
|
||||||
|
LIB_FUNCTION("dJcuQVn6-Iw", "libScePosix", 1, "libkernel", 1, 1,
|
||||||
|
posix_pthread_condattr_destroy);
|
||||||
|
LIB_FUNCTION("EjllaAqAPZo", "libScePosix", 1, "libkernel", 1, 1,
|
||||||
|
posix_pthread_condattr_setclock);
|
||||||
LIB_FUNCTION("Z4QosVuAsA0", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_once);
|
LIB_FUNCTION("Z4QosVuAsA0", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_once);
|
||||||
|
|
||||||
// openorbis weird functions
|
// openorbis weird functions
|
||||||
|
|
|
@ -92,6 +92,7 @@ struct PthreadCondInternal {
|
||||||
struct PthreadCondAttrInternal {
|
struct PthreadCondAttrInternal {
|
||||||
u8 reserved[64];
|
u8 reserved[64];
|
||||||
pthread_condattr_t cond_attr;
|
pthread_condattr_t cond_attr;
|
||||||
|
clockid_t clock;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PthreadRwLockAttrInternal {
|
struct PthreadRwLockAttrInternal {
|
||||||
|
|
|
@ -97,7 +97,8 @@ int PS4_SYSV_ABI sceKernelClockGettime(s32 clock_id, OrbisKernelTimespec* tp) {
|
||||||
pclock_id = CLOCK_MONOTONIC;
|
pclock_id = CLOCK_MONOTONIC;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
UNREACHABLE();
|
LOG_ERROR(Lib_Kernel, "unsupported = {} using CLOCK_REALTIME", clock_id);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
timespec t{};
|
timespec t{};
|
||||||
|
|
|
@ -178,12 +178,39 @@ int PS4_SYSV_ABI sceSaveDataDeleteUser() {
|
||||||
|
|
||||||
int PS4_SYSV_ABI sceSaveDataDirNameSearch(const OrbisSaveDataDirNameSearchCond* cond,
|
int PS4_SYSV_ABI sceSaveDataDirNameSearch(const OrbisSaveDataDirNameSearchCond* cond,
|
||||||
OrbisSaveDataDirNameSearchResult* result) {
|
OrbisSaveDataDirNameSearchResult* result) {
|
||||||
if (cond == nullptr || cond->dirName == nullptr)
|
if (cond == nullptr)
|
||||||
return ORBIS_SAVE_DATA_ERROR_PARAMETER;
|
return ORBIS_SAVE_DATA_ERROR_PARAMETER;
|
||||||
LOG_ERROR(Lib_SaveData,
|
LOG_ERROR(Lib_SaveData, "TODO sceSaveDataDirNameSearch: Add params");
|
||||||
"TODO sceSaveDataDirNameSearch: search_dir_name = {}, key = {}, result = {}",
|
const auto& mount_dir = Common::FS::GetUserPath(Common::FS::PathType::SaveDataDir) /
|
||||||
cond->dirName->data, (int)cond->key, (result->infos == nullptr));
|
std::to_string(cond->userId) / game_serial;
|
||||||
|
if (!mount_dir.empty() && std::filesystem::exists(mount_dir)) {
|
||||||
|
if (cond->dirName == nullptr) { // look for all dirs if no dir is provided.
|
||||||
|
for (int i = 0; const auto& entry : std::filesystem::directory_iterator(mount_dir)) {
|
||||||
|
if (std::filesystem::is_directory(entry.path())) {
|
||||||
|
i++;
|
||||||
|
result->dirNamesNum = 0; // why is it 1024? is it max?
|
||||||
|
// copy dir name to be used by sceSaveDataMount in read mode.
|
||||||
|
strncpy(result->dirNames[i].data, entry.path().filename().string().c_str(), 32);
|
||||||
|
result->hitNum = i + 1;
|
||||||
|
result->dirNamesNum = i + 1; // to confirm
|
||||||
|
result->setNum = i + 1; // to confirm
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else { // Need a game to test.
|
||||||
|
strncpy(result->dirNames[0].data, cond->dirName->data, 32);
|
||||||
|
result->hitNum = 1;
|
||||||
|
result->dirNamesNum = 1; // to confirm
|
||||||
|
result->setNum = 1; // to confirm
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
result->hitNum = 0;
|
||||||
|
result->dirNamesNum = 0;
|
||||||
|
result->setNum = 0;
|
||||||
|
}
|
||||||
|
if (result->infos != nullptr) {
|
||||||
|
result->infos->blocks = ORBIS_SAVE_DATA_BLOCK_SIZE;
|
||||||
|
result->infos->freeBlocks = ORBIS_SAVE_DATA_BLOCK_SIZE;
|
||||||
|
}
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,18 +114,14 @@ void Emulator::Run(const std::filesystem::path& file) {
|
||||||
std::filesystem::path sce_module_folder = file.parent_path() / "sce_module";
|
std::filesystem::path sce_module_folder = file.parent_path() / "sce_module";
|
||||||
if (std::filesystem::is_directory(sce_module_folder)) {
|
if (std::filesystem::is_directory(sce_module_folder)) {
|
||||||
for (const auto& entry : std::filesystem::directory_iterator(sce_module_folder)) {
|
for (const auto& entry : std::filesystem::directory_iterator(sce_module_folder)) {
|
||||||
if (entry.path().filename() == "libc.prx" ||
|
if (entry.path().filename() == "libc.prx") {
|
||||||
entry.path().filename() == "libSceFios2.prx" ||
|
|
||||||
entry.path().filename() == "libSceAudioLatencyEstimation.prx" ||
|
|
||||||
entry.path().filename() == "libSceJobManager.prx" ||
|
|
||||||
entry.path().filename() == "libSceS3DConversion.prx") {
|
|
||||||
found = true;
|
found = true;
|
||||||
|
}
|
||||||
LOG_INFO(Loader, "Loading {}", entry.path().string().c_str());
|
LOG_INFO(Loader, "Loading {}", entry.path().string().c_str());
|
||||||
linker->LoadModule(entry.path());
|
linker->LoadModule(entry.path());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
Libraries::LibC::libcSymbolsRegister(&linker->GetHLESymbols());
|
Libraries::LibC::libcSymbolsRegister(&linker->GetHLESymbols());
|
||||||
}
|
}
|
||||||
|
|
|
@ -445,6 +445,10 @@ vk::Format SurfaceFormat(AmdGpu::DataFormat data_format, AmdGpu::NumberFormat nu
|
||||||
num_format == AmdGpu::NumberFormat::Unorm) {
|
num_format == AmdGpu::NumberFormat::Unorm) {
|
||||||
return vk::Format::eR16G16B16A16Unorm;
|
return vk::Format::eR16G16B16A16Unorm;
|
||||||
}
|
}
|
||||||
|
if (data_format == AmdGpu::DataFormat::Format16_16 &&
|
||||||
|
num_format == AmdGpu::NumberFormat::Uint) {
|
||||||
|
return vk::Format::eR16G16Uint;
|
||||||
|
}
|
||||||
if (data_format == AmdGpu::DataFormat::Format8 && num_format == AmdGpu::NumberFormat::Uint) {
|
if (data_format == AmdGpu::DataFormat::Format8 && num_format == AmdGpu::NumberFormat::Uint) {
|
||||||
return vk::Format::eR8Uint;
|
return vk::Format::eR8Uint;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue