diff --git a/vulkan_utl.h b/vulkan_utl.h index dbebe3b..b4ed613 100644 --- a/vulkan_utl.h +++ b/vulkan_utl.h @@ -373,20 +373,35 @@ struct VulkanDevice }; const char *deviceExtensions[16]; uint32_t deviceExtensionsCount = 0; - deviceExtensions[deviceExtensionsCount++] = VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME; - //deviceExtensions[deviceExtensionsCount++] = VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME; - deviceExtensions[deviceExtensionsCount++] = VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME; - deviceExtensions[deviceExtensionsCount++] = VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME; - deviceExtensions[deviceExtensionsCount++] = VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME; - deviceExtensions[deviceExtensionsCount++] = VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME; - deviceExtensions[deviceExtensionsCount++] = VK_KHR_BIND_MEMORY_2_EXTENSION_NAME; - deviceExtensions[deviceExtensionsCount++] = VK_KHR_MAINTENANCE1_EXTENSION_NAME; - deviceExtensions[deviceExtensionsCount++] = VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME; - deviceExtensions[deviceExtensionsCount++] = VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME; - deviceExtensions[deviceExtensionsCount++] = VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME; - deviceExtensions[deviceExtensionsCount++] = VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME; - deviceExtensions[deviceExtensionsCount++] = VK_KHR_SWAPCHAIN_EXTENSION_NAME; - + uint32_t avCount = 0; + vkEnumerateDeviceExtensionProperties(physicalDevice, NULL, &avCount, NULL); + VkExtensionProperties props[avCount]; + vkEnumerateDeviceExtensionProperties(physicalDevice, NULL, &avCount, props); + auto addExtension = [&](const char *Name){ + int j; + for(j = 0; j < avCount; j++) + { + if(!strcmp(Name,props[j].extensionName)) + break; + } + if(j == avCount) + printf("Extension %s not availaible\n", Name); + else + deviceExtensions[deviceExtensionsCount++] = Name; + }; + addExtension(VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME); + //addExtension(VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME); + addExtension(VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME); + addExtension(VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME); + addExtension(VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME); + addExtension(VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME); + addExtension(VK_KHR_BIND_MEMORY_2_EXTENSION_NAME); + addExtension(VK_KHR_MAINTENANCE1_EXTENSION_NAME); + addExtension(VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME); + addExtension(VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME); + addExtension(VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME); + addExtension(VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME); + addExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME); VkPhysicalDeviceFeatures enabled_features = { .samplerAnisotropy = VK_TRUE };