При создании VkInstance, VkResult равен VK_ERROR_INITIALIZATION_FAILED

Решил попробывать воспользоватся вулканом, но столкнулся с такой ошибкой. Вроде повторил все как в документации но когда я создаю VkInstance то его возвращаемое значение равно -3 (т.е. VK_ERROR_INITIALIZATION_FAILED). Функционал вулкана реализовываю отдельно от инициализации окна GLFW. Также в консоль выводится ошибка vkCreateInstance 'pInstance' not valid (VUID-vkCreateInstance-pInstance-parameter)

vulkanApp.h

#ifndef VULKANAPP_H
#define VULKANAPP_H

#include <vulkan/vulkan_core.h>

class VulkanApp{
public:
    void initVulkan();
    void cleanup();
private:
    VkInstance instance{};

    void createInstance();
};
#endif

vulkanApp.cpp

#include "vulkanApp.h"
#include "GLFW/glfw3.h"
#include <iostream>
#include <stdexcept>
#include <vector>
#include <vulkan/vulkan_core.h>

void VulkanApp::initVulkan(){
    createInstance();
}

void VulkanApp::cleanup(){
    vkDestroyInstance(instance, nullptr);
}

void VulkanApp::createInstance(){
    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;
    glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);

    std::vector<const char*> requiredExtensions;

    for (uint32_t i = 0; i < glfwExtensionCount; i++) {
        requiredExtensions.emplace_back(glfwExtensions[i]);
    }

    requiredExtensions.emplace_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);

    createInfo.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;

    createInfo.enabledExtensionCount = static_cast<uint32_t>(requiredExtensions.size());
    createInfo.ppEnabledExtensionNames = requiredExtensions.data();
    createInfo.enabledLayerCount = 0;
    
    VkResult res = vkCreateInstance(&createInfo, nullptr, &instance);
    if (res != VK_SUCCESS) {
        throw std::runtime_error("ERROR: VkInstance couldn't created. VkResult: " + res);
    }
}

app.h

#ifndef APP_H
#define APP_H
#include <GLFW/glfw3.h>
#include "vulkanApp.h"

class App{
public:
    void run();
    
private:
    void initWindow();
    void mainLoop();
    void cleanup();

    GLFWwindow* window;
    VulkanApp* vkApp;

    const uint32_t WIDTH = 800;
    const uint32_t HEIGHT = 600;
};

#endif

Ответы (1 шт):

Автор решения: Quantum

Не забывайте создавать экземпляр класса!

Было:

VulkanApp* vkApp;

Стало:

VulkanApp* vkApp = new VulkanApp();
→ Ссылка