diff --git a/base/vulkanexamplebase.cpp b/base/vulkanexamplebase.cpp index f4d5e1bb..a6069aac 100644 --- a/base/vulkanexamplebase.cpp +++ b/base/vulkanexamplebase.cpp @@ -45,24 +45,31 @@ VkResult VulkanExampleBase::createInstance(bool enableValidation) instanceExtensions.push_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME); #endif - std::uint32_t extCount = 0; + // Get extensions supported by the instance and store for later use + uint32_t extCount = 0; vkEnumerateInstanceExtensionProperties(nullptr, &extCount, nullptr); - - std::unordered_set supportedExtensions; if (extCount > 0) { - std::vector instanceExtensions(extCount); - vkEnumerateInstanceExtensionProperties(nullptr, &extCount, instanceExtensions.data()); - - for (const auto &ext : instanceExtensions) - supportedExtensions.emplace(ext.extensionName); + std::vector extensions(extCount); + if (vkEnumerateInstanceExtensionProperties(nullptr, &extCount, &extensions.front()) == VK_SUCCESS) + { + for (auto ext : extensions) + { + supportedInstanceExtensions.push_back(ext.extensionName); + } + } } - if (enabledInstanceExtensions.size() > 0) { - for (auto enabledExtension : enabledInstanceExtensions) { - if (supportedExtensions.find(enabledExtension) == supportedExtensions.end()) - std::cerr << enabledExtension << " instance extension support seems to be missing" << std::endl; - + // Enabled requested instance extensions + if (enabledInstanceExtensions.size() > 0) + { + for (auto enabledExtension : enabledInstanceExtensions) + { + // Output message if requested extension is not available + if (std::find(supportedInstanceExtensions.begin(), supportedInstanceExtensions.end(), enabledExtension) == supportedInstanceExtensions.end()) + { + std::cerr << "Enabled instance extension \"" << enabledExtension << "\" is not present at instance level\n"; + } instanceExtensions.push_back(enabledExtension); } } diff --git a/base/vulkanexamplebase.h b/base/vulkanexamplebase.h index c402f6b7..f115e394 100644 --- a/base/vulkanexamplebase.h +++ b/base/vulkanexamplebase.h @@ -99,6 +99,7 @@ protected: std::chrono::time_point lastTimestamp; // Vulkan instance, stores all per-application states VkInstance instance; + std::vector supportedInstanceExtensions; // Physical device (GPU) that Vulkan will use VkPhysicalDevice physicalDevice; // Stores physical device properties (for e.g. checking device limits)