From 8289656a4ec11600045e411177680f974991953e Mon Sep 17 00:00:00 2001
From: Logan <[EMAIL REDACTED]>
Date: Sun, 18 May 2025 13:04:20 +1200
Subject: [PATCH] GPU: Update to set supported shader formats inside
CreateDevice
---
src/gpu/SDL_gpu.c | 1 -
src/gpu/d3d12/SDL_gpu_d3d12.c | 15 +++++++++++++++
src/gpu/metal/SDL_gpu_metal.m | 1 +
src/gpu/vulkan/SDL_gpu_vulkan.c | 1 +
4 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/gpu/SDL_gpu.c b/src/gpu/SDL_gpu.c
index f6e293e3cb939..9154c4d77011e 100644
--- a/src/gpu/SDL_gpu.c
+++ b/src/gpu/SDL_gpu.c
@@ -672,7 +672,6 @@ SDL_GPUDevice *SDL_CreateGPUDeviceWithProperties(SDL_PropertiesID props)
result = selectedBackend->CreateDevice(debug_mode, preferLowPower, props);
if (result != NULL) {
result->backend = selectedBackend->name;
- result->shader_formats = selectedBackend->shader_formats;
result->debug_mode = debug_mode;
}
}
diff --git a/src/gpu/d3d12/SDL_gpu_d3d12.c b/src/gpu/d3d12/SDL_gpu_d3d12.c
index 2b65775e542e8..6ccb2de179c35 100644
--- a/src/gpu/d3d12/SDL_gpu_d3d12.c
+++ b/src/gpu/d3d12/SDL_gpu_d3d12.c
@@ -9182,8 +9182,23 @@ static SDL_GPUDevice *D3D12_CreateDevice(bool debugMode, bool preferLowPower, SD
return NULL;
}
+ SDL_GPUShaderFormat shaderFormats = SDL_GPU_SHADERFORMAT_DXBC;
+
+ D3D12_FEATURE_DATA_SHADER_MODEL shaderModel;
+ shaderModel.HighestShaderModel = D3D_SHADER_MODEL_6_0;
+
+ res = ID3D12Device_CheckFeatureSupport(
+ renderer->device,
+ D3D12_FEATURE_SHADER_MODEL,
+ &shaderModel,
+ sizeof(shaderModel));
+ if (SUCCEEDED(res) && shaderModel.HighestShaderModel >= D3D_SHADER_MODEL_6_0) {
+ shaderFormats |= SDL_GPU_SHADERFORMAT_DXIL;
+ }
+
ASSIGN_DRIVER(D3D12)
result->driverData = (SDL_GPURenderer *)renderer;
+ result->shader_formats = shaderFormats;
result->debug_mode = debugMode;
renderer->sdlGPUDevice = result;
diff --git a/src/gpu/metal/SDL_gpu_metal.m b/src/gpu/metal/SDL_gpu_metal.m
index 9450b6a62c5f3..0d43a07f648ff 100644
--- a/src/gpu/metal/SDL_gpu_metal.m
+++ b/src/gpu/metal/SDL_gpu_metal.m
@@ -4610,6 +4610,7 @@ static void METAL_INTERNAL_DestroyBlitResources(
SDL_GPUDevice *result = SDL_calloc(1, sizeof(SDL_GPUDevice));
ASSIGN_DRIVER(METAL)
result->driverData = (SDL_GPURenderer *)renderer;
+ result->shader_formats = SDL_GPU_SHADERFORMAT_MSL | SDL_GPU_SHADERFORMAT_METALLIB;
renderer->sdlGPUDevice = result;
return result;
diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c
index 2f7bd82b3f912..de0be4bdbe6e4 100644
--- a/src/gpu/vulkan/SDL_gpu_vulkan.c
+++ b/src/gpu/vulkan/SDL_gpu_vulkan.c
@@ -11793,6 +11793,7 @@ static SDL_GPUDevice *VULKAN_CreateDevice(bool debugMode, bool preferLowPower, S
ASSIGN_DRIVER(VULKAN)
result->driverData = (SDL_GPURenderer *)renderer;
+ result->shader_formats = SDL_GPU_SHADERFORMAT_SPIRV;
/*
* Create initial swapchain array