将 apiVersion 参数设置为 0 时VK_ERROR_INCOMPATIBLE_DRIVER
VK_ERROR_INCOMPATIBLE_DRIVER when setting apiVersion parameter to 0
我正在尝试创建一个 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
错误。
这是一个错误还是我忘记了什么或想错了什么?
编辑:
在规范的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 版本。
您正在查看的html规范已经过时了:
修订版 0.9 临时 2015 年 11 月 11 日星期三 18:11:51 PST
它有关于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 版
至于结果,这可能是一个错误。您使用什么驱动程序/平台?
你问这个问题:
这是一个错误还是我忘记了什么或想错了什么?
由于规范是规范的,是的,这是一个错误。该规范说明了以下两个相关内容:
apiVersion 是应用程序期望针对其运行的 Vulkan API 版本,按照 API 版本号和语义部分。如果 apiVersion 为 0,则实现必须忽略它,否则如果 实现不支持请求的 API 版本,它必须返回VK_ERROR_INCOMPATIBLE_DRIVER。
apiVersion 必须为零,否则它必须是实现支持的版本,或者支持有效替代
现在,您可以继续执行您正在执行的操作,并请求一个既<=
您正在构建的 SDK 中的版本,又<=
您希望能够运行的驱动程序版本的版本。
- "error: no matching function for call to"构造函数错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用Vulkan hpp vk::enumerateInstanceVersion()会导致segfault
- C++错误:"error: int aaa::bbb is protected within this context"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- C++ "error: invalid use of void expression"
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 从不同目录执行时"symbol lookup error:",否则从构建目录执行时按预期工作
- 对象声明中的模板"error: expected expression"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 为什么我会"error: expected expression"?
- CMake Error at modules/videoio/cmake/detect_ffmpeg.cmake:16
- 如果两个静态库使用相同的另一个静态库,如何避免"LNK2005 Already Defined error"?