Windows 尝试创建 vulkan 实例时出现关于 amdvlk64.dll 的异常
Windows exception about amdvlk64.dll when trying to create a vulkan instance
我尝试使用 vulkan,但无法正常工作。当我尝试 运行 使用 SDK (01-init_instance.cpp) 给出的第一个示例(使用 VS 2019 编译)时,我在创建 Vulkan 实例时遇到此异常:
Exception thrown at 0x00007FFFE7EDAD11 (amdvlk64.dll) in game.exe: 0xC0000005:
Access violation reading location 0xFFFFFFFFFFFFFFFF.
我试过将 app_info.apiVersion
设置为 VK_API_VERSION_1_0
和 VK_API_VERSION_1_1
。还尝试将 inst_info.pApplicationInfo
设置为 NULL
,但我的行为没有任何变化。
我使用的是 amd gpu AMD Radeon (TM) R9 390 Series
,驱动程序版本是 17.1.1
,还有一些关于 vulkan 的其他值,它们是 Vulkan™ Driver Version 1.5.0
和 Vulkan™ API Version 1.0.39
(全部来自amd 驱动接口)
这是示例:
#include <iostream>
#include <cstdlib>
#include <util_init.hpp>
#define APP_SHORT_NAME "vulkansamples_instance"
int main(int, char *[]) {
VkApplicationInfo app_info = {};
app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
app_info.pNext = NULL;
app_info.pApplicationName = APP_SHORT_NAME;
app_info.applicationVersion = 1;
app_info.pEngineName = APP_SHORT_NAME;
app_info.engineVersion = 1;
app_info.apiVersion = VK_API_VERSION_1_0;
VkInstanceCreateInfo inst_info = {};
inst_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
inst_info.pNext = NULL;
inst_info.flags = 0;
inst_info.pApplicationInfo = &app_info;
inst_info.enabledExtensionCount = 0;
inst_info.ppEnabledExtensionNames = NULL;
inst_info.enabledLayerCount = 0;
inst_info.ppEnabledLayerNames = NULL;
VkInstance inst;
VkResult res;
res = vkCreateInstance(&inst_info, NULL, &inst);
if (res == VK_ERROR_INCOMPATIBLE_DRIVER) {
std::cout << "cannot find a compatible Vulkan ICD\n";
exit(-1);
} else if (res) {
std::cout << "unknown error\n";
exit(-1);
}
vkDestroyInstance(inst, NULL);
return 0;
}
希望有人能提供帮助,因为互联网上显然没有人理解为什么会这样。
驱动程序版本 17.1.1 非常旧(IIRC 表示 2017 年 1 月)。在理想情况下它应该可以工作,但根据您的经验,可能存在一些兼容性问题。
当前的驱动程序在 AMD Support site。他们提供 "recommended" 或更新的 "optional" 驱动程序。 "optional" 从来没有遇到过任何问题,但它可能会唠叨更频繁地更新。
我尝试使用 vulkan,但无法正常工作。当我尝试 运行 使用 SDK (01-init_instance.cpp) 给出的第一个示例(使用 VS 2019 编译)时,我在创建 Vulkan 实例时遇到此异常:
Exception thrown at 0x00007FFFE7EDAD11 (amdvlk64.dll) in game.exe: 0xC0000005:
Access violation reading location 0xFFFFFFFFFFFFFFFF.
我试过将 app_info.apiVersion
设置为 VK_API_VERSION_1_0
和 VK_API_VERSION_1_1
。还尝试将 inst_info.pApplicationInfo
设置为 NULL
,但我的行为没有任何变化。
我使用的是 amd gpu AMD Radeon (TM) R9 390 Series
,驱动程序版本是 17.1.1
,还有一些关于 vulkan 的其他值,它们是 Vulkan™ Driver Version 1.5.0
和 Vulkan™ API Version 1.0.39
(全部来自amd 驱动接口)
这是示例:
#include <iostream>
#include <cstdlib>
#include <util_init.hpp>
#define APP_SHORT_NAME "vulkansamples_instance"
int main(int, char *[]) {
VkApplicationInfo app_info = {};
app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
app_info.pNext = NULL;
app_info.pApplicationName = APP_SHORT_NAME;
app_info.applicationVersion = 1;
app_info.pEngineName = APP_SHORT_NAME;
app_info.engineVersion = 1;
app_info.apiVersion = VK_API_VERSION_1_0;
VkInstanceCreateInfo inst_info = {};
inst_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
inst_info.pNext = NULL;
inst_info.flags = 0;
inst_info.pApplicationInfo = &app_info;
inst_info.enabledExtensionCount = 0;
inst_info.ppEnabledExtensionNames = NULL;
inst_info.enabledLayerCount = 0;
inst_info.ppEnabledLayerNames = NULL;
VkInstance inst;
VkResult res;
res = vkCreateInstance(&inst_info, NULL, &inst);
if (res == VK_ERROR_INCOMPATIBLE_DRIVER) {
std::cout << "cannot find a compatible Vulkan ICD\n";
exit(-1);
} else if (res) {
std::cout << "unknown error\n";
exit(-1);
}
vkDestroyInstance(inst, NULL);
return 0;
}
希望有人能提供帮助,因为互联网上显然没有人理解为什么会这样。
驱动程序版本 17.1.1 非常旧(IIRC 表示 2017 年 1 月)。在理想情况下它应该可以工作,但根据您的经验,可能存在一些兼容性问题。
当前的驱动程序在 AMD Support site。他们提供 "recommended" 或更新的 "optional" 驱动程序。 "optional" 从来没有遇到过任何问题,但它可能会唠叨更频繁地更新。