Kaynağa Gözat

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.
Erwin Terpstra 1 gün önce
ebeveyn
işleme
b49f81ff7f
1 değiştirilmiş dosya ile 12 ekleme ve 2 silme
  1. 12 2
      src/gpu/vulkan/SDL_gpu_vulkan.c

+ 12 - 2
src/gpu/vulkan/SDL_gpu_vulkan.c

@@ -12588,6 +12588,7 @@ static Uint8 VULKAN_INTERNAL_CreateLogicalDevice(
     VkPhysicalDeviceFeatures haveDeviceFeatures;
     VkPhysicalDeviceFeatures haveDeviceFeatures;
     VkPhysicalDevicePortabilitySubsetFeaturesKHR portabilityFeatures;
     VkPhysicalDevicePortabilitySubsetFeaturesKHR portabilityFeatures;
     const char **deviceExtensions;
     const char **deviceExtensions;
+    Uint32 extensionCount, i;
 
 
     VkDeviceQueueCreateInfo queueCreateInfo;
     VkDeviceQueueCreateInfo queueCreateInfo;
     float queuePriority = 1.0f;
     float queuePriority = 1.0f;
@@ -12648,12 +12649,21 @@ static Uint8 VULKAN_INTERNAL_CreateLogicalDevice(
     deviceCreateInfo.pQueueCreateInfos = &queueCreateInfo;
     deviceCreateInfo.pQueueCreateInfos = &queueCreateInfo;
     deviceCreateInfo.enabledLayerCount = 0;
     deviceCreateInfo.enabledLayerCount = 0;
     deviceCreateInfo.ppEnabledLayerNames = NULL;
     deviceCreateInfo.ppEnabledLayerNames = NULL;
-    deviceCreateInfo.enabledExtensionCount = GetDeviceExtensionCount(
+
+    // Create the list of device extensions to enable (internal extension + opt-in extensions)
+    extensionCount = GetDeviceExtensionCount(
         &renderer->supports);
         &renderer->supports);
+
     deviceExtensions = SDL_stack_alloc(
     deviceExtensions = SDL_stack_alloc(
         const char *,
         const char *,
-        deviceCreateInfo.enabledExtensionCount);
+        extensionCount + features->additionalDeviceExtensionCount);
+
     CreateDeviceExtensionArray(&renderer->supports, deviceExtensions);
     CreateDeviceExtensionArray(&renderer->supports, deviceExtensions);
+    for (i = 0; i < features->additionalDeviceExtensionCount; ++i) {
+        deviceExtensions[extensionCount++] = features->additionalDeviceExtensionNames[i];
+    }
+
+    deviceCreateInfo.enabledExtensionCount = extensionCount;
     deviceCreateInfo.ppEnabledExtensionNames = deviceExtensions;
     deviceCreateInfo.ppEnabledExtensionNames = deviceExtensions;
 
 
     VkPhysicalDeviceFeatures2 featureList;
     VkPhysicalDeviceFeatures2 featureList;