Enabled device extensions can now be set, display error message if device cannot be created
This commit is contained in:
parent
b30fd58557
commit
1c595c61e8
3 changed files with 21 additions and 13 deletions
|
|
@ -20,33 +20,33 @@ VkResult VulkanExampleBase::createInstance(bool enableValidation)
|
|||
appInfo.pEngineName = name.c_str();
|
||||
appInfo.apiVersion = VK_API_VERSION_1_0;
|
||||
|
||||
std::vector<const char*> enabledExtensions = { VK_KHR_SURFACE_EXTENSION_NAME };
|
||||
std::vector<const char*> instanceExtensions = { VK_KHR_SURFACE_EXTENSION_NAME };
|
||||
|
||||
// Enable surface extensions depending on os
|
||||
#if defined(_WIN32)
|
||||
enabledExtensions.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
|
||||
instanceExtensions.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
|
||||
#elif defined(__ANDROID__)
|
||||
enabledExtensions.push_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME);
|
||||
instanceExtensions.push_back(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME);
|
||||
#elif defined(_DIRECT2DISPLAY)
|
||||
enabledExtensions.push_back(VK_KHR_DISPLAY_EXTENSION_NAME);
|
||||
instanceExtensions.push_back(VK_KHR_DISPLAY_EXTENSION_NAME);
|
||||
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||
enabledExtensions.push_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME);
|
||||
instanceExtensions.push_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME);
|
||||
#elif defined(__linux__)
|
||||
enabledExtensions.push_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME);
|
||||
instanceExtensions.push_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME);
|
||||
#endif
|
||||
|
||||
VkInstanceCreateInfo instanceCreateInfo = {};
|
||||
instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
|
||||
instanceCreateInfo.pNext = NULL;
|
||||
instanceCreateInfo.pApplicationInfo = &appInfo;
|
||||
if (enabledExtensions.size() > 0)
|
||||
if (instanceExtensions.size() > 0)
|
||||
{
|
||||
if (settings.validation)
|
||||
{
|
||||
enabledExtensions.push_back(VK_EXT_DEBUG_REPORT_EXTENSION_NAME);
|
||||
instanceExtensions.push_back(VK_EXT_DEBUG_REPORT_EXTENSION_NAME);
|
||||
}
|
||||
instanceCreateInfo.enabledExtensionCount = (uint32_t)enabledExtensions.size();
|
||||
instanceCreateInfo.ppEnabledExtensionNames = enabledExtensions.data();
|
||||
instanceCreateInfo.enabledExtensionCount = (uint32_t)instanceExtensions.size();
|
||||
instanceCreateInfo.ppEnabledExtensionNames = instanceExtensions.data();
|
||||
}
|
||||
if (settings.validation)
|
||||
{
|
||||
|
|
@ -851,7 +851,10 @@ void VulkanExampleBase::initVulkan()
|
|||
// This is handled by a separate class that gets a logical device representation
|
||||
// and encapsulates functions related to a device
|
||||
vulkanDevice = new vk::VulkanDevice(physicalDevice);
|
||||
VK_CHECK_RESULT(vulkanDevice->createLogicalDevice(enabledFeatures));
|
||||
VkResult res = vulkanDevice->createLogicalDevice(enabledFeatures, enabledExtensions);
|
||||
if (res != VK_SUCCESS) {
|
||||
vkTools::exitFatal("Could not create Vulkan device: \n" + vkTools::errorString(res), "Fatal error");
|
||||
}
|
||||
device = vulkanDevice->logicalDevice;
|
||||
|
||||
// todo: remove
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue