why would vulkan graphics not work despite vulkan compute working?

229 Views Asked by At

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?

0

There are 0 best solutions below