# SDL: vulkan: enable opt-in device extensions

**URL:** <https://discourse.libsdl.org/t/sdl-vulkan-enable-opt-in-device-extensions/69364>\
**Category:** SDL Commits\
**Created:** [September 21, 2026, 5:00pm UTC](https://discourse.libsdl.org/t/sdl-vulkan-enable-opt-in-device-extensions/69364 "2026-09-21T17:00:08Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![SDLPushPostBot](https://discourse.libsdl.org/user_avatar/discourse.libsdl.org/sdlpushpostbot/32/4370_2.png) [@SDLPushPostBot](https://discourse.libsdl.org/u/SDLPushPostBot)\
**Post date:** [September 21, 2026, 5:00pm UTC](https://discourse.libsdl.org/t/sdl-vulkan-enable-opt-in-device-extensions/69364/1 "2026-09-21T17:00:08Z")

</div>

> <https://github.com/libsdl-org/SDL/commit/b49f81ff7fb204e65674234ddc173938b9341a27>
>
> Opt-in device extens are allowed to be passed in SDL\_GPUVulkanOptions. Previousl…y, their availability was only verified, but they were not enabled.

```diff
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;

```
