SDL_image: Updated SDL framework for 3.4.0 release

From 9c90777e5a6658103faf121e77183036068c4d42 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Thu, 1 Jan 2026 08:07:59 -0800
Subject: [PATCH] Updated SDL framework for 3.4.0 release

---
 Xcode/iOS/SDL3.framework/Headers/SDL.h        |   2 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_assert.h |  40 +++-
 Xcode/iOS/SDL3.framework/Headers/SDL_audio.h  |  11 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_dialog.h |  10 +-
 .../SDL3.framework/Headers/SDL_dlopennote.h   |  95 ++++----
 Xcode/iOS/SDL3.framework/Headers/SDL_endian.h |   2 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_events.h |   7 +-
 .../SDL3.framework/Headers/SDL_filesystem.h   |   3 +
 .../iOS/SDL3.framework/Headers/SDL_gamepad.h  |   7 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_gpu.h    |  84 ++++++-
 Xcode/iOS/SDL3.framework/Headers/SDL_hints.h  | 104 ++++++---
 Xcode/iOS/SDL3.framework/Headers/SDL_intrin.h |   7 +-
 .../iOS/SDL3.framework/Headers/SDL_keycode.h  |   6 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_main.h   |  21 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_mouse.h  |  17 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_pen.h    |  46 +++-
 Xcode/iOS/SDL3.framework/Headers/SDL_pixels.h |   2 +-
 .../Headers/SDL_platform_defines.h            |   4 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_rect.h   |   8 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_render.h |  14 +-
 .../iOS/SDL3.framework/Headers/SDL_revision.h |   3 +
 Xcode/iOS/SDL3.framework/Headers/SDL_stdinc.h |  10 +-
 .../iOS/SDL3.framework/Headers/SDL_surface.h  | 208 ++++++++++++++----
 .../iOS/SDL3.framework/Headers/SDL_version.h  |   4 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_video.h  |  67 ++++--
 Xcode/iOS/SDL3.framework/SDL3.tbd             | 202 ++++++++---------
 .../SDL3.framework/Versions/A/Headers/SDL.h   |   2 +-
 .../Versions/A/Headers/SDL_assert.h           |  40 +++-
 .../Versions/A/Headers/SDL_audio.h            |  11 +-
 .../Versions/A/Headers/SDL_dialog.h           |  10 +-
 .../Versions/A/Headers/SDL_dlopennote.h       |  95 ++++----
 .../Versions/A/Headers/SDL_endian.h           |   2 +-
 .../Versions/A/Headers/SDL_events.h           |   7 +-
 .../Versions/A/Headers/SDL_filesystem.h       |   3 +
 .../Versions/A/Headers/SDL_gamepad.h          |   7 +-
 .../Versions/A/Headers/SDL_gpu.h              |  84 ++++++-
 .../Versions/A/Headers/SDL_hints.h            | 104 ++++++---
 .../Versions/A/Headers/SDL_intrin.h           |   7 +-
 .../Versions/A/Headers/SDL_keycode.h          |   6 +-
 .../Versions/A/Headers/SDL_main.h             |  21 +-
 .../Versions/A/Headers/SDL_mouse.h            |  17 +-
 .../Versions/A/Headers/SDL_pen.h              |  46 +++-
 .../Versions/A/Headers/SDL_pixels.h           |   2 +-
 .../Versions/A/Headers/SDL_platform_defines.h |   4 +-
 .../Versions/A/Headers/SDL_rect.h             |   8 +-
 .../Versions/A/Headers/SDL_render.h           |  14 +-
 .../Versions/A/Headers/SDL_revision.h         |   3 +
 .../Versions/A/Headers/SDL_stdinc.h           |  10 +-
 .../Versions/A/Headers/SDL_surface.h          | 208 ++++++++++++++----
 .../Versions/A/Headers/SDL_version.h          |   4 +-
 .../Versions/A/Headers/SDL_video.h            |  67 ++++--
 .../macOS/SDL3.framework/Versions/A/SDL3.tbd  | 202 ++++++++---------
 52 files changed, 1360 insertions(+), 608 deletions(-)

diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL.h b/Xcode/iOS/SDL3.framework/Headers/SDL.h
index 7cfba76e6..04a05d257 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL.h
@@ -20,7 +20,7 @@
 */
 
 /**
- * Main include header for the SDL library, version 3.3.0
+ * Main include header for the SDL library, version 3.4.0
  *
  * It is almost always best to include just this one header instead of
  * picking out individual headers included here. There are exceptions to
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_assert.h b/Xcode/iOS/SDL3.framework/Headers/SDL_assert.h
index 2ab796a1a..f0c4637b9 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_assert.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_assert.h
@@ -136,7 +136,7 @@ extern "C" {
     #define SDL_TriggerBreakpoint() __builtin_debugtrap()
 #elif SDL_HAS_BUILTIN(__builtin_trap)
     #define SDL_TriggerBreakpoint() __builtin_trap()
-#elif (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))
+#elif (defined(__GNUC__) || defined(__clang__) || defined(__TINYC__)) && (defined(__i386__) || defined(__x86_64__))
     #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" )
 #elif (defined(__GNUC__) || defined(__clang__)) && defined(__riscv)
     #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "ebreak\n\t" )
@@ -176,12 +176,48 @@ extern "C" {
 #   define SDL_FUNCTION "???"
 #endif
 
+#ifdef SDL_WIKI_DOCUMENTATION_SECTION
+
 /**
  * A macro that reports the current file being compiled.
  *
+ * This macro is only defined if it isn't already defined, so to override it
+ * (perhaps with something that doesn't provide path information at all, so
+ * build machine information doesn't leak into public binaries), apps can
+ * define this macro before including SDL.h or SDL_assert.h.
+ *
  * \since This macro is available since SDL 3.2.0.
  */
+#define SDL_FILE    __FILE_NAME__
+
+#elif !defined(SDL_FILE)
+#ifdef __FILE_NAME__
+#define SDL_FILE    __FILE_NAME__
+#else
 #define SDL_FILE    __FILE__
+#endif
+#endif
+
+#ifdef SDL_WIKI_DOCUMENTATION_SECTION
+
+/**
+ * A macro that reports the current file being compiled, for use in
+ * assertions.
+ *
+ * This macro is only defined if it isn't already defined, so to override it
+ * (perhaps with something that doesn't provide path information at all, so
+ * build machine information doesn't leak into public binaries), apps can
+ * define this macro before including SDL_assert.h. For example, defining this
+ * to `""` will make sure no source path information is included in asserts.
+ *
+ * \since This macro is available since SDL 3.4.0.
+ */
+#define SDL_ASSERT_FILE SDL_FILE
+
+#elif !defined(SDL_ASSERT_FILE)
+#define SDL_ASSERT_FILE SDL_FILE
+#endif
+
 
 /**
  * A macro that reports the current line number of the file being compiled.
@@ -360,7 +396,7 @@ extern SDL_DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *
     do { \
         while ( !(condition) ) { \
             static struct SDL_AssertData sdl_assert_data = { false, 0, #condition, NULL, 0, NULL, NULL }; \
-            const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \
+            const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_ASSERT_FILE, SDL_LINE); \
             if (sdl_assert_state == SDL_ASSERTION_RETRY) { \
                 continue; /* go again. */ \
             } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_audio.h b/Xcode/iOS/SDL3.framework/Headers/SDL_audio.h
