微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vulkan实例创建失败

如何解决Vulkan实例创建失败

我有一个vulkan程序,该程序在笔记本电脑上运行,但在台式机上失败。错误是:

HeatMethod: ../libraries/vulkansdk-linux/1.2.154.0/source/Vulkan-Headers/include/vulkan/vulkan.hpp:13143: typename vk::ResultValueType<vk::UniqueHandle<Type,dispatch> >::type vk::createResultValue(vk::Result,T&,const char*,const typename vk::UniqueHandleTraits<Type,dispatch>::deleter&) [with T = vk::Instance; D = vk::dispatchLoaderStatic; typename vk::ResultValueType<vk::UniqueHandle<Type,dispatch> >::type = vk::ResultValue<vk::UniqueHandle<vk::Instance,vk::dispatchLoaderStatic> >; typename vk::UniqueHandleTraits<Type,dispatch>::deleter = vk::ObjectDestroy<vk::noparent,vk::dispatchLoaderStatic>]: Assertion `result == Result::eSuccess' Failed.

我使用注释来跟踪问题,发现它是在实例创建时发生的:

// Global scope
const std::vector<const char*> VALIDATION_LAYERS = {
    "VK_LAYER_KHRONOS_validation",};

   // Setup general information about the current application
    vk::ApplicationInfo program_info(
        "Vulkan Engine",VK_MAKE_VERSION(1,0),"No Engine",VK_API_VERSION_1_2);

    if(!CheckAvailableLayers())
        RecordLogError("Validation layers requested,but not available!");

    vector<const char*> required_extensions;
    if(!RequestExtensions(required_extensions))
        RecordLogError("Missing a required extension");
    // Create Vulkan instance to communicate with the loader
    vk::InstanceCreateInfo createInfo(
        {},&program_info,static_cast<uint32_t>(VALIDATION_LAYERS.size()),VALIDATION_LAYERS.data(),static_cast<uint32_t>(required_extensions.size()),required_extensions.data());
    auto [result,instance] = vk::createInstanceUnique(createInfo);

错误本身是hpp标头中的失败提示,因此有点神秘。我不确定是什么问题。

解决方法

问题是试图在构建脚本上设置验证层:

os.environ['VK_INSTANCE_LAYERS'] = 'VK_LAYER_LUNARG_standard_validation'

删除该行即可解决问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。