diff --git a/base/VulkanDevice.cpp b/base/VulkanDevice.cpp index 40971c01..77e20b65 100644 --- a/base/VulkanDevice.cpp +++ b/base/VulkanDevice.cpp @@ -9,6 +9,7 @@ */ #include +#include namespace vks { @@ -272,6 +273,12 @@ namespace vks if (deviceExtensions.size() > 0) { + for (const char* ext : deviceExtensions) + { + if (!extensionSupported(ext)) + std::cerr << ext << " device extension support seems to be missing" << std::endl; + } + deviceCreateInfo.enabledExtensionCount = (uint32_t)deviceExtensions.size(); deviceCreateInfo.ppEnabledExtensionNames = deviceExtensions.data(); } diff --git a/base/vulkanexamplebase.cpp b/base/vulkanexamplebase.cpp index dd74a3c0..f4d5e1bb 100644 --- a/base/vulkanexamplebase.cpp +++ b/base/vulkanexamplebase.cpp @@ -7,6 +7,7 @@ */ #include "vulkanexamplebase.h" +#include std::vector VulkanExampleBase::args; @@ -44,8 +45,24 @@ VkResult VulkanExampleBase::createInstance(bool enableValidation) instanceExtensions.push_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME); #endif + std::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); + } + 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; + instanceExtensions.push_back(enabledExtension); } }