Browse Source

restore stupid lock, make ps4sup library

eden-orbis-ps4
lizzie 2 weeks ago
parent
commit
6dcd3d9b6c
  1. 6
      CMakeModules/OpenOrbis.cmake
  2. 3
      externals/CMakeLists.txt
  3. 0
      externals/ps4sup/emutls.c
  4. 18
      externals/ps4sup/stub.cpp
  5. 3
      src/core/perf_stats.h
  6. 6
      src/dynarmic/tests/CMakeLists.txt
  7. 26
      src/hid_core/resource_manager.cpp
  8. 2
      src/hid_core/resources/abstracted_pad/abstract_pad.cpp
  9. 2
      src/hid_core/resources/debug_pad/debug_pad.cpp
  10. 2
      src/hid_core/resources/digitizer/digitizer.cpp
  11. 2
      src/hid_core/resources/keyboard/keyboard.cpp
  12. 2
      src/hid_core/resources/mouse/debug_mouse.cpp
  13. 2
      src/hid_core/resources/mouse/mouse.cpp
  14. 10
      src/hid_core/resources/npad/npad.cpp
  15. 2
      src/hid_core/resources/six_axis/console_six_axis.cpp
  16. 2
      src/hid_core/resources/six_axis/six_axis.cpp
  17. 2
      src/hid_core/resources/system_buttons/capture_button.cpp
  18. 2
      src/hid_core/resources/system_buttons/home_button.cpp
  19. 2
      src/hid_core/resources/system_buttons/sleep_button.cpp
  20. 14
      src/hid_core/resources/touch_screen/touch_screen_resource.cpp
  21. 6
      src/yuzu_cmd/CMakeLists.txt

6
CMakeModules/OpenOrbis.cmake

@ -6,7 +6,7 @@ function(create_ps4_eboot project target content_id)
set(sce_sys_param ${sce_sys_dir}/param.sfo)
add_custom_command(
OUTPUT "${target}.pkg"
COMMAND ${CMAKE_SYSROOT}/bin/create-fself -in=bin/${target} -out=${target}.oelf --eboot eboot.bin
COMMAND ${CMAKE_SYSROOT}/bin/create-fself -in=bin/${target} -out=${target}.oelf --eboot ${target}_eboot.bin
VERBATIM
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS ${project}
@ -19,7 +19,7 @@ function(create_ps4_pkg project target content_id)
set(sce_sys_param ${sce_sys_dir}/param.sfo)
add_custom_command(
OUTPUT "${target}.pkg"
COMMAND ${CMAKE_SYSROOT}/bin/create-fself -in=bin/${target} -out=${target}.oelf --eboot eboot.bin
COMMAND ${CMAKE_SYSROOT}/bin/create-fself -in=bin/${target} -out=${target}.oelf --eboot ${target}_eboot.bin
COMMAND mkdir -p ${sce_sys_dir}
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_new ${sce_sys_param}
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} APP_TYPE --type Integer --maxsize 4 --value 1
@ -32,7 +32,7 @@ function(create_ps4_pkg project target content_id)
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} TITLE --type Utf8 --maxsize 128 --value ${target}
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} TITLE_ID --type Utf8 --maxsize 12 --value BREW00090
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core sfo_setentry ${sce_sys_param} VERSION --type Utf8 --maxsize 8 --value 1.03
COMMAND ${CMAKE_SYSROOT}/bin/create-gp4 -out ${target}.gp4 --content-id=${content_id} --files "eboot.bin ${sce_sys_param} sce_module/libc.prx sce_module/libSceFios2.prx"
COMMAND ${CMAKE_SYSROOT}/bin/create-gp4 -out ${target}.gp4 --content-id=${content_id} --files "${target}_eboot.bin ${sce_sys_param} sce_module/libc.prx sce_module/libSceFios2.prx"
COMMAND ${CMAKE_SYSROOT}/bin/PkgTool.Core pkg_build ${target}.gp4 .
VERBATIM
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}

3
externals/CMakeLists.txt

@ -278,6 +278,9 @@ target_include_directories(tz PUBLIC ./tz)
add_library(bc_decoder bc_decoder/bc_decoder.cpp)
target_include_directories(bc_decoder PUBLIC ./bc_decoder)
add_library(ps4sup ps4sup/emutls.c ps4sup/stub.cpp)
target_include_directories(ps4sup PUBLIC ./ps4sup)
if (NOT TARGET RenderDoc::API)
add_library(renderdoc INTERFACE)
target_include_directories(renderdoc SYSTEM INTERFACE ./renderdoc)

0
src/yuzu_cmd/emutls.c → externals/ps4sup/emutls.c

18
externals/ps4sup/stub.cpp

@ -0,0 +1,18 @@
#include <stdio.h>
#define STUB_WEAK(name) \
extern "C" void name() { \
printf("called " #name); \
asm volatile("ud2"); \
}
extern "C" void __cxa_thread_atexit_impl() {}
STUB_WEAK(__assert)
STUB_WEAK(ZSTD_trace_compress_begin)
STUB_WEAK(ZSTD_trace_compress_end)
STUB_WEAK(ZSTD_trace_decompress_begin)
STUB_WEAK(ZSTD_trace_decompress_end)
FILE* __stderrp = stdout;
#undef STUB_WEAK

3
src/core/perf_stats.h

@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: 2017 Citra Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

6
src/dynarmic/tests/CMakeLists.txt

@ -135,3 +135,9 @@ target_compile_options(dynarmic_tests PRIVATE ${DYNARMIC_CXX_FLAGS})
target_compile_definitions(dynarmic_tests PRIVATE FMT_USE_USER_DEFINED_LITERALS=1)
add_test(NAME dynarmic_tests COMMAND dynarmic_tests --durations yes)
if (PLATFORM_PS4)
target_link_libraries(dynarmic_tests PRIVATE SceVideoOut SceAudioOut ScePad SceSystemService)
target_link_libraries(dynarmic_tests PRIVATE ps4sup)
create_ps4_eboot(dynarmic_tests dynarmic_tests IV0000-BREW00090_00-DYNARMICTS000000)
endif()

26
src/hid_core/resource_manager.cpp

@ -204,7 +204,7 @@ Result ResourceManager::CreateAppletResource(u64 aruid) {
}
Result ResourceManager::CreateAppletResourceImpl(u64 aruid) {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
return applet_resource->CreateAppletResource(aruid);
}
@ -294,17 +294,17 @@ void ResourceManager::InitializeAHidSampler() {
}
Result ResourceManager::RegisterCoreAppletResource() {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
return applet_resource->RegisterCoreAppletResource();
}
Result ResourceManager::UnregisterCoreAppletResource() {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
return applet_resource->UnregisterCoreAppletResource();
}
Result ResourceManager::RegisterAppletResourceUserId(u64 aruid, bool bool_value) {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
auto result = applet_resource->RegisterAppletResourceUserId(aruid, bool_value);
if (result.IsSuccess()) {
result = npad->RegisterAppletResourceUserId(aruid);
@ -313,40 +313,40 @@ Result ResourceManager::RegisterAppletResourceUserId(u64 aruid, bool bool_value)
}
void ResourceManager::UnregisterAppletResourceUserId(u64 aruid) {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
applet_resource->UnregisterAppletResourceUserId(aruid);
npad->UnregisterAppletResourceUserId(aruid);
// palma->UnregisterAppletResourceUserId(aruid);
}
Result ResourceManager::GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle, u64 aruid) {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
return applet_resource->GetSharedMemoryHandle(out_handle, aruid);
}
void ResourceManager::FreeAppletResourceId(u64 aruid) {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
applet_resource->FreeAppletResourceId(aruid);
npad->FreeAppletResourceId(aruid);
}
void ResourceManager::EnableInput(u64 aruid, bool is_enabled) {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
applet_resource->EnableInput(aruid, is_enabled);
}
void ResourceManager::EnableSixAxisSensor(u64 aruid, bool is_enabled) {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
applet_resource->EnableSixAxisSensor(aruid, is_enabled);
}
void ResourceManager::EnablePadInput(u64 aruid, bool is_enabled) {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
applet_resource->EnablePadInput(aruid, is_enabled);
}
void ResourceManager::EnableTouchScreen(u64 aruid, bool is_enabled) {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
applet_resource->EnableTouchScreen(aruid, is_enabled);
}
@ -371,7 +371,7 @@ NpadGcVibrationDevice* ResourceManager::GetGcVibrationDevice(
}
Result ResourceManager::SetAruidValidForVibration(u64 aruid, bool is_enabled) {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
const bool has_changed = applet_resource->SetAruidValidForVibration(aruid, is_enabled);
if (has_changed) {
@ -394,7 +394,7 @@ void ResourceManager::SetForceHandheldStyleVibration(bool is_forced) {
}
Result ResourceManager::IsVibrationAruidActive(u64 aruid, bool& is_active) const {
//std::scoped_lock lock{shared_mutex};
std::scoped_lock lock{shared_mutex};
is_active = applet_resource->IsVibrationAruidActive(aruid);
return ResultSuccess;
}

2
src/hid_core/resources/abstracted_pad/abstract_pad.cpp

@ -273,7 +273,7 @@ void AbstractPad::Update() {
interface_type = properties_handler.GetInterfaceType();
//std::scoped_lock lock{*applet_resource_holder->shared_mutex};
std::scoped_lock lock{*applet_resource_holder->shared_mutex};
properties_handler.UpdateAllDeviceProperties();
battery_handler.UpdateCoreBatteryState();
button_handler.UpdateCoreBatteryState();

2
src/hid_core/resources/debug_pad/debug_pad.cpp

@ -26,7 +26,7 @@ void DebugPad::OnInit() {}
void DebugPad::OnRelease() {}
void DebugPad::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
//std::scoped_lock shared_lock{*shared_mutex};
std::scoped_lock shared_lock{*shared_mutex};
const u64 aruid = applet_resource->GetActiveAruid();
auto* data = applet_resource->GetAruidData(aruid);

2
src/hid_core/resources/digitizer/digitizer.cpp

@ -20,7 +20,7 @@ void Digitizer::OnInit() {}
void Digitizer::OnRelease() {}
void Digitizer::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
//std::scoped_lock shared_lock{*shared_mutex};
std::scoped_lock shared_lock{*shared_mutex};
const u64 aruid = applet_resource->GetActiveAruid();
auto* data = applet_resource->GetAruidData(aruid);

2
src/hid_core/resources/keyboard/keyboard.cpp

@ -25,7 +25,7 @@ void Keyboard::OnInit() {}
void Keyboard::OnRelease() {}
void Keyboard::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
//std::scoped_lock shared_lock{*shared_mutex};
std::scoped_lock shared_lock{*shared_mutex};
const u64 aruid = applet_resource->GetActiveAruid();
auto* data = applet_resource->GetAruidData(aruid);

2
src/hid_core/resources/mouse/debug_mouse.cpp

@ -24,7 +24,7 @@ void DebugMouse::OnInit() {}
void DebugMouse::OnRelease() {}
void DebugMouse::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
//std::scoped_lock shared_lock{*shared_mutex};
std::scoped_lock shared_lock{*shared_mutex};
const u64 aruid = applet_resource->GetActiveAruid();
auto* data = applet_resource->GetAruidData(aruid);

2
src/hid_core/resources/mouse/mouse.cpp

@ -24,7 +24,7 @@ void Mouse::OnInit() {}
void Mouse::OnRelease() {}
void Mouse::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
//std::scoped_lock shared_lock{*shared_mutex};
std::scoped_lock shared_lock{*shared_mutex};
const u64 aruid = applet_resource->GetActiveAruid();
auto* data = applet_resource->GetAruidData(aruid);

10
src/hid_core/resources/npad/npad.cpp

@ -74,7 +74,7 @@ Result NPad::Activate() {
Result NPad::Activate(u64 aruid) {
std::scoped_lock lock{mutex};
//std::scoped_lock shared_lock{*applet_resource_holder.shared_mutex};
std::scoped_lock shared_lock{*applet_resource_holder.shared_mutex};
auto* data = applet_resource_holder.applet_resource->GetAruidData(aruid);
const auto aruid_index = applet_resource_holder.applet_resource->GetIndexFromAruid(aruid);
@ -393,7 +393,7 @@ void NPad::WriteEmptyEntry(NpadInternalState* npad) {
}
void NPad::RequestPadStateUpdate(u64 aruid, Core::HID::NpadIdType npad_id) {
//std::scoped_lock lock{*applet_resource_holder.shared_mutex};
std::scoped_lock lock{*applet_resource_holder.shared_mutex};
auto& controller = GetControllerFromNpadIdType(aruid, npad_id);
const auto controller_type = controller.device->GetNpadStyleIndex();
@ -466,7 +466,7 @@ void NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
return;
}
//std::scoped_lock lock{*applet_resource_holder.shared_mutex};
std::scoped_lock lock{*applet_resource_holder.shared_mutex};
for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; ++aruid_index) {
const auto* data = applet_resource_holder.applet_resource->GetAruidDataByIndex(aruid_index);
@ -1221,7 +1221,7 @@ Result NPad::SetNpadSystemExtStateEnabled(u64 aruid, bool is_enabled) {
const auto result = npad_resource.SetNpadSystemExtStateEnabled(aruid, is_enabled);
if (result.IsSuccess()) {
//std::scoped_lock shared_lock{*applet_resource_holder.shared_mutex};
std::scoped_lock shared_lock{*applet_resource_holder.shared_mutex};
// TODO: abstracted_pad->EnableAppletToGetInput(aruid);
}
@ -1339,7 +1339,7 @@ void NPad::UpdateHandheldAbstractState() {
void NPad::EnableAppletToGetInput(u64 aruid) {
std::scoped_lock lock{mutex};
//std::scoped_lock shared_lock{*applet_resource_holder.shared_mutex};
std::scoped_lock shared_lock{*applet_resource_holder.shared_mutex};
for (auto& abstract_pad : abstracted_pads) {
abstract_pad.EnableAppletToGetInput(aruid);
}

2
src/hid_core/resources/six_axis/console_six_axis.cpp

@ -23,7 +23,7 @@ void ConsoleSixAxis::OnInit() {}
void ConsoleSixAxis::OnRelease() {}
void ConsoleSixAxis::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
//std::scoped_lock shared_lock{*shared_mutex};
std::scoped_lock shared_lock{*shared_mutex};
const u64 aruid = applet_resource->GetActiveAruid();
auto* data = applet_resource->GetAruidData(aruid);

2
src/hid_core/resources/six_axis/six_axis.cpp

@ -30,7 +30,7 @@ void SixAxis::OnInit() {}
void SixAxis::OnRelease() {}
void SixAxis::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
//std::scoped_lock shared_lock{*shared_mutex};
std::scoped_lock shared_lock{*shared_mutex};
for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; ++aruid_index) {
const auto* data = applet_resource->GetAruidDataByIndex(aruid_index);

2
src/hid_core/resources/system_buttons/capture_button.cpp

@ -22,7 +22,7 @@ void CaptureButton::OnInit() {}
void CaptureButton::OnRelease() {}
void CaptureButton::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
//std::scoped_lock shared_lock{*shared_mutex};
std::scoped_lock shared_lock{*shared_mutex};
const u64 aruid = applet_resource->GetActiveAruid();
auto* data = applet_resource->GetAruidData(aruid);

2
src/hid_core/resources/system_buttons/home_button.cpp

@ -22,7 +22,7 @@ void HomeButton::OnInit() {}
void HomeButton::OnRelease() {}
void HomeButton::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
//std::scoped_lock shared_lock{*shared_mutex};
std::scoped_lock shared_lock{*shared_mutex};
const u64 aruid = applet_resource->GetActiveAruid();
auto* data = applet_resource->GetAruidData(aruid);

2
src/hid_core/resources/system_buttons/sleep_button.cpp

@ -20,7 +20,7 @@ void SleepButton::OnInit() {}
void SleepButton::OnRelease() {}
void SleepButton::OnUpdate(const Core::Timing::CoreTiming& core_timing) {
//std::scoped_lock shared_lock{*shared_mutex};
std::scoped_lock shared_lock{*shared_mutex};
const u64 aruid = applet_resource->GetActiveAruid();
auto* data = applet_resource->GetAruidData(aruid);

14
src/hid_core/resources/touch_screen/touch_screen_resource.cpp

@ -34,7 +34,7 @@ Result TouchResource::ActivateTouch() {
}
if (global_ref_counter == 0) {
//std::scoped_lock lock{*shared_mutex};
std::scoped_lock lock{*shared_mutex};
const auto result = touch_driver->StartTouchSensor();
if (result.IsError()) {
@ -60,7 +60,7 @@ Result TouchResource::ActivateTouch() {
}
Result TouchResource::ActivateTouch(u64 aruid) {
//std::scoped_lock lock{*shared_mutex};
std::scoped_lock lock{*shared_mutex};
for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) {
auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index);
@ -121,7 +121,7 @@ Result TouchResource::ActivateGesture() {
}
Result TouchResource::ActivateGesture(u64 aruid, u32 basic_gesture_id) {
//std::scoped_lock lock{*shared_mutex};
std::scoped_lock lock{*shared_mutex};
for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) {
auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index);
@ -300,7 +300,7 @@ void TouchResource::SetTouchScreenMagnification(f32 point1_x, f32 point1_y, f32
}
Result TouchResource::SetTouchScreenResolution(u32 width, u32 height, u64 aruid) {
//std::scoped_lock lock{*shared_mutex};
std::scoped_lock lock{*shared_mutex};
for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) {
const auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index);
@ -321,7 +321,7 @@ Result TouchResource::SetTouchScreenResolution(u32 width, u32 height, u64 aruid)
Result TouchResource::SetTouchScreenConfiguration(
const Core::HID::TouchScreenConfigurationForNx& touch_configuration, u64 aruid) {
//std::scoped_lock lock{*shared_mutex};
std::scoped_lock lock{*shared_mutex};
for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) {
const auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index);
@ -341,7 +341,7 @@ Result TouchResource::SetTouchScreenConfiguration(
Result TouchResource::GetTouchScreenConfiguration(
Core::HID::TouchScreenConfigurationForNx& out_touch_configuration, u64 aruid) const {
//std::scoped_lock lock{*shared_mutex};
std::scoped_lock lock{*shared_mutex};
for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) {
const auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index);
@ -518,7 +518,7 @@ void TouchResource::OnTouchUpdate(s64 timestamp) {
gesture_handler.SetTouchState(current_touch_state.states, current_touch_state.entry_count,
timestamp);
//std::scoped_lock lock{*shared_mutex};
std::scoped_lock lock{*shared_mutex};
for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; aruid_index++) {
const auto* applet_data = applet_resource->GetAruidDataByIndex(aruid_index);

6
src/yuzu_cmd/CMakeLists.txt

@ -27,7 +27,6 @@ add_executable(yuzu-cmd
sdl_config.cpp
sdl_config.h
yuzu.cpp
emutls.c
yuzu.rc
)
@ -35,8 +34,6 @@ target_link_libraries(yuzu-cmd PRIVATE common core input_common frontend_common
target_link_libraries(yuzu-cmd PRIVATE glad)
if (MSVC)
target_link_libraries(yuzu-cmd PRIVATE getopt)
elseif(PLATFORM_PS4)
target_link_libraries(yuzu-cmd PRIVATE SceVideoOut SceAudioOut ScePad SceSystemService)
endif()
target_link_libraries(yuzu-cmd PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
@ -71,6 +68,7 @@ if (NOT MSVC)
endif()
if (PLATFORM_PS4)
target_link_libraries(yuzu-cmd PRIVATE SceVideoOut SceAudioOut ScePad SceSystemService)
target_link_libraries(yuzu-cmd PRIVATE ps4sup)
create_ps4_eboot(yuzu-cmd eden-cli IV0000-BREW00090_00-EDENEMULAT000000)
#create_ps4_pkg(yuzu-cmd eden-cli IV0000-BREW00090_00-EDENEMULAT000000)
endif()
Loading…
Cancel
Save