Vulkan错误VK\u错误\u初始化\u尝试获取物理设备时失败 形势 我用VulkanAPI编写了一个简单的C++代码,但是当我试图获取物理设备时,我会出错。 硬件/软件

Vulkan错误VK\u错误\u初始化\u尝试获取物理设备时失败 形势 我用VulkanAPI编写了一个简单的C++代码,但是当我试图获取物理设备时,我会出错。 硬件/软件,c++,vulkan,C++,Vulkan,操作系统:基本操作系统5.1.3赫拉x86_64 笔记本型号:80Q5联想G70-35 CPU:AMD A8-6410 APU和AMD Radeon R5图形(4)@2.000 GPU:AMD Radeon R4/R5图形 您可以找到受支持设备的列表(我想) 代码 #包括 #包括“vulkan/vulkan.h” VkInstance实例; 无效断言(VkResult结果){ 如果(结果!=VK_成功) 标准::cout根据互联网,您的GPU AMD Radeon R5 M330是海岛一代 ra

操作系统:基本操作系统5.1.3赫拉x86_64

笔记本型号:80Q5联想G70-35

CPU:AMD A8-6410 APU和AMD Radeon R5图形(4)@2.000

GPU:AMD Radeon R4/R5图形

您可以找到受支持设备的列表(我想)

代码
#包括
#包括“vulkan/vulkan.h”
VkInstance实例;
无效断言(VkResult结果){
如果(结果!=VK_成功)

标准::cout根据互联网,您的GPU AMD Radeon R5 M330是海岛一代

radv
vulkan驱动程序需要新的
amdgpu
内核微型端口驱动程序。但默认情况下,海岛和南部岛屿GPU仍在传统
radeon
内核驱动程序上运行。对它们的
amdgpu
驱动程序支持是“实验性的”

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

对于南部岛屿,
radeon.si_support=0 amdgpu.si_support=1

对于海岛,它是
radeon.cik_support=0 amdgpu.cik_support=1


您可以找到如何添加内核参数,例如,在每个internet上,您的GPU AMD Radeon R5 M330是海岛一代

radv
vulkan驱动程序需要新的
amdgpu
内核微型端口驱动程序。但默认情况下,海岛和南部岛屿GPU仍在传统
radeon
内核驱动程序上运行。对它们的
amdgpu
驱动程序支持是“实验性的”

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

对于南部岛屿,
radeon.si_support=0 amdgpu.si_support=1

对于海岛,它是
radeon.cik_support=0 amdgpu.cik_support=1


您可以找到如何添加内核参数,例如。

可以尝试使用VK_API_1_0等较低API,尝试重新安装图形卡驱动程序。最好不要交叉发布。将问题链接在一起:@krOoze如果您愿意,您可以发布您的答案,以便我可以接受。可以尝试使用VK_API_1_0等较低API,尝试重新安装您r图形卡驱动程序。最好不要交叉张贴。将问题链接在一起:@krOoze如果你愿意,你可以张贴你的答案,这样我就可以接受。
#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;
}