我正在尝试创建一个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
而是使用默认构造的,那么它就可以了。
如果
apiVersion
为0,则实现必须忽略它,否则如果实现不支持请求的apiVersion
,则必须返回VK_ERROR_INCOMPATIBLE_DRIVER
如您所见,我将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());
答案 0 :(得分:3)
这听起来完全像是从最终规范中删除的开发选项。如果您考虑任何图形API从一个主要版本更改为另一个主要版本的程度,那么将此类行为设置为默认值似乎是不安全的。话虽如此,完全取决于图形驱动程序制造商支持这一点,因为他们是最终决定是否接受这样的事情。
此外,如果您查看官方API规范:https://www.khronos.org/registry/vulkan/specs/1.0/apispec.html。
这仅表明:&#34;最后,apiVersion是应用程序期望使用的Vulkan API的版本。&#34;
答案 1 :(得分:2)
我相信你看的html规范已经过时了:
修订版0.9暂定2011年11月11日星期三18:11:51太平洋标准时间
这里有关于apiVersion
https://www.khronos.org/registry/vulkan/specs/1.0/pdf/vkspec.pdf的引用,https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html这些是版本1.0
至于结果,它可能是一个错误。你使用什么驱动程序/平台?
答案 2 :(得分:1)
你问这个问题:
这是一个错误,还是我忘了什么或者想错了?
由于规范是规范的,是的,它是一个错误。 The specification说了这两个相关的事情:
apiVersion是应用程序期望运行的Vulkan API的版本,按照 API版本号和语义部分。如果apiVersion为0,则实现必须忽略它,否则如果是 实现不支持请求的apiVersion它必须返回VK_ERROR_INCOMPATIBLE_DRIVER。
apiVersion必须为零,否则它必须是实现支持的版本,或支持有效替代
现在,您可以继续执行您正在执行的操作,并请求<=
版本与您构建的SDK中的版本以及<=
您希望成为的驱动程序版本能够继续运行。