From c2a47d2a9986582b24c04ed6cc4f3b3712deeb02 Mon Sep 17 00:00:00 2001 From: kalaposfos13 <153381648+kalaposfos13@users.noreply.github.com> Date: Wed, 11 Feb 2026 15:00:13 +0100 Subject: [PATCH 1/4] Handle operand fields execlo and exechi for S_MOV (#4023) Co-authored-by: TheTurtle --- src/shader_recompiler/frontend/translate/scalar_alu.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/shader_recompiler/frontend/translate/scalar_alu.cpp b/src/shader_recompiler/frontend/translate/scalar_alu.cpp index b2e981d6a..8931e8dde 100644 --- a/src/shader_recompiler/frontend/translate/scalar_alu.cpp +++ b/src/shader_recompiler/frontend/translate/scalar_alu.cpp @@ -583,6 +583,14 @@ void Translator::S_MULK_I32(const GcnInst& inst) { // SOP1 void Translator::S_MOV(const GcnInst& inst) { + if (inst.dst[0].field == OperandField::ScalarGPR) { + if (inst.src[0].field == OperandField::ExecLo) { + ir.SetThreadBitScalarReg(IR::ScalarReg(inst.dst[0].code), ir.GetExec()); + return; + } else if (inst.src[0].field == OperandField::ExecHi) { + return; + } + } SetDst(inst.dst[0], GetSrc(inst.src[0])); } From 7bdb5eb7e104742436ee37a9381b33d045d51660 Mon Sep 17 00:00:00 2001 From: kalaposfos13 <153381648+kalaposfos13@users.noreply.github.com> Date: Wed, 11 Feb 2026 17:09:34 +0100 Subject: [PATCH 2/4] improved motion controls emulation (#4022) --- src/sdl_window.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/sdl_window.cpp b/src/sdl_window.cpp index c9183f301..1ee107efe 100644 --- a/src/sdl_window.cpp +++ b/src/sdl_window.cpp @@ -269,9 +269,14 @@ namespace Frontend { using namespace Libraries::Pad; -static Uint32 SDLCALL PollController(void* userdata, SDL_TimerID timer_id, Uint32 interval) { +std::mutex motion_control_mutex; +float gyro_buf[3] = {0.0f, 0.0f, 0.0f}, accel_buf[3] = {0.0f, -9.81f, 0.0f}; +static Uint32 SDLCALL PollGyroAndAccel(void* userdata, SDL_TimerID timer_id, Uint32 interval) { auto* controller = reinterpret_cast(userdata); - return controller->Poll(); + std::scoped_lock l{motion_control_mutex}; + controller->Gyro(0, gyro_buf); + controller->Acceleration(0, accel_buf); + return 4; } WindowSDL::WindowSDL(s32 width_, s32 height_, Input::GameController* controller_, @@ -407,12 +412,16 @@ void WindowSDL::WaitEvent() { // AND IT DOESN'T EVEN USE PROPER ENUMS case SDL_EVENT_GAMEPAD_SENSOR_UPDATE: switch ((SDL_SensorType)event.gsensor.sensor) { - case SDL_SENSOR_GYRO: - controller->Gyro(0, event.gsensor.data); + case SDL_SENSOR_GYRO: { + std::scoped_lock l{motion_control_mutex}; + memcpy(gyro_buf, event.gsensor.data, sizeof(gyro_buf)); break; - case SDL_SENSOR_ACCEL: - controller->Acceleration(0, event.gsensor.data); + } + case SDL_SENSOR_ACCEL: { + std::scoped_lock l{motion_control_mutex}; + memcpy(accel_buf, event.gsensor.data, sizeof(accel_buf)); break; + } default: break; } @@ -471,7 +480,7 @@ void WindowSDL::WaitEvent() { } void WindowSDL::InitTimers() { - SDL_AddTimer(33, &PollController, controller); + SDL_AddTimer(4, &PollGyroAndAccel, controller); SDL_AddTimer(33, Input::MousePolling, (void*)controller); } From 0435ada3a590f0f3f1e72b43eef94551aa02f168 Mon Sep 17 00:00:00 2001 From: Stephen Miller <56742918+StevenMiller123@users.noreply.github.com> Date: Wed, 11 Feb 2026 15:22:38 -0600 Subject: [PATCH 3/4] Update np_web_api_internal.cpp (#4025) --- src/core/libraries/np/np_web_api_internal.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/libraries/np/np_web_api_internal.cpp b/src/core/libraries/np/np_web_api_internal.cpp index 3d6c7de86..f598344c7 100644 --- a/src/core/libraries/np/np_web_api_internal.cpp +++ b/src/core/libraries/np/np_web_api_internal.cpp @@ -65,7 +65,7 @@ s32 createLibraryContext(s32 libHttpCtxId, u64 poolSize, const char* name, s32 t OrbisNpWebApiContext* findAndValidateContext(s32 libCtxId, s32 flag) { std::scoped_lock lk{g_global_mutex}; - if (libCtxId < 1 || libCtxId >= 0x8000) { + if (libCtxId < 1 || libCtxId >= 0x8000 || !g_contexts.contains(libCtxId)) { return nullptr; } auto& context = g_contexts[libCtxId]; From b4daf3766227a79e54caa16a21eb085f86d96a32 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Thu, 12 Feb 2026 16:17:40 +0200 Subject: [PATCH 4/4] Submodules update (#4026) * added openal-soft , cpp-httplib * CLI11,sdl3 update --- .gitmodules | 7 +++++++ CMakeLists.txt | 3 ++- externals/CLI11 | 2 +- externals/CMakeLists.txt | 38 ++++++++++++++++++++++++++++++++++++++ externals/cpp-httplib | 1 + externals/openal-soft | 1 + externals/sdl3 | 2 +- 7 files changed, 51 insertions(+), 3 deletions(-) create mode 160000 externals/cpp-httplib create mode 160000 externals/openal-soft diff --git a/.gitmodules b/.gitmodules index e54658932..55ae48ea3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -126,3 +126,10 @@ path = externals/sdl3 url = https://github.com/shadexternals/sdl3.git + branch = main +[submodule "externals/cpp-httplib"] + path = externals/cpp-httplib + url = https://github.com/shadexternals/cpp-httplib.git +[submodule "externals/openal-soft"] + path = externals/openal-soft + url = https://github.com/shadexternals/openal-soft.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 484a1d4d7..a1d7d9530 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -228,6 +228,7 @@ find_package(glslang 15 CONFIG) find_package(half 1.12.0 MODULE) find_package(magic_enum 0.9.7 CONFIG) find_package(PNG 1.6 MODULE) +find_package(OpenAL CONFIG) find_package(RenderDoc 1.6.0 MODULE) find_package(SDL3_mixer 2.8.1 CONFIG) if (SDL3_mixer_FOUND) @@ -1115,7 +1116,7 @@ create_target_directory_groups(shadps4) target_link_libraries(shadps4 PRIVATE magic_enum::magic_enum fmt::fmt toml11::toml11 tsl::robin_map xbyak::xbyak Tracy::TracyClient RenderDoc::API FFmpeg::ffmpeg Dear_ImGui gcn half::half ZLIB::ZLIB PNG::PNG) target_link_libraries(shadps4 PRIVATE Boost::headers GPUOpen::VulkanMemoryAllocator LibAtrac9 sirit Vulkan::Headers xxHash::xxhash Zydis::Zydis glslang::glslang SDL3::SDL3 SDL3_mixer::SDL3_mixer pugixml::pugixml) -target_link_libraries(shadps4 PRIVATE stb::headers libusb::usb lfreist-hwinfo::hwinfo nlohmann_json::nlohmann_json miniz fdk-aac CLI11::CLI11) +target_link_libraries(shadps4 PRIVATE stb::headers libusb::usb lfreist-hwinfo::hwinfo nlohmann_json::nlohmann_json miniz fdk-aac CLI11::CLI11 OpenAL::OpenAL Cpp_Httplib) target_compile_definitions(shadps4 PRIVATE IMGUI_USER_CONFIG="imgui/imgui_config.h") target_compile_definitions(Dear_ImGui PRIVATE IMGUI_USER_CONFIG="${PROJECT_SOURCE_DIR}/src/imgui/imgui_config.h") diff --git a/externals/CLI11 b/externals/CLI11 index bf5a16a26..617af2722 160000 --- a/externals/CLI11 +++ b/externals/CLI11 @@ -1 +1 @@ -Subproject commit bf5a16a26a34a9a7ad75f4a7705585e44675fef0 +Subproject commit 617af272277f8c5aefdc20894b0ebef1cd6b0104 diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 80a6ff7e2..7f6e6ec4e 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -276,3 +276,41 @@ if (NOT TARGET CLI11::CLI11) set(CLI11_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) add_subdirectory(CLI11) endif() + + +#openal +if (NOT TARGET OpenAL::OpenAL) +set(ALSOFT_ENABLE_MODULES OFF CACHE BOOL "" FORCE) +set(LIBTYPE "STATIC" CACHE STRING "" FORCE) +# Disable everything we don't need +set(ALSOFT_UTILS OFF CACHE BOOL "" FORCE) +set(ALSOFT_EXAMPLES OFF CACHE BOOL "" FORCE) +set(ALSOFT_TESTS OFF CACHE BOOL "" FORCE) +set(ALSOFT_INSTALL OFF CACHE BOOL "" FORCE) +set(ALSOFT_CONFIG OFF CACHE BOOL "" FORCE) + +# Backends (platform-specific) +if (WIN32) + set(ALSOFT_BACKEND_WASAPI ON CACHE BOOL "" FORCE) + set(ALSOFT_BACKEND_DSOUND OFF CACHE BOOL "" FORCE) + set(ALSOFT_BACKEND_WINMM OFF CACHE BOOL "" FORCE) +elseif (APPLE) + set(ALSOFT_BACKEND_COREAUDIO ON CACHE BOOL "" FORCE) +else() + set(ALSOFT_BACKEND_ALSA ON CACHE BOOL "" FORCE) + set(ALSOFT_BACKEND_PULSEAUDIO ON CACHE BOOL "" FORCE) + set(ALSOFT_BACKEND_PIPEWIRE OFF CACHE BOOL "" FORCE) +endif() +# Headless-safe +set(ALSOFT_BACKEND_NULL ON CACHE BOOL "" FORCE) + +# Static build +set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) + +add_subdirectory(openal-soft EXCLUDE_FROM_ALL) +endif() + +# cpp-httplib +add_library(Cpp_Httplib INTERFACE) +target_include_directories(Cpp_Httplib INTERFACE cpp-httplib/) + diff --git a/externals/cpp-httplib b/externals/cpp-httplib new file mode 160000 index 000000000..f80864ca0 --- /dev/null +++ b/externals/cpp-httplib @@ -0,0 +1 @@ +Subproject commit f80864ca031932351abef49b74097c67f14719c6 diff --git a/externals/openal-soft b/externals/openal-soft new file mode 160000 index 000000000..f120be6e2 --- /dev/null +++ b/externals/openal-soft @@ -0,0 +1 @@ +Subproject commit f120be6e2e7d2eb37a70f8adb5a98e5a645c5349 diff --git a/externals/sdl3 b/externals/sdl3 index bdb72bb3f..4e2fd57e7 160000 --- a/externals/sdl3 +++ b/externals/sdl3 @@ -1 +1 @@ -Subproject commit bdb72bb3f051de32c91f5deb439a50bfd51499dc +Subproject commit 4e2fd57e77fb4a28c0eeef0670fc4121cc2cf1f9