Store instance extensions, reworked support check
This commit is contained in:
parent
3298455373
commit
de61539799
2 changed files with 21 additions and 13 deletions
|
|
@ -45,24 +45,31 @@ VkResult VulkanExampleBase::createInstance(bool enableValidation)
|
||||||
instanceExtensions.push_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME);
|
instanceExtensions.push_back(VK_MVK_MACOS_SURFACE_EXTENSION_NAME);
|
||||||
#endif
|
#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);
|
vkEnumerateInstanceExtensionProperties(nullptr, &extCount, nullptr);
|
||||||
|
|
||||||
std::unordered_set<std::string> supportedExtensions;
|
|
||||||
if (extCount > 0)
|
if (extCount > 0)
|
||||||
{
|
{
|
||||||
std::vector<VkExtensionProperties> instanceExtensions(extCount);
|
std::vector<VkExtensionProperties> extensions(extCount);
|
||||||
vkEnumerateInstanceExtensionProperties(nullptr, &extCount, instanceExtensions.data());
|
if (vkEnumerateInstanceExtensionProperties(nullptr, &extCount, &extensions.front()) == VK_SUCCESS)
|
||||||
|
{
|
||||||
for (const auto &ext : instanceExtensions)
|
for (auto ext : extensions)
|
||||||
supportedExtensions.emplace(ext.extensionName);
|
{
|
||||||
|
supportedInstanceExtensions.push_back(ext.extensionName);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enabledInstanceExtensions.size() > 0) {
|
// Enabled requested instance extensions
|
||||||
for (auto enabledExtension : enabledInstanceExtensions) {
|
if (enabledInstanceExtensions.size() > 0)
|
||||||
if (supportedExtensions.find(enabledExtension) == supportedExtensions.end())
|
{
|
||||||
std::cerr << enabledExtension << " instance extension support seems to be missing" << std::endl;
|
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);
|
instanceExtensions.push_back(enabledExtension);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ protected:
|
||||||
std::chrono::time_point<std::chrono::high_resolution_clock> lastTimestamp;
|
std::chrono::time_point<std::chrono::high_resolution_clock> lastTimestamp;
|
||||||
// Vulkan instance, stores all per-application states
|
// Vulkan instance, stores all per-application states
|
||||||
VkInstance instance;
|
VkInstance instance;
|
||||||
|
std::vector<const char*> supportedInstanceExtensions;
|
||||||
// Physical device (GPU) that Vulkan will use
|
// Physical device (GPU) that Vulkan will use
|
||||||
VkPhysicalDevice physicalDevice;
|
VkPhysicalDevice physicalDevice;
|
||||||
// Stores physical device properties (for e.g. checking device limits)
|
// Stores physical device properties (for e.g. checking device limits)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue