From b49f81ff7fb204e65674234ddc173938b9341a27 Mon Sep 17 00:00:00 2001
From: Erwin Terpstra <[EMAIL REDACTED]>
Date: Mon, 21 Sep 2026 10:48:09 +0200
Subject: [PATCH] vulkan: enable opt-in device extensions
Opt-in device extens are allowed to be passed in SDL_GPUVulkanOptions. Previously, their availability was only verified, but they were not enabled.
---
src/gpu/vulkan/SDL_gpu_vulkan.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c
index bb463cb05f0ca..9097aae69b57c 100644
--- a/src/gpu/vulkan/SDL_gpu_vulkan.c
+++ b/src/gpu/vulkan/SDL_gpu_vulkan.c
@@ -12588,6 +12588,7 @@ static Uint8 VULKAN_INTERNAL_CreateLogicalDevice(
VkPhysicalDeviceFeatures haveDeviceFeatures;
VkPhysicalDevicePortabilitySubsetFeaturesKHR portabilityFeatures;
const char **deviceExtensions;
+ Uint32 extensionCount, i;
VkDeviceQueueCreateInfo queueCreateInfo;
float queuePriority = 1.0f;
@@ -12648,12 +12649,21 @@ static Uint8 VULKAN_INTERNAL_CreateLogicalDevice(
deviceCreateInfo.pQueueCreateInfos = &queueCreateInfo;
deviceCreateInfo.enabledLayerCount = 0;
deviceCreateInfo.ppEnabledLayerNames = NULL;
- deviceCreateInfo.enabledExtensionCount = GetDeviceExtensionCount(
+
+ // Create the list of device extensions to enable (internal extension + opt-in extensions)
+ extensionCount = GetDeviceExtensionCount(
&renderer->supports);
+
deviceExtensions = SDL_stack_alloc(
const char *,
- deviceCreateInfo.enabledExtensionCount);
+ extensionCount + features->additionalDeviceExtensionCount);
+
CreateDeviceExtensionArray(&renderer->supports, deviceExtensions);
+ for (i = 0; i < features->additionalDeviceExtensionCount; ++i) {
+ deviceExtensions[extensionCount++] = features->additionalDeviceExtensionNames[i];
+ }
+
+ deviceCreateInfo.enabledExtensionCount = extensionCount;
deviceCreateInfo.ppEnabledExtensionNames = deviceExtensions;
VkPhysicalDeviceFeatures2 featureList;