diff --git a/.ci/build-mac-arm64.sh b/.ci/build-mac-arm64.sh
index 6d5bda2257..f03ce64524 100644
--- a/.ci/build-mac-arm64.sh
+++ b/.ci/build-mac-arm64.sh
@@ -31,7 +31,7 @@ sudo rm -rf /usr/local/Cellar/curl /usr/local/opt/curl
/usr/local/bin/brew link --overwrite python || true
/usr/local/bin/brew install -f --overwrite nasm ninja p7zip ccache pipenv #create-dmg
/usr/local/bin/brew link -f curl || true
-/usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl2 vulkan-headers coreutils
+/usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl3 vulkan-headers coreutils
/usr/local/bin/brew link -f llvm@$LLVM_COMPILER_VER ffmpeg@5 || true
export BREW_ARM64_PATH="/opt/homebrew1"
@@ -45,7 +45,7 @@ brew_arm64_install_packages curl
mv /opt/homebrew1/opt/curl/bin/curl /opt/homebrew1/opt/curl/bin/curl.bak
ln -s /usr/local/opt/curl/bin/curl /opt/homebrew1/opt/curl/bin/curl
-brew_arm64_install_packages 0mq aom aribb24 ca-certificates cjson dav1d ffmpeg@5 fontconfig freetype freetype2 gettext glew gmp gnutls lame libbluray libidn2 libnettle libogg libpng librist libsodium libsoxr libtasn libtasn1 libunistring libvmaf libvorbis libvpx libx11 libxau libxcb libxdmcp llvm@$LLVM_COMPILER_VER mbedtls molten-vk nettle opencore-amr openjpeg openssl opus p11-kit pkg-config pkgconfig pzstd rav1e sdl2 snappy speex srt svt-av1 theora vulkan-headers webp x264 x265 xz z3 zeromq zmq zstd
+brew_arm64_install_packages 0mq aom aribb24 ca-certificates cjson dav1d ffmpeg@5 fontconfig freetype freetype2 gettext glew gmp gnutls lame libbluray libidn2 libnettle libogg libpng librist libsodium libsoxr libtasn libtasn1 libunistring libvmaf libvorbis libvpx libx11 libxau libxcb libxdmcp llvm@$LLVM_COMPILER_VER mbedtls molten-vk nettle opencore-amr openjpeg openssl opus p11-kit pkg-config pkgconfig pzstd rav1e sdl3 snappy speex srt svt-av1 theora vulkan-headers webp x264 x265 xz z3 zeromq zmq zstd
"$BREW_ARM64_PATH/bin/brew" link -f ffmpeg@5
ln -s "/opt/homebrew1/opt/llvm@$LLVM_COMPILER_VER/lib/unwind/libunwind.1.dylib" "/opt/homebrew1/opt/llvm@$LLVM_COMPILER_VER/lib/libunwind.1.dylib"
@@ -86,10 +86,10 @@ cd "$WORKDIR"
ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER"
export Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN"
-export SDL2_DIR="$BREW_ARM64_PATH/opt/sdl2/lib/cmake/SDL2"
+export SDL3_DIR="$BREW_ARM64_PATH/opt/sdl3/lib/cmake/SDL3"
export PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH"
-export LDFLAGS="-L$BREW_ARM64_PATH/lib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavcodec.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavformat.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavutil.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswscale.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswresample.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++.1.dylib $BREW_ARM64_PATH/lib/libSDL2.dylib $BREW_ARM64_PATH/lib/libGLEW.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/libunwind.1.dylib -Wl,-rpath,$BREW_ARM64_PATH/lib"
+export LDFLAGS="-L$BREW_ARM64_PATH/lib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavcodec.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavformat.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavutil.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswscale.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswresample.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++.1.dylib $BREW_ARM64_PATH/lib/libSDL3.dylib $BREW_ARM64_PATH/lib/libGLEW.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/libunwind.1.dylib -Wl,-rpath,$BREW_ARM64_PATH/lib"
export CPPFLAGS="-I$BREW_ARM64_PATH/include -I$BREW_X64_PATH/include -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=130000"
export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=130000"
export LIBRARY_PATH="$BREW_ARM64_PATH/lib"
diff --git a/.ci/build-mac.sh b/.ci/build-mac.sh
index cdc175c200..809ec1faa9 100644
--- a/.ci/build-mac.sh
+++ b/.ci/build-mac.sh
@@ -13,7 +13,7 @@ arch -x86_64 /usr/local/bin/brew install -f --overwrite python || arch -x86_64 /
arch -x86_64 /usr/local/bin/brew uninstall -f --ignore-dependencies ffmpeg
arch -x86_64 /usr/local/bin/brew install -f --build-from-source ffmpeg@5
arch -x86_64 /usr/local/bin/brew reinstall -f --build-from-source gnutls freetype
-arch -x86_64 /usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl2 vulkan-headers coreutils
+arch -x86_64 /usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl3 vulkan-headers coreutils
arch -x86_64 /usr/local/bin/brew link -f llvm@$LLVM_COMPILER_VER ffmpeg@5
# moltenvk based on commit for 1.2.11 release
@@ -53,7 +53,7 @@ cd "$WORKDIR"
ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER"
export Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN"
-export SDL2_DIR="$BREW_X64_PATH/opt/sdl2/lib/cmake/SDL2"
+export SDL3_DIR="$BREW_X64_PATH/opt/sdl3/lib/cmake/SDL3"
export PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH"
export LDFLAGS="-L$BREW_X64_PATH/lib -Wl,-rpath,$BREW_X64_PATH/lib"
diff --git a/.ci/deploy-mac-arm64.sh b/.ci/deploy-mac-arm64.sh
index 0baedfa99d..da1fbe9165 100644
--- a/.ci/deploy-mac-arm64.sh
+++ b/.ci/deploy-mac-arm64.sh
@@ -37,7 +37,7 @@ install_name_tool \
-delete_rpath /opt/homebrew/lib \
-delete_rpath /opt/homebrew1/opt/llvm@$LLVM_COMPILER_VER/lib \
-delete_rpath /usr/local/lib RPCS3.app/Contents/MacOS/rpcs3
-#-delete_rpath /opt/homebrew1/Cellar/sdl2/2.30.7/lib
+#-delete_rpath /opt/homebrew1/Cellar/sdl3/3.2.8/lib
# Need to do this rename hack due to case insensitive filesystem
mv rpcs3.app RPCS3_.app
diff --git a/.ci/deploy-mac.sh b/.ci/deploy-mac.sh
index 91eb253589..c293358748 100644
--- a/.ci/deploy-mac.sh
+++ b/.ci/deploy-mac.sh
@@ -39,7 +39,7 @@ mv RPCS3_.app RPCS3.app
install_name_tool \
-delete_rpath /usr/local/lib \
-delete_rpath /usr/local/opt/llvm@$LLVM_COMPILER_VER/lib RPCS3.app/Contents/MacOS/rpcs3
-#-delete_rpath /usr/local/Cellar/sdl2/2.30.3/lib
+#-delete_rpath /usr/local/Cellar/sdl3/3.2.8/lib
# NOTE: "--deep" is deprecated
codesign --deep -fs - RPCS3.app
diff --git a/.ci/install-freebsd.sh b/.ci/install-freebsd.sh
index 3c2896af63..de10561dfa 100755
--- a/.ci/install-freebsd.sh
+++ b/.ci/install-freebsd.sh
@@ -15,4 +15,4 @@ pkg install "llvm$LLVM_COMPILER_VER"
pkg install git ccache cmake ninja "qt$QT_VER_MAIN-multimedia" "qt$QT_VER_MAIN-svg" glew openal-soft ffmpeg
# Optional dependencies (libevdev is pulled by qtX-base)
-pkg install pkgconf alsa-lib pulseaudio sdl2 evdev-proto vulkan-headers vulkan-loader
+pkg install pkgconf alsa-lib pulseaudio sdl3 evdev-proto vulkan-headers vulkan-loader
diff --git a/.cirrus.yml b/.cirrus.yml
index 6f2a08bb8a..6a7bdd0743 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -58,7 +58,7 @@ env:
# linux_task:
# container:
-# image: rpcs3/rpcs3-ci-jammy:1.1
+# image: rpcs3/rpcs3-ci-jammy:1.2
# cpu: 4
# memory: 16G
# env:
@@ -134,7 +134,7 @@ freebsd_task:
# matrix:
# - name: Cirrus Linux AArch64 Clang
# arm_container:
-# image: 'docker.io/rpcs3/rpcs3-ci-jammy-aarch64:1.1'
+# image: 'docker.io/rpcs3/rpcs3-ci-jammy-aarch64:1.2'
# cpu: 8
# memory: 8G
# clang_script:
diff --git a/.github/workflows/rpcs3.yml b/.github/workflows/rpcs3.yml
index cc819e8468..26880dedf8 100644
--- a/.github/workflows/rpcs3.yml
+++ b/.github/workflows/rpcs3.yml
@@ -33,17 +33,17 @@ jobs:
matrix:
include:
- os: ubuntu-24.04
- docker_img: "rpcs3/rpcs3-ci-jammy:1.1"
+ docker_img: "rpcs3/rpcs3-ci-jammy:1.2"
build_sh: "/rpcs3/.ci/build-linux.sh"
compiler: clang
UPLOAD_COMMIT_HASH: d812f1254a1157c80fd402f94446310560f54e5f
UPLOAD_REPO_FULL_NAME: "rpcs3/rpcs3-binaries-linux"
- os: ubuntu-24.04
- docker_img: "rpcs3/rpcs3-ci-jammy:1.1"
+ docker_img: "rpcs3/rpcs3-ci-jammy:1.2"
build_sh: "/rpcs3/.ci/build-linux.sh"
compiler: gcc
- os: ubuntu-24.04-arm
- docker_img: "rpcs3/rpcs3-ci-jammy-aarch64:1.1"
+ docker_img: "rpcs3/rpcs3-ci-jammy-aarch64:1.2"
build_sh: "/rpcs3/.ci/build-linux-aarch64.sh"
compiler: clang
UPLOAD_COMMIT_HASH: a1d35836e8d45bfc6f63c26f0a3e5d46ef622fe1
diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt
index 4625c0e81e..9568548651 100644
--- a/3rdparty/CMakeLists.txt
+++ b/3rdparty/CMakeLists.txt
@@ -210,16 +210,14 @@ add_subdirectory(OpenAL EXCLUDE_FROM_ALL)
# FAudio
set(FAUDIO_TARGET 3rdparty_dummy_lib)
if(USE_FAUDIO)
- # FAudio depends on SDL2
- find_package(SDL2)
+ # FAudio depends on SDL3
+ find_package(SDL3)
if (USE_SYSTEM_FAUDIO)
- if (NOT SDL2_FOUND OR SDL2_VERSION VERSION_LESS 2.0.12)
+ if (NOT SDL3_FOUND OR SDL3_VERSION VERSION_LESS 3.2.0)
message(WARNING
- "RPCS3: System FAudio requires SDL 2.0.9 or newer. Please note, this warning"
- "can also be displayed with SDL2 versions between 2.0.9-2.0.12, as the"
- "CMake config files are not correctly installed. Since a valid SDL2"
- ">=2.0.9 version cannot be found, building with FAudio will be skipped.")
- set(USE_FAUDIO OFF CACHE BOOL "Disabled using system FAudio with SDL < 2.0.12" FORCE)
+ "RPCS3: System FAudio requires SDL 3.2.0 or newer. Since a valid SDL3"
+ ">=3.2.0 version cannot be found, building with FAudio will be skipped.")
+ set(USE_FAUDIO OFF CACHE BOOL "Disabled using system FAudio with SDL < 3.2.0" FORCE)
else()
message(STATUS "RPCS3: Using system FAudio")
find_package(FAudio REQUIRED CONFIGS FAudioConfig.cmake FAudio-config.cmake)
@@ -229,11 +227,11 @@ if(USE_FAUDIO)
set(FAUDIO_TARGET 3rdparty_FAudio)
endif()
else()
- if (NOT SDL2_FOUND OR SDL2_VERSION VERSION_LESS 2.24.0)
+ if (NOT SDL3_FOUND OR SDL3_VERSION VERSION_LESS 3.2.0)
message(WARNING
- "-- RPCS3: 3rdparty FAudio requires SDL 2.24.0 or newer. Since a valid SDL2"
- ">=2.24.0 version cannot be found, building with FAudio will be skipped.")
- set(USE_FAUDIO OFF CACHE BOOL "Disabled FAudio with SDL < 2.24.0" FORCE)
+ "-- RPCS3: 3rdparty FAudio requires SDL 3.2.0 or newer. Since a valid SDL3"
+ ">=3.2.0 version cannot be found, building with FAudio will be skipped.")
+ set(USE_FAUDIO OFF CACHE BOOL "Disabled FAudio with SDL < 3.2.0" FORCE)
else()
message(STATUS "RPCS3: Using builtin FAudio")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library")
@@ -303,26 +301,26 @@ add_subdirectory(wolfssl EXCLUDE_FROM_ALL)
# CURL
add_subdirectory(curl EXCLUDE_FROM_ALL)
-# SDL2
-set(SDL2_TARGET 3rdparty_dummy_lib)
+# SDL3
+set(SDL3_TARGET 3rdparty_dummy_lib)
if(USE_SDL)
if(USE_SYSTEM_SDL)
- find_package(SDL2)
- if(SDL2_FOUND AND NOT SDL2_VERSION VERSION_LESS 2.24.0)
- message(STATUS "Using system SDL2")
- add_library(3rdparty_sdl2 INTERFACE)
- target_compile_definitions(3rdparty_sdl2 INTERFACE -DHAVE_SDL2=1)
- target_link_libraries(3rdparty_sdl2 INTERFACE SDL2::SDL2)
- set(SDL2_TARGET 3rdparty_sdl2)
+ find_package(SDL3)
+ if(SDL3_FOUND AND NOT SDL3_VERSION VERSION_LESS 3.2.0)
+ message(STATUS "Using system SDL3 version '${SDL3_VERSION}'")
+ add_library(3rdparty_sdl3 INTERFACE)
+ target_compile_definitions(3rdparty_sdl3 INTERFACE -DHAVE_SDL3=1)
+ target_link_libraries(3rdparty_sdl3 INTERFACE SDL3::SDL3)
+ set(SDL3_TARGET 3rdparty_sdl3)
else()
- message(FATAL_ERROR "SDL2 is not available on this system")
+ message(FATAL_ERROR "SDL3 is not available on this system")
endif()
else()
- message(STATUS "Using static SDL2 from 3rdparty")
- add_library(3rdparty_sdl2 INTERFACE)
- target_compile_definitions(3rdparty_sdl2 INTERFACE -DHAVE_SDL2=1)
+ message(STATUS "Using static SDL3 from 3rdparty")
+ add_library(3rdparty_sdl3 INTERFACE)
+ target_compile_definitions(3rdparty_sdl3 INTERFACE -DHAVE_SDL3=1)
add_subdirectory(libsdl-org EXCLUDE_FROM_ALL)
- set(SDL2_TARGET 3rdparty_sdl2)
+ set(SDL3_TARGET 3rdparty_sdl3)
endif()
endif()
@@ -365,7 +363,7 @@ add_library(3rdparty::glew ALIAS 3rdparty_glew)
add_library(3rdparty::wolfssl ALIAS wolfssl)
add_library(3rdparty::libcurl ALIAS 3rdparty_libcurl)
add_library(3rdparty::soundtouch ALIAS soundtouch)
-add_library(3rdparty::sdl2 ALIAS ${SDL2_TARGET})
+add_library(3rdparty::sdl3 ALIAS ${SDL3_TARGET})
add_library(3rdparty::miniupnpc ALIAS libminiupnpc-static)
add_library(3rdparty::rtmidi ALIAS rtmidi)
add_library(3rdparty::opencv ALIAS ${OPENCV_TARGET})
diff --git a/3rdparty/FAudio b/3rdparty/FAudio
index af74e661c1..486e33eef3 160000
--- a/3rdparty/FAudio
+++ b/3rdparty/FAudio
@@ -1 +1 @@
-Subproject commit af74e661c1bd8b105840d14485cc01d9c782b513
+Subproject commit 486e33eef3f282e4ce3d29f32ded3e67bacdbe5c
diff --git a/3rdparty/libsdl-org/SDL b/3rdparty/libsdl-org/SDL
index 7a44b1ab00..f6864924f7 160000
--- a/3rdparty/libsdl-org/SDL
+++ b/3rdparty/libsdl-org/SDL
@@ -1 +1 @@
-Subproject commit 7a44b1ab002cee6efa56d3b4c0e146b7fbaed80b
+Subproject commit f6864924f76e1a0b4abaefc76ae2ed22b1a8916e
diff --git a/3rdparty/libsdl-org/SDL.vcxproj b/3rdparty/libsdl-org/SDL.vcxproj
index 687761ae93..e062060fab 100644
--- a/3rdparty/libsdl-org/SDL.vcxproj
+++ b/3rdparty/libsdl-org/SDL.vcxproj
@@ -11,137 +11,141 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
-
+
+
+
+
+
+
+
-
-
-
+
+
-
@@ -151,6 +155,7 @@
+
@@ -172,17 +177,36 @@
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -191,24 +215,17 @@
+
-
-
-
-
-
-
-
-
@@ -224,29 +241,39 @@
+
+
+
+
+
+
+
-
+
+
-
+
+
+
@@ -261,8 +288,6 @@
-
-
@@ -272,78 +297,71 @@
+
+
-
-
+
+
+
+
-
+
+
+
-
+
-
+
+
+
+
+
+
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -351,18 +369,24 @@
+
+
+
+
+
+
@@ -374,11 +398,12 @@
-
-
+
+
+
@@ -388,23 +413,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -420,25 +465,35 @@
-
+
+
+
+
+
+
+
+
+
+
+
{8DC244EE-A0BD-4038-BAF7-CFAFA5EB2BAA}
@@ -467,13 +522,18 @@
+
+ SDL\src;$(IncludePath)
+
TurnOffAllWarnings
false
- SDL\include;%(AdditionalIncludeDirectories)
+ SDL\include;SDL\include\build_config;%(AdditionalIncludeDirectories)
ProgramDatabase
MaxSpeed
+ SDL_HIDAPI_DISABLED;%(PreprocessorDefinitions)
+ SDL_HIDAPI_DISABLED;%(PreprocessorDefinitions)
diff --git a/3rdparty/libsdl-org/SDL.vcxproj.filters b/3rdparty/libsdl-org/SDL.vcxproj.filters
index e7f2fa2dcb..44d4e4ec9f 100644
--- a/3rdparty/libsdl-org/SDL.vcxproj.filters
+++ b/3rdparty/libsdl-org/SDL.vcxproj.filters
@@ -1,433 +1,1592 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ {395b3af0-33d0-411b-b153-de1676bf1ef8}
+
+
+ {5a3e3167-75be-414f-8947-a5306df372b2}
+
+
+ {546d9ed1-988e-49d3-b1a5-e5b3d19de6c1}
+
+
+ {a56247ff-5108-4960-ba6a-6814fd1554ec}
+
+
+ {8880dfad-2a06-4e84-ab6e-6583641ad2d1}
+
+
+ {2b996a7f-f3e9-4300-a97f-2c907bcd89a9}
+
+
+ {5713d682-2bc7-4da4-bcf0-262a98f142eb}
+
+
+ {5e27e19f-b3f8-4e2d-b323-b00b2040ec86}
+
+
+ {a3ab9cff-8495-4a5c-8af6-27e43199a712}
+
+
+ {377061e4-3856-4f05-b916-0d3b360df0f6}
+
+
+ {226a6643-1c65-4c7f-92aa-861313d974bb}
+
+
+ {ef859522-a7fe-4a00-a511-d6a9896adf5b}
+
+
+ {01fd2642-4493-4316-b548-fb829f4c9125}
+
+
+ {cce7558f-590a-4f0a-ac0d-e579f76e588e}
+
+
+ {7a53c9e4-d4bd-40ed-9265-1625df685121}
+
+
+ {4c7a051c-ce7c-426c-bf8c-9187827f9052}
+
+
+ {97e2f79f-311b-42ea-81b2-e801649fdd93}
+
+
+ {baf97c8c-7e90-41e5-bff8-14051b8d3956}
+
+
+ {45e50d3a-56c9-4352-b811-0c60c49a2431}
+
+
+ {9d86e0ef-d6f6-4db2-bfc5-b3529406fa8d}
+
+
+ {b35fa13c-6ed2-4680-8c56-c7d71b76ceab}
+
+
+ {61b61b31-9e26-4171-a3bb-b969f1889726}
+
+
+ {f63aa216-6ee7-4143-90d3-32be3787f276}
+
+
+ {90bee923-89df-417f-a6c3-3e260a7dd54d}
+
+
+ {4c8ad943-c2fb-4014-9ca3-041e0ad08426}
+
+
+ {3d68ae70-a9ff-46cf-be69-069f0b02aca0}
+
+
+ {ebc2fca3-3c26-45e3-815e-3e0581d5e226}
+
+
+ {47c445a2-7014-4e15-9660-7c89a27dddcf}
+
+
+ {d008487d-6ed0-4251-848b-79a68e3c1459}
+
+
+ {c9e8273e-13ae-47dc-bef8-8ad8e64c9a3e}
+
+
+ {c9e8273e-13ae-47dc-bef8-8ad8e64c9a3d}
+
+
+ {0b8e136d-56ae-47e7-9981-e863a57ac616}
+
+
+ {bf3febd3-9328-43e8-b196-0fd3be8177dd}
+
+
+ {1a62dc68-52d2-4c07-9d81-d94dfe1d0d12}
+
+
+ {e9f01b22-34b3-4380-ade6-0e96c74e9c90}
+
+
+ {f674f22f-7841-4f3a-974e-c36b2d4823fc}
+
+
+ {d7ad92de-4e55-4202-9b2b-1bd9a35fe4dc}
+
+
+ {8311d79d-9ad5-4369-99fe-b2fb2659d402}
+
+
+ {6c4dfb80-fdf9-497c-a6ff-3cd8f22efde9}
+
+
+ {4810e35c-33cb-4da2-bfaf-452da20d3c9a}
+
+
+ {2cf93f1d-81fd-4bdc-998c-5e2fa43988bc}
+
+
+ {5752b7ab-2344-4f38-95ab-b5d3bc150315}
+
+
+ {7a0eae3d-f113-4914-b926-6816d1929250}
+
+
+ {ee602cbf-96a2-4b0b-92a9-51d38a727411}
+
+
+ {a812185b-9060-4a1c-8431-be4f66894626}
+
+
+ {31c16cdf-adc4-4950-8293-28ba530f3882}
+
+
+ {add61b53-8144-47d6-bd67-3420a87c4905}
+
+
+ {e7cdcf36-b462-49c7-98b7-07ea7b3687f4}
+
+
+ {82588eef-dcaa-4f69-b2a9-e675940ce54c}
+
+
+ {560239c3-8fa1-4d23-a81a-b8408b2f7d3f}
+
+
+ {81711059-7575-4ece-9e68-333b63e992c4}
+
+
+ {1e44970f-7535-4bfb-b8a5-ea0cea0349e0}
+
+
+ {1dd91224-1176-492b-a2cb-e26153394db0}
+
+
+ {e3ecfe50-cf22-41d3-8983-2fead5164b47}
+
+
+ {5521d22f-1e52-47a6-8c52-06a3b6bdefd7}
+
+
+ {4755f3a6-49ac-46d6-86be-21f5c21f2197}
+
+
+ {f48c2b17-1bee-4fec-a7c8-24cf619abe08}
+
+
+ {653672cc-90ae-4eba-a256-6479f2c31804}
+
+
+ {00001967ea2801028a046a722a070000}
+
+
+ {0000ddc7911820dbe64274d3654f0000}
+
+
+ {0000de1b75e1a954834693f1c81e0000}
+
+
+ {0000fc2700d453b3c8d79fe81e1c0000}
+
+
+ {0000fbfe2d21e4f451142e7d0e870000}
+
+
+ {5115ba31-20f8-4eab-a8c5-6a572ab78ff7}
+
+
+ {00003288226ff86b99eee5b443e90000}
+
+
+ {0000d7fda065b13b0ca4ab262c380000}
+
+
+ {098fbef9-d8a0-4b3b-b57b-d157d395335d}
+
+
+ {00008dfdfa0190856fbf3c7db52d0000}
+
+
+ {748cf015-00b8-4e71-ac48-02e947e4d93d}
+
+
+ {00009d5ded166cc6c6680ec771a30000}
+
+
+ {00004d6806b6238cae0ed62db5440000}
+
+
+ {000028b2ea36d7190d13777a4dc70000}
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ camera
+
+
+ camera
+
+
+ filesystem
+
+
+ io
+
+
+ io
+
+
+ main
+
+
+
+
+ API Headers
+
+
+ API Headers
+
+
+ API Headers
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ core\windows
+
+
+ core\windows
+
+
+ core\windows
+
+
+ core\windows
+
+
+ core\windows
+
+
+ core\windows
+
+
+ core\windows
+
+
+ cpuinfo
+
+
+ dynapi
+
+
+ dynapi
+
+
+ dynapi
+
+
+ dynapi
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ haptic
+
+
+ haptic
+
+
+ joystick
+
+
+ joystick
+
+
+ joystick
+
+
+ joystick
+
+
+ joystick
+
+
+ joystick
+
+
+ joystick
+
+
+ libm
+
+
+ libm
+
+
+ hidapi\hidapi
+
+
+ locale
+
+
+ misc
+
+
+ audio\directsound
+
+
+ audio\disk
+
+
+ audio\dummy
+
+
+ audio\wasapi
+
+
+ haptic\windows
+
+
+ haptic\windows
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\windows
+
+
+ joystick\windows
+
+
+ joystick\windows
+
+
+ joystick\windows
+
+
+ joystick\virtual
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video\dummy
+
+
+ video\dummy
+
+
+ video\dummy
+
+
+ video\yuv2rgb
+
+
+ video\yuv2rgb
+
+
+ video\yuv2rgb
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ timer
+
+
+ thread
+
+
+ thread
+
+
+ thread\windows
+
+
+ thread\windows
+
+
+ thread\generic
+
+
+ sensor
+
+
+ sensor
+
+
+ sensor\dummy
+
+
+ sensor\windows
+
+
+ render
+
+
+ render
+
+
+ render
+
+
+ render\direct3d
+
+
+ render\direct3d11
+
+
+ render\opengl
+
+
+ render\opengl
+
+
+ render\opengles2
+
+
+ render\opengles2
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ power
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
+ video\khronos\vulkan
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ render\direct3d12
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+ render\vulkan
+
+
+ video\offscreen
+
+
+ video\offscreen
+
+
+ video\offscreen
+
+
+ video\offscreen
+
+
+ video\offscreen
+
+
+ video\offscreen
+
+
+ API Headers
+
+
+ gpu
+
+
+ gpu
+
+
+
+
+
+
+
+
+ camera\dummy
+
+
+ camera\mediafoundation
+
+
+ camera
+
+
+ dialog
+
+
+ dialog
+
+
+ filesystem
+
+
+ filesystem\windows
+
+
+ io\generic
+
+
+ io
+
+
+ io\windows
+
+
+ main\generic
+
+
+ main
+
+
+ main
+
+
+ main\windows
+
+
+
+
+
+
+
+
+
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ audio
+
+
+ atomic
+
+
+ atomic
+
+
+ core
+
+
+ core\windows
+
+
+ core\windows
+
+
+ core\windows
+
+
+ core\windows
+
+
+ core\windows
+
+
+ cpuinfo
+
+
+ dialog
+
+
+ dynapi
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ events
+
+
+ io
+
+
+ filesystem\windows
+
+
+ haptic
+
+
+ hidapi
+
+
+ joystick
+
+
+ joystick
+
+
+ joystick
+
+
+ joystick
+
+
+ libm
+
+
+ loadso\windows
+
+
+ misc
+
+
+ misc\windows
+
+
+ locale\windows
+
+
+ locale
+
+
+ audio\directsound
+
+
+ audio\disk
+
+
+ audio\dummy
+
+
+ audio\wasapi
+
+
+ haptic\windows
+
+
+ haptic\windows
+
+
+ haptic\dummy
+
+
+ joystick\dummy
+
+
+ joystick\gdk
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\hidapi
+
+
+ joystick\windows
+
+
+ joystick\windows
+
+
+ joystick\windows
+
+
+ joystick\windows
+
+
+ joystick\windows
+
+
+ joystick\virtual
+
+
+ time
+
+
+ time\windows
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video
+
+
+ video\dummy
+
+
+ video\dummy
+
+
+ video\dummy
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ video\windows
+
+
+ timer
+
+
+ timer\windows
+
+
+ thread
+
+
+ thread\windows
+
+
+ thread\windows
+
+
+ thread\windows
+
+
+ thread\windows
+
+
+ thread\windows
+
+
+ thread\windows
+
+
+ thread\generic
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ stdlib
+
+
+ sensor
+
+
+ sensor\dummy
+
+
+ sensor\windows
+
+
+ render
+
+
+ render
+
+
+ render
+
+
+ render
+
+
+ render\direct3d
+
+
+ render\direct3d
+
+
+ render\direct3d11
+
+
+ render\direct3d11
+
+
+ render\opengl
+
+
+ render\opengl
+
+
+ render\opengles2
+
+
+ render\opengles2
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ render\software
+
+
+ power
+
+
+ power\windows
+
+
+
+ render\direct3d12
+
+
+ render\direct3d12
+
+
+ core\windows
+
+
+ stdlib
+
+
+
+
+
+
+
+ render\vulkan
+
+
+ render\vulkan
+
+
+ video\offscreen
+
+
+ video\offscreen
+
+
+ video\offscreen
+
+
+ video\offscreen
+
+
+ video\offscreen
+
+
+ video\offscreen
+
+
+ gpu
+
+
+ gpu
+
+
+ gpu
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BUILDING.md b/BUILDING.md
index 7cad89f8c5..c4830d056d 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -40,17 +40,17 @@ These are the essentials tools to build RPCS3 on Linux. Some of them can be inst
- [CMake 3.28.0+](https://www.cmake.org/download/)
- [Qt 6.8.2](https://www.qt.io/download-qt-installer)
- [Vulkan SDK 1.3.268.0](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html)) for now future SDKs don't work. You need precisely 1.3.268.0.
-- [SDL2](https://github.com/libsdl-org/SDL/releases) (for the FAudio backend)
+- [SDL3](https://github.com/libsdl-org/SDL/releases) (for the FAudio backend)
**If you have an NVIDIA GPU, you may need to install the libglvnd package.**
#### Arch Linux
- sudo pacman -S glew openal cmake vulkan-validation-layers qt6-base qt6-declarative qt6-multimedia qt6-svg sdl2 sndio jack2 base-devel
+ sudo pacman -S glew openal cmake vulkan-validation-layers qt6-base qt6-declarative qt6-multimedia qt6-svg sdl3 sndio jack2 base-devel
#### Debian & Ubuntu
- sudo apt-get install build-essential libasound2-dev libpulse-dev libopenal-dev libglew-dev zlib1g-dev libedit-dev libvulkan-dev libudev-dev git libevdev-dev libsdl2-2.0 libsdl2-dev libjack-dev libsndio-dev
+ sudo apt-get install build-essential libasound2-dev libpulse-dev libopenal-dev libglew-dev zlib1g-dev libedit-dev libvulkan-dev libudev-dev git libevdev-dev libsdl3-3.2 libsdl3-dev libjack-dev libsndio-dev
Ubuntu is usually horrendously out of date, and some packages need to be downloaded by hand. This part is for Qt, GCC, Vulkan, and CMake
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index d715095825..afaa294b7f 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -40,13 +40,13 @@ jobs:
# displayName: ccache
# - bash: |
-# docker pull --quiet rpcs3/rpcs3-ci-jammy:1.1
+# docker pull --quiet rpcs3/rpcs3-ci-jammy:1.2
# docker run \
# -v $(pwd):/rpcs3 \
# --env-file .ci/docker.env \
# -v $CCACHE_DIR:/root/.ccache \
# -v $BUILD_ARTIFACTSTAGINGDIRECTORY:/root/artifacts \
-# rpcs3/rpcs3-ci-jammy:1.1 \
+# rpcs3/rpcs3-ci-jammy:1.2 \
# /rpcs3/.ci/build-linux.sh
# displayName: Docker setup and build
diff --git a/rpcs3/Emu/CMakeLists.txt b/rpcs3/Emu/CMakeLists.txt
index e135e53ede..034133c3b2 100644
--- a/rpcs3/Emu/CMakeLists.txt
+++ b/rpcs3/Emu/CMakeLists.txt
@@ -143,8 +143,8 @@ target_sources(rpcs3_emu PRIVATE
)
if(USE_FAUDIO)
- find_package(SDL2)
- if(SDL2_FOUND AND SDL2_VERSION VERSION_GREATER_EQUAL 2.0.9)
+ find_package(SDL3)
+ if(SDL3_FOUND AND SDL3_VERSION VERSION_GREATER_EQUAL 3.2.0)
target_sources(rpcs3_emu PRIVATE
Audio/FAudio/FAudioBackend.cpp
Audio/FAudio/faudio_enumerator.cpp
@@ -641,7 +641,7 @@ endif()
target_link_libraries(rpcs3_emu
PUBLIC
- 3rdparty::ffmpeg 3rdparty::sdl2
+ 3rdparty::ffmpeg 3rdparty::sdl3
3rdparty::opengl 3rdparty::stblib
3rdparty::vulkan 3rdparty::glew
3rdparty::libusb 3rdparty::wolfssl
diff --git a/rpcs3/Emu/Io/PadHandler.h b/rpcs3/Emu/Io/PadHandler.h
index 19178f7682..99c085b015 100644
--- a/rpcs3/Emu/Io/PadHandler.h
+++ b/rpcs3/Emu/Io/PadHandler.h
@@ -50,6 +50,9 @@ public:
color color_override{};
bool color_override_active{};
+ bool enable_player_leds{};
+ bool update_player_leds{true};
+
std::shared_ptr ahrs; // Used to calculate quaternions from sensor data
u64 last_ahrs_update_time_us = 0; // Last ahrs update
diff --git a/rpcs3/Emu/Io/pad_config_types.cpp b/rpcs3/Emu/Io/pad_config_types.cpp
index ab1503604e..e09be8a4e0 100644
--- a/rpcs3/Emu/Io/pad_config_types.cpp
+++ b/rpcs3/Emu/Io/pad_config_types.cpp
@@ -19,7 +19,7 @@ void fmt_class_string::format(std::string& out, u64 arg)
case pad_handler::xinput: return "XInput";
case pad_handler::mm: return "MMJoystick";
#endif
-#ifdef HAVE_SDL2
+#ifdef HAVE_SDL3
case pad_handler::sdl: return "SDL";
#endif
#ifdef HAVE_LIBEVDEV
diff --git a/rpcs3/Emu/Io/pad_config_types.h b/rpcs3/Emu/Io/pad_config_types.h
index b9b7132ce1..36fc8328fa 100644
--- a/rpcs3/Emu/Io/pad_config_types.h
+++ b/rpcs3/Emu/Io/pad_config_types.h
@@ -15,7 +15,7 @@ enum class pad_handler
xinput,
mm,
#endif
-#ifdef HAVE_SDL2
+#ifdef HAVE_SDL3
sdl,
#endif
#ifdef HAVE_LIBEVDEV
diff --git a/rpcs3/Input/dualsense_pad_handler.h b/rpcs3/Input/dualsense_pad_handler.h
index ac2b2afba8..981b8a568d 100644
--- a/rpcs3/Input/dualsense_pad_handler.h
+++ b/rpcs3/Input/dualsense_pad_handler.h
@@ -178,7 +178,6 @@ public:
DualSenseFeatureSet feature_set{DualSenseFeatureSet::Normal};
bool init_lightbar{true};
bool update_lightbar{true};
- bool update_player_leds{true};
bool release_leds{false};
// Controls for lightbar pulse. This seems somewhat hacky for now, as I haven't found out a nicer way.
diff --git a/rpcs3/Input/gui_pad_thread.cpp b/rpcs3/Input/gui_pad_thread.cpp
index 08d6b4e9ee..3844d7ba9e 100644
--- a/rpcs3/Input/gui_pad_thread.cpp
+++ b/rpcs3/Input/gui_pad_thread.cpp
@@ -10,7 +10,7 @@
#elif HAVE_LIBEVDEV
#include "evdev_joystick_handler.h"
#endif
-#ifdef HAVE_SDL2
+#ifdef HAVE_SDL3
#include "sdl_pad_handler.h"
#endif
#include "Emu/Io/PadHandler.h"
@@ -225,7 +225,7 @@ std::shared_ptr gui_pad_thread::GetHandler(pad_handler type)
case pad_handler::mm:
return std::make_shared();
#endif
-#ifdef HAVE_SDL2
+#ifdef HAVE_SDL3
case pad_handler::sdl:
return std::make_shared();
#endif
diff --git a/rpcs3/Input/hid_pad_handler.h b/rpcs3/Input/hid_pad_handler.h
index 50e7d59e20..b6dc093983 100644
--- a/rpcs3/Input/hid_pad_handler.h
+++ b/rpcs3/Input/hid_pad_handler.h
@@ -39,7 +39,6 @@ public:
hid_device* bt_device{nullptr}; // Used in ps move handler
#endif
std::string path;
- bool enable_player_leds{false};
u8 led_delay_on{0};
u8 led_delay_off{0};
u8 battery_level{0};
diff --git a/rpcs3/Input/pad_thread.cpp b/rpcs3/Input/pad_thread.cpp
index a2b91dd109..4465035c3f 100644
--- a/rpcs3/Input/pad_thread.cpp
+++ b/rpcs3/Input/pad_thread.cpp
@@ -12,7 +12,7 @@
#elif HAVE_LIBEVDEV
#include "evdev_joystick_handler.h"
#endif
-#ifdef HAVE_SDL2
+#ifdef HAVE_SDL3
#include "sdl_pad_handler.h"
#endif
#include "keyboard_pad_handler.h"
@@ -668,7 +668,7 @@ std::shared_ptr pad_thread::GetHandler(pad_handler type)
case pad_handler::mm:
return std::make_shared();
#endif
-#ifdef HAVE_SDL2
+#ifdef HAVE_SDL3
case pad_handler::sdl:
return std::make_shared();
#endif
diff --git a/rpcs3/Input/sdl_pad_handler.cpp b/rpcs3/Input/sdl_pad_handler.cpp
index 562085f037..38bd6bc1bd 100644
--- a/rpcs3/Input/sdl_pad_handler.cpp
+++ b/rpcs3/Input/sdl_pad_handler.cpp
@@ -1,4 +1,4 @@
-#ifdef HAVE_SDL2
+#ifdef HAVE_SDL3
#include "stdafx.h"
#include "sdl_pad_handler.h"
@@ -46,14 +46,14 @@ public:
sdl_log.error("Could not set SDL_HINT_JOYSTICK_THREAD: %s", SDL_GetError());
}
- if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER) < 0)
+ if (!SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_GAMEPAD))
{
sdl_log.error("Could not initialize! SDL Error: %s", SDL_GetError());
return false;
}
- SDL_LogSetAllPriority(SDL_LOG_PRIORITY_VERBOSE);
- SDL_LogSetOutputFunction([](void*, int category, SDL_LogPriority priority, const char* message)
+ SDL_SetLogPriorities(SDL_LOG_PRIORITY_VERBOSE);
+ SDL_SetLogOutputFunction([](void*, int category, SDL_LogPriority priority, const char* message)
{
std::string category_name;
switch (category)
@@ -126,10 +126,10 @@ sdl_pad_handler::sdl_pad_handler() : PadHandlerBase(pad_handler::sdl)
button_list =
{
{ SDLKeyCodes::None, "" },
- { SDLKeyCodes::A, "A" },
- { SDLKeyCodes::B, "B" },
- { SDLKeyCodes::X, "X" },
- { SDLKeyCodes::Y, "Y" },
+ { SDLKeyCodes::South, "South" },
+ { SDLKeyCodes::East, "East" },
+ { SDLKeyCodes::West, "West" },
+ { SDLKeyCodes::North, "North" },
{ SDLKeyCodes::Left, "Left" },
{ SDLKeyCodes::Right, "Right" },
{ SDLKeyCodes::Up, "Up" },
@@ -142,10 +142,10 @@ sdl_pad_handler::sdl_pad_handler() : PadHandlerBase(pad_handler::sdl)
{ SDLKeyCodes::RS, "RS" },
{ SDLKeyCodes::Guide, "Guide" },
{ SDLKeyCodes::Misc1, "Misc 1" },
- { SDLKeyCodes::Paddle1, "Paddle 1" },
- { SDLKeyCodes::Paddle2, "Paddle 2" },
- { SDLKeyCodes::Paddle3, "Paddle 3" },
- { SDLKeyCodes::Paddle4, "Paddle 4" },
+ { SDLKeyCodes::RPaddle1, "R Paddle 1" },
+ { SDLKeyCodes::LPaddle1, "L Paddle 1" },
+ { SDLKeyCodes::RPaddle2, "R Paddle 2" },
+ { SDLKeyCodes::LPaddle2, "L Paddle 2" },
{ SDLKeyCodes::Touchpad, "Touchpad" },
{ SDLKeyCodes::Touch_L, "Touch Left" },
{ SDLKeyCodes::Touch_R, "Touch Right" },
@@ -176,6 +176,7 @@ sdl_pad_handler::sdl_pad_handler() : PadHandlerBase(pad_handler::sdl)
b_has_rumble = true;
b_has_motion = true;
b_has_led = true;
+ b_has_player_led = true;
b_has_rgb = true;
b_has_battery = true;
b_has_battery_led = true;
@@ -192,11 +193,11 @@ sdl_pad_handler::~sdl_pad_handler()
for (auto& controller : m_controllers)
{
- if (controller.second && controller.second->sdl.game_controller)
+ if (controller.second && controller.second->sdl.gamepad)
{
set_rumble(controller.second.get(), 0, 0);
- SDL_GameControllerClose(controller.second->sdl.game_controller);
- controller.second->sdl.game_controller = nullptr;
+ SDL_CloseGamepad(controller.second->sdl.gamepad);
+ controller.second->sdl.gamepad = nullptr;
}
}
}
@@ -217,10 +218,10 @@ void sdl_pad_handler::init_config(cfg_pad* cfg)
cfg->start.def = ::at32(button_list, SDLKeyCodes::Start);
cfg->select.def = ::at32(button_list, SDLKeyCodes::Back);
cfg->ps.def = ::at32(button_list, SDLKeyCodes::Guide);
- cfg->square.def = ::at32(button_list, SDLKeyCodes::X);
- cfg->cross.def = ::at32(button_list, SDLKeyCodes::A);
- cfg->circle.def = ::at32(button_list, SDLKeyCodes::B);
- cfg->triangle.def = ::at32(button_list, SDLKeyCodes::Y);
+ cfg->square.def = ::at32(button_list, SDLKeyCodes::West);
+ cfg->cross.def = ::at32(button_list, SDLKeyCodes::South);
+ cfg->circle.def = ::at32(button_list, SDLKeyCodes::East);
+ cfg->triangle.def = ::at32(button_list, SDLKeyCodes::North);
cfg->left.def = ::at32(button_list, SDLKeyCodes::Left);
cfg->down.def = ::at32(button_list, SDLKeyCodes::Down);
cfg->right.def = ::at32(button_list, SDLKeyCodes::Right);
@@ -282,7 +283,7 @@ bool sdl_pad_handler::Init()
if (fs::is_file(db_path))
{
- if (SDL_GameControllerAddMappingsFromFile(db_path.c_str()) < 0)
+ if (SDL_AddGamepadMappingsFromFile(db_path.c_str()) < 0)
{
sdl_log.error("Could not add mappings from file '%s'! SDL Error: %s", db_path, SDL_GetError());
}
@@ -293,16 +294,13 @@ bool sdl_pad_handler::Init()
}
}
- SDL_version version{};
- SDL_GetVersion(&version);
-
if (const char* revision = SDL_GetRevision(); revision && strlen(revision) > 0)
{
- sdl_log.notice("Using version: %d.%d.%d (revision='%s')", version.major, version.minor, version.patch, revision);
+ sdl_log.notice("Using version: %d.%d.%d (revision='%s')", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_MICRO_VERSION, revision);
}
else
{
- sdl_log.notice("Using version: %d.%d.%d", version.major, version.minor, version.patch);
+ sdl_log.notice("Using version: %d.%d.%d", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_MICRO_VERSION);
}
m_is_init = true;
@@ -321,45 +319,52 @@ void sdl_pad_handler::process()
PadHandlerBase::process();
}
-SDLDevice::sdl_info sdl_pad_handler::get_sdl_info(int i)
+SDLDevice::sdl_info sdl_pad_handler::get_sdl_info(SDL_JoystickID id)
{
SDLDevice::sdl_info info{};
- info.game_controller = SDL_GameControllerOpen(i);
+ info.gamepad = SDL_OpenGamepad(id);
- if (!info.game_controller)
+ if (!info.gamepad)
{
- sdl_log.error("Could not open device %d! SDL Error: %s", i, SDL_GetError());
+ sdl_log.error("Could not open device %d! SDL Error: %s", id, SDL_GetError());
return {};
}
- if (const char* name = SDL_GameControllerName(info.game_controller))
+ if (const char* name = SDL_GetGamepadName(info.gamepad))
{
info.name = name;
}
- if (const char* path = SDL_GameControllerPath(info.game_controller))
+ if (const char* path = SDL_GetGamepadPath(info.gamepad))
{
info.path = path;
}
- if (const char* serial = SDL_GameControllerGetSerial(info.game_controller))
+ if (const char* serial = SDL_GetGamepadSerial(info.gamepad))
{
info.serial = serial;
}
- info.joystick = SDL_GameControllerGetJoystick(info.game_controller);
- info.type = SDL_GameControllerGetType(info.game_controller);
- info.vid = SDL_GameControllerGetVendor(info.game_controller);
- info.pid = SDL_GameControllerGetProduct(info.game_controller);
- info.product_version= SDL_GameControllerGetProductVersion(info.game_controller);
- info.firmware_version = SDL_GameControllerGetFirmwareVersion(info.game_controller);
- info.has_led = SDL_GameControllerHasLED(info.game_controller);
- info.has_rumble = SDL_GameControllerHasRumble(info.game_controller);
- info.has_rumble_triggers = SDL_GameControllerHasRumbleTriggers(info.game_controller);
- info.has_accel = SDL_GameControllerHasSensor(info.game_controller, SDL_SENSOR_ACCEL);
- info.has_gyro = SDL_GameControllerHasSensor(info.game_controller, SDL_SENSOR_GYRO);
+ const SDL_PropertiesID property_id = SDL_GetGamepadProperties(info.gamepad);
+ if (!property_id)
+ {
+ sdl_log.error("Could not get properties of device %d! SDL Error: %s", id, SDL_GetError());
+ }
- if (const int num_touchpads = SDL_GameControllerGetNumTouchpads(info.game_controller); num_touchpads > 0)
+ info.type = SDL_GetGamepadType(info.gamepad);
+ info.vid = SDL_GetGamepadVendor(info.gamepad);
+ info.pid = SDL_GetGamepadProduct(info.gamepad);
+ info.product_version = SDL_GetGamepadProductVersion(info.gamepad);
+ info.firmware_version = SDL_GetGamepadFirmwareVersion(info.gamepad);
+ info.has_led = SDL_HasProperty(property_id, SDL_PROP_GAMEPAD_CAP_RGB_LED_BOOLEAN);
+ info.has_mono_led = SDL_HasProperty(property_id, SDL_PROP_GAMEPAD_CAP_MONO_LED_BOOLEAN);
+ info.has_player_led = SDL_HasProperty(property_id, SDL_PROP_GAMEPAD_CAP_PLAYER_LED_BOOLEAN);
+ info.has_rumble = SDL_HasProperty(property_id, SDL_PROP_GAMEPAD_CAP_RUMBLE_BOOLEAN);
+ info.has_rumble_triggers = SDL_HasProperty(property_id, SDL_PROP_GAMEPAD_CAP_TRIGGER_RUMBLE_BOOLEAN);
+ info.has_accel = SDL_GamepadHasSensor(info.gamepad, SDL_SENSOR_ACCEL);
+ info.has_gyro = SDL_GamepadHasSensor(info.gamepad, SDL_SENSOR_GYRO);
+
+ if (const int num_touchpads = SDL_GetNumGamepadTouchpads(info.gamepad); num_touchpads > 0)
{
info.touchpads.resize(num_touchpads);
@@ -368,7 +373,7 @@ SDLDevice::sdl_info sdl_pad_handler::get_sdl_info(int i)
SDLDevice::touchpad& touchpad = ::at32(info.touchpads, i);
touchpad.index = i;
- if (const int num_fingers = SDL_GameControllerGetNumTouchpadFingers(info.game_controller, touchpad.index); num_fingers > 0)
+ if (const int num_fingers = SDL_GetNumGamepadTouchpadFingers(info.gamepad, touchpad.index); num_fingers > 0)
{
touchpad.fingers.resize(num_fingers);
@@ -380,52 +385,52 @@ SDLDevice::sdl_info sdl_pad_handler::get_sdl_info(int i)
}
}
- sdl_log.notice("Found game controller %d: type=%d, name='%s', path='%s', serial='%s', vid=0x%x, pid=0x%x, product_version=0x%x, firmware_version=0x%x, has_led=%d, has_rumble=%d, has_rumble_triggers=%d, has_accel=%d, has_gyro=%d",
- i, static_cast(info.type), info.name, info.path, info.serial, info.vid, info.pid, info.product_version, info.firmware_version, info.has_led, info.has_rumble, info.has_rumble_triggers, info.has_accel, info.has_gyro);
+ sdl_log.notice("Found game pad %d: type=%d, name='%s', path='%s', serial='%s', vid=0x%x, pid=0x%x, product_version=0x%x, firmware_version=0x%x, has_led=%d, has_player_led=%d, has_mono_led=%d, has_rumble=%d, has_rumble_triggers=%d, has_accel=%d, has_gyro=%d",
+ id, static_cast(info.type), info.name, info.path, info.serial, info.vid, info.pid, info.product_version, info.firmware_version, info.has_led, info.has_player_led, info.has_mono_led, info.has_rumble, info.has_rumble_triggers, info.has_accel, info.has_gyro);
if (info.has_accel)
{
- if (SDL_GameControllerSetSensorEnabled(info.game_controller, SDL_SENSOR_ACCEL, SDL_TRUE) != 0 ||
- !SDL_GameControllerIsSensorEnabled(info.game_controller, SDL_SENSOR_ACCEL))
+ if (!SDL_SetGamepadSensorEnabled(info.gamepad, SDL_SENSOR_ACCEL, true) ||
+ !SDL_GamepadSensorEnabled(info.gamepad, SDL_SENSOR_ACCEL))
{
- sdl_log.error("Could not activate acceleration sensor of device %d! SDL Error: %s", i, SDL_GetError());
+ sdl_log.error("Could not activate acceleration sensor of device %d! SDL Error: %s", id, SDL_GetError());
info.has_accel = false;
}
else
{
- info.data_rate_accel = SDL_GameControllerGetSensorDataRate(info.game_controller, SDL_SENSOR_ACCEL);
- sdl_log.notice("Acceleration sensor data rate of device %d = %.2f/s", i, info.data_rate_accel);
+ info.data_rate_accel = SDL_GetGamepadSensorDataRate(info.gamepad, SDL_SENSOR_ACCEL);
+ sdl_log.notice("Acceleration sensor data rate of device %d = %.2f/s", id, info.data_rate_accel);
}
}
if (info.has_gyro)
{
- if (SDL_GameControllerSetSensorEnabled(info.game_controller, SDL_SENSOR_GYRO, SDL_TRUE) != 0 ||
- !SDL_GameControllerIsSensorEnabled(info.game_controller, SDL_SENSOR_GYRO))
+ if (!SDL_SetGamepadSensorEnabled(info.gamepad, SDL_SENSOR_GYRO, true) ||
+ !SDL_GamepadSensorEnabled(info.gamepad, SDL_SENSOR_GYRO))
{
- sdl_log.error("Could not activate gyro sensor of device %d! SDL Error: %s", i, SDL_GetError());
+ sdl_log.error("Could not activate gyro sensor of device %d! SDL Error: %s", id, SDL_GetError());
info.has_gyro = false;
}
else
{
- info.data_rate_gyro = SDL_GameControllerGetSensorDataRate(info.game_controller, SDL_SENSOR_GYRO);
- sdl_log.notice("Gyro sensor data rate of device %d = %.2f/s", i, info.data_rate_accel);
+ info.data_rate_gyro = SDL_GetGamepadSensorDataRate(info.gamepad, SDL_SENSOR_GYRO);
+ sdl_log.notice("Gyro sensor data rate of device %d = %.2f/s", id, info.data_rate_accel);
}
}
- for (int i = 0; i < SDL_CONTROLLER_BUTTON_MAX; i++)
+ for (int i = 0; i < SDL_GAMEPAD_BUTTON_COUNT; i++)
{
- const SDL_GameControllerButton button_id = static_cast(i);
- if (SDL_GameControllerHasButton(info.game_controller, button_id))
+ const SDL_GamepadButton button_id = static_cast(i);
+ if (SDL_GamepadHasButton(info.gamepad, button_id))
{
info.button_ids.insert(button_id);
}
}
- for (int i = 0; i < SDL_CONTROLLER_AXIS_MAX; i++)
+ for (int i = 0; i < SDL_GAMEPAD_AXIS_COUNT; i++)
{
- const SDL_GameControllerAxis axis_id = static_cast(i);
- if (SDL_GameControllerHasAxis(info.game_controller, axis_id))
+ const SDL_GamepadAxis axis_id = static_cast(i);
+ if (SDL_GamepadHasAxis(info.gamepad, axis_id))
{
info.axis_ids.insert(axis_id);
}
@@ -454,15 +459,11 @@ void sdl_pad_handler::enumerate_devices()
if (!m_is_init)
return;
- for (int i = 0; i < SDL_NumJoysticks(); i++)
+ int count = 0;
+ SDL_JoystickID* gamepads = SDL_GetGamepads(&count);
+ for (int i = 0; i < count && gamepads; i++)
{
- if (!SDL_IsGameController(i))
- {
- sdl_log.error("Joystick %d is not game controller interface compatible! SDL Error: %s", i, SDL_GetError());
- continue;
- }
-
- if (SDLDevice::sdl_info info = get_sdl_info(i); info.game_controller)
+ if (SDLDevice::sdl_info info = get_sdl_info(gamepads[i]); info.gamepad)
{
std::shared_ptr dev = std::make_shared();
dev->sdl = std::move(info);
@@ -482,16 +483,17 @@ void sdl_pad_handler::enumerate_devices()
m_controllers[device_name] = std::move(dev);
}
}
+ SDL_free(gamepads);
}
-std::shared_ptr sdl_pad_handler::get_device_by_game_controller(SDL_GameController* game_controller) const
+std::shared_ptr sdl_pad_handler::get_device_by_gamepad(SDL_Gamepad* gamepad) const
{
- if (!game_controller)
+ if (!gamepad)
return nullptr;
- const char* name = SDL_GameControllerName(game_controller);
- const char* path = SDL_GameControllerPath(game_controller);
- const char* serial = SDL_GameControllerGetSerial(game_controller);
+ const char* name = SDL_GetGamepadName(gamepad);
+ const char* path = SDL_GetGamepadPath(gamepad);
+ const char* serial = SDL_GetGamepadSerial(gamepad);
// Try to find a real device
for (const auto& controller : m_controllers)
@@ -551,17 +553,13 @@ PadHandlerBase::connection sdl_pad_handler::update_connection(const std::shared_
{
if (SDLDevice* dev = static_cast(device.get()))
{
- if (dev->sdl.game_controller)
+ if (dev->sdl.gamepad)
{
- if (SDL_GameControllerGetAttached(dev->sdl.game_controller))
+ if (SDL_GamepadConnected(dev->sdl.gamepad))
{
- if (SDL_HasEvent(SDL_EventType::SDL_CONTROLLERBUTTONDOWN) ||
- SDL_HasEvent(SDL_EventType::SDL_CONTROLLERBUTTONUP) ||
- SDL_HasEvent(SDL_EventType::SDL_CONTROLLERAXISMOTION) ||
- SDL_HasEvent(SDL_EventType::SDL_CONTROLLERSENSORUPDATE) ||
- SDL_HasEvent(SDL_EventType::SDL_CONTROLLERTOUCHPADUP) ||
- SDL_HasEvent(SDL_EventType::SDL_CONTROLLERTOUCHPADDOWN) ||
- SDL_HasEvent(SDL_EventType::SDL_JOYBATTERYUPDATED))
+ if (SDL_HasEvents(SDL_EventType::SDL_EVENT_GAMEPAD_AXIS_MOTION, SDL_EventType::SDL_EVENT_GAMEPAD_BUTTON_UP) ||
+ SDL_HasEvents(SDL_EventType::SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN, SDL_EventType::SDL_EVENT_GAMEPAD_SENSOR_UPDATE) ||
+ SDL_HasEvent(SDL_EventType::SDL_EVENT_JOYSTICK_BATTERY_UPDATED))
{
return connection::connected;
}
@@ -569,52 +567,49 @@ PadHandlerBase::connection sdl_pad_handler::update_connection(const std::shared_
return connection::no_data;
}
- SDL_GameControllerClose(dev->sdl.game_controller);
- dev->sdl.game_controller = nullptr;
- dev->sdl.joystick = nullptr;
+ SDL_CloseGamepad(dev->sdl.gamepad);
+ dev->sdl.gamepad = nullptr;
}
// Try to reconnect
- for (int i = 0; i < SDL_NumJoysticks(); i++)
+ int count = 0;
+ SDL_JoystickID* gamepads = SDL_GetGamepads(&count);
+ for (int i = 0; i < count; i++)
{
- if (!SDL_IsGameController(i))
- {
- continue;
- }
-
- // Get game controller
- SDL_GameController* game_controller = SDL_GameControllerOpen(i);
- if (!game_controller)
+ // Get game pad
+ SDL_Gamepad* gamepad = SDL_OpenGamepad(gamepads[i]);
+ if (!gamepad)
{
continue;
}
// Find out if we already know this controller
- std::shared_ptr sdl_device = get_device_by_game_controller(game_controller);
+ std::shared_ptr sdl_device = get_device_by_gamepad(gamepad);
if (!sdl_device)
{
- // Close the game controller if we don't know it.
- SDL_GameControllerClose(game_controller);
+ // Close the game pad if we don't know it.
+ SDL_CloseGamepad(gamepad);
continue;
}
// Re-attach the controller if the device matches the current one
if (sdl_device.get() == dev)
{
- if (SDLDevice::sdl_info info = get_sdl_info(i); info.game_controller)
+ if (SDLDevice::sdl_info info = get_sdl_info(gamepads[i]); info.gamepad)
{
dev->sdl = std::move(info);
}
break;
}
}
+ SDL_free(gamepads);
}
return connection::disconnected;
}
-void sdl_pad_handler::SetPadData(const std::string& padId, u8 player_id, u8 large_motor, u8 small_motor, s32 r, s32 g, s32 b, bool /*player_led*/, bool battery_led, u32 battery_led_brightness)
+void sdl_pad_handler::SetPadData(const std::string& padId, u8 player_id, u8 large_motor, u8 small_motor, s32 r, s32 g, s32 b, bool player_led, bool battery_led, u32 battery_led_brightness)
{
std::shared_ptr device = get_device(padId);
SDLDevice* dev = static_cast(device.get());
@@ -628,6 +623,9 @@ void sdl_pad_handler::SetPadData(const std::string& padId, u8 player_id, u8 larg
set_rumble(dev, large_motor, small_motor);
+ dev->update_player_leds = true;
+ dev->config->player_led_enabled.set(player_led);
+
if (battery_led)
{
const u32 combined_color = get_battery_color(dev->sdl.power_level, battery_led_brightness);
@@ -642,27 +640,26 @@ void sdl_pad_handler::SetPadData(const std::string& padId, u8 player_id, u8 larg
dev->config->colorB.set(b);
}
- if (dev->sdl.has_led && SDL_GameControllerSetLED(dev->sdl.game_controller, r, g, b) != 0)
+ if ((dev->sdl.has_led || dev->sdl.has_mono_led) && !SDL_SetGamepadLED(dev->sdl.gamepad, r, g, b))
{
sdl_log.error("Could not set LED of device %d! SDL Error: %s", player_id, SDL_GetError());
}
+
+ if (dev->sdl.has_player_led && !SDL_SetGamepadPlayerIndex(dev->sdl.gamepad, player_led ? player_id : -1))
+ {
+ sdl_log.error("Could not set player LED of device %d! SDL Error: %s", player_id, SDL_GetError());
+ }
}
-u32 sdl_pad_handler::get_battery_color(SDL_JoystickPowerLevel power_level, u32 brightness) const
+u32 sdl_pad_handler::get_battery_color(int power_level, u32 brightness) const
{
u32 combined_color{};
- switch (power_level)
- {
- default: combined_color = 0xFF00; break;
- case SDL_JOYSTICK_POWER_UNKNOWN: combined_color = 0xFF00; break;
- case SDL_JOYSTICK_POWER_EMPTY: combined_color = 0xFF33; break;
- case SDL_JOYSTICK_POWER_LOW: combined_color = 0xFFCC; break;
- case SDL_JOYSTICK_POWER_MEDIUM: combined_color = 0x66FF; break;
- case SDL_JOYSTICK_POWER_FULL: combined_color = 0x00FF; break;
- case SDL_JOYSTICK_POWER_WIRED: combined_color = 0x00FF; break;
- case SDL_JOYSTICK_POWER_MAX: combined_color = 0x00FF; break;
- }
+ if (power_level < 20) combined_color = 0xFF00;
+ else if (power_level < 40) combined_color = 0xFF33;
+ else if (power_level < 60) combined_color = 0xFFCC;
+ else if (power_level < 80) combined_color = 0x66FF;
+ else combined_color = 0x00FF;
const u32 red = (combined_color >> 8) * brightness / 100;
const u32 green = (combined_color & 0xff) * brightness / 100;
@@ -676,20 +673,16 @@ u32 sdl_pad_handler::get_battery_level(const std::string& padId)
if (!dev)
return 0;
- if (dev->sdl.joystick)
+ if (dev->sdl.gamepad)
{
- dev->sdl.power_level = SDL_JoystickCurrentPowerLevel(dev->sdl.joystick);
-
- switch (dev->sdl.power_level)
+ const SDL_PowerState power_state = SDL_GetGamepadPowerInfo(dev->sdl.gamepad, &dev->sdl.power_level);
+ switch (power_state)
{
- case SDL_JOYSTICK_POWER_UNKNOWN: return 0;
- case SDL_JOYSTICK_POWER_EMPTY: return 5;
- case SDL_JOYSTICK_POWER_LOW: return 20;
- case SDL_JOYSTICK_POWER_MEDIUM: return 70;
- case SDL_JOYSTICK_POWER_FULL: return 100;
- case SDL_JOYSTICK_POWER_WIRED: return 100;
- case SDL_JOYSTICK_POWER_MAX: return 100;
- default: return 0;
+ case SDL_PowerState::SDL_POWERSTATE_ERROR:
+ case SDL_PowerState::SDL_POWERSTATE_UNKNOWN:
+ return 0;
+ default:
+ return std::clamp(dev->sdl.power_level, 0, 100);
}
}
@@ -700,24 +693,28 @@ void sdl_pad_handler::get_extended_info(const pad_ensemble& binding)
{
const auto& pad = binding.pad;
SDLDevice* dev = static_cast(binding.device.get());
- if (!dev || !dev->sdl.game_controller || !pad)
+ if (!dev || !dev->sdl.gamepad || !pad)
return;
- if (dev->sdl.joystick)
+ if (dev->sdl.gamepad)
{
- dev->sdl.power_level = SDL_JoystickCurrentPowerLevel(dev->sdl.joystick);
- pad->m_cable_state = dev->sdl.power_level == SDL_JOYSTICK_POWER_WIRED;
-
- switch (dev->sdl.power_level)
+ const SDL_PowerState power_state = SDL_GetGamepadPowerInfo(dev->sdl.gamepad, &dev->sdl.power_level);
+ switch (power_state)
{
- case SDL_JOYSTICK_POWER_UNKNOWN: pad->m_battery_level = 0; break;
- case SDL_JOYSTICK_POWER_EMPTY: pad->m_battery_level = 5; break;
- case SDL_JOYSTICK_POWER_LOW: pad->m_battery_level = 20; break;
- case SDL_JOYSTICK_POWER_MEDIUM: pad->m_battery_level = 70; break;
- case SDL_JOYSTICK_POWER_FULL: pad->m_battery_level = 100; break;
- case SDL_JOYSTICK_POWER_WIRED: pad->m_battery_level = 100; break;
- case SDL_JOYSTICK_POWER_MAX: pad->m_battery_level = 100; break;
- default: pad->m_battery_level = 0; break;
+ case SDL_PowerState::SDL_POWERSTATE_ON_BATTERY:
+ pad->m_battery_level = std::clamp(dev->sdl.power_level, 0, 100);
+ pad->m_cable_state = 0;
+ break;
+ case SDL_PowerState::SDL_POWERSTATE_NO_BATTERY:
+ case SDL_PowerState::SDL_POWERSTATE_CHARGING:
+ case SDL_PowerState::SDL_POWERSTATE_CHARGED:
+ pad->m_battery_level = std::clamp(dev->sdl.power_level, 0, 100);
+ pad->m_cable_state = 1;
+ break;
+ default:
+ pad->m_battery_level = 0;
+ pad->m_cable_state = 0;
+ break;
}
}
else
@@ -728,7 +725,7 @@ void sdl_pad_handler::get_extended_info(const pad_ensemble& binding)
if (dev->sdl.has_accel)
{
- if (SDL_GameControllerGetSensorData(dev->sdl.game_controller, SDL_SENSOR_ACCEL, dev->values_accel.data(), 3) != 0)
+ if (!SDL_GetGamepadSensorData(dev->sdl.gamepad, SDL_SENSOR_ACCEL, dev->values_accel.data(), 3))
{
sdl_log.error("Could not get acceleration sensor data of device %d! SDL Error: %s", dev->player_id, SDL_GetError());
}
@@ -747,7 +744,7 @@ void sdl_pad_handler::get_extended_info(const pad_ensemble& binding)
if (dev->sdl.has_gyro)
{
- if (SDL_GameControllerGetSensorData(dev->sdl.game_controller, SDL_SENSOR_GYRO, dev->values_gyro.data(), 3) != 0)
+ if (!SDL_GetGamepadSensorData(dev->sdl.gamepad, SDL_SENSOR_GYRO, dev->values_gyro.data(), 3))
{
sdl_log.error("Could not get gyro sensor data of device %d! SDL Error: %s", dev->player_id, SDL_GetError());
}
@@ -823,7 +820,7 @@ void sdl_pad_handler::apply_pad_data(const pad_ensemble& binding)
}
}
- if (dev->sdl.has_led)
+ if (dev->sdl.has_led || dev->sdl.has_mono_led)
{
// Use LEDs to indicate battery level
if (cfg->led_battery_indicator)
@@ -879,7 +876,7 @@ void sdl_pad_handler::apply_pad_data(const pad_ensemble& binding)
const u8 g = dev->led_is_on ? cfg->colorG : 0;
const u8 b = dev->led_is_on ? cfg->colorB : 0;
- if (SDL_GameControllerSetLED(dev->sdl.game_controller, r, g, b) != 0)
+ if (!SDL_SetGamepadLED(dev->sdl.gamepad, r, g, b))
{
sdl_log.error("Could not set LED of device %d! SDL Error: %s", dev->player_id, SDL_GetError());
}
@@ -887,19 +884,30 @@ void sdl_pad_handler::apply_pad_data(const pad_ensemble& binding)
dev->led_needs_update = false;
}
}
+
+ if (dev->sdl.has_player_led && (dev->update_player_leds || dev->enable_player_leds != cfg->player_led_enabled.get()))
+ {
+ dev->enable_player_leds = cfg->player_led_enabled.get();
+ dev->update_player_leds = false;
+
+ if (!SDL_SetGamepadPlayerIndex(dev->sdl.gamepad, dev->enable_player_leds ? dev->player_id : -1))
+ {
+ sdl_log.error("Could not set player LED of device %d! SDL Error: %s", dev->player_id, SDL_GetError());
+ }
+ }
}
void sdl_pad_handler::set_rumble(SDLDevice* dev, u8 speed_large, u8 speed_small)
{
- if (!dev || !dev->sdl.game_controller) return;
+ if (!dev || !dev->sdl.gamepad) return;
constexpr u32 rumble_duration_ms = static_cast((min_output_interval + 100ms).count()); // Some number higher than the min_output_interval.
if (dev->sdl.has_rumble)
{
- if (SDL_GameControllerRumble(dev->sdl.game_controller, speed_large * 257, speed_small * 257, rumble_duration_ms) != 0)
+ if (!SDL_RumbleGamepad(dev->sdl.gamepad, speed_large * 257, speed_small * 257, rumble_duration_ms))
{
- sdl_log.error("Unable to play game controller rumble of player %d! SDL Error: %s", dev->player_id, SDL_GetError());
+ sdl_log.error("Unable to play game pad rumble of player %d! SDL Error: %s", dev->player_id, SDL_GetError());
}
}
@@ -909,9 +917,9 @@ void sdl_pad_handler::set_rumble(SDLDevice* dev, u8 speed_large, u8 speed_small)
if (false && dev->sdl.has_rumble_triggers)
{
// Only the large motor shall control both triggers. It wouldn't make sense to differentiate here.
- if (SDL_GameControllerRumbleTriggers(dev->sdl.game_controller, speed_large * 257, speed_large * 257, rumble_duration_ms) != 0)
+ if (!SDL_RumbleGamepadTriggers(dev->sdl.gamepad, speed_large * 257, speed_large * 257, rumble_duration_ms))
{
- sdl_log.error("Unable to play game controller trigger rumble of player %d! SDL Error: %s", dev->player_id, SDL_GetError());
+ sdl_log.error("Unable to play game pad trigger rumble of player %d! SDL Error: %s", dev->player_id, SDL_GetError());
}
}
}
@@ -972,43 +980,43 @@ std::unordered_map sdl_pad_handler::get_button_values(const std::share
{
std::unordered_map values;
SDLDevice* dev = static_cast(device.get());
- if (!dev || !dev->sdl.game_controller)
+ if (!dev || !dev->sdl.gamepad)
return values;
- for (SDL_GameControllerButton button_id : dev->sdl.button_ids)
+ for (SDL_GamepadButton button_id : dev->sdl.button_ids)
{
- const u8 value = SDL_GameControllerGetButton(dev->sdl.game_controller, button_id);
+ const u8 value = SDL_GetGamepadButton(dev->sdl.gamepad, button_id);
const SDLKeyCodes key_code = get_button_code(button_id);
// TODO: SDL does not support DS3 button intensity in the current version
values[key_code] = value ? 255 : 0;
}
- for (SDL_GameControllerAxis axis_id : dev->sdl.axis_ids)
+ for (SDL_GamepadAxis axis_id : dev->sdl.axis_ids)
{
- const s16 value = SDL_GameControllerGetAxis(dev->sdl.game_controller, axis_id);
+ const s16 value = SDL_GetGamepadAxis(dev->sdl.gamepad, axis_id);
switch (axis_id)
{
- case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_TRIGGERLEFT:
+ case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_LEFT_TRIGGER:
values[SDLKeyCodes::LT] = std::max(0, value);
break;
- case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_TRIGGERRIGHT:
+ case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_RIGHT_TRIGGER:
values[SDLKeyCodes::RT] = std::max(0, value);
break;
- case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_LEFTX:
+ case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_LEFTX:
values[SDLKeyCodes::LSXNeg] = value < 0 ? std::abs(value) - 1 : 0;
values[SDLKeyCodes::LSXPos] = value > 0 ? value : 0;
break;
- case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_LEFTY:
+ case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_LEFTY:
values[SDLKeyCodes::LSYNeg] = value > 0 ? value : 0;
values[SDLKeyCodes::LSYPos] = value < 0 ? std::abs(value) - 1 : 0;
break;
- case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_RIGHTX:
+ case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_RIGHTX:
values[SDLKeyCodes::RSXNeg] = value < 0 ? std::abs(value) - 1 : 0;
values[SDLKeyCodes::RSXPos] = value > 0 ? value : 0;
break;
- case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_RIGHTY:
+ case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_RIGHTY:
values[SDLKeyCodes::RSYNeg] = value > 0 ? value : 0;
values[SDLKeyCodes::RSYPos] = value < 0 ? std::abs(value) - 1 : 0;
break;
@@ -1021,20 +1029,20 @@ std::unordered_map sdl_pad_handler::get_button_values(const std::share
{
for (const SDLDevice::touch_point& finger : touchpad.fingers)
{
- u8 state = 0; // 1 means the finger is touching the pad
+ bool down = false; // true means the finger is touching the pad
f32 x = 0.0f; // 0 = left, 1 = right
f32 y = 0.0f; // 0 = top, 1 = bottom
f32 pressure = 0.0f; // In the current SDL version the pressure is always 1 if the state is 1
- if (SDL_GameControllerGetTouchpadFinger(dev->sdl.game_controller, touchpad.index, finger.index, &state, &x, &y, &pressure) != 0)
+ if (!SDL_GetGamepadTouchpadFinger(dev->sdl.gamepad, touchpad.index, finger.index, &down, &x, &y, &pressure))
{
sdl_log.error("Could not get touchpad %d finger %d data of device %d! SDL Error: %s", touchpad.index, finger.index, dev->player_id, SDL_GetError());
}
else
{
- sdl_log.trace("touchpad=%d, finger=%d, state=%d, x=%f, y=%f, pressure=%f", touchpad.index, finger.index, state, x, y, pressure);
+ sdl_log.trace("touchpad=%d, finger=%d, state=%d, x=%f, y=%f, pressure=%f", touchpad.index, finger.index, down, x, y, pressure);
- if (state == 0)
+ if (!down)
{
continue;
}
@@ -1066,9 +1074,9 @@ pad_preview_values sdl_pad_handler::get_preview_values(const std::unordered_map<
};
}
-std::string sdl_pad_handler::button_to_string(SDL_GameControllerButton button)
+std::string sdl_pad_handler::button_to_string(SDL_GamepadButton button)
{
- if (const char* name = SDL_GameControllerGetStringForButton(button))
+ if (const char* name = SDL_GetGamepadStringForButton(button))
{
return name;
}
@@ -1076,9 +1084,9 @@ std::string sdl_pad_handler::button_to_string(SDL_GameControllerButton button)
return {};
}
-std::string sdl_pad_handler::axis_to_string(SDL_GameControllerAxis axis)
+std::string sdl_pad_handler::axis_to_string(SDL_GamepadAxis axis)
{
- if (const char* name = SDL_GameControllerGetStringForAxis(axis))
+ if (const char* name = SDL_GetGamepadStringForAxis(axis))
{
return name;
}
@@ -1086,33 +1094,33 @@ std::string sdl_pad_handler::axis_to_string(SDL_GameControllerAxis axis)
return {};
}
-sdl_pad_handler::SDLKeyCodes sdl_pad_handler::get_button_code(SDL_GameControllerButton button)
+sdl_pad_handler::SDLKeyCodes sdl_pad_handler::get_button_code(SDL_GamepadButton button)
{
switch (button)
{
default:
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_INVALID: return SDLKeyCodes::None;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_A: return SDLKeyCodes::A;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_B: return SDLKeyCodes::B;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_X: return SDLKeyCodes::X;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_Y: return SDLKeyCodes::Y;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_LEFT: return SDLKeyCodes::Left;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_RIGHT: return SDLKeyCodes::Right;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_UP: return SDLKeyCodes::Up;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_DOWN: return SDLKeyCodes::Down;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_LEFTSHOULDER: return SDLKeyCodes::LB;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: return SDLKeyCodes::RB;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_BACK: return SDLKeyCodes::Back;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_START: return SDLKeyCodes::Start;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_LEFTSTICK: return SDLKeyCodes::LS;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_RIGHTSTICK: return SDLKeyCodes::RS;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_GUIDE: return SDLKeyCodes::Guide;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_MISC1: return SDLKeyCodes::Misc1;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_PADDLE1: return SDLKeyCodes::Paddle1;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_PADDLE2: return SDLKeyCodes::Paddle2;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_PADDLE3: return SDLKeyCodes::Paddle3;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_PADDLE4: return SDLKeyCodes::Paddle4;
- case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_TOUCHPAD: return SDLKeyCodes::Touchpad;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_INVALID: return SDLKeyCodes::None;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_SOUTH: return SDLKeyCodes::South;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_EAST: return SDLKeyCodes::East;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_WEST: return SDLKeyCodes::West;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_NORTH: return SDLKeyCodes::North;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_DPAD_LEFT: return SDLKeyCodes::Left;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_DPAD_RIGHT: return SDLKeyCodes::Right;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_DPAD_UP: return SDLKeyCodes::Up;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_DPAD_DOWN: return SDLKeyCodes::Down;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_LEFT_SHOULDER: return SDLKeyCodes::LB;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER: return SDLKeyCodes::RB;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_BACK: return SDLKeyCodes::Back;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_START: return SDLKeyCodes::Start;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_LEFT_STICK: return SDLKeyCodes::LS;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_RIGHT_STICK: return SDLKeyCodes::RS;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_GUIDE: return SDLKeyCodes::Guide;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_MISC1: return SDLKeyCodes::Misc1;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1: return SDLKeyCodes::RPaddle1;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_LEFT_PADDLE1: return SDLKeyCodes::LPaddle1;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2: return SDLKeyCodes::RPaddle2;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_LEFT_PADDLE2: return SDLKeyCodes::LPaddle2;
+ case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_TOUCHPAD: return SDLKeyCodes::Touchpad;
}
}
diff --git a/rpcs3/Input/sdl_pad_handler.h b/rpcs3/Input/sdl_pad_handler.h
index a375f8a07f..1e8dff73f2 100644
--- a/rpcs3/Input/sdl_pad_handler.h
+++ b/rpcs3/Input/sdl_pad_handler.h
@@ -1,9 +1,18 @@
#pragma once
-#ifdef HAVE_SDL2
+#ifdef HAVE_SDL3
#include "Emu/Io/PadHandler.h"
-#include "SDL.h"
+
+#ifndef _MSC_VER
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wold-style-cast"
+#endif
+#include "SDL3/SDL.h"
+#ifndef _MSC_VER
+#pragma GCC diagnostic pop
+#endif
+
class SDLDevice : public PadDevice
{
@@ -24,11 +33,10 @@ public:
struct sdl_info
{
- SDL_GameController* game_controller = nullptr;
- SDL_GameControllerType type = SDL_GameControllerType::SDL_CONTROLLER_TYPE_UNKNOWN;
- SDL_Joystick* joystick = nullptr;
- SDL_JoystickPowerLevel power_level = SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN;
- SDL_JoystickPowerLevel last_power_level = SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN;
+ SDL_Gamepad* gamepad = nullptr;
+ SDL_GamepadType type = SDL_GamepadType::SDL_GAMEPAD_TYPE_UNKNOWN;
+ int power_level = 0;
+ int last_power_level = 0;
std::string name;
std::string path;
@@ -41,6 +49,8 @@ public:
bool is_virtual_device = false;
bool has_led = false;
+ bool has_mono_led = false;
+ bool has_player_led = false;
bool has_rumble = false;
bool has_rumble_triggers = false;
bool has_accel = false;
@@ -49,8 +59,8 @@ public:
f32 data_rate_accel = 0.0f;
f32 data_rate_gyro = 0.0f;
- std::set button_ids;
- std::set axis_ids;
+ std::set button_ids;
+ std::set axis_ids;
std::vector touchpads;
};
@@ -72,10 +82,10 @@ class sdl_pad_handler : public PadHandlerBase
{
None = 0,
- A,
- B,
- X,
- Y,
+ South,
+ East,
+ West,
+ North,
Left,
Right,
Up,
@@ -88,10 +98,10 @@ class sdl_pad_handler : public PadHandlerBase
Back,
Guide,
Misc1,
- Paddle1,
- Paddle2,
- Paddle3,
- Paddle4,
+ RPaddle1,
+ LPaddle1,
+ RPaddle2,
+ LPaddle2,
Touchpad,
Touch_L,
@@ -116,7 +126,7 @@ public:
sdl_pad_handler();
~sdl_pad_handler();
- SDLDevice::sdl_info get_sdl_info(int i);
+ SDLDevice::sdl_info get_sdl_info(SDL_JoystickID id);
bool Init() override;
void process() override;
@@ -132,7 +142,7 @@ private:
std::map> m_controllers;
void enumerate_devices();
- std::shared_ptr get_device_by_game_controller(SDL_GameController* game_controller) const;
+ std::shared_ptr get_device_by_gamepad(SDL_Gamepad* gamepad) const;
std::shared_ptr get_device(const std::string& device) override;
PadHandlerBase::connection update_connection(const std::shared_ptr& device) override;
@@ -146,13 +156,13 @@ private:
std::unordered_map get_button_values(const std::shared_ptr& device) override;
pad_preview_values get_preview_values(const std::unordered_map& data) override;
- u32 get_battery_color(SDL_JoystickPowerLevel power_level, u32 brightness) const;
+ u32 get_battery_color(int power_level, u32 brightness) const;
void set_rumble(SDLDevice* dev, u8 speed_large, u8 speed_small);
- static std::string button_to_string(SDL_GameControllerButton button);
- static std::string axis_to_string(SDL_GameControllerAxis axis);
+ static std::string button_to_string(SDL_GamepadButton button);
+ static std::string axis_to_string(SDL_GamepadAxis axis);
- static SDLKeyCodes get_button_code(SDL_GameControllerButton button);
+ static SDLKeyCodes get_button_code(SDL_GamepadButton button);
};
#endif
diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj
index b9a3b59bf0..d5d9f992b2 100644
--- a/rpcs3/emucore.vcxproj
+++ b/rpcs3/emucore.vcxproj
@@ -42,8 +42,8 @@
Use
..\3rdparty\miniupnp\miniupnp\miniupnpc\include;..\3rdparty\wolfssl\wolfssl;..\3rdparty\flatbuffers\include;..\3rdparty\libusb\libusb\libusb;..\3rdparty\yaml-cpp\yaml-cpp\include;..\3rdparty\SoundTouch\soundtouch\include;..\3rdparty\rtmidi\rtmidi;..\3rdparty\zlib\zlib;$(SolutionDir)build\lib\$(Configuration)-$(Platform)\llvm_build\include;$(SolutionDir)build\lib_ext\$(Configuration)-$(Platform)\llvm_build\include;$(SolutionDir)build\lib_ext\$(Configuration)-$(Platform)\llvm\include;$(SolutionDir)build\lib_ext\$(Configuration)-$(Platform)\llvm_build\include;$(VULKAN_SDK)\Include;..\3rdparty\zstd\zstd\lib;$(SolutionDir)3rdparty\fusion\fusion\Fusion;$(SolutionDir)3rdparty\wolfssl\extra\win32
MaxSpeed
- AL_LIBTYPE_STATIC;MINIUPNP_STATICLIB;HAVE_VULKAN;HAVE_SDL2;ZLIB_CONST;WOLFSSL_USER_SETTINGS;%(PreprocessorDefinitions)
- AL_LIBTYPE_STATIC;MINIUPNP_STATICLIB;HAVE_VULKAN;HAVE_SDL2;ZLIB_CONST;WOLFSSL_USER_SETTINGS;%(PreprocessorDefinitions)
+ AL_LIBTYPE_STATIC;MINIUPNP_STATICLIB;HAVE_VULKAN;HAVE_SDL3;ZLIB_CONST;WOLFSSL_USER_SETTINGS;%(PreprocessorDefinitions)
+ AL_LIBTYPE_STATIC;MINIUPNP_STATICLIB;HAVE_VULKAN;HAVE_SDL3;ZLIB_CONST;WOLFSSL_USER_SETTINGS;%(PreprocessorDefinitions)
%(AdditionalModuleDependencies)
%(AdditionalModuleDependencies)
diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj
index 2330fe3115..ce0b4fd6c7 100644
--- a/rpcs3/rpcs3.vcxproj
+++ b/rpcs3/rpcs3.vcxproj
@@ -79,7 +79,7 @@
4577;4467;4281;%(DisableSpecificWarnings)
$(IntDir)
MaxSpeed
- _WINDOWS;UNICODE;WIN32;WIN64;WIN32_LEAN_AND_MEAN;HAVE_VULKAN;HAVE_OPENCV;CV_IGNORE_DEBUG_BUILD_GUARD;MINIUPNP_STATICLIB;ZLIB_CONST;AL_LIBTYPE_STATIC;WOLFSSL_USER_SETTINGS;HAVE_SDL2;WITH_DISCORD_RPC;QT_NO_DEBUG;QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB;NDEBUG;QT_WINEXTRAS_LIB;QT_CONCURRENT_LIB;QT_MULTIMEDIA_LIB;QT_MULTIMEDIAWIDGETS_LIB;QT_SVG_LIB;%(PreprocessorDefinitions)
+ _WINDOWS;UNICODE;WIN32;WIN64;WIN32_LEAN_AND_MEAN;HAVE_VULKAN;HAVE_OPENCV;CV_IGNORE_DEBUG_BUILD_GUARD;MINIUPNP_STATICLIB;ZLIB_CONST;AL_LIBTYPE_STATIC;WOLFSSL_USER_SETTINGS;HAVE_SDL3;WITH_DISCORD_RPC;QT_NO_DEBUG;QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB;NDEBUG;QT_WINEXTRAS_LIB;QT_CONCURRENT_LIB;QT_MULTIMEDIA_LIB;QT_MULTIMEDIAWIDGETS_LIB;QT_SVG_LIB;%(PreprocessorDefinitions)
false
$(IntDir)vc$(PlatformToolsetVersion).pdb
true
@@ -1155,7 +1155,7 @@
$(QTDIR)\bin\moc.exe;%(FullPath)
Moc%27ing %(Identity)...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
@@ -1307,7 +1307,7 @@
$(QTDIR)\bin\moc.exe;%(FullPath)
Moc%27ing %(Identity)...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
$(QTDIR)\bin\moc.exe;%(FullPath)
@@ -1317,7 +1317,7 @@
$(QTDIR)\bin\moc.exe;%(FullPath)
Moc%27ing %(Identity)...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\rtmidi\rtmidi" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\rtmidi\rtmidi" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
@@ -1337,7 +1337,7 @@
"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
Moc%27ing %(Identity)...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
$(QTDIR)\bin\moc.exe;%(FullPath)
$(QTDIR)\bin\moc.exe;%(FullPath)
@@ -1363,7 +1363,7 @@
$(QTDIR)\bin\moc.exe;%(FullPath)
Moc%27ing %(Identity)...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
@@ -1374,7 +1374,7 @@
$(QTDIR)\bin\moc.exe;%(FullPath)
Moc%27ing %(Identity)...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
$(QTDIR)\bin\moc.exe;%(FullPath)
@@ -1384,7 +1384,7 @@
$(QTDIR)\bin\moc.exe;%(FullPath)
Moc%27ing %(Identity)...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
@@ -1573,7 +1573,7 @@
$(QTDIR)\bin\moc.exe;%(FullPath)
Moc%27ing %(Identity)...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
@@ -1666,7 +1666,7 @@
$(QTDIR)\bin\moc.exe;%(FullPath)
Moc%27ing %(Identity)...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
@@ -1699,7 +1699,7 @@
$(QTDIR)\bin\moc.exe;%(FullPath)
Moc%27ing %(Identity)...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg"
diff --git a/rpcs3/rpcs3qt/pad_settings_dialog.cpp b/rpcs3/rpcs3qt/pad_settings_dialog.cpp
index c20510c929..1522e89858 100644
--- a/rpcs3/rpcs3qt/pad_settings_dialog.cpp
+++ b/rpcs3/rpcs3qt/pad_settings_dialog.cpp
@@ -1436,7 +1436,7 @@ void pad_settings_dialog::ChangeHandler()
case pad_handler::ds4: m_description = tooltips.gamepad_settings.ds4_other; break;
case pad_handler::dualsense: m_description = tooltips.gamepad_settings.dualsense_other; break;
#endif
-#ifdef HAVE_SDL2
+#ifdef HAVE_SDL3
case pad_handler::sdl: m_description = tooltips.gamepad_settings.sdl; break;
#endif
#ifdef HAVE_LIBEVDEV
@@ -1976,7 +1976,7 @@ QString pad_settings_dialog::GetLocalizedPadHandler(const QString& original, pad
case pad_handler::xinput: return tr("XInput");
case pad_handler::mm: return tr("MMJoystick");
#endif
-#ifdef HAVE_SDL2
+#ifdef HAVE_SDL3
case pad_handler::sdl: return tr("SDL");
#endif
#ifdef HAVE_LIBEVDEV
@@ -2001,7 +2001,7 @@ QString pad_settings_dialog::GetLocalizedPadName(pad_handler handler, const QStr
case pad_handler::xinput: return tr("XInput Pad #%0").arg(index);
case pad_handler::mm: return tr("Joystick #%0").arg(index);
#endif
-#ifdef HAVE_SDL2
+#ifdef HAVE_SDL3
case pad_handler::sdl: break; // Localization not feasible. Names differ for each device.
#endif
#ifdef HAVE_LIBEVDEV
diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp
index 85af632ff2..d4285911a8 100644
--- a/rpcs3/rpcs3qt/settings_dialog.cpp
+++ b/rpcs3/rpcs3qt/settings_dialog.cpp
@@ -1285,7 +1285,7 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std
m_emu_settings->EnhanceCheckBox(ui->lockOverlayInputToPlayerOne, emu_settings_type::LockOvlIptToP1);
SubscribeTooltip(ui->lockOverlayInputToPlayerOne, tooltips.settings.lock_overlay_input_to_player_one);
-#if HAVE_SDL2
+#if HAVE_SDL3
m_emu_settings->EnhanceCheckBox(ui->loadSdlMappings, emu_settings_type::SDLMappings);
SubscribeTooltip(ui->loadSdlMappings, tooltips.settings.sdl_mappings);
#else