情况
我用VulkanAPI编写了一个简单的c++代码,但是当我尝试获取物理设备时却遇到了错误。
硬件/软件
操作系统:基本操作系统5.1.3 Hera x86_64
笔记本型号: 80Q5联想G70-35
CPU:带有AMD Radeon R5图形(4)的AMD A8-6410 APU @ 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 )

最佳答案

通过互联网,您的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

关于c++ - 尝试获取物理设备时出现Vulkan错误VK_ERROR_INITIALIZATION_FAILED,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61303670/

10-10 01:14