libraries: Add libSceRazorCpu HLE skeleton. (#1624)

* Remove save migration code (#1621)

* Kernel Fixes (#1605)

* scePthreadSetprio Changes

FindThread uses posix error codes, so the function export should apply the ORBIS wrapper to convert these. Since it uses posix codes, I've also renamed the function to align with other posix functions. Lastly, this fixes a compile warning about ret sometimes not getting initialized.

* Implement posix_munmap

Used by Hatsune Miku Project Diva X during intros. May help with stability on Linux, probably won't change anything on Windows.

* Exports

Some missing function exports I've seen in my tests.
sceKernelAvailableFlexibleMemorySize export is used in Final Fantasy XV Episode Duscae
posix_pthread_setprio and posix_pthread_getschedparam are used by Spider-Man Miles Morales
scePthreadKeyDelete is used in UE4 games.

I've also added in a typo fix related to my previous PR.

* libScePosix export for posix_pthread_attr_setguardsize

Used in Hatsune Miku Project Diva X v1.02

* libraries: Add libSceRazorCpu HLE skeleton.

---------

Co-authored-by: ¥IGA <164882787+Xphalnos@users.noreply.github.com>
Co-authored-by: Stephen Miller <56742918+StevenMiller123@users.noreply.github.com>
This commit is contained in:
squidbus 2024-11-30 01:30:22 -08:00 committed by GitHub
parent 7bf168e47f
commit 99ac10a417
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 309 additions and 22 deletions

View file

@ -28,6 +28,7 @@
#include "core/libraries/pad/pad.h"
#include "core/libraries/playgo/playgo.h"
#include "core/libraries/random/random.h"
#include "core/libraries/razor_cpu/razor_cpu.h"
#include "core/libraries/remote_play/remoteplay.h"
#include "core/libraries/rtc/rtc.h"
#include "core/libraries/save_data/dialog/savedatadialog.h"
@ -87,6 +88,7 @@ void InitHLELibs(Core::Loader::SymbolsResolver* sym) {
Libraries::SharePlay::RegisterlibSceSharePlay(sym);
Libraries::Remoteplay::RegisterlibSceRemoteplay(sym);
Libraries::Videodec::RegisterlibSceVideodec(sym);
Libraries::RazorCpu::RegisterlibSceRazorCpu(sym);
}
} // namespace Libraries

View file

@ -0,0 +1,249 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "razor_cpu.h"
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
namespace Libraries::RazorCpu {
s32 PS4_SYSV_ABI sceRazorCpuBeginLogicalFileAccess() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
void PS4_SYSV_ABI sceRazorCpuDisableFiberUserMarkers() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
}
s32 PS4_SYSV_ABI sceRazorCpuEndLogicalFileAccess() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuFiberLogNameChange() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuFiberSwitch() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
bool PS4_SYSV_ABI sceRazorCpuFlushOccurred() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return false;
}
s32 PS4_SYSV_ABI sceRazorCpuGetDataTagStorageSize() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuGpuMarkerSync() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuInitDataTags() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuInitializeGpuMarkerContext() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuInitializeInternal() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
bool PS4_SYSV_ABI sceRazorCpuIsCapturing() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return false;
}
s32 PS4_SYSV_ABI sceRazorCpuJobManagerDispatch() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuJobManagerJob() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuJobManagerSequence() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuNamedSync() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuPlotValue() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuPopMarker() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuPushMarker() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuPushMarkerStatic() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuResizeTaggedBuffer() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
void PS4_SYSV_ABI sceRazorCpuSetPopMarkerCallback() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
}
void PS4_SYSV_ABI sceRazorCpuSetPushMarkerCallback() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
}
void PS4_SYSV_ABI sceRazorCpuSetPushMarkerStaticCallback() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
}
s32 PS4_SYSV_ABI sceRazorCpuShutdownDataTags() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuStartCaptureInternal() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuStopCaptureInternal() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuSync() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuTagArray() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuTagBuffer() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuUnTagBuffer() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuWorkloadRunBegin() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuWorkloadRunEnd() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuWorkloadSubmit() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRazorCpuWriteBookmark() {
LOG_DEBUG(Lib_RazorCpu, "(STUBBED) called");
return ORBIS_OK;
}
void RegisterlibSceRazorCpu(Core::Loader::SymbolsResolver* sym) {
LIB_FUNCTION("JFzLJBlYIJE", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuBeginLogicalFileAccess);
LIB_FUNCTION("SfRTRZ1Sh+U", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuDisableFiberUserMarkers);
LIB_FUNCTION("gVioM9cbiDs", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuEndLogicalFileAccess);
LIB_FUNCTION("G90IIOtgFQ0", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuFiberLogNameChange);
LIB_FUNCTION("PAytDtFGpqY", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuFiberSwitch);
LIB_FUNCTION("sPhrQD31ClM", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuFlushOccurred);
LIB_FUNCTION("B782NptkGUc", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuGetDataTagStorageSize);
LIB_FUNCTION("EH9Au2RlSrE", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuGpuMarkerSync);
LIB_FUNCTION("A7oRMdaOJP8", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuInitDataTags);
LIB_FUNCTION("NFwh-J-BrI0", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuInitializeGpuMarkerContext);
LIB_FUNCTION("ElNyedXaa4o", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuInitializeInternal);
LIB_FUNCTION("EboejOQvLL4", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuIsCapturing);
LIB_FUNCTION("dnEdyY4+klQ", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuJobManagerDispatch);
LIB_FUNCTION("KP+TBWGHlgs", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuJobManagerJob);
LIB_FUNCTION("9FowWFMEIM8", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuJobManagerSequence);
LIB_FUNCTION("XCuZoBSVFG8", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1, sceRazorCpuNamedSync);
LIB_FUNCTION("njGikRrxkC0", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1, sceRazorCpuPlotValue);
LIB_FUNCTION("YpkGsMXP3ew", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1, sceRazorCpuPopMarker);
LIB_FUNCTION("zw+celG7zSI", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1, sceRazorCpuPushMarker);
LIB_FUNCTION("uZrOwuNJX-M", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuPushMarkerStatic);
LIB_FUNCTION("D0yUjM33QqU", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuResizeTaggedBuffer);
LIB_FUNCTION("jqYWaTfgZs0", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuSetPopMarkerCallback);
LIB_FUNCTION("DJsHcEb94n0", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuSetPushMarkerCallback);
LIB_FUNCTION("EZtqozPTS4M", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuSetPushMarkerStaticCallback);
LIB_FUNCTION("emklx7RK-LY", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuShutdownDataTags);
LIB_FUNCTION("TIytAjYeaik", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuStartCaptureInternal);
LIB_FUNCTION("jWpkVWdMrsM", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuStopCaptureInternal);
LIB_FUNCTION("Ax7NjOzctIM", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1, sceRazorCpuSync);
LIB_FUNCTION("we3oTKSPSTw", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1, sceRazorCpuTagArray);
LIB_FUNCTION("vyjdThnQfQQ", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1, sceRazorCpuTagBuffer);
LIB_FUNCTION("0yNHPIkVTmw", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuUnTagBuffer);
LIB_FUNCTION("Crha9LvwvJM", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuWorkloadRunBegin);
LIB_FUNCTION("q1GxBfGHO0s", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuWorkloadRunEnd);
LIB_FUNCTION("6rUvx-6QmYc", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuWorkloadSubmit);
LIB_FUNCTION("G3brhegfyNg", "libSceRazorCpu", 1, "libSceRazorCpu", 1, 1,
sceRazorCpuWriteBookmark);
}
} // namespace Libraries::RazorCpu

View file

@ -0,0 +1,17 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "common/types.h"
#include <atomic>
#include <memory>
namespace Core::Loader {
class SymbolsResolver;
}
namespace Libraries::RazorCpu {
void RegisterlibSceRazorCpu(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::RazorCpu

View file

@ -48,10 +48,6 @@ int PS4_SYSV_ABI sceSysmoduleIsLoadedInternal(OrbisSysModuleInternal id) {
LOG_ERROR(Lib_SysModule, "Invalid internal sysmodule ID: {:#x}", static_cast<u32>(id));
return ORBIS_SYSMODULE_INVALID_ID;
}
if (id == OrbisSysModuleInternal::ORBIS_SYSMODULE_INTERNAL_RAZOR_CPU) {
// Internal debugging library, report as not loaded so it won't be used.
return ORBIS_SYSMODULE_NOT_LOADED;
}
return ORBIS_OK;
}