我正在执行Ogldev的Vulkan教程的过程中,并且我特别是vkgetPhysicalDevicesUrfaceformateFormatskhr函数遇到了这个问题。文档说,如果PsurfaceFormats参数为null,它将确定在PsurfaceFormatCount指针中实际可用的表面格式。
这是我的问题出现的地方..它根本不会触及整数指针。
uint NumFormats = 0;
res = vkGetPhysicalDeviceSurfaceFormatsKHR(PhysDev, Surface, &NumFormats, NULL);
if(res != VK_SUCCESS) {
LIFE_ERROR("vkGetPhysicalDeviceSurfaceFormatsKHR error: %dn", res);
assert(0);
}
assert(NumFormats > 0);
( servert(numformats> 0(失败(我正在使用NVIDIA驱动程序运行Linux,而且我很确定Vulkan API可以正确看到我的GPU,因为我的输出是这样的:
Found 6 extensions
Instance extension 0 - VK_KHR_surface
Instance extension 1 - VK_KHR_xcb_surface
Instance extension 2 - VK_KHR_xlib_surface
Instance extension 3 - VK_KHR_wayland_surface
Instance extension 4 - VK_EXT_debug_report
Instance extension 5 - VK_NV_external_memory_capabilities
Surface created
Num physical devices 1
Device name: GTX 980 Ti
API version: 1.0.24
Num of family queues: 2
....(assert failes)
解决了问题。我查看了这个答案,并弄清楚我忘了在尝试检查哪些表面格式和功能之前忘了初始化XCB窗口。