将apiVersion参数设置为0时,VK_ERROR_INCOMPATIBLE_DRIVER

时间:2016-02-17 10:18:49

标签: c++ driver vulkan

我正在尝试创建一个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,则实现必须忽略它,否则如果实现不支持请求的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());

3 个答案:

答案 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中的版本以及<=您希望成为的驱动程序版本能够继续运行。