Я изучаю Vulkan с помощью этого учебника. Я создал окно с GLFW и инициализировал экземпляр Vulkan без ошибок. Но Vulkan не удается создать VKSurfaceKHR .
bool CreateRenderContext(RenderContext* contextOut)
{
glfwInit();
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
contextOut->window = glfwCreateWindow(contextOut->width, contextOut->height, "Vulkan", NULL, NULL);
if(!CreateVulkanInstance(contextOut->instance))
{
printf("failed creating vulkan instance\n");
}
if(!glfwVulkanSupported())
{
return false;
}
VkResult err = glfwCreateWindowSurface(contextOut->instance, contextOut->window,nullptr, &contextOut->surface);
if (err != VK_SUCCESS)
{
// Window surface creation failed
printf("failed to create surface");
return false;
}
return true;
}
CreateVulkanInstance
() выглядит так:
bool CreateVulkanInstance(VkInstance instanceOut)
{
VkApplicationInfo appInfo = {};
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
appInfo.pApplicationName = "Hello Triangle";
appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.pEngineName = "No Engine";
appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.apiVersion = VK_API_VERSION_1_0;
VkInstanceCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
createInfo.pApplicationInfo = &appInfo;
uint32_t glfwExtensionCount = 0;
const char** glfwExtensions = nullptr;
glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);
createInfo.enabledExtensionCount = glfwExtensionCount;
createInfo.ppEnabledExtensionNames = glfwExtensions;
createInfo.enabledLayerCount = 0;
if (vkCreateInstance(&createInfo, nullptr, &instanceOut) != VK_SUCCESS)
{
return false;
}
return true;
}
GLFW возвращает следующие необходимые расширения:
VK_KHR_surface
VK_KHR_xcb_surface
Но VkResult err = glfwCreateWindowSurface (contextOut-> instance, contextOut-> window, nullptr, contextOut-> surface);
Возвращает VK_ERROR_EXTENSION_NOT_PRESENT
Почему не удается создать поверхность?
Моя система: Ubuntu 18.04 64bit, NVIDIA RTX3000, драйвер графического процессора NVIDIA 430