SDL_mixer: Updated SDL framework for 3.4.0 release

From 382ff3b90e4fbc2ce250e20faa16fa9f3094a43c Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Thu, 1 Jan 2026 08:14:19 -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_audio.h  |  9 ++
 .../SDL3.framework/Headers/SDL_dlopennote.h   | 95 ++++++++++---------
 .../iOS/SDL3.framework/Headers/SDL_gamepad.h  |  7 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_gpu.h    | 40 ++++++--
 Xcode/iOS/SDL3.framework/Headers/SDL_hints.h  | 82 +++++++++++-----
 .../iOS/SDL3.framework/Headers/SDL_keycode.h  |  6 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_main.h   |  8 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_mouse.h  | 17 ++--
 Xcode/iOS/SDL3.framework/Headers/SDL_render.h |  8 +-
 .../iOS/SDL3.framework/Headers/SDL_revision.h |  3 +
 Xcode/iOS/SDL3.framework/Headers/SDL_stdinc.h |  2 +-
 .../iOS/SDL3.framework/Headers/SDL_surface.h  | 17 +++-
 .../iOS/SDL3.framework/Headers/SDL_version.h  |  6 +-
 Xcode/iOS/SDL3.framework/Headers/SDL_video.h  | 56 ++++++++---
 Xcode/iOS/SDL3.framework/SDL3.tbd             |  1 +
 .../SDL3.framework/Versions/A/Headers/SDL.h   |  2 +-
 .../Versions/A/Headers/SDL_audio.h            |  9 ++
 .../Versions/A/Headers/SDL_dlopennote.h       | 95 ++++++++++---------
 .../Versions/A/Headers/SDL_gamepad.h          |  7 +-
 .../Versions/A/Headers/SDL_gpu.h              | 40 ++++++--
 .../Versions/A/Headers/SDL_hints.h            | 82 +++++++++++-----
 .../Versions/A/Headers/SDL_keycode.h          |  6 +-
 .../Versions/A/Headers/SDL_main.h             |  8 +-
 .../Versions/A/Headers/SDL_mouse.h            | 17 ++--
 .../Versions/A/Headers/SDL_render.h           |  8 +-
 .../Versions/A/Headers/SDL_revision.h         |  3 +
 .../Versions/A/Headers/SDL_stdinc.h           |  2 +-
 .../Versions/A/Headers/SDL_surface.h          | 17 +++-
 .../Versions/A/Headers/SDL_version.h          |  6 +-
 .../Versions/A/Headers/SDL_video.h            | 56 ++++++++---
 .../macOS/SDL3.framework/Versions/A/SDL3.tbd  |  1 +
 32 files changed, 476 insertions(+), 242 deletions(-)

diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL.h b/Xcode/iOS/SDL3.framework/Headers/SDL.h
index fb32c9516..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.3
+ * 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_audio.h b/Xcode/iOS/SDL3.framework/Headers/SDL_audio.h
index 104992bcf..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.
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_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 9375a72e4..d35104a7d 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_gpu.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_gpu.h
@@ -2361,7 +2361,7 @@ extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDeviceWithProperties(
  * 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_phyisical_device_features and
+ * 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
@@ -2945,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.
  *
@@ -2963,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
@@ -2982,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.
@@ -3123,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
@@ -3148,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
@@ -3170,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
@@ -3656,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.
@@ -3667,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,
@@ -3682,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.
@@ -3691,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,
@@ -3706,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.
@@ -3715,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,
@@ -3887,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 972e0b7e7..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 controls provided by Emscripten in its generated HTML file. Often times
- * this is desirable for a browser-based game, but it means several things
- * that we expect of an SDL window on other platforms might not work as
- * expected, such as minimum window sizes and aspect ratios.
- *
- * This hint overrides SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_FILL_DOCUMENT_BOOLEAN
- * properties when creating an SDL window.
- *
- * This hint only applies to the emscripten platform.
- *
- * This hint should be set before creating a window.
- *
- * \since This hint is available since SDL 3.4.0.
- */
-#define SDL_HINT_EMSCRIPTEN_FILL_DOCUMENT "SDL_EMSCRIPTEN_FILL_DOCUMENT"
-
 /**
  * A variable that controls whether the on-screen keyboard should be shown
  * when text input is active.
@@ -1106,6 +1084,21 @@ extern "C" {
  */
 #define SDL_HINT_HIDAPI_LIBUSB "SDL_HIDAPI_LIBUSB"
 
+
+/**
+ * A variable to control whether HIDAPI uses libusb for GameCube adapters.
+ *
+ * The variable can be set to the following values:
+ *
+ * - "0": HIDAPI will not use libusb for GameCube adapters.
+ * - "1": HIDAPI will use libusb for GameCube adapters if available. (default)
+ *
+ * This hint should be set before SDL is initialized.
+ *
+ * \since This hint is available since SDL 3.2.0.
+ */
+#define SDL_HINT_HIDAPI_LIBUSB_GAMECUBE "SDL_HIDAPI_LIBUSB_GAMECUBE"
+
 /**
  * A variable to control whether HIDAPI uses libusb only for whitelisted
  * devices.
@@ -2620,6 +2613,21 @@ extern "C" {
  */
 #define SDL_HINT_MAC_SCROLL_MOMENTUM "SDL_MAC_SCROLL_MOMENTUM"
 
+/**
+ * A variable controlling whether holding down a key will repeat the pressed
+ * key or open the accents menu on macOS.
+ *
+ * The variable can be set to the following values:
+ *
+ * - "0": Holding a key will open the accents menu for that key.
+ * - "1": Holding a key will repeat the pressed key. (default)
+ *
+ * This hint needs to be set before SDL_Init().
+ *
+ * \since This hint is available since SDL 3.4.0.
+ */
+#define SDL_HINT_MAC_PRESS_AND_HOLD "SDL_MAC_PRESS_AND_HOLD"
+
 /**
  * Request SDL_AppIterate() be called at a specific rate.
  *
@@ -2699,6 +2707,24 @@ extern "C" {
  */
 #define SDL_HINT_MOUSE_DEFAULT_SYSTEM_CURSOR "SDL_MOUSE_DEFAULT_SYSTEM_CURSOR"
 
+/**
+ * A variable setting whether we should scale cursors by the current display
+ * scale.
+ *
+ * The variable can be set to the following values:
+ *
+ * - "0": Cursors will not change size based on the display content scale.
+ *   (default)
+ * - "1": Cursors will automatically match the display content scale (e.g. a
+ *   2x sized cursor will be used when the window is on a monitor with 200%
+ *   scale). This is currently implemented on Windows and Wayland.
+ *
+ * This hint needs to be set before creating cursors.
+ *
+ * \since This hint is available since SDL 3.4.0.
+ */
+#define SDL_HINT_MOUSE_DPI_SCALE_CURSORS "SDL_MOUSE_DPI_SCALE_CURSORS"
+
 /**
  * A variable controlling whether warping a hidden mouse cursor will activate
  * relative mouse mode.
@@ -3530,10 +3556,12 @@ extern "C" {
  * prioritized in the list of displays, as exposed by calling
  * SDL_GetDisplays(), with the first listed becoming the primary display. The
  * naming convention can vary depending on the environment, but it is usually
- * a connector name (e.g. 'DP-1', 'DP-2', 'HDMI-A-1',etc...).
+ * a connector name (e.g. 'DP-1', 'DP-2', 'HDMI-A-1', etc...).
  *
- * On Wayland and X11 desktops, the connector names associated with displays
- * can typically be found by using the `xrandr` utility.
+ * On Wayland desktops, the connector names associated with displays can be
+ * found in the `name` property of the info output from `wayland-info -i
+ * wl_output`. On X11 desktops, the `xrandr` utility can be used to retrieve
+ * the connector names associated with displays.
  *
  * This hint is currently supported on the following drivers:
  *
@@ -3714,8 +3742,10 @@ extern "C" {
  * The variable can be set to the following values:
  *
  * - "0": Fullscreen windows will not be minimized when they lose focus.
- *   (default)
  * - "1": Fullscreen windows are minimized when they lose focus.
+ * - "auto": Fullscreen windows are minimized when they lose focus if they use
+ *   exclusive fullscreen modes, so the desktop video mode is restored.
+ *   (default)
  *
  * This hint can be set anytime.
  *
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_keycode.h b/Xcode/iOS/SDL3.framework/Headers/SDL_keycode.h
index a8b1378ec..c43660eef 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_keycode.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_keycode.h
@@ -45,10 +45,12 @@
  * `SDLK_*` constant for those keys that do not generate characters.
  *
  * A special exception is the number keys at the top of the keyboard which map
- * to SDLK_0...SDLK_9 on AZERTY layouts.
+ * by default to SDLK_0...SDLK_9 on AZERTY layouts.
  *
  * Keys with the `SDLK_EXTENDED_MASK` bit set do not map to a scancode or
- * unicode code point.
+ * Unicode code point.
+ *
+ * Many common keycodes are listed below, but this list is not exhaustive.
  *
  * \since This datatype is available since SDL 3.2.0.
  *
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_main.h b/Xcode/iOS/SDL3.framework/Headers/SDL_main.h
index 009cd4ef1..ff497a4c3 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_main.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_main.h
@@ -167,12 +167,10 @@
         */
         #define SDL_MAIN_NEEDED
 
-    #elif defined(SDL_PLATFORM_IOS)
-        /* On iOS SDL provides a main function that creates an application delegate
-           and starts the iOS application run loop.
+    #elif defined(SDL_PLATFORM_IOS) || defined(SDL_PLATFORM_TVOS)
+        /* On iOS and tvOS SDL provides a main function that creates an application delegate and starts the application run loop.
 
-           To use it, just #include SDL_main.h in the source file that contains your
-           main() function.
+           To use it, just #include <SDL3/SDL_main.h> in the source file that contains your main() function.
 
            See src/video/uikit/SDL_uikitappdelegate.m for more details.
          */
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_mouse.h b/Xcode/iOS/SDL3.framework/Headers/SDL_mouse.h
index 20f9c8b5c..d502005a7 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_mouse.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_mouse.h
@@ -203,10 +203,10 @@ typedef Uint32 SDL_MouseButtonFlags;
  * \sa SDL_SetRelativeMouseTransform
  */
 typedef void (SDLCALL *SDL_MouseMotionTransformCallback)(
-    void *userdata, 
-    Uint64 timestamp, 
-    SDL_Window *window, 
-    SDL_MouseID mouseID, 
+    void *userdata,
+    Uint64 timestamp,
+    SDL_Window *window,
+    SDL_MouseID mouseID,
     float *x, float *y
 );
 
@@ -593,9 +593,10 @@ extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_CreateCursor(const Uint8 *data,
  * If this function is passed a surface with alternate representations added
  * with SDL_AddSurfaceAlternateImage(), the surface will be interpreted as the
  * content to be used for 100% display scale, and the alternate
- * representations will be used for high DPI situations. For example, if the
- * original surface is 32x32, then on a 2x macOS display or 200% display scale
- * on Windows, a 64x64 version of the image will be used, if available. If a
+ * representations will be used for high DPI situations if
+ * SDL_HINT_MOUSE_DPI_SCALE_CURSORS is enabled. For example, if the original
+ * surface is 32x32, then on a 2x macOS display or 200% display scale on
+ * Windows, a 64x64 version of the image will be used, if available. If a
  * matching version of the image isn't available, the closest larger size
  * image will be downscaled to the appropriate size and be used instead, if
  * available. Otherwise, the closest smaller image will be upscaled and be
@@ -730,7 +731,7 @@ extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_GetCursor(void);
  * You do not have to call SDL_DestroyCursor() on the return value, but it is
  * safe to do so.
  *
- * \returns the default cursor on success or NULL on failuree; call
+ * \returns the default cursor on success or NULL on failure; call
  *          SDL_GetError() for more information.
  *
  * \threadsafety This function should only be called on the main thread.
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_render.h b/Xcode/iOS/SDL3.framework/Headers/SDL_render.h
index 5fcca907c..3d5139f59 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_render.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_render.h
@@ -768,9 +768,10 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Rende
  *
  * With the vulkan renderer:
  *
- * - `SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER`: the VkImage with layout
- *   VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL associated with the texture, if
- *   you want to wrap an existing texture.
+ * - `SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER`: the VkImage associated
+ *   with the texture, if you want to wrap an existing texture.
+ * - `SDL_PROP_TEXTURE_CREATE_VULKAN_LAYOUT_NUMBER`: the VkImageLayout for the
+ *   VkImage, defaults to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
  *
  * With the GPU renderer:
  *
@@ -828,6 +829,7 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureWithProperties(SDL_Re
 #define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER      "SDL.texture.create.opengles2.texture_u"
 #define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER      "SDL.texture.create.opengles2.texture_v"
 #define SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER           "SDL.texture.create.vulkan.texture"
+#define SDL_PROP_TEXTURE_CREATE_VULKAN_LAYOUT_NUMBER            "SDL.texture.create.vulkan.layout"
 #define SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER             "SDL.texture.create.gpu.texture"
 #define SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_UV_POINTER          "SDL.texture.create.gpu.texture_uv"
 #define SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_U_POINTER           "SDL.texture.create.gpu.texture_u"
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_revision.h b/Xcode/iOS/SDL3.framework/Headers/SDL_revision.h
index f0f57cd59..d4e850ece 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_revision.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_revision.h
@@ -44,6 +44,9 @@
  * clue in debugging forensics and not something the app will parse in any
  * way.
  *
+ * SDL_revision.h must be included in your program explicitly if you want
+ * access to the SDL_REVISION constant.
+ *
  * \since This macro is available since SDL 3.2.0.
  */
 #define SDL_REVISION "Some arbitrary string decided at SDL build time"
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_stdinc.h b/Xcode/iOS/SDL3.framework/Headers/SDL_stdinc.h
index 48f45ff76..f15ab727b 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_stdinc.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_stdinc.h
@@ -2667,7 +2667,7 @@ extern SDL_DECLSPEC void * SDLCALL SDL_memset4(void *dst, Uint32 val, size_t dwo
  * \since This macro is available since SDL 3.2.0.
  *
  * \sa SDL_zero
- * \sa SDL_zeroa
+ * \sa SDL_zerop
  */
 #define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x)))
 
diff --git a/Xcode/iOS/SDL3.framework/Headers/SDL_surface.h b/Xcode/iOS/SDL3.framework/Headers/SDL_surface.h
index 053557fc2..717aeb89a 100644
--- a/Xcode/iOS/SDL3.framework/Headers/SDL_surface.h
+++ b/Xcode/iOS/SDL3.framework/Headers/SDL_surface.h
@@ -241,6 +241,12 @@ extern SDL_DECLSPEC void SDLCALL SDL_DestroySurface(SDL_Surface *surface);
  *   left edge of the image, if this surface is being used as a cursor.
  * - `SDL_PROP_SURFACE_HOTSPOT_Y_NUMBER`: the hotspot pixel offset from the
  *   top edge of the image, if this surface is being used as a cursor.
+ * - `SDL_PROP_SURFACE_ROTATION_FLOAT`: the number of degrees a surface's data
+ *   is meant to be rotated clockwise to make the image right-side up. Default
+ *   0. This is used by the camera API, if a mobile device is oriented
+ *   differently than what its camera provides (i.e. - the camera always
+ *   provides portrait images but the phone is being held in landscape
+ *   orientation). Since SDL 3.4.0.
  *
  * \param surface the SDL_Surface structure to query.
  * \returns a valid property ID on success or 0 on failure; call
@@ -257,6 +263,7 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetSurfaceProperties(SDL_Surfac
 #define SDL_PROP_SURFACE_TONEMAP_OPERATOR_STRING            "SDL.surface.tonemap"
 #define SDL_PROP_SURFACE_HOTSPOT_X_NUMBER                   "SDL.surface.hotspot.x"
 #define SDL_PRO

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