When I run vkcube, I get this:
Selected GPU 0: NVIDIA GeForce RTX 4070, type: DiscreteGpu
Could not find both graphics and present queues
But when I run vulkaninfo --summary, I get this:
==========
VULKANINFO
==========
Vulkan Instance Version: 1.3.261
Instance Extensions: count = 20
-------------------------------
VK_EXT_acquire_drm_display : extension revision 1
VK_EXT_acquire_xlib_display : extension revision 1
VK_EXT_debug_report : extension revision 10
VK_EXT_debug_utils : extension revision 2
VK_EXT_direct_mode_display : extension revision 1
VK_EXT_display_surface_counter : extension revision 1
VK_KHR_device_group_creation : extension revision 1
VK_KHR_display : extension revision 23
VK_KHR_external_fence_capabilities : extension revision 1
VK_KHR_external_memory_capabilities : extension revision 1
VK_KHR_external_semaphore_capabilities : extension revision 1
VK_KHR_get_display_properties2 : extension revision 1
VK_KHR_get_physical_device_properties2 : extension revision 2
VK_KHR_get_surface_capabilities2 : extension revision 1
VK_KHR_portability_enumeration : extension revision 1
VK_KHR_surface : extension revision 25
VK_KHR_surface_protected_capabilities : extension revision 1
VK_KHR_xcb_surface : extension revision 6
VK_KHR_xlib_surface : extension revision 6
VK_LUNARG_direct_driver_loading : extension revision 1
Instance Layers: count = 2
--------------------------
VK_LAYER_KHRONOS_validation Khronos Validation Layer 1.3.261 version 1
VK_LAYER_NV_optimus NVIDIA Optimus layer 1.3.242 version 1
Devices:
========
GPU0:
apiVersion = 1.3.242
driverVersion = 535.104.5.0
vendorID = 0x10de
deviceID = 0x2786
deviceType = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
deviceName = NVIDIA GeForce RTX 4070
driverID = DRIVER_ID_NVIDIA_PROPRIETARY
driverName = NVIDIA
driverInfo = 535.104.05
conformanceVersion = 1.3.5.0
deviceUUID = 73a71b25-954b-86b1-c8fa-48e86f00e0d8
driverUUID = 0415fb4e-e904-5af7-8fad-a705dd68f35e
And furthermore, I can query my physical device queue flag bits in a c++ vulkan application and I get this output:
queue family 0:
VK_QUEUE_GRAPHICS_BIT
VK_QUEUE_COMPUTE_BIT
VK_QUEUE_TRANSFER_BIT
VK_QUEUE_SPARSE_BINDING_BIT
queue family 1:
VK_QUEUE_TRANSFER_BIT
VK_QUEUE_SPARSE_BINDING_BIT
queue family 2:
VK_QUEUE_COMPUTE_BIT
VK_QUEUE_TRANSFER_BIT
VK_QUEUE_SPARSE_BINDING_BIT
queue family 3:
VK_QUEUE_TRANSFER_BIT
VK_QUEUE_SPARSE_BINDING_BIT
VK_QUEUE_VIDEO_DECODE_BIT_KHR
queue family 4:
VK_QUEUE_TRANSFER_BIT
VK_QUEUE_SPARSE_BINDING_BIT
VK_QUEUE_OPTICAL_FLOW_BIT_NV
It seems like I should be able to run Vulkan apps, but my queues are not good for my surfaces. I am running Gentoo Linux with xlib/xcb.
Compute shaders work, I have verified this using https://github.com/SaschaWillems/Vulkan:
$ ./build/bin/computeheadless
Running headless compute example
GPU: NVIDIA GeForce RTX 4070
Compute input:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1
5 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3
0 31
Compute output:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 5142
29 832040 1346269
Finished. Press enter to terminate...
but, again, when I try a graphics example...
$ ./build/bin/triangle
Could not find a graphics and/or presenting queue!
In my app, I was using GLFW to get a window. So next I tried getting the surface directly from XCB, and I get the same message from the validation layers:
VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-surface-06211(ERROR / SPEC):
msgNum:
301859828 - Validation Error:
[ VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-surface-06211 ] Object 0: handle = 0x55ccc31578d0, type = VK_OBJECT_TYPE_PHYSICAL_DEVICE;
| MessageID = 0x11fe03f4 |
vkGetPhysicalDeviceSurfaceCapabilitiesKHR(): surface is not supported by the physicalDevice.
The Vulkan spec states: surface must be supported by physicalDevice, as reported by vkGetPhysicalDeviceSurfaceSupportKHR or an equivalent platform-specific mechanism
(https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkGetPhysicalDeviceSurfaceCapabilitiesKHR-surface-06211)
Objects: 1 [0] 0x55ccc31578d0, type: 2, name: NULL
This looks like some kind bad interaction with the windowing system but I am out of ideas for now. What could be going wrong, and what else can I try?