Commit Graph

344 Commits

Author SHA1 Message Date
Jakub Wasilewski
1492911c7d metal: Added missing lock in METAL_INTERNAL_PerformPendingDestroys.
Without this lock, a concurrent call to SDL_ReleaseGPUBuffer, SDL_ReleaseGPUTransferBuffer or SDL_ReleaseGPUTexture can cause one of the arrays to be reallocated while METAL_INTERNAL_PerformPendingDestroys is iterating over it, causing a bad day all around.
2026-04-29 08:48:21 -07:00
Mathieu Eyraud
dc16a35140 Don't call function pointer when it is NULL 2026-04-10 10:53:58 -07:00
cosmonaut
f8b7e22d7d GPU: Fix Vulkan backend segfault 2026-04-06 14:46:33 -07:00
cosmonaut
aeb4309c0e GPU: Fix memory leak in Vulkan command buffer 2026-04-06 10:39:46 -07:00
Sascha Reuter
c98b36ff03 GPU Vulkan: handle VK_ERROR_SURFACE_LOST_KHR in acquire path
On Android, backgrounding and foregrounding an app causes the Vulkan
surface to be destroyed. vkAcquireNextImageKHR returns
VK_ERROR_SURFACE_LOST_KHR, but the acquire while(true) loop only calls
RecreateSwapchain which doesn't recreate the surface, resulting in an
infinite retry loop and a black screen.

Handle VK_ERROR_SURFACE_LOST_KHR by setting both needsSurfaceRecreate
and needsSwapchainRecreate, then returning to let the existing
recreation path handle it on the next call.

