From de781c10ab66c37a65cc0b655cf79e1a92cdb394 Mon Sep 17 00:00:00 2001 From: ZivDero Date: Wed, 29 Oct 2025 09:54:36 +0300 Subject: [PATCH 1/3] Add support for GPU RGB565 (B5G6R5_UNORM) textures with DX11 --- src/render/direct3d11/SDL_render_d3d11.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/render/direct3d11/SDL_render_d3d11.c b/src/render/direct3d11/SDL_render_d3d11.c index dd46fcf0b33d0..38341766a8e2f 100644 --- a/src/render/direct3d11/SDL_render_d3d11.c +++ b/src/render/direct3d11/SDL_render_d3d11.c @@ -292,6 +292,8 @@ static DXGI_FORMAT SDLPixelFormatToDXGITextureFormat(Uint32 format, Uint32 outpu return DXGI_FORMAT_NV12; case SDL_PIXELFORMAT_P010: return DXGI_FORMAT_P010; + case SDL_PIXELFORMAT_RGB565: + return DXGI_FORMAT_B5G6R5_UNORM; default: return DXGI_FORMAT_UNKNOWN; } @@ -2897,6 +2899,7 @@ static bool D3D11_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV12); SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21); SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_P010); + SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGB565); data->swapChainFlags = 0; data->syncInterval = 0; From 3b8978cf465ebb53eb1c020318ba63ad372bdf98 Mon Sep 17 00:00:00 2001 From: ZivDero Date: Wed, 29 Oct 2025 18:16:51 +0300 Subject: [PATCH 2/3] Gate RGB565 behind version checks --- src/render/direct3d11/SDL_render_d3d11.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/render/direct3d11/SDL_render_d3d11.c b/src/render/direct3d11/SDL_render_d3d11.c index 38341766a8e2f..d1123570c4269 100644 --- a/src/render/direct3d11/SDL_render_d3d11.c +++ b/src/render/direct3d11/SDL_render_d3d11.c @@ -2899,7 +2899,11 @@ static bool D3D11_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV12); SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21); SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_P010); - SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGB565); + + // DXGI_FORMAT_B5G6R5_UNORM is supported since Direct3D 11.1 on Windows 8 and later + if (data->featureLevel >= D3D_FEATURE_LEVEL_11_1 && WIN_IsWindows8OrGreater()) { + SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGB565); + } data->swapChainFlags = 0; data->syncInterval = 0; From a46592e4ff9c3908f08bcf2d904ee14c0adedadc Mon Sep 17 00:00:00 2001 From: ZivDero Date: Wed, 29 Oct 2025 18:55:10 +0300 Subject: [PATCH 3/3] Move the check to be later --- src/render/direct3d11/SDL_render_d3d11.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/render/direct3d11/SDL_render_d3d11.c b/src/render/direct3d11/SDL_render_d3d11.c index d1123570c4269..1cfafe545334c 100644 --- a/src/render/direct3d11/SDL_render_d3d11.c +++ b/src/render/direct3d11/SDL_render_d3d11.c @@ -2900,11 +2900,6 @@ static bool D3D11_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_NV21); SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_P010); - // DXGI_FORMAT_B5G6R5_UNORM is supported since Direct3D 11.1 on Windows 8 and later - if (data->featureLevel >= D3D_FEATURE_LEVEL_11_1 && WIN_IsWindows8OrGreater()) { - SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGB565); - } - data->swapChainFlags = 0; data->syncInterval = 0; data->presentFlags = DXGI_PRESENT_DO_NOT_WAIT; @@ -2922,6 +2917,11 @@ static bool D3D11_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL return false; } + // DXGI_FORMAT_B5G6R5_UNORM is supported since Direct3D 11.1 on Windows 8 and later + if (data->featureLevel >= D3D_FEATURE_LEVEL_11_1 && WIN_IsWindows8OrGreater()) { + SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGB565); + } + return true; }