From 536507101d7d3344d087e4e50f46ed244c0cbc1a Mon Sep 17 00:00:00 2001
From: Ethan Lee <[EMAIL REDACTED]>
Date: Tue, 11 Nov 2025 20:58:14 -0500
Subject: [PATCH] gpu: De-duplicate property enumeration for Vulkan features
---
src/gpu/vulkan/SDL_gpu_vulkan.c | 55 +++++++++++++--------------------
1 file changed, 21 insertions(+), 34 deletions(-)
diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c
index 20f3972a2eaaf..0b7e0abae3300 100644
--- a/src/gpu/vulkan/SDL_gpu_vulkan.c
+++ b/src/gpu/vulkan/SDL_gpu_vulkan.c
@@ -12332,10 +12332,27 @@ static void VULKAN_INTERNAL_LoadEntryPoints(void)
}
static bool VULKAN_INTERNAL_PrepareVulkan(
- VulkanRenderer *renderer)
+ VulkanRenderer *renderer,
+ SDL_PropertiesID props)
{
VULKAN_INTERNAL_LoadEntryPoints();
+ // Opt out device features (higher compatibility in exchange for reduced functionality)
+ renderer->desiredVulkan10DeviceFeatures.samplerAnisotropy = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
+ renderer->desiredVulkan10DeviceFeatures.depthClamp = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
+ renderer->desiredVulkan10DeviceFeatures.shaderClipDistance = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
+ renderer->desiredVulkan10DeviceFeatures.drawIndirectFirstInstance = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
+
+ // These features have near universal support so they are always enabled
+ renderer->desiredVulkan10DeviceFeatures.independentBlend = VK_TRUE;
+ renderer->desiredVulkan10DeviceFeatures.sampleRateShading = VK_TRUE;
+ renderer->desiredVulkan10DeviceFeatures.imageCubeArray = VK_TRUE;
+
+ // Handle opt-in device features
+ VULKAN_INTERNAL_AddOptInVulkanOptions(props, renderer);
+
+ renderer->requireHardwareAcceleration = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN, false);
+
if (!VULKAN_INTERNAL_CreateInstance(renderer)) {
SDL_LogWarn(SDL_LOG_CATEGORY_GPU, "Vulkan: Could not create Vulkan instance");
return false;
@@ -12375,23 +12392,9 @@ static bool VULKAN_PrepareDriver(SDL_VideoDevice *_this, SDL_PropertiesID props)
// This needs to be set early for log filtering
renderer->debugMode = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN, false);
- // Opt out device features (higher compatibility in exchange for reduced functionality)
- renderer->desiredVulkan10DeviceFeatures.samplerAnisotropy = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
- renderer->desiredVulkan10DeviceFeatures.depthClamp = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
- renderer->desiredVulkan10DeviceFeatures.shaderClipDistance = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
- renderer->desiredVulkan10DeviceFeatures.drawIndirectFirstInstance = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
-
- // These features have near universal support so they are always enabled
- renderer->desiredVulkan10DeviceFeatures.independentBlend = VK_TRUE;
- renderer->desiredVulkan10DeviceFeatures.sampleRateShading = VK_TRUE;
- renderer->desiredVulkan10DeviceFeatures.imageCubeArray = VK_TRUE;
+ renderer->preferLowPower = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN, false);
- // Handle opt-in device features
- VULKAN_INTERNAL_AddOptInVulkanOptions(props, renderer);
-
- renderer->requireHardwareAcceleration = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN, false);
-
- result = VULKAN_INTERNAL_PrepareVulkan(renderer);
+ result = VULKAN_INTERNAL_PrepareVulkan(renderer, props);
if (result) {
renderer->vkDestroyInstance(renderer->instance, NULL);
}
@@ -12430,23 +12433,7 @@ static SDL_GPUDevice *VULKAN_CreateDevice(bool debugMode, bool preferLowPower, S
renderer->preferLowPower = preferLowPower;
renderer->allowedFramesInFlight = 2;
- // Opt out device features (higher compatibility in exchange for reduced functionality)
- renderer->desiredVulkan10DeviceFeatures.samplerAnisotropy = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
- renderer->desiredVulkan10DeviceFeatures.depthClamp = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
- renderer->desiredVulkan10DeviceFeatures.shaderClipDistance = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
- renderer->desiredVulkan10DeviceFeatures.drawIndirectFirstInstance = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN, true) ? VK_TRUE : VK_FALSE;
-
- // These features have near universal support so they are always enabled
- renderer->desiredVulkan10DeviceFeatures.independentBlend = VK_TRUE;
- renderer->desiredVulkan10DeviceFeatures.sampleRateShading = VK_TRUE;
- renderer->desiredVulkan10DeviceFeatures.imageCubeArray = VK_TRUE;
-
- // Handle opt-in device features
- VULKAN_INTERNAL_AddOptInVulkanOptions(props, renderer);
-
- renderer->requireHardwareAcceleration = SDL_GetBooleanProperty(props, SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN, false);
-
- if (!VULKAN_INTERNAL_PrepareVulkan(renderer)) {
+ if (!VULKAN_INTERNAL_PrepareVulkan(renderer, props)) {
SET_STRING_ERROR("Failed to initialize Vulkan!");
SDL_free(renderer);
SDL_Vulkan_UnloadLibrary();