您好!我正在两个 64 位 Windows 系统之间开发一个 Vulkan 项目,在两个系统上使用相同的 MinGW/GCC 构建系统。我正在用C语言编写程序来挑战自己,到目前为止进展顺利。当我在系统 1 上运行我的程序时,验证层按预期工作。 请注意:该程序在禁用验证层的两个系统上都运行良好。 在系统 2 上,这是我运行程序时的控制台输出:
INFO: 3 Vulkan extension(s) required by GLFW:
VK_KHR_surface
VK_KHR_win32_surface
VK_EXT_debug_utils
All GLFW-required Vulkan extensions are supported!
INFO: 1 Vulkan validation layer(s) required:
VK_LAYER_KHRONOS_validation
Required Vulkan validation layers are supported!
ERROR: loader_get_json: Failed to open JSON file E:\Epic Games\Launcher\Portal\Extras\Overlay\EOSOverlayVkLayer-Win32.json
ERROR: loader_get_json: Failed to open JSON file E:\Epic Games\Launcher\Portal\Extras\Overlay\EOSOverlayVkLayer-Win64.json
WARNING: Layer VK_LAYER_OBS_HOOK uses API version 1.2 which is older than the application specified API version of 1.3. May cause issues.
WARNING: Layer VK_LAYER_OBS_HOOK uses API version 1.2 which is older than the application specified API version of 1.3. May cause issues.
ERROR: Requested layer "VK_LAYER_KHRONOS_validation" was wrong bit-type!
ERROR: Vulkan instance creation failed with result code -6!
ERROR: Vulkan debug messenger creation failed with result code -7!
Assertion failed: instance != VK_NULL_HANDLE, file C:\Users\Kade\Documents\westy\src\lib\glfw-3.3.2\src\vulkan.c, line 305
我得出的结论是前两个
loader_get_json
错误不是问题的根源(参见this GitHub ticket)。
我没有使用
VK_LAYER_OBS_HOOK
层,所以这个问题(可能)在这一点上与我无关。
最后 3 个错误困扰着我。 “
Requested layer "VK_LAYER_KHRONOS_validation" was wrong bit-type!
”是否表示我在这个特定的验证层和我的构建系统之间存在 32/64 位不匹配,或者其他什么?如果这是错误,我不太确定如何解决该问题。实例和调试信使错误代码分别转换为 VK_ERROR_LAYER_NOT_PRESENT
和 VK_ERROR_EXTENSION_NOT_PRESENT
。有问题的层是我遇到问题的验证层,有问题的扩展是VK_EXT_debug_utils
,这取决于验证层的工作。
我的 MinGW 版本是 32 位版本。我安装了MinGW-64,在做工程的时候在GCC的选项里指定了
-m64
。这也揭示了一些我在系统 1 上没有得到的验证性能警告。我还发现了一些对 free()
的错误调用,这些调用在我的 32 位构建中没有引起任何问题。奇怪,但我很高兴我一切顺利。