index be5eb32e9..4c362e738 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_audio.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_audio.h
@@ -577,6 +577,15 @@ extern SDL_DECLSPEC SDL_AudioDeviceID * SDLCALL SDL_GetAudioRecordingDevices(int
 /**
  * Get the human-readable name of a specific audio device.
  *
+ * **WARNING**: this function will work with SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK
+ * and SDL_AUDIO_DEVICE_DEFAULT_RECORDING, returning the current default
+ * physical devices' names. However, as the default device may change at any
+ * time, it is likely better to show a generic name to the user, like "System
+ * default audio device" or perhaps "default [currently %s]". Do not store
+ * this name to disk to reidentify the device in a later run of the program,
+ * as the default might change in general, and the string will be the name of
+ * a specific device and not the abstract system default.
+ *
  * \param devid the instance ID of the device to query.
  * \returns the name of the audio device, or NULL on failure; call
  *          SDL_GetError() for more information.
@@ -1336,7 +1345,7 @@ extern SDL_DECLSPEC int * SDLCALL SDL_GetAudioStreamOutputChannelMap(SDL_AudioSt
  * \threadsafety It is safe to call this function from any thread, as it holds
  *               a stream-specific mutex while running. Don't change the
  *               stream's format to have a different number of channels from a
- *               a different thread at the same time, though!
+ *               different thread at the same time, though!
  *
  * \since This function is available since SDL 3.2.0.
  *
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_dialog.h b/Xcode/iOS/SDL3.framework/Headers/SDL_dialog.h
index 41ef1f9b8..395b7e8c9 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_dialog.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_dialog.h
@@ -140,11 +140,11 @@ typedef void (SDLCALL *SDL_DialogFileCallback)(void *userdata, const char * cons
  * \param window the window that the dialog should be modal for, may be NULL.
  *               Not all platforms support this option.
  * \param filters a list of filters, may be NULL. See the
- *                [`SDL_DialogFileFilter` documentation for
- *                examples](SDL_DialogFileFilter#code-examples). Not all
- *                platforms support this option, and platforms that do support
- *                it may allow the user to ignore the filters. If non-NULL, it
- *                must remain valid at least until the callback is invoked.
+ *                [`SDL_DialogFileFilter`](SDL_DialogFileFilter#code-examples)
+ *                documentation for examples]. Not all platforms support this
+ *                option, and platforms that do support it may allow the user
+ *                to ignore the filters. If non-NULL, it must remain valid at
+ *                least until the callback is invoked.
  * \param nfilters the number of filters. Ignored if filters is NULL.
  * \param default_location the default folder or file to start the dialog at,
  *                         may be NULL. Not all platforms support this option.
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_dlopennote.h b/Xcode/iOS/SDL3.framework/Headers/SDL_dlopennote.h
index b25edf4e8..e866d2a20 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_dlopennote.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_dlopennote.h
@@ -32,21 +32,23 @@
  * this CMake snippet to check for support:
  *
  * ```cmake
- *  set(CHECK_ELF_DLNOTES_SRC [==[
- *  #ifndef __ELF__
- *    ELF DL notes is only supported on ELF platforms
- *  #endif
- *  __attribute__ ((used,aligned(4),section(".note.dlopen"))) static const struct {
- *    struct { int a; int b; int c; } hdr; char name[4]; __attribute__((aligned(4))) char json[24];
- *  } dlnote = { { 4, 0x407c0c0aU, 16 }, "FDO", "[\\"a\\":{\\"a\\":\\"1\\",\\"b\\":\\"2\\"}]" };
- *  int main(int argc, char *argv[]) {
- *    return argc + dlnote.hdr.a;
- *  }
- *  ]==])
- *  check_c_source_compiles("${CHECK_ELF_DLNOTES_SRC}" COMPILER_SUPPORTS_ELFNOTES)
- *  if(NOT COMPILER_SUPPORTS_ELFNOTES)
- *    set(SDL_DISABLE_DLOPEN_NOTES TRUE)
- *  endif()
+ * include(CheckCSourceCompiles)
+ * find_package(SDL3 REQUIRED CONFIG COMPONENTS Headers)
+ * list(APPEND CMAKE_REQUIRED_LIBRARIES SDL3::Headers)
+ * check_c_source_compiles([==[
+ *   #include <SDL3/SDL_dlopennote.h>
+ *   SDL_ELF_NOTE_DLOPEN("sdl-video",
+ *     "Support for video through SDL",
+ *     SDL_ELF_NOTE_DLOPEN_PRIORITY_SUGGESTED,
+ *     "libSDL-1.2.so.0", "libSDL-2.0.so.0", "libSDL3.so.0"
+ *   )
+ *   int main(int argc, char *argv[]) {
+ *     return argc + argv[0][1];
+ *   }
+ * ]==] COMPILER_SUPPORTS_SDL_ELF_NOTE_DLOPEN)
+ * if(NOT COMPILER_SUPPORTS_SDL_ELF_NOTE_DLOPEN)
+ *   add_compile_definitions(-DSDL_DISABLE_DLOPEN_NOTE)
+ * endif()
  * ```
  */
 
@@ -141,36 +143,37 @@
 #define SDL_ELF_NOTE_INTERNAL(json, variable_name) \
     SDL_ELF_NOTE_INTERNAL2(json, variable_name)
 
-#define SDL_SONAME_ARRAY1(N1) "[\"" N1 "\"]"
-#define SDL_SONAME_ARRAY2(N1,N2) "[\"" N1 "\",\"" N2 "\"]"
-#define SDL_SONAME_ARRAY3(N1,N2,N3) "[\"" N1 "\",\"" N2 "\",\"" N3 "\"]"
-#define SDL_SONAME_ARRAY4(N1,N2,N3,N4) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\"]"
-#define SDL_SONAME_ARRAY5(N1,N2,N3,N4,N5) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\"]"
-#define SDL_SONAME_ARRAY6(N1,N2,N3,N4,N5,N6) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\"]"
-#define SDL_SONAME_ARRAY7(N1,N2,N3,N4,N5,N6,N7) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\",\"" N7 "\"]"
-#define SDL_SONAME_ARRAY8(N1,N2,N3,N4,N5,N6,N7,N8) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\",\"" N7 "\",\"" N8 "\"]"
-#define SDL_SONAME_ARRAY_GET(N1,N2,N3,N4,N5,N6,N7,N8,NAME,...) NAME
-#define SDL_SONAME_ARRAY(...) \
-    SDL_SONAME_ARRAY_GET(__VA_ARGS__, \
-         SDL_SONAME_ARRAY8, \
-         SDL_SONAME_ARRAY7, \
-         SDL_SONAME_ARRAY6, \
-         SDL_SONAME_ARRAY5, \
-         SDL_SONAME_ARRAY4, \
-         SDL_SONAME_ARRAY3, \
-         SDL_SONAME_ARRAY2, \
-         SDL_SONAME_ARRAY1 \
+#define SDL_DLNOTE_JSON_ARRAY1(N1) "[\"" N1 "\"]"
+#define SDL_DLNOTE_JSON_ARRAY2(N1,N2) "[\"" N1 "\",\"" N2 "\"]"
+#define SDL_DLNOTE_JSON_ARRAY3(N1,N2,N3) "[\"" N1 "\",\"" N2 "\",\"" N3 "\"]"
+#define SDL_DLNOTE_JSON_ARRAY4(N1,N2,N3,N4) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\"]"
+#define SDL_DLNOTE_JSON_ARRAY5(N1,N2,N3,N4,N5) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\"]"
+#define SDL_DLNOTE_JSON_ARRAY6(N1,N2,N3,N4,N5,N6) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\"]"
+#define SDL_DLNOTE_JSON_ARRAY7(N1,N2,N3,N4,N5,N6,N7) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\",\"" N7 "\"]"
+#define SDL_DLNOTE_JSON_ARRAY8(N1,N2,N3,N4,N5,N6,N7,N8) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\",\"" N7 "\",\"" N8 "\"]"
+#define SDL_DLNOTE_JSON_ARRAY_GET(N1,N2,N3,N4,N5,N6,N7,N8,NAME,...) NAME
+#define SDL_DLNOTE_JSON_ARRAY(...) \
+    SDL_DLNOTE_JSON_ARRAY_GET(     \
+         __VA_ARGS__,           \
+         SDL_DLNOTE_JSON_ARRAY8,   \
+         SDL_DLNOTE_JSON_ARRAY7,   \
+         SDL_DLNOTE_JSON_ARRAY6,   \
+         SDL_DLNOTE_JSON_ARRAY5,   \
+         SDL_DLNOTE_JSON_ARRAY4,   \
+         SDL_DLNOTE_JSON_ARRAY3,   \
+         SDL_DLNOTE_JSON_ARRAY2,   \
+         SDL_DLNOTE_JSON_ARRAY1    \
     )(__VA_ARGS__)
 
 /* Create "unique" variable name using __LINE__,
- * so creating elf notes on the same line is not supported
+ * so creating multiple elf notes on the same line is not supported
  */
-#define SDL_ELF_NOTE_JOIN2(A,B) A##B
-#define SDL_ELF_NOTE_JOIN(A,B) SDL_ELF_NOTE_JOIN2(A,B)
-#define SDL_ELF_NOTE_UNIQUE_NAME SDL_ELF_NOTE_JOIN(s_SDL_dlopen_note_, __LINE__)
+#define SDL_DLNOTE_JOIN2(A,B) A##B
+#define SDL_DLNOTE_JOIN(A,B) SDL_DLNOTE_JOIN2(A,B)
+#define SDL_DLNOTE_UNIQUE_NAME SDL_DLNOTE_JOIN(s_SDL_dlopen_note_, __LINE__)
 
 /**
- * Note that your application has dynamic shared library dependencies.
+ * Add a note that your application has dynamic shared library dependencies.
  *
  * You can do this by adding the following to the global scope:
  *
@@ -180,9 +183,11 @@
  *     "Support for loading PNG images using libpng (required for APNG)",
  *     SDL_ELF_NOTE_DLOPEN_PRIORITY_RECOMMENDED,
  *     "libpng12.so.0"
- * );
+ * )
  * ```
  *
+ * A trailing semicolon is not needed.
+ *
  * Or if you support multiple versions of a library, you can list them:
  *
  * ```c
@@ -192,9 +197,12 @@
  *     "Create windows through SDL video backend",
  *     SDL_ELF_NOTE_DLOPEN_PRIORITY_REQUIRED
  *     "libSDL-1.2.so.0", "libSDL2-2.0.so.0", "libSDL3.so.0"
- * );
+ * )
  * ```
  *
+ * This macro is not available for compilers that do not support variadic
+ * macro's.
+ *
  * \since This macro is available since SDL 3.4.0.
  *
  * \sa SDL_ELF_NOTE_DLOPEN_PRIORITY_SUGGESTED
@@ -206,8 +214,8 @@
         "[{\"feature\":\"" feature                               \
         "\",\"description\":\"" description                      \
         "\",\"priority\":\"" priority                            \
-        "\",\"soname\":" SDL_SONAME_ARRAY(__VA_ARGS__) "}]",     \
-        SDL_ELF_NOTE_UNIQUE_NAME);
+        "\",\"soname\":" SDL_DLNOTE_JSON_ARRAY(__VA_ARGS__) "}]",   \
+        SDL_DLNOTE_UNIQUE_NAME);
 
 #elif defined(__GNUC__) && __GNUC__ < 3
 
@@ -216,7 +224,6 @@
 #elif defined(_MSC_VER) && _MSC_VER < 1400
 
 /* Variadic macros are not supported */
-#define SDL_ELF_NOTE_DLOPEN
 
 #else
 
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_endian.h b/Xcode/iOS/SDL3.framework/Headers/SDL_endian.h
index f3ab18ffd..6b1b4cbcf 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_endian.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_endian.h
@@ -252,7 +252,7 @@ SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x)
 #elif defined(__x86_64__)
 SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x)
 {
-  __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x));
+  __asm__("xchgb %b0,%h0": "=abcd"(x):"0"(x));
     return x;
 }
 #elif (defined(__powerpc__) || defined(__ppc__))
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_events.h b/Xcode/iOS/SDL3.framework/Headers/SDL_events.h
index 136129ca7..4c06e45b1 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_events.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_events.h
@@ -818,6 +818,9 @@ typedef struct SDL_PinchFingerEvent
  * is there." The pen touching and lifting off from the tablet while not
  * leaving the area are handled by SDL_EVENT_PEN_DOWN and SDL_EVENT_PEN_UP.
  *
