SDL3 new GPU API merged
Purpose and Scope of the New SDL3 GPU API
- Provides a cross‑platform GPU abstraction for modern 3D/2D rendering and compute.
- Aims to let developers write graphics code and shaders once and run across desktops, mobile, and consoles.
- Meant as a modern replacement/extension for SDL’s old 2D renderer, which was designed for “sprite blitting” era hardware and too limited for modern batching, GUIs, and shaders.
Relationship to Other Graphics APIs/Libraries
- Positioned between low‑level APIs (Vulkan, D3D11/12, Metal) and engines (Unity, Unreal, Godot).
- Compared to bgfx/sokol: SDL_gpu is pure C, very portable, lower‑level (explicit command buffers, explicit transfers) and aims to expose asynchronous GPU work clearly.
- Compared to WebGPU/wgpu: WebGPU is spec‑driven, rigid, web‑safety‑focused, and took years (with WGSL design and committee politics). SDL_gpu is pragmatically “wrap native APIs,” with fewer constraints and faster iteration.
Design and Feature Choices
- Supports multiple backends (D3D11/12, Metal, Vulkan; consoles under NDA). Backend selection can be automatic or forced via hints / device creation.
- Focuses on features widely available across platforms; advanced features like bindless, ray tracing, mesh shaders, work graphs likely deferred.
- Exposes command buffers and explicit CPU–GPU transfers, but handles tricky details such as barriers and memory allocation.
- Uses floats for most coordinates in SDL3, with some legacy integer uses (e.g., viewports).
Shaders and Tooling
- Core API expects platform‑native shader formats; users bring their own compilation/translation pipeline.
- There are related projects for a cross‑platform shading language and for converting HLSL/SPIR‑V to backend formats, but these are optional and at varying maturity.
- A proposed custom shader language draws criticism for unnecessary deviations from C‑like syntax; others welcome such changes.
Integration, Compatibility, and Examples
- API is part of mainline SDL3 rather than a separate add‑on; some argue this is natural because SDL must provide efficient rendering, others fear “second system effect” and bloat.
- SDL1→2 incompatibilities are cited as precedent; a compatibility shim exists for SDL1, but piecemeal migration remains hard. SDL3 may repeat some of this pain but is expected to evolve over a long timescale.
- Example repos exist for SDL_gpu usage; docs and examples are still emerging.
Performance, Use Cases, and Skepticism
- Some report SDL2’s render API is slow or awkward for non‑integer, physics‑driven 2D, leading them to alternatives; others say recent SDL2 with geometry batching is very fast when used correctly.
- SDL is widely valued as the minimal cross‑platform layer for windows, input, audio, and now GPU, especially on Linux and embedded systems.
- Concerns raised about: resource renaming semantics, synchronization model, hint‑overriding of explicit parameters, shader‑format discoverability, and whether the API will stay small while handling real‑world driver quirks.
- Enthusiasts see it as a high‑quality, pragmatic option that lowers the barrier compared to writing Vulkan/D3D/Metal directly. Skeptics prefer simpler SDL focused only on windowing/input or question whether new complexity is justified.