我正在尝试创建一个 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 版本。”