繁体   English   中英

使用层时创建 Vulkan 实例时出错

[英]Error creating Vulkan instance when using layers

我正在学习使用 vulkan,当我不使用将参数作为nullptr传递的层时,实例创建时没有错误,如果没有,在vkCreateInstance会出现以下错误:

(vulkan-1.dll) 访问冲突读取位置0xFFFFFFFFFFFFFFFF

有我的代码:

bool IEVkRenderer::CreateInstance()
    {
        ...
        std::vector<const char*> extensions;
        extensions.push_back("VK_KHR_surface");

        if (enableValidationLayers)
            extensions.push_back("VK_EXT_debug_report");

        extensions.push_back("VK_KHR_win32_surface");

        VkInstanceCreateInfo createInfo;
        createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
        createInfo.pNext = nullptr;
        createInfo.pApplicationInfo = &appInfo;
        createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
        createInfo.ppEnabledExtensionNames = extensions.data();

        if (enableValidationLayers) {

            std::vector<const char*> layers;
            layers.push_back("VK_LAYER_LUNARG_standard_validation");

            if (!CheckValidationLayersSupport(layers)) {
                lError("VK Renderer", "Validation layer not supported");
                return false;
            }

            createInfo.enabledLayerCount = static_cast<uint32_t>(layers.size());
            createInfo.ppEnabledLayerNames = layers.data();

        }else {

            createInfo.enabledLayerCount = 0;
            createInfo.ppEnabledLayerNames = nullptr;

        }

        if (vkCreateInstance(&createInfo, nullptr, &m_Instance) != VK_SUCCESS)
            return false;

        return true;
    }

您正在使用 memory 过去delete

if (enableValidationLayers) {
    std::vector<const char*> layers;
    createInfo.ppEnabledLayerNames = layers.data();
}
vkCreateInstance(&createInfo, nullptr, &m_Instance)

此外,您的createInfo.flags是未初始化的值,这是无效的使用。 根据规范,它必须是0 在 C++ 中使用 Vulkan 的 C 绑定时的既定做法是像这样预初始化结构:

VkInstanceCreateInfo createInfo = {};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM