diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c index 7bd4dc4404..069c2e585f 100644 --- a/src/gpu/vulkan/SDL_gpu_vulkan.c +++ b/src/gpu/vulkan/SDL_gpu_vulkan.c @@ -1116,6 +1116,7 @@ struct VulkanRenderer VulkanExtensions supports; bool supportsDebugUtils; bool supportsColorspace; + bool supportsPhysicalDeviceProperties2; bool supportsFillModeNonSolid; bool supportsMultiDrawIndirect; @@ -11036,7 +11037,8 @@ static Uint8 VULKAN_INTERNAL_CheckInstanceExtensions( const char **requiredExtensions, Uint32 requiredExtensionsLength, bool *supportsDebugUtils, - bool *supportsColorspace) + bool *supportsColorspace, + bool *supportsPhysicalDeviceProperties2) { Uint32 extensionCount, i; VkExtensionProperties *availableExtensions; @@ -11075,6 +11077,12 @@ static Uint8 VULKAN_INTERNAL_CheckInstanceExtensions( availableExtensions, extensionCount); + // Only needed for KHR_driver_properties! + *supportsPhysicalDeviceProperties2 = SupportsInstanceExtension( + VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, + availableExtensions, + extensionCount); + SDL_free(availableExtensions); return allExtensionsSupported; } @@ -11185,10 +11193,6 @@ static Uint8 VULKAN_INTERNAL_CreateInstance(VulkanRenderer *renderer) instanceExtensionCount + 4); SDL_memcpy((void *)instanceExtensionNames, originalInstanceExtensionNames, instanceExtensionCount * sizeof(const char *)); - // Core since 1.1 - instanceExtensionNames[instanceExtensionCount++] = - VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME; - #ifdef SDL_PLATFORM_APPLE instanceExtensionNames[instanceExtensionCount++] = VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME; @@ -11199,7 +11203,8 @@ static Uint8 VULKAN_INTERNAL_CreateInstance(VulkanRenderer *renderer) instanceExtensionNames, instanceExtensionCount, &renderer->supportsDebugUtils, - &renderer->supportsColorspace)) { + &renderer->supportsColorspace, + &renderer->supportsPhysicalDeviceProperties2)) { SDL_stack_free((char *)instanceExtensionNames); SET_STRING_ERROR_AND_RETURN("Required Vulkan instance extensions not supported", false); } @@ -11221,6 +11226,12 @@ static Uint8 VULKAN_INTERNAL_CreateInstance(VulkanRenderer *renderer) VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME; } + if (renderer->supportsPhysicalDeviceProperties2) { + // Append KHR_physical_device_properties2 extension + instanceExtensionNames[instanceExtensionCount++] = + VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME; + } + createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; createInfo.pNext = NULL; createInfo.flags = createFlags;