我正在尝试创建一个 vulkan 实例。这是我的代码:

vk::ApplicationInfo appInfo("Test", 1, nullptr, 0, 0);
vk::InstanceCreateInfo info;
info.pApplicationInfo(&appInfo);
vk::Instance instance;
const auto result = vk::createInstance(&info, nullptr, &instance);
std::cout << vkResultToString(result) << std::endl;

但是,这会返回 VK_ERROR_INCOMPATIBLE_DRIVER。

如果我不提供自己的 ApplicationInfo 而是使用默认构造的代码,则它可以工作。

specification 它说



正如你所看到的,我将 apiVersion 设置为 0。据我所知,它不应该给我 VK_ERROR_INCOMPATIBLE_DRIVER 错误。

这是一个错误还是我忘记了什么或想错了?

编辑:

specification 的 html 版本中,关于忽略 apiVersion 的部分不存在。规范的pdf版本刚刚过时了吗?

编辑:

如果我将 apiVersion 设置为 1.0.3,它也可以工作:
std::bitset<32> apiVersion;
apiVersion.set(22);
apiVersion.set(1);
apiVersion.set(0);
vk::ApplicationInfo appInfo("Test", 1, nullptr, 0, apiVersion.to_ulong());

最佳答案

这听起来完全像是从最终规范中删除的开发选项。如果您考虑从一个主要版本到另一个主要版本的任何图形 API 发生了多少变化,那么默认允许此类行为似乎是不安全的。话虽如此,这完全取决于图形驱动程序制造商是否支持这一点,因为他们对是否接受这样的事情有最终决定权。

此外,如果您查看官方 API 规范: https://www.khronos.org/registry/vulkan/specs/1.0/apispec.html

这只是说明:“最后,apiVersion 是应用程序期望使用的 Vulkan API 版本。”

10-08 05:03