Fixes #15322
2026-04-06 07:19:06 -07:00
Evan Hemsley
b4b9a037b6 GPU: Refcount Vulkan allocations to fix transfer corruption on defrag (#15127)
Merging, this can be cherry-picked as well.
2026-03-10 13:33:07 -07:00
Sam Lantinga
25b62f01ed Don't load libopenxr_loader.so
We are locked to version 1 of the ABI, so don't load what might be a symlink to a newer and incompatible version.

Platforms like OpenBSD that only have .so versions of libraries can add a special case here like Android in the future.

Fixes https://github.com/libsdl-org/SDL/issues/15172
2026-03-09 09:59:02 -07:00
Ethan Lee
0c57e99b4a gpu: Fix swapchain texture cycling.
This is actually a 1:1 copy of a patch we wrote for GPU PS5 some time ago!
2026-03-07 10:36:19 -05:00
ImpDi
89cab56536 Texture2DArray and Compute Pipeline in DirectX12 (#15161)
Apparently, because PlaneSlice wasn't initialized, we couldn't use SDL_GPU_TEXTURETYPE_2D_ARRAY and SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_WRITE together, as the error d3d12:
"ID3D12Device::CreateUnorderedAccessView occurred: The PlaneSlice -858993460 is invalid when the resource format is R8G8B8A8_UNORM and the view format is R8G8B8A8_UNORM. Only Plane Slice 0 is valid when creating a view on a non-planar format. [ STATE_CREATION ERROR #344: CREATEUNORDEREDACCESSVIEW_INVALIDPLANESLICE]"
2026-03-03 19:19:45 -08:00
Petar Popovic
77f4a8e2b8 Fix potential memory leak in VULKAN_AcquireCommandBuffer() on error 2026-03-01 14:10:54 -08:00
Ethan Lee
fa9bad2e4b vulkan: Only enable KHR_portability_enumeration when available 2026-02-20 11:29:26 -05:00
Jesse Chounard
a79bd26d28 Fix D3D12 DSV creation for array/cube/cube-array depth textures
DSV creation was missing a TEXTURE2DARRAY branch for array, cube, and
cube-array depth textures. It fell through to TEXTURE2D, so
FirstArraySlice was never set and all layers' DSVs targeted layer 0.
This caused incorrect rendering when using depth textures with multiple
layers, such as cubemap shadow maps.
2026-02-20 10:23:47 -05:00
William Horvath
06bf8d1924 gpu_vulkan: Set texture container before transitioning to default barrier state.
Avoids a null dereference of currentRegion->vulkanTexture->container in DefragmentMemory:

} else if (!currentRegion->isBuffer && !currentRegion->vulkanTexture->markedForDestroy) {
...
&currentRegion->vulkanTexture->container->header.info
... (among others)

by not "VULKAN_Submit"ting (and thus adding it to the defrag pool) before setting the container.

Although rare (defrag almost never ran), this crash happened in a real-world application.
2026-02-17 14:12:44 -08:00
Ethan Lee
ad60fa07d7 gpu: Add LogWarn to Vulkan OpenXR load failure, to match D3D12 2026-02-16 11:46:25 -05:00
RaceTheMaSe
f1a7a64eb4 Fix warnings: Extra semi - macro usage (#15015) 2026-02-08 16:58:53 -08:00
RaceTheMaSe
7c7ffb9115 tests: Fix unreachable code warnings (#14993) 2026-02-07 20:42:59 +03:00
RaceTheMaSe
9fda8f2669 Fix -Wnewline-eof warnings (#14989) 2026-02-07 18:04:18 +03:00
Sam Lantinga
c9116daa71 Fixed build 2026-02-06 10:32:19 -08:00
Sam Lantinga
8e783e0892 Fixed building with Visual Studio 2019 2026-02-06 10:15:39 -08:00
Sam Lantinga
1a99861510 Fixed warnings building on Android 2026-02-04 14:55:29 -08:00
Ozkan Sezer
59e3ad0079 SDL_gpu_d3d12.c: Silence -Wuninitialized warning from old gcc versions:
SDL_gpu_d3d12.c: In function 'D3D12_GetXRSwapchainFormats':
SDL_gpu_d3d12.c:9107:26: warning: 'sdlFormat' may be used uninitialized in this function
2026-02-04 07:47:02 +03:00
Ozkan Sezer
427941012e SDL_gpu_vulkan.c: Silence -Wuninitialized warning from old gcc versions:
SDL_gpu_vulkan.c: In function 'VULKAN_GetXRSwapchainFormats':
SDL_gpu_vulkan.c:12927: warning: 'sdlFormat' may be used uninitialized in this function
2026-02-04 07:39:20 +03:00
Evan Hemsley
e25e0f3c5b GPU: Allow D3D12 backend to load vendored D3D12Core.dll (#14946)
---------

Co-authored-by: Ethan Lee <flibitijibibo@gmail.com>
2026-02-02 11:10:03 -08:00
Aaron Benjamin
1f7db1ebcf Improve OpenXR loader error messages
When the OpenXR loader library fails to load, provide a detailed error
message explaining:
- On Windows: need openxr_loader.dll in app directory or PATH
- On Linux: install libopenxr-loader package or set LD_LIBRARY_PATH
- Can use SDL_HINT_OPENXR_LIBRARY hint to specify path

Also update D3D12 backend to include the error in its warning log,
and remove redundant SDL_SetError in Vulkan backend that was
overwriting the detailed message.
2026-02-02 10:31:59 -05:00
Ethan Lee
e8065ad9a0 gpu: Update the CHECK_DEVICE_MAGIC comments one more time.
Me fail English? That's unpossible!
2026-02-01 14:02:58 -05:00
Ethan Lee
415cc64d2f gpu: Update comments above CHECK_DEVICE_MAGIC macro 2026-02-01 13:54:27 -05:00
Lucas Murray
a0dc3a6727 GPU: Fix memory leak when creating D3D12 compute pipelines 2026-01-31 16:23:04 -05:00
Caleb Cornett
742a6fd092 GPU: Query UnrestrictedBufferTextureCopyPitchSupported to avoid D3D12 realignment copies 2026-01-31 16:22:32 -05:00
Ethan Lee
fe8b68db60 gpu: Rank dzn above lavapipe, for WSL Vulkan support 2026-01-31 08:34:47 -05:00
Aaron Benjamin
9a91d7236a GPU: OpenXR integration (#14837)
Based on Beyley's initial draft in #11601.

Co-authored-by: Beyley Cardellio <ep1cm1n10n123@gmail.com>
Co-authored-by: Ethan Lee <flibitijibibo@gmail.com>
2026-01-30 17:18:51 -05:00
Eddy Jansson
23fec649c2 Fix typos in comments. 2026-01-30 07:25:02 -08:00
Ethan Lee
db9676875e gpu: MSVC buildfix for Vulkan device property struct initialization 2026-01-30 09:40:24 -05:00
Ethan Lee
ad70aac0db gpu: Check for Vulkan conformance while checking the device rank.
This should behave largely the same, except now Dozen is given a pass for WSL.

This is a better fix for #14915.
2026-01-30 09:20:26 -05:00
Sam Lantinga
696c12826f Reference count window claim calls for a given GPU device
Fixes https://github.com/libsdl-org/SDL/issues/14918
2026-01-29 14:05:00 -08:00
Ethan Lee
a4fa04f2d4 gpu: Vulkan should fail if the best device is non-conformant 2026-01-29 14:41:34 -05:00
Sam Lantinga
17c375738f Add the type to SDL_PROP_GPU_DEVICE_CREATE_METAL_ALLOW_MACFAMILY1 2026-01-25 09:12:15 -08:00
Ethan Lee
16f2037efd gpu: Add SDL_PROP_GPU_DEVICE_CREATE_METAL_ALLOW_MACFAMILY1 property 2026-01-25 09:09:08 -08:00
Madeline Whitmore
97b177c92f SDL GPU: Fix features not being enabled with Vulkan 1.1 (#14885)
Use pre-Vulkan 1.2 structs to request features from a Vulkan 1.1 instance.
2026-01-25 08:18:57 -08:00
Eddy Jansson
83fb7b6636 Prefer SDL_zero()/SDL_zerop()
Replace uses of 'SDL_memset(E, 0, sizeof(E))' and similar
with the SDL_zero()/SDL_zerop() macros.
2026-01-23 11:23:27 -08:00
Cameron Cawley
cd72f6b02e Fix B4G4R4A4_UNORM swizzle with the Metal GPU driver 2026-01-18 12:48:24 -08:00
Cameron Cawley
25583798a0 Fix mapping between surface and GPU pixel formats 2026-01-18 12:48:24 -08:00
Lucas Murray
cced3ce8b9 GPU: Add error message to Vulkan buffer creation error path 2026-01-04 15:17:53 -08:00
Ethan Lee
f472f93db8 gpu: D3D12 uploads should also factor in block size for height, not just width.
It turns out the reason this function was having so many overread issues was because our row copies were wrong - for compressed images we also need to reduce the row count based on the block size, similar to what we already do for pitch calculation - these copies are byte copies, not pixel copies!
2026-01-02 07:37:30 -08:00
Sam Lantinga
5f086e7623 Updated copyright for 2026 2026-01-01 09:40:08 -08:00
Frank Praznik
cb4f33b644 gpu: Use the window event watcher list for Vulkan and D3D12
Events won't be delivered to the regular event watcher list callbacks if a client event filter discards events. Use the special window event watcher list to watch for resizes in the GPU renderers, as events are delivered to this list before a client can potentially discard them.
2025-12-30 22:18:19 -05:00
Edgar San Martin, Jr.
bd29d60d3c GPU: Add bounds validation for slot bindings and uniform data pushes. (#14692) 2025-12-23 08:36:06 -08:00
999pingGG
5a257202d2 GPU: Better detection of surface destruction 2025-12-21 17:16:34 -08:00
999pingGG
190b902fac GPU: Fix Android surface and swapchain recreation on app resume (#14676) 2025-12-19 09:54:08 -08:00
Nuno Silva
d94cd1efad GPU: Ensure Vulkan doesn't pass unsupported feature structures for requested vulkan version (#14662) 2025-12-15 17:57:49 -08:00
Evan Hemsley
1260c10aab GPU Vulkan: Only modify surface on window claim or release (#14659) 2025-12-15 12:54:16 -08:00