From a635a485bcd926a128ffc4b78cb82105bc351360 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Wed, 23 Nov 2022 10:41:43 -0800
Subject: [PATCH] Re-added WinRT support until we're sure that it's no longer
being used
---
.github/workflows/msvc.yml | 3 +
CMakeLists.txt | 107 ++-
Makefile.in | 2 +-
VisualC-GDK/SDL/SDL.vcxproj | 1 +
VisualC-GDK/SDL/SDL.vcxproj.filters | 3 +
VisualC-WinRT/SDL-UWP.sln | 40 +
VisualC-WinRT/SDL-UWP.vcxproj | 594 ++++++++++++
VisualC-WinRT/SDL-UWP.vcxproj.filters | 849 ++++++++++++++++
VisualC/SDL/SDL.vcxproj | 1 +
VisualC/SDL/SDL.vcxproj.filters | 3 +
build-scripts/fnsince.pl | 6 +
cmake/test/CMakeLists.txt | 4 +-
docs/README-winrt.md | 519 ++++++++++
docs/README.md | 1 +
include/SDL_config.h | 2 +
include/SDL_config.h.cmake | 2 +
include/SDL_config_windows.h | 2 +
include/SDL_config_winrt.h | 220 +++++
include/SDL_cpuinfo.h | 2 +-
include/SDL_hints.h | 99 ++
include/SDL_main.h | 28 +
include/SDL_platform.h | 3 +-
include/SDL_system.h | 103 ++
include/SDL_syswm.h | 11 +
include/begin_code.h | 4 +-
src/SDL.c | 4 +-
src/SDL_log.c | 14 +-
src/atomic/SDL_spinlock.c | 2 +-
src/audio/wasapi/SDL_wasapi.c | 115 +--
src/audio/wasapi/SDL_wasapi.h | 17 +
src/audio/wasapi/SDL_wasapi_win32.c | 162 ++++
src/audio/wasapi/SDL_wasapi_winrt.cpp | 447 +++++++++
src/core/windows/SDL_hid.c | 4 +
src/core/windows/SDL_hid.h | 4 +
src/core/windows/SDL_windows.c | 37 +-
src/core/windows/SDL_windows.h | 2 +
src/core/windows/SDL_xinput.c | 6 +-
src/core/winrt/SDL_winrtapp_common.cpp | 67 ++
src/core/winrt/SDL_winrtapp_common.h | 31 +
src/core/winrt/SDL_winrtapp_direct3d.cpp | 797 +++++++++++++++
src/core/winrt/SDL_winrtapp_direct3d.h | 92 ++
src/core/winrt/SDL_winrtapp_xaml.cpp | 160 +++
src/core/winrt/SDL_winrtapp_xaml.h | 33 +
src/cpuinfo/SDL_cpuinfo.c | 4 +-
src/dynapi/SDL_dynapi.h | 2 +
src/dynapi/SDL_dynapi_overrides.h | 4 +
src/dynapi/SDL_dynapi_procs.h | 8 +
src/file/SDL_rwops.c | 3 +
src/filesystem/winrt/SDL_sysfilesystem.cpp | 242 +++++
src/joystick/SDL_joystick.c | 4 +
src/joystick/windows/SDL_rawinputjoystick.c | 5 +
.../windows/SDL_windows_gaming_input.c | 27 +-
src/joystick/windows/SDL_windowsjoystick.c | 14 +-
src/joystick/windows/SDL_xinputjoystick.c | 10 +-
src/loadso/windows/SDL_sysloadso.c | 8 +
src/locale/winrt/SDL_syslocale.c | 58 ++
.../winrt/SDL3-WinRTResource_BlankCursor.cur | 0
src/main/winrt/SDL3-WinRTResources.rc | 3 +
src/main/winrt/SDL_winrt_main_NonXAML.cpp | 54 ++
src/misc/winrt/SDL_sysurl.cpp | 41 +
src/power/SDL_power.c | 3 +
src/power/SDL_syspower.h | 1 +
src/power/winrt/SDL_syspower.cpp | 44 +
src/render/direct3d11/SDL_render_d3d11.c | 57 +-
src/render/direct3d11/SDL_render_winrt.cpp | 116 +++
src/render/direct3d11/SDL_render_winrt.h | 40 +
src/render/opengles2/SDL_render_gles2.c | 8 +
src/thread/stdcpp/SDL_systhread.cpp | 31 +
src/thread/windows/SDL_syscond_cv.c | 12 +
src/thread/windows/SDL_sysmutex.c | 16 +
src/thread/windows/SDL_syssem.c | 15 +
src/thread/windows/SDL_systhread.c | 4 +-
src/thread/windows/SDL_systls.c | 12 +
src/timer/windows/SDL_systimer.c | 22 +-
src/video/SDL_egl.c | 10 +-
src/video/SDL_stretch.c | 2 +-
src/video/SDL_sysvideo.h | 1 +
src/video/SDL_video.c | 55 +-
src/video/winrt/SDL_winrtevents.cpp | 153 +++
src/video/winrt/SDL_winrtevents_c.h | 83 ++
src/video/winrt/SDL_winrtgamebar.cpp | 196 ++++
src/video/winrt/SDL_winrtgamebar_cpp.h | 35 +
src/video/winrt/SDL_winrtkeyboard.cpp | 466 +++++++++
src/video/winrt/SDL_winrtmessagebox.cpp | 118 +++
src/video/winrt/SDL_winrtmessagebox.h | 29 +
src/video/winrt/SDL_winrtmouse.cpp | 222 +++++
src/video/winrt/SDL_winrtmouse_c.h | 40 +
src/video/winrt/SDL_winrtopengles.cpp | 203 ++++
src/video/winrt/SDL_winrtopengles.h | 70 ++
src/video/winrt/SDL_winrtpointerinput.cpp | 407 ++++++++
src/video/winrt/SDL_winrtvideo.cpp | 907 ++++++++++++++++++
src/video/winrt/SDL_winrtvideo_cpp.h | 106 ++
92 files changed, 8410 insertions(+), 164 deletions(-)
create mode 100644 VisualC-WinRT/SDL-UWP.sln
create mode 100644 VisualC-WinRT/SDL-UWP.vcxproj
create mode 100644 VisualC-WinRT/SDL-UWP.vcxproj.filters
create mode 100644 docs/README-winrt.md
create mode 100644 include/SDL_config_winrt.h
create mode 100644 src/audio/wasapi/SDL_wasapi_win32.c
create mode 100644 src/audio/wasapi/SDL_wasapi_winrt.cpp
create mode 100644 src/core/winrt/SDL_winrtapp_common.cpp
create mode 100644 src/core/winrt/SDL_winrtapp_common.h
create mode 100644 src/core/winrt/SDL_winrtapp_direct3d.cpp
create mode 100644 src/core/winrt/SDL_winrtapp_direct3d.h
create mode 100644 src/core/winrt/SDL_winrtapp_xaml.cpp
create mode 100644 src/core/winrt/SDL_winrtapp_xaml.h
create mode 100644 src/filesystem/winrt/SDL_sysfilesystem.cpp
create mode 100644 src/locale/winrt/SDL_syslocale.c
create mode 100644 src/main/winrt/SDL3-WinRTResource_BlankCursor.cur
create mode 100644 src/main/winrt/SDL3-WinRTResources.rc
create mode 100644 src/main/winrt/SDL_winrt_main_NonXAML.cpp
create mode 100644 src/misc/winrt/SDL_sysurl.cpp
create mode 100644 src/power/winrt/SDL_syspower.cpp
create mode 100644 src/render/direct3d11/SDL_render_winrt.cpp
create mode 100644 src/render/direct3d11/SDL_render_winrt.h
create mode 100644 src/video/winrt/SDL_winrtevents.cpp
create mode 100644 src/video/winrt/SDL_winrtevents_c.h
create mode 100644 src/video/winrt/SDL_winrtgamebar.cpp
create mode 100644 src/video/winrt/SDL_winrtgamebar_cpp.h
create mode 100644 src/video/winrt/SDL_winrtkeyboard.cpp
create mode 100644 src/video/winrt/SDL_winrtmessagebox.cpp
create mode 100644 src/video/winrt/SDL_winrtmessagebox.h
create mode 100644 src/video/winrt/SDL_winrtmouse.cpp
create mode 100644 src/video/winrt/SDL_winrtmouse_c.h
create mode 100644 src/video/winrt/SDL_winrtopengles.cpp
create mode 100644 src/video/winrt/SDL_winrtopengles.h
create mode 100644 src/video/winrt/SDL_winrtpointerinput.cpp
create mode 100644 src/video/winrt/SDL_winrtvideo.cpp
create mode 100644 src/video/winrt/SDL_winrtvideo_cpp.h
diff --git a/.github/workflows/msvc.yml b/.github/workflows/msvc.yml
index 0af15d9eb32b..01d95485da10 100644
--- a/.github/workflows/msvc.yml
+++ b/.github/workflows/msvc.yml
@@ -19,6 +19,8 @@ jobs:
- { name: Windows (clang-cl x86), flags: -T ClangCL -A Win32 }
- { name: Windows (ARM), flags: -A ARM }
- { name: Windows (ARM64), flags: -A ARM64 }
+ - { name: UWP (x64), flags: -A x64 -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0" -DSDL_TESTS=OFF, nowerror: true,
+ project: VisualC-WinRT/SDL-UWP.sln, projectflags: '/p:Platform=x64 /p:WindowsTargetPlatformVersion=10.0.17763.0' }
steps:
- uses: actions/checkout@v3
@@ -57,6 +59,7 @@ jobs:
echo "SDL3_DIR=$Env:GITHUB_WORKSPACE/prefix" >> $Env:GITHUB_ENV
cmake --install build/
- name: Verify CMake configuration files
+ if: ${{ !contains(matrix.platform.name, 'UWP') }} # FIXME: cmake/test/CMakeLists.txt should support UWP
run: |
cmake -S cmake/test -B cmake_config_build `
-DCMAKE_PREFIX_PATH=${{ env.SDL3_DIR }} `
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1386072d66df..57b32101628f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -26,6 +26,12 @@ set(EXTRA_LDFLAGS)
# etc. See https://github.com/libsdl-org/SDL/issues/4150
add_library(sdl-build-options INTERFACE)
+if(WINDOWS_STORE)
+ cmake_minimum_required(VERSION 3.11.0)
+ target_compile_definitions(sdl-build-options INTERFACE "-DSDL_BUILDING_WINRT=1")
+ target_compile_options(sdl-build-options INTERFACE "-ZW")
+endif()
+
# Build in parallel under Visual Studio. Not enabled by default.
if(MSVC)
target_compile_options(sdl-build-options INTERFACE "/MP")
@@ -233,7 +239,7 @@ endif()
# so we'll just use libusb when it's available. libusb does not support iOS,
# so we default to yes on iOS.
# TODO: Windows can support libusb, the hid.c file just depends on Unix APIs
-if(WINDOWS OR IOS OR TVOS OR ANDROID)
+if((WINDOWS AND NOT WINDOWS_STORE) OR IOS OR TVOS OR ANDROID)
set(HIDAPI_SKIP_LIBUSB TRUE)
else()
set(HIDAPI_SKIP_LIBUSB FALSE)
@@ -1664,6 +1670,11 @@ elseif(WINDOWS)
file(GLOB CORE_SOURCES ${SDL3_SOURCE_DIR}/src/core/windows/*.c)
list(APPEND SOURCE_FILES ${CORE_SOURCES})
+ if(WINDOWS_STORE)
+ file(GLOB WINRT_SOURCE_FILES ${SDL3_SOURCE_DIR}/src/core/winrt/*.c ${SDL3_SOURCE_DIR}/src/core/winrt/*.cpp)
+ list(APPEND SOURCE_FILES ${WINRT_SOURCE_FILES})
+ endif()
+
if(MSVC AND NOT SDL_LIBC)
# Prevent codegen that would use the VC runtime libraries.
set_property(DIRECTORY . APPEND PROPERTY COMPILE_OPTIONS "/GS-")
@@ -1673,7 +1684,11 @@ elseif(WINDOWS)
endif()
if(SDL_MISC)
- file(GLOB MISC_SOURCES ${SDL3_SOURCE_DIR}/src/misc/windows/*.c)
+ if(WINDOWS_STORE)
+ file(GLOB MISC_SOURCES ${SDL3_SOURCE_DIR}/src/misc/winrt/*.cpp)
+ else()
+ file(GLOB MISC_SOURCES ${SDL3_SOURCE_DIR}/src/misc/windows/*.c)
+ endif()
list(APPEND SOURCE_FILES ${MISC_SOURCES})
set(HAVE_SDL_MISC TRUE)
endif()
@@ -1703,7 +1718,7 @@ elseif(WINDOWS)
check_include_file(ddraw.h HAVE_DDRAW_H)
check_include_file(dsound.h HAVE_DSOUND_H)
check_include_file(dinput.h HAVE_DINPUT_H)
- if(CMAKE_GENERATOR_PLATFORM STREQUAL "ARM")
+ if(WINDOWS_STORE OR CMAKE_GENERATOR_PLATFORM STREQUAL "ARM")
set(HAVE_DINPUT_H 0)
endif()
check_include_file(dxgi.h HAVE_DXGI_H)
@@ -1750,7 +1765,7 @@ elseif(WINDOWS)
check_include_file(shellscalingapi.h HAVE_SHELLSCALINGAPI_H)
if(SDL_AUDIO)
- if(HAVE_DSOUND_H)
+ if(HAVE_DSOUND_H AND NOT WINDOWS_STORE)
set(SDL_AUDIO_DRIVER_DSOUND 1)
file(GLOB DSOUND_AUDIO_SOURCES ${SDL3_SOURCE_DIR}/src/audio/directsound/*.c)
list(APPEND SOURCE_FILES ${DSOUND_AUDIO_SOURCES})
@@ -1761,6 +1776,9 @@ elseif(WINDOWS)
set(SDL_AUDIO_DRIVER_WASAPI 1)
set(HAVE_WASAPI TRUE)
file(GLOB WASAPI_AUDIO_SOURCES ${SDL3_SOURCE_DIR}/src/audio/wasapi/*.c)
+ if(WINDOWS_STORE)
+ list(APPEND WASAPI_AUDIO_SOURCES ${SDL3_SOURCE_DIR}/src/audio/wasapi/SDL_wasapi_winrt.cpp)
+ endif()
list(APPEND SOURCE_FILES ${WASAPI_AUDIO_SOURCES})
set(HAVE_SDL_AUDIO TRUE)
endif()
@@ -1771,11 +1789,20 @@ elseif(WINDOWS)
if(NOT SDL_LOADSO)
message_error("SDL_VIDEO requires SDL_LOADSO, which is not enabled")
endif()
- set(SDL_VIDEO_DRIVER_WINDOWS 1)
- file(GLOB WIN_VIDEO_SOURCES ${SDL3_SOURCE_DIR}/src/video/windows/*.c)
+ if(WINDOWS_STORE)
+ set(SDL_VIDEO_DRIVER_WINRT 1)
+ file(GLOB WIN_VIDEO_SOURCES
+ ${SDL3_SOURCE_DIR}/src/video/winrt/*.c
+ ${SDL3_SOURCE_DIR}/src/video/winrt/*.cpp
+ ${SDL3_SOURCE_DIR}/src/render/direct3d11/*.cpp
+ )
+ else()
+ set(SDL_VIDEO_DRIVER_WINDOWS 1)
+ file(GLOB WIN_VIDEO_SOURCES ${SDL3_SOURCE_DIR}/src/video/windows/*.c)
+ endif()
list(APPEND SOURCE_FILES ${WIN_VIDEO_SOURCES})
- if(SDL_RENDER_D3D AND HAVE_D3D_H)
+ if(SDL_RENDER_D3D AND HAVE_D3D_H AND NOT WINDOWS_STORE)
set(SDL_VIDEO_RENDER_D3D 1)
set(HAVE_RENDER_D3D TRUE)
endif()
@@ -1783,7 +1810,7 @@ elseif(WINDOWS)
set(SDL_VIDEO_RENDER_D3D11 1)
set(HAVE_RENDER_D3D TRUE)
endif()
- if(SDL_RENDER_D3D AND HAVE_D3D12_H)
+ if(SDL_RENDER_D3D AND HAVE_D3D12_H AND NOT WINDOWS_STORE)
set(SDL_VIDEO_RENDER_D3D12 1)
set(HAVE_RENDER_D3D TRUE)
endif()
@@ -1803,7 +1830,7 @@ elseif(WINDOWS)
set(HAVE_SDL_THREADS TRUE)
endif()
- if(SDL_SENSOR AND HAVE_SENSORSAPI_H)
+ if(SDL_SENSOR AND HAVE_SENSORSAPI_H AND NOT WINDOWS_STORE)
set(SDL_SENSOR_WINDOWS 1)
set(HAVE_SDL_SENSORS TRUE)
file(GLOB WINDOWS_SENSOR_SOURCES ${SDL3_SOURCE_DIR}/src/sensor/windows/*.c)
@@ -1811,26 +1838,50 @@ elseif(WINDOWS)
endif()
if(SDL_POWER)
- set(SDL_POWER_WINDOWS 1)
- list(APPEND SOURCE_FILES ${SDL3_SOURCE_DIR}/src/power/windows/SDL_syspower.c)
- set(HAVE_SDL_POWER TRUE)
+ if(WINDOWS_STORE)
+ set(SDL_POWER_WINRT 1)
+ list(APPEND SOURCE_FILES ${SDL3_SOURCE_DIR}/src/power/winrt/SDL_syspower.cpp)
+ else()
+ set(SDL_POWER_WINDOWS 1)
+ list(APPEND SOURCE_FILES ${SDL3_SOURCE_DIR}/src/power/windows/SDL_syspower.c)
+ set(HAVE_SDL_POWER TRUE)
+ endif()
endif()
if(SDL_LOCALE)
- file(GLOB LOCALE_SOURCES ${SDL3_SOURCE_DIR}/src/locale/windows/*.c)
+ if(WINDOWS_STORE)
+ file(GLOB LOCALE_SOURCES ${SDL3_SOURCE_DIR}/src/locale/winrt/*.c)
+ else()
+ file(GLOB LOCALE_SOURCES ${SDL3_SOURCE_DIR}/src/locale/windows/*.c)
+ endif()
list(APPEND SOURCE_FILES ${LOCALE_SOURCES})
set(HAVE_SDL_LOCALE TRUE)
endif()
if(SDL_FILESYSTEM)
set(SDL_FILESYSTEM_WINDOWS 1)
- file(GLOB FILESYSTEM_SOURCES ${SDL3_SOURCE_DIR}/src/filesystem/windows/*.c)
+ if(WINDOWS_STORE)
+ file(GLOB FILESYSTEM_SOURCES ${SDL3_SOURCE_DIR}/src/filesystem/winrt/*.cpp)
+ else()
+ file(GLOB FILESYSTEM_SOURCES ${SDL3_SOURCE_DIR}/src/filesystem/windows/*.c)
+ endif()
list(APPEND SOURCE_FILES ${FILESYSTEM_SOURCES})
set(HAVE_SDL_FILESYSTEM TRUE)
endif()
# Libraries for Win32 native and MinGW
- list(APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32)
+ if(NOT WINDOWS_STORE)
+ list(APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32)
+ endif()
+
+ if(WINDOWS_STORE)
+ list(APPEND EXTRA_LIBS
+ -nodefaultlib:vccorlib$<$<CONFIG:Debug>:d>
+ -nodefaultlib:msvcrt$<$<CONFIG:Debug>:d>
+ vccorlib$<$<CONFIG:Debug>:d>.lib
+ msvcrt$<$<CONFIG:Debug>:d>.lib
+ )
+ endif()
if(SDL_TIMERS)
set(SDL_TIMER_WINDOWS 1)
@@ -1850,7 +1901,7 @@ elseif(WINDOWS)
list(APPEND SOURCE_FILES ${CORE_SOURCES})
if(SDL_VIDEO)
- if(SDL_OPENGL)
+ if(SDL_OPENGL AND NOT WINDOWS_STORE)
set(SDL_VIDEO_OPENGL 1)
set(SDL_VIDEO_OPENGL_WGL 1)
set(SDL_VIDEO_RENDER_OGL 1)
@@ -1878,14 +1929,18 @@ elseif(WINDOWS)
file(GLOB JOYSTICK_SOURCES ${SDL3_SOURCE_DIR}/src/joystick/windows/*.c)
list(APPEND SOURCE_FILES ${JOYSTICK_SOURCES})
- set(SDL_JOYSTICK_RAWINPUT 1)
+ if(NOT WINDOWS_STORE)
+ set(SDL_JOYSTICK_RAWINPUT 1)
+ endif()
if(HAVE_DINPUT_H)
set(SDL_JOYSTICK_DINPUT 1)
list(APPEND EXTRA_LIBS dinput8)
endif()
if(HAVE_XINPUT_H)
- set(SDL_JOYSTICK_XINPUT 1)
- set(HAVE_XINPUT TRUE)
+ if(NOT WINDOWS_STORE)
+ set(SDL_JOYSTICK_XINPUT 1)
+ set(HAVE_XINPUT TRUE)
+ endif()
if(HAVE_WINDOWS_GAMING_INPUT_H)
set(SDL_JOYSTICK_WGI 1)
endif()
@@ -1893,7 +1948,7 @@ elseif(WINDOWS)
set(HAVE_SDL_JOYSTICK TRUE)
if(SDL_HAPTIC)
- if(HAVE_DINPUT_H OR HAVE_XINPUT_H)
+ if((HAVE_DINPUT_H OR HAVE_XINPUT_H) AND NOT WINDOWS_STORE)
file(GLOB HAPTIC_SOURCES ${SDL3_SOURCE_DIR}/src/haptic/windows/*.c)
if(HAVE_DINPUT_H)
set(SDL_HAPTIC_DINPUT 1)
@@ -3071,7 +3126,7 @@ endif()
# Ensure that the extra cflags are used at compile time
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} ${EXTRA_CFLAGS_BUILD}")
-if(NOT SDL3_DISABLE_SDL3MAIN)
+if(NOT WINDOWS_STORE AND NOT SDL3_DISABLE_SDL3MAIN)
# Build SDLmain
add_library(SDL3main STATIC ${SDLMAIN_SOURCES})
add_dependencies(SDL3main sdl_headers_copy)
@@ -3153,8 +3208,10 @@ if(SDL_SHARED)
# Note: The clang toolset for Visual Studio does not support /NODEFAULTLIB.
if(MSVC AND NOT SDL_LIBC AND NOT MSVC_CLANG AND NOT CMAKE_GENERATOR_PLATFORM STREQUAL "ARM")
# Don't try to link with the default set of libraries.
- set_target_properties(SDL3 PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB")
- set_target_properties(SDL3 PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB")
+ if(NOT WINDOWS_STORE)
+ set_target_properties(SDL3 PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB")
+ set_target_properties(SDL3 PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB")
+ endif()
set_target_properties(SDL3 PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB")
endif()
# FIXME: if CMAKE_VERSION >= 3.13, use target_link_options for EXTRA_LDFLAGS
@@ -3236,7 +3293,7 @@ if(NOT SDL3_DISABLE_INSTALL)
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
endif()
- if(NOT SDL3_DISABLE_SDL3MAIN)
+ if(NOT WINDOWS_STORE AND NOT SDL3_DISABLE_SDL3MAIN)
install(TARGETS SDL3main EXPORT SDL3mainTargets
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
@@ -3289,7 +3346,7 @@ if(NOT SDL3_DISABLE_INSTALL)
endif()
endif()
- if(NOT SDL3_DISABLE_SDL3MAIN)
+ if(NOT WINDOWS_STORE AND NOT SDL3_DISABLE_SDL3MAIN)
install(EXPORT SDL3mainTargets
FILE SDL3mainTargets.cmake
NAMESPACE SDL3::
diff --git a/Makefile.in b/Makefile.in
index 96dfed9ace7d..f72a044c2ac1 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -51,7 +51,7 @@ WAYLAND_SCANNER_CODE_MODE = @WAYLAND_SCANNER_CODE_MODE@
INSTALL_SDL3_CONFIG = @INSTALL_SDL3_CONFIG@
-SRC_DIST = *.md *.txt acinclude Android.mk autogen.sh android-project build-scripts cmake cmake_uninstall.cmake.in configure configure.ac docs include Makefile.* mingw sdl3-config.cmake.in sdl3-config-version.cmake.in sdl3-config.in sdl3.m4 sdl3.pc.in SDL3.spec.in SDL3Config.cmake.in src test VisualC Xcode Xcode-iOS wayland-protocols
+SRC_DIST = *.md *.txt acinclude Android.mk autogen.sh android-project build-scripts cmake cmake_uninstall.cmake.in configure configure.ac docs include Makefile.* mingw sdl3-config.cmake.in sdl3-config-version.cmake.in sdl3-config.in sdl3.m4 sdl3.pc.in SDL3.spec.in SDL3Config.cmake.in src test VisualC VisualC-WinRT Xcode Xcode-iOS wayland-protocols
GEN_DIST = SDL3.spec
ifneq ($V,1)
diff --git a/VisualC-GDK/SDL/SDL.vcxproj b/VisualC-GDK/SDL/SDL.vcxproj
index cc02748da41f..14b2d37c197f 100644
--- a/VisualC-GDK/SDL/SDL.vcxproj
+++ b/VisualC-GDK/SDL/SDL.vcxproj
@@ -534,6 +534,7 @@
<ClCompile Include="..\..\src\audio\SDL_mixer.c" />
<ClCompile Include="..\..\src\audio\SDL_wave.c" />
<ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi.c" />
+ <ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi_win32.c" />
<ClCompile Include="..\..\src\core\windows\SDL_hid.c" />
<ClCompile Include="..\..\src\core\windows\SDL_immdevice.c" />
<ClCompile Include="..\..\src\core\windows\SDL_windows.c" />
diff --git a/VisualC-GDK/SDL/SDL.vcxproj.filters b/VisualC-GDK/SDL/SDL.vcxproj.filters
index c8a757b1ea83..aee609a4cbc6 100644
--- a/VisualC-GDK/SDL/SDL.vcxproj.filters
+++ b/VisualC-GDK/SDL/SDL.vcxproj.filters
@@ -1021,6 +1021,9 @@
<ClCompile Include="..\..\src\audio\dummy\SDL_dummyaudio.c">
<Filter>audio\dummy</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi_win32.c">
+ <Filter>audio\wasapi</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\audio\wasapi\SDL_wasapi.c">
<Filter>audio\wasapi</Filter>
</ClCompile>
diff --git a/VisualC-WinRT/SDL-UWP.sln b/VisualC-WinRT/SDL-UWP.sln
new file mode 100644
index 000000000000..62f9f04172bb
--- /dev/null
+++ b/VisualC-WinRT/SDL-UWP.sln
@@ -0,0 +1,40 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SDL3-UWP", "SDL-UWP.vcxproj", "{89E9B32E-A86A-47C3-A948-D2B1622925CE}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM = Debug|ARM
+ Debug|ARM64 = Debug|ARM64
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|ARM = Release|ARM
+ Release|ARM64 = Release|ARM64
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|ARM.ActiveCfg = Debug|ARM
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|ARM.Build.0 = Debug|ARM
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|ARM64.Build.0 = Debug|ARM64
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x64.ActiveCfg = Debug|x64
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x64.Build.0 = Debug|x64
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x86.ActiveCfg = Debug|Win32
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Debug|x86.Build.0 = Debug|Win32
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|ARM.ActiveCfg = Release|ARM
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|ARM.Build.0 = Release|ARM
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|ARM64.ActiveCfg = Release|ARM64
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|ARM64.Build.0 = Release|ARM64
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x64.ActiveCfg = Release|x64
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x64.Build.0 = Release|x64
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x86.ActiveCfg = Release|Win32
+ {89E9B32E-A86A-47C3-A948-D2B1622925CE}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/VisualC-WinRT/SDL-UWP.vcxproj b/VisualC-WinRT/SDL-UWP.vcxproj
new file mode 100644
index 000000000000..a34357e73372
--- /dev/null
+++ b/VisualC-WinRT/SDL-UWP.vcxproj
@@ -0,0 +1,594 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|ARM64">
+ <Configuration>Debug</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|ARM">
+ <Configuration>Debug</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|ARM">
+ <Configuration>Release</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|ARM64">
+ <Configuration>Release</Configuration>
+ <Platform>ARM64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\include\begin_code.h" />
+ <ClInclude Include="..\include\close_code.h" />
+ <ClInclude Include="..\include\SDL.h" />
+ <ClInclude Include="..\include\SDL_assert.h" />
+ <ClInclude Include="..\include\SDL_atomic.h" />
+ <ClInclude Include="..\include\SDL_audio.h" />
+ <ClInclude Include="..\include\SDL_blendmode.h" />
+ <ClInclude Include="..\include\SDL_clipboard.h" />
+ <ClInclude Include="..\include\SDL_config.h" />
+ <ClInclude Include="..\include\SDL_config_minimal.h" />
+ <ClInclude Include="..\include\SDL_config_winrt.h" />
+ <ClInclude Include="..\include\SDL_copying.h" />
+ <ClInclude Include="..\include\SDL_cpuinfo.h" />
+ <ClInclude Include="..\include\SDL_egl.h" />
+ <ClInclude Include="..\include\SDL_endian.h" />
+ <ClInclude Include="..\include\SDL_error.h" />
+ <ClInclude Include="..\include\SDL_events.h" />
+ <ClInclude Include="..\include\SDL_filesystem.h" />
+ <ClInclude Include="..\include\SDL_guid.h" />
+ <ClInclude Include="..\include\SDL_haptic.h" />
+ <ClInclude Include="..\include\SDL_hints.h" />
+ <ClInclude Include="..\include\SDL_hidapi.h" />
+ <ClInclude Include="..\include\SDL_input.h" />
+ <ClInclude Include="..\include\SDL_joystick.h" />
+ <ClInclude Include="..\include\SDL_keyboard.h" />
+ <ClInclude Include="..\include\SDL_keycode.h" />
+ <ClInclude Include="..\include\SDL_loadso.h" />
+ <ClInclude Include="..\include\SDL_locale.h" />
+ <ClInclude Include="..\include\SDL_log.h" />
+ <ClInclude Include="..\include\SDL_main.h" />
+ <ClInclude Include="..\include\SDL_misc.h" />
+ <ClInclude Include="..\include\SDL_mouse.h" />
+ <ClInclude Include="..\include\SDL_mutex.h" />
+ <ClInclude Include="..\include\SDL_name.h" />
+ <ClInclude Include="..\include\SDL_opengles2.h" />
+ <ClInclude Include="..\include\SDL_pixels.h" />
+ <ClInclude Include="..\include\SDL_platform.h" />
+ <ClInclude Include="..\include\SDL_power.h" />
+ <ClInclude Include="..\include\SDL_quit.h" />
+ <ClInclude Include="..\include\SDL_rect.h" />
+ <ClInclude Include="..\include\SDL_render.h" />
+ <ClInclude Include="..\include\SDL_revision.h" />
+ <ClInclude Include="..\include\SDL_rwops.h" />
+ <ClInclude Include="..\include\SDL_scancode.h" />
+ <ClInclude Include="..\include\SDL_sensor.h" />
+ <ClInclude Include="..\include\SDL_shape.h" />
+ <ClInclude Include="..\include\SDL_stdinc.h" />
+ <ClInclude Include="..\include\SDL_surface.h" />
+ <ClInclude Include="..\include\SDL_system.h" />
+ <ClInclude Include="..\include\SDL_syswm.h" />
+ <ClInclude Include="..\include\SDL_thread.h" />
+ <ClInclude Include="..\include\SDL_timer.h" />
+ <ClInclude Include="..\include\SDL_touch.h" />
+ <ClInclude Include="..\include\SDL_types.h" />
+ <ClInclude Include="..\include\SDL_version.h" />
+ <ClInclude Include="..\include\SDL_video.h" />
+ <ClInclude Include="..\src\audio\disk\SDL_diskaudio.h" />
+ <ClInclude Include="..\src\audio\dummy\SDL_dummyaudio.h" />
+ <ClInclude Include="..\src\audio\SDL_audiodev_c.h" />
+ <ClInclude Include="..\src\audio\SDL_audio_c.h" />
+ <ClInclude Include="..\src\audio\SDL_sysaudio.h" />
+ <ClInclude Include="..\src\audio\SDL_wave.h" />
+ <ClInclude Include="..\src\audio\wasapi\SDL_wasapi.h" />
+ <ClInclude Include="..\src\core\windows\SDL_directx.h" />
+ <ClInclude Include="..\src\core\windows\SDL_windows.h" />
+ <ClInclude Include="..\src\core\windows\SDL_xinput.h" />
+ <ClInclude Include="..\src\core\winrt\SDL_winrtapp_common.h" />
+ <ClInclude Include="..\src\core\winrt\SDL_winrtapp_direct3d.h" />
+ <ClInclude Include="..\src\core\winrt\SDL_winrtapp_xaml.h" />
+ <ClInclude Include="..\src\dynapi\SDL_dynapi.h" />
+ <ClInclude Include="..\src\dynapi\SDL_dynapi_overrides.h" />
+ <ClInclude Include="..\src\dynapi\SDL_dynapi_procs.h" />
+ <ClInclude Include="..\src\events\blank_cursor.h" />
+ <ClInclude Include="..\src\events\default_cursor.h" />
+ <ClInclude Include="..\src\events\SDL_clipboardevents_c.h" />
+ <ClInclude Include="..\src\events\SDL_displayevents_c.h" />
+ <ClInclude Include="..\src\events\SDL_dropevents_c.h" />
+ <ClInclude Include="..\src\events\SDL_events_c.h" />
+ <ClInclude Include="..\src\events\SDL_keyboard_c.h" />
+ <ClInclude Include="..\src\events\SDL_mouse_c.h" />
+ <ClInclude Include="..\src\events\SDL_touch_c.h" />
+ <ClInclude Include="..\src\events\SDL_windowevents_c.h" />
+ <ClInclude Include="..\src\haptic\SDL_haptic_c.h" />
+ <ClInclude Include="..\src\haptic\SDL_syshaptic.h" />
+ <ClInclude Include="..\src\haptic\windows\SDL_dinputhaptic_c.h" />
+ <ClInclude Include="..\src\haptic\windows\SDL_windowshaptic_c.h" />
+ <ClInclude Include="..\src\haptic\windows\SDL_xinputhaptic_c.h" />
+ <ClInclude Include="..\src\joystick\controller_type.h" />
+ <ClInclude Include="..\src\joystick\SDL_gamecontrollerdb.h" />
+ <ClInclude Include="..\src\joystick\SDL_joystick_c.h" />
+ <ClInclude Include="..\src\joystick\SDL_sysjoystick.h" />
+ <ClInclude Include="..\src\joystick\virtual\SDL_virtualjoystick_c.h" />
+ <ClInclude Include="..\src\joystick\windows\SDL_dinputjoystick_c.h" />
+ <ClInclude Include="..\src\joystick\windows\SDL_windowsjoystick_c.h" />
+ <ClInclude Include="..\src\joystick\windows\SDL_xinputjoystick_c.h" />
+ <ClInclude Include="..\src\locale\SDL_syslocale.h" />
+ <ClInclude Include="..\src\render\direct3d11\SDL_render_winrt.h" />
+ <ClInclude Include="..\src\render\direct3d11\SDL_shaders_d3d11.h" />
+ <ClInclude Include="..\src\render\opengles2\SDL_gles2funcs.h" />
+ <ClInclude Include="..\src\render\opengles2\SDL_shaders_gles2.h" />
+ <ClInclude Include="..\src\render\SDL_d3dmath.h" />
+ <ClInclude Include="..\src\render\SDL_sysrender.h" />
+ <ClInclude Include="..\src\render\SDL_yuv_sw_c.h" />
+ <ClInclude Include="..\src\render\software\SDL_blendfillrect.h" />
+ <ClInclude Include="..\src\render\software\SDL_blendline.h" />
+ <ClInclude Include="..\src\render\software\SDL_blendpoint.h" />
+ <ClInclude Include="..\src\render\software\SDL_draw.h" />
+ <ClInclude Include="..\src\render\software\SDL_drawline.h" />
+ <ClInclude Include="..\src\render\software\SDL_drawpoint.h" />
+ <ClInclude Include="..\src\render\software\SDL_render_sw_c.h" />
+ <ClInclude Include="..\src\render\software\SDL_rotate.h" />
+ <ClInclude Include="..\src\render\software\SDL_triangle.h" />
+ <ClInclude Include="..\src\SDL_assert_c.h" />
+ <ClInclude Include="..\src\SDL_dataqueue.h" />
+ <ClInclude Include="..\src\SDL_error_c.h" />
+ <ClInclude Include="..\src\SDL_fatal.h" />
+ <ClInclude Include="..\src\SDL_hints_c.h" />
+ <ClInclude Include="..\src\SDL_internal.h" />
+ <ClInclude Include="..\src\SDL_list.h" />
+ <ClInclude Include="..\src\SDL_log_c.h" />
+ <ClInclude Include="..\src\sensor\dummy\SDL_dummysensor.h" />
+ <ClInclude Inc
(Patch may be truncated, please check the link at the top of this post.)