+ * Not all platforms have a window associated with the pen during proximity
+ * events. Some wait until motion/button/etc events to offer this info.
+ *
  * \since This struct is available since SDL 3.2.0.
  */
 typedef struct SDL_PenProximityEvent
@@ -1069,7 +1072,7 @@ typedef union SDL_Event
 } SDL_Event;
 
 /* Make sure we haven't broken binary compatibility */
-SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof(((SDL_Event *)NULL)->padding));
+SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof((SDL_static_cast(SDL_Event *, NULL))->padding));
 
 
 /* Function prototypes */
@@ -1604,7 +1607,7 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents);
 extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromEvent(const SDL_Event *event);
 
 /**
- * Generate a human-readable description of an event.
+ * Generate an English description of an event.
  *
  * This will fill `buf` with a null-terminated string that might look
  * something like this:
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_filesystem.h b/Xcode/iOS/SDL3.framework/Headers/SDL_filesystem.h
index dd9430a81..67f6d7ac8 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_filesystem.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_filesystem.h
@@ -77,6 +77,9 @@ extern "C" {
  * - `parent`: the containing directory of the bundle. For example:
  *   `/Applications/SDLApp/`
  *
+ * **Android Specific Functionality**: This function returns "./", which
+ * allows filesystem operations to use internal storage and the asset system.
+ *
  * **Nintendo 3DS Specific Functionality**: This function returns "romfs"
  * directory of the application as it is uncommon to store resources outside
  * the executable. As such it is not a writable directory.
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_gamepad.h b/Xcode/iOS/SDL3.framework/Headers/SDL_gamepad.h
index d1a21ca25..0102f1544 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_gamepad.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_gamepad.h
@@ -48,6 +48,9 @@
  * SDL_INIT_GAMEPAD flag. This causes SDL to scan the system for gamepads, and
  * load appropriate drivers.
  *
+ * If you're using SDL gamepad support in a Steam game, you must call
+ * SteamAPI_InitEx() before calling SDL_Init().
+ *
  * If you would like to receive gamepad updates while the application is in
  * the background, you should set the following hint before calling
  * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
@@ -1278,7 +1281,7 @@ extern SDL_DECLSPEC Sint16 SDLCALL SDL_GetGamepadAxis(SDL_Gamepad *gamepad, SDL_
  * You do not normally need to call this function unless you are parsing
  * SDL_Gamepad mappings in your own code.
  *
- * \param str string representing a SDL_Gamepad axis.
+ * \param str string representing a SDL_Gamepad button.
  * \returns the SDL_GamepadButton enum corresponding to the input string, or
  *          `SDL_GAMEPAD_BUTTON_INVALID` if no match was found.
  *
@@ -1492,7 +1495,7 @@ extern SDL_DECLSPEC float SDLCALL SDL_GetGamepadSensorDataRate(SDL_Gamepad *game
  * Get the current state of a gamepad sensor.
  *
  * The number of values and interpretation of the data is sensor dependent.
- * See SDL_sensor.h for the details for each type of sensor.
+ * See the remarks in SDL_SensorType for details for each type of sensor.
  *
  * \param gamepad the gamepad to query.
  * \param type the type of sensor to query.
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_gpu.h b/Xcode/iOS/SDL3.framework/Headers/SDL_gpu.h
index 18ee00086..d35104a7d 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_gpu.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_gpu.h
@@ -2294,7 +2294,7 @@ extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDevice(
  * - `SDL_PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN`: The app is able to
  *   provide Metal shader libraries if applicable.
  *
- * With the D3D12 renderer:
+ * With the D3D12 backend:
  *
  * - `SDL_PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING`: the prefix to
  *   use for all vertex semantics, default is "TEXCOORD".
@@ -2307,6 +2307,20 @@ extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDevice(
  *   either supports Tier 2 Resource Binding or does not support D3D12 in any
  *   capacity. Defaults to false.
  *
+ * With the Vulkan backend:
+ *
+ * - `SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN`:
+ *   By default, Vulkan device enumeration includes drivers of all types,
+ *   including software renderers (for example, the Lavapipe Mesa driver).
+ *   This can be useful if your application _requires_ SDL_GPU, but if you can
+ *   provide your own fallback renderer (for example, an OpenGL renderer) this
+ *   property can be set to true. Defaults to false.
+ * - `SDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER`: a pointer to an
+ *   SDL_GPUVulkanOptions structure to be processed during device creation.
+ *   This allows configuring a variety of Vulkan-specific options such as
+ *   increasing the API version and opting into extensions aside from the
+ *   minimal set SDL requires.
+ *
  * \param props the properties to use.
  * \returns a GPU context on success or NULL on failure; call SDL_GetError()
  *          for more information.
@@ -2337,6 +2351,36 @@ extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDeviceWithProperties(
 #define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN                     "SDL.gpu.device.create.shaders.metallib"
 #define SDL_PROP_GPU_DEVICE_CREATE_D3D12_ALLOW_FEWER_RESOURCE_SLOTS_BOOLEAN     "SDL.gpu.device.create.d3d12.allowtier1resourcebinding"
 #define SDL_PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING                   "SDL.gpu.device.create.d3d12.semantic"
+#define SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN         "SDL.gpu.device.create.vulkan.requirehardwareacceleration"
+#define SDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER                       "SDL.gpu.device.create.vulkan.options"
+
+
+/**
+ * A structure specifying additional options when using Vulkan.
+ *
+ * When no such structure is provided, SDL will use Vulkan API version 1.0 and
+ * a minimal set of features. The requested API version influences how the
+ * feature_list is processed by SDL. When requesting API version 1.0, the
+ * feature_list is ignored. Only the vulkan_10_physical_device_features and
+ * the extension lists are used. When requesting API version 1.1, the
+ * feature_list is scanned for feature structures introduced in Vulkan 1.1.
+ * When requesting Vulkan 1.2 or higher, the feature_list is additionally
+ * scanned for compound feature structs such as
+ * VkPhysicalDeviceVulkan11Features. The device and instance extension lists,
+ * as well as vulkan_10_physical_device_features, are always processed.
+ *
+ * \since This struct is available since SDL 3.4.0.
+ */
+typedef struct SDL_GPUVulkanOptions
+{
+    Uint32 vulkan_api_version; /**< The Vulkan API version to request for the instance. Use Vulkan's VK_MAKE_VERSION or VK_MAKE_API_VERSION. */
+    void *feature_list; /**< Pointer to the first element of a chain of Vulkan feature structs. (Requires API version 1.1 or higher.)*/
+	void *vulkan_10_physical_device_features; /**< Pointer to a VkPhysicalDeviceFeatures struct to enable additional Vulkan 1.0 features. */
+	Uint32 device_extension_count; /**< Number of additional device extensions to require. */
+	const char **device_extension_names; /**< Pointer to a list of additional device extensions to require. */
+	Uint32 instance_extension_count; /**< Number of additional instance extensions to require. */
+	const char **instance_extension_names; /**< Pointer to a list of additional instance extensions to require. */
+} SDL_GPUVulkanOptions;
 
 /**
  * Destroys a GPU context previously returned by SDL_CreateGPUDevice.
@@ -2901,6 +2945,12 @@ extern SDL_DECLSPEC void SDLCALL SDL_SetGPUTextureName(
  *
  * Useful for debugging.
  *
+ * On Direct3D 12, using SDL_InsertGPUDebugLabel requires
+ * WinPixEventRuntime.dll to be in your PATH or in the same directory as your
+ * executable. See
+ * [here](https://devblogs.microsoft.com/pix/winpixeventruntime/)
+ * for instructions on how to obtain it.
+ *
  * \param command_buffer a command buffer.
  * \param text a UTF-8 string constant to insert as the label.
  *
@@ -2919,6 +2969,11 @@ extern SDL_DECLSPEC void SDLCALL SDL_InsertGPUDebugLabel(
  * Each call to SDL_PushGPUDebugGroup must have a corresponding call to
  * SDL_PopGPUDebugGroup.
  *
+ * On Direct3D 12, using SDL_PushGPUDebugGroup requires WinPixEventRuntime.dll
+ * to be in your PATH or in the same directory as your executable. See
+ * [here](https://devblogs.microsoft.com/pix/winpixeventruntime/)
+ * for instructions on how to obtain it.
+ *
  * On some backends (e.g. Metal), pushing a debug group during a
  * render/blit/compute pass will create a group that is scoped to the native
  * pass rather than the command buffer. For best results, if you push a debug
@@ -2938,6 +2993,11 @@ extern SDL_DECLSPEC void SDLCALL SDL_PushGPUDebugGroup(
 /**
  * Ends the most-recently pushed debug group.
  *
+ * On Direct3D 12, using SDL_PopGPUDebugGroup requires WinPixEventRuntime.dll
+ * to be in your PATH or in the same directory as your executable. See
+ * [here](https://devblogs.microsoft.com/pix/winpixeventruntime/)
+ * for instructions on how to obtain it.
+ *
  * \param command_buffer a command buffer.
  *
  * \since This function is available since SDL 3.2.0.
@@ -3079,7 +3139,7 @@ extern SDL_DECLSPEC SDL_GPUCommandBuffer * SDLCALL SDL_AcquireGPUCommandBuffer(
 /**
  * Pushes data to a vertex uniform slot on the command buffer.
  *
- * Subsequent draw calls will use this uniform data.
+ * Subsequent draw calls in this command buffer will use this uniform data.
  *
  * The data being pushed must respect std140 layout conventions. In practical
  * terms this means you must ensure that vec3 and vec4 fields are 16-byte
@@ -3104,7 +3164,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_PushGPUVertexUniformData(
 /**
  * Pushes data to a fragment uniform slot on the command buffer.
  *
- * Subsequent draw calls will use this uniform data.
+ * Subsequent draw calls in this command buffer will use this uniform data.
  *
  * The data being pushed must respect std140 layout conventions. In practical
  * terms this means you must ensure that vec3 and vec4 fields are 16-byte
@@ -3126,7 +3186,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_PushGPUFragmentUniformData(
 /**
  * Pushes data to a uniform slot on the command buffer.
  *
- * Subsequent draw calls will use this uniform data.
+ * Subsequent draw calls in this command buffer will use this uniform data.
  *
  * The data being pushed must respect std140 layout conventions. In practical
  * terms this means you must ensure that vec3 and vec4 fields are 16-byte
@@ -3612,7 +3672,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputePipeline(
  * The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER.
  *
  * Be sure your shader is set up according to the requirements documented in
- * SDL_CreateGPUShader().
+ * SDL_CreateGPUComputePipeline().
  *
  * \param compute_pass a compute pass handle.
  * \param first_slot the compute sampler slot to begin binding from.
@@ -3623,7 +3683,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputePipeline(
  *
  * \since This function is available since SDL 3.2.0.
  *
- * \sa SDL_CreateGPUShader
+ * \sa SDL_CreateGPUComputePipeline
  */
 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeSamplers(
     SDL_GPUComputePass *compute_pass,
@@ -3638,7 +3698,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeSamplers(
  * SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ.
  *
  * Be sure your shader is set up according to the requirements documented in
- * SDL_CreateGPUShader().
+ * SDL_CreateGPUComputePipeline().
  *
  * \param compute_pass a compute pass handle.
  * \param first_slot the compute storage texture slot to begin binding from.
@@ -3647,7 +3707,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeSamplers(
  *
  * \since This function is available since SDL 3.2.0.
  *
- * \sa SDL_CreateGPUShader
+ * \sa SDL_CreateGPUComputePipeline
  */
 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeStorageTextures(
     SDL_GPUComputePass *compute_pass,
@@ -3662,7 +3722,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeStorageTextures(
  * SDL_GPU_BUFFERUSAGE_COMPUTE_STORAGE_READ.
  *
  * Be sure your shader is set up according to the requirements documented in
- * SDL_CreateGPUShader().
+ * SDL_CreateGPUComputePipeline().
  *
  * \param compute_pass a compute pass handle.
  * \param first_slot the compute storage buffer slot to begin binding from.
@@ -3671,7 +3731,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeStorageTextures(
  *
  * \since This function is available since SDL 3.2.0.
  *
- * \sa SDL_CreateGPUShader
+ * \sa SDL_CreateGPUComputePipeline
  */
 extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeStorageBuffers(
     SDL_GPUComputePass *compute_pass,
@@ -3843,6 +3903,10 @@ extern SDL_DECLSPEC void SDLCALL SDL_UploadToGPUBuffer(
  * This copy occurs on the GPU timeline. You may assume the copy has finished
  * in subsequent commands.
  *
+ * This function does not support copying between depth and color textures.
+ * For those, copy the texture to a buffer and then to the destination
+ * texture.
+ *
  * \param copy_pass a copy pass handle.
  * \param source a source texture region.
  * \param destination a destination texture region.
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_hints.h b/Xcode/iOS/SDL3.framework/Headers/SDL_hints.h
index b5565b549..474e97f04 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_hints.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_hints.h
@@ -787,28 +787,6 @@ extern "C" {
  */
 #define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT"
 
-/**
- * Dictate that newly-created windows will fill the whole browser window.
- *
- * The canvas element fills the entire document. Resize events will be
- * generated as the browser window is resized, as that will adjust the canvas
- * size as well. The canvas will cover anything else on the page, including
- * any c

(Patch may be truncated, please check the link at the top of this post.)