【问题标题】:Vulkan error VK_ERROR_INITIALIZATION_FAILED when trying to get physical devices尝试获取物理设备时出现 Vulkan 错误 VK_ERROR_INITIALIZATION_FAILED
【发布时间】:2020-05-03 20:24:59
【问题描述】:

情况

我使用 VulkanAPI 编写了一个简单的 c++ 代码,但是当我尝试获取我的物理设备时遇到了错误。

硬件/软件

操作系统:基本操作系统 5.1.3 Hera x86_64

笔记本型号:80Q5 Lenovo G70-35

CPU:AMD A8-6410 APU with AMD Radeon R5 Graphics (4) @ 2.000

GPU:AMD Radeon R4/R5 显卡

你可以找到支持的设备列表here(我想)

代码

#include <iostream>
#include "vulkan/vulkan.h"

VkInstance instance;

void assert(VkResult result) {
   if (result != VK_SUCCESS)
        std::cout << "error: " << result << std::endl;
}

int main() {
    VkApplicationInfo appInfo;
    appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
    appInfo.pNext = nullptr;
    appInfo.pApplicationName = "VulkanAPI";
    appInfo.applicationVersion = VK_MAKE_VERSION(0, 0, 0);
    appInfo.pEngineName = "VulkanAPI Engine";
    appInfo.engineVersion = VK_MAKE_VERSION(0, 0, 0);
    appInfo.apiVersion = VK_API_VERSION_1_2;

    VkInstanceCreateInfo instanceInfo;
    instanceInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
    instanceInfo.pNext = nullptr;
    instanceInfo.flags = 0;
    instanceInfo.pApplicationInfo = &appInfo;
    instanceInfo.enabledLayerCount = 0;
    instanceInfo.ppEnabledLayerNames = nullptr;
    instanceInfo.enabledExtensionCount = 0;
    instanceInfo.ppEnabledExtensionNames = nullptr;

    VkResult result = vkCreateInstance(&instanceInfo, nullptr, &instance);
    assert(result); // works fine

    uint32_t physicalDevicesCount = 0;
    result = vkEnumeratePhysicalDevices(instance, &physicalDevicesCount, nullptr);
    assert(result); // prints -3, which is equivalent to VK_ERROR_INITIALIZATION_FAILED

    std::cout << physicalDevicesCount << std::endl;

    return 0;
}

问题

每当我编译并运行此代码时,它都会抛出/打印错误:

-3(即VK_ERROR_INITIALIZATION_FAILED

【问题讨论】:

  • 可以尝试使用VK_API_VERSION_1_0等较低的API,尝试重新安装显卡驱动。
  • 最好不要交叉发布。将问题联系在一起:community.khronos.org/t/…
  • @krOoze 如果您愿意,您可以发布您的答案,以便我接受。

标签: c++ vulkan


【解决方案1】:

根据互联网,您的 GPU AMD Radeon R5 M330 是 Sea Islands 一代。

radv vulkan 驱动程序需要新的amdgpu 内核微型端口驱动程序。但默认情况下,Sea Islands 和 Southern Islands GPU 仍运行在旧版 radeon 内核驱动程序上。对它们的amdgpu 驱动程序支持是“实验性的”。

要启用支持,您必须添加内核参数,使radeon 驱动程序拒绝 GPU,amdgpu 接受它。

对于南部岛屿,radeon.si_support=0 amdgpu.si_support=1.
对于海岛,它是radeon.cik_support=0 amdgpu.cik_support=1

您可以找到如何添加内核参数,例如在https://wiki.ubuntu.com/Kernel/KernelBootParameters

【讨论】:

    猜你喜欢
    • 2017-09-16
    • 1970-01-01
    • 2020-09-28
    • 2016-11-23
    • 2020-08-10
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多