KhronosGroup / Vulkan-Loader

Vulkan Loader
https://vulkan.lunarg.com/doc/sdk/latest/linux/LoaderInterfaceArchitecture.html
Other
519 stars 284 forks source link

Crash when querying surface support for VK_EXT_headless_surface surface with multiple icds #1567

Open JamesRumble-IMG opened 1 month ago

JamesRumble-IMG commented 1 month ago

I'm seeing a crash when attempting to query for surface support (vkGetPhysicalDeviceSurfacePresentModesKHR/vkGetPhysicalDeviceSurfaceSupportKHR/vkGetPhysicalDeviceSurfaceCapabilitiesKHR etc.) for a VKSurfaceKHR previously created using vkCreateHeadlessSurfaceEXT.

My system (Ubuntu 22.04) has 2 icds configured/installed - llvmpipe and nvidia. llvmpipe supports VK_EXT_headless_surface whilst nvidia does not. I can provide full vulkaninfo outputs if required. Whilst using the Vulkan-Loader (https://github.com/KhronosGroup/Vulkan-Loader/commit/8bdce6d842ca9f9bd0a4119963b0eb10693f5b23) my application sees that VK_EXT_headless_surface is supported and therefore creates a "headless" surface using vkCreateHeadlessSurfaceEXT which the loader forwards to all icds supporting the extension i.e. llvmpipe and not nvidia (https://github.com/KhronosGroup/Vulkan-Loader/blob/8bdce6d842ca9f9bd0a4119963b0eb10693f5b23/loader/wsi.c#L1237) I'm then seeing a crash when attempting to query surface support/capabilities for the "headless" surface using the nvidia icd i.e. an icd which knows nothing about the headless surface. Should the Vulkan-Loader be handling these (VK_KHR_surface) functions and be returning no support/capabilities rather than forwarding them onto an icd without any knowledge of the headless surface? I was torn as to whether this was a driver issue or Vulkan-Loader issue but I can imagine this being a problem across multiple icds and potentially affects multiple instance (surface?) extensions so I thought best to raise it here.

FYI we're using VK_EXT_headless_surface for an offscreen rendering usecase. Somewhat related to https://github.com/KhronosGroup/Vulkan-Loader/issues/866

Environment:

To Reproduce See above but a full reproduction case can be provided upon request.

VK_LOADER_DEBUG output INFO: Vulkan Loader Version 1.3.225 LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/implicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/implicit_layer.d LAYER: /etc/xdg/vulkan/implicit_layer.d LAYER: /usr/local/etc/vulkan/implicit_layer.d LAYER: /etc/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d LAYER: /usr/share/ubuntu/vulkan/implicit_layer.d LAYER: /usr/share/gnome/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /usr/local/share/vulkan/implicit_layer.d LAYER: /usr/share/vulkan/implicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/implicit_layer.d LAYER: Found the following files: LAYER: amd_icd64.json LAYER: amd_icd32.json LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json LAYER: /usr/share/vulkan/implicit_layer.d/nvidia_layers.json LAYER: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json INFO: Found manifest file /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json (file version "1.1.2") INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetInstanceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetDeviceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/nvidia_layers.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version "1.0.0") DRIVER: Searching for driver manifest files DRIVER: In following folders: DRIVER: /home/jrumble/.config/vulkan/icd.d DRIVER: /etc/xdg/xdg-ubuntu/vulkan/icd.d DRIVER: /etc/xdg/vulkan/icd.d DRIVER: /usr/local/etc/vulkan/icd.d DRIVER: /etc/vulkan/icd.d DRIVER: /home/jrumble/.local/share/vulkan/icd.d DRIVER: /usr/share/ubuntu/vulkan/icd.d DRIVER: /usr/share/gnome/vulkan/icd.d DRIVER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/icd.d DRIVER: /var/lib/flatpak/exports/share/vulkan/icd.d DRIVER: /usr/local/share/vulkan/icd.d DRIVER: /usr/share/vulkan/icd.d DRIVER: /var/lib/snapd/desktop/vulkan/icd.d DRIVER: Found the following files: DRIVER: amd_icd64.json DRIVER: amd_icd32.json DRIVER: /usr/share/vulkan/icd.d/intel_hasvk_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/radeon_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/lvp_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/intel_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/lvp_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/virtio_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/dzn_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/radeon_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/nvidia_icd.json DRIVER: /usr/share/vulkan/icd.d/intel_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/intel_hasvk_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/virtio_icd.i686.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_hasvk_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/radeon_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_radeon.so INFO: /usr/lib/i386-linux-gnu/libvulkan_radeon.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_radeon.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/lvp_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_lvp.so INFO: /usr/lib/i386-linux-gnu/libvulkan_lvp.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_lvp.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_intel.so INFO: /usr/lib/i386-linux-gnu/libvulkan_intel.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_intel.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/lvp_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/virtio_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/dzn_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_dzn.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/radeon_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/nvidia_icd.json, version "1.0.0" DEBUG: Searching for ICD drivers named libGLX_nvidia.so.0 DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_intel.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_hasvk_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so INFO: /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/virtio_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_virtio.so INFO: /usr/lib/i386-linux-gnu/libvulkan_virtio.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_virtio.so was wrong bit-type. Ignoring this JSON DRIVER: Searching for driver manifest files DRIVER: In following folders: DRIVER: /home/jrumble/.config/vulkan/icd.d DRIVER: /etc/xdg/xdg-ubuntu/vulkan/icd.d DRIVER: /etc/xdg/vulkan/icd.d DRIVER: /usr/local/etc/vulkan/icd.d DRIVER: /etc/vulkan/icd.d DRIVER: /home/jrumble/.local/share/vulkan/icd.d DRIVER: /usr/share/ubuntu/vulkan/icd.d DRIVER: /usr/share/gnome/vulkan/icd.d DRIVER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/icd.d DRIVER: /var/lib/flatpak/exports/share/vulkan/icd.d DRIVER: /usr/local/share/vulkan/icd.d DRIVER: /usr/share/vulkan/icd.d DRIVER: /var/lib/snapd/desktop/vulkan/icd.d DRIVER: Found the following files: DRIVER: amd_icd64.json DRIVER: amd_icd32.json DRIVER: /usr/share/vulkan/icd.d/intel_hasvk_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/radeon_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/lvp_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/intel_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/lvp_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/virtio_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/dzn_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/radeon_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/nvidia_icd.json DRIVER: /usr/share/vulkan/icd.d/intel_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/intel_hasvk_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/virtio_icd.i686.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_hasvk_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/radeon_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_radeon.so INFO: /usr/lib/i386-linux-gnu/libvulkan_radeon.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_radeon.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/lvp_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_lvp.so INFO: /usr/lib/i386-linux-gnu/libvulkan_lvp.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_lvp.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_intel.so INFO: /usr/lib/i386-linux-gnu/libvulkan_intel.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_intel.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/lvp_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/virtio_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/dzn_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_dzn.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/radeon_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/nvidia_icd.json, version "1.0.0" DEBUG: Searching for ICD drivers named libGLX_nvidia.so.0 DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_intel.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_hasvk_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so INFO: /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/virtio_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_virtio.so INFO: /usr/lib/i386-linux-gnu/libvulkan_virtio.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_virtio.so was wrong bit-type. Ignoring this JSON DEBUG: Build ICD instance extension list LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/implicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/implicit_layer.d LAYER: /etc/xdg/vulkan/implicit_layer.d LAYER: /usr/local/etc/vulkan/implicit_layer.d LAYER: /etc/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d LAYER: /usr/share/ubuntu/vulkan/implicit_layer.d LAYER: /usr/share/gnome/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /usr/local/share/vulkan/implicit_layer.d LAYER: /usr/share/vulkan/implicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/implicit_layer.d LAYER: Found the following files: LAYER: amd_icd64.json LAYER: amd_icd32.json LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json LAYER: /usr/share/vulkan/implicit_layer.d/nvidia_layers.json LAYER: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json INFO: Found manifest file /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json (file version "1.1.2") INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetInstanceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetDeviceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/nvidia_layers.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version "1.0.0") LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/implicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/implicit_layer.d LAYER: /etc/xdg/vulkan/implicit_layer.d LAYER: /usr/local/etc/vulkan/implicit_layer.d LAYER: /etc/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d LAYER: /usr/share/ubuntu/vulkan/implicit_layer.d LAYER: /usr/share/gnome/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /usr/local/share/vulkan/implicit_layer.d LAYER: /usr/share/vulkan/implicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/implicit_layer.d LAYER: Found the following files: LAYER: amd_icd64.json LAYER: amd_icd32.json LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json LAYER: /usr/share/vulkan/implicit_layer.d/nvidia_layers.json LAYER: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json INFO: Found manifest file /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json (file version "1.1.2") INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetInstanceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetDeviceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/nvidia_layers.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version "1.0.0") DRIVER: Searching for driver manifest files DRIVER: In following folders: DRIVER: /home/jrumble/.config/vulkan/icd.d DRIVER: /etc/xdg/xdg-ubuntu/vulkan/icd.d DRIVER: /etc/xdg/vulkan/icd.d DRIVER: /usr/local/etc/vulkan/icd.d DRIVER: /etc/vulkan/icd.d DRIVER: /home/jrumble/.local/share/vulkan/icd.d DRIVER: /usr/share/ubuntu/vulkan/icd.d DRIVER: /usr/share/gnome/vulkan/icd.d DRIVER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/icd.d DRIVER: /var/lib/flatpak/exports/share/vulkan/icd.d DRIVER: /usr/local/share/vulkan/icd.d DRIVER: /usr/share/vulkan/icd.d DRIVER: /var/lib/snapd/desktop/vulkan/icd.d DRIVER: Found the following files: DRIVER: amd_icd64.json DRIVER: amd_icd32.json DRIVER: /usr/share/vulkan/icd.d/intel_hasvk_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/radeon_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/lvp_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/intel_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/lvp_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/virtio_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/dzn_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/radeon_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/nvidia_icd.json DRIVER: /usr/share/vulkan/icd.d/intel_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/intel_hasvk_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/virtio_icd.i686.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_hasvk_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/radeon_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_radeon.so INFO: /usr/lib/i386-linux-gnu/libvulkan_radeon.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_radeon.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/lvp_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_lvp.so INFO: /usr/lib/i386-linux-gnu/libvulkan_lvp.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_lvp.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_intel.so INFO: /usr/lib/i386-linux-gnu/libvulkan_intel.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_intel.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/lvp_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/virtio_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/dzn_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_dzn.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/radeon_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/nvidia_icd.json, version "1.0.0" DEBUG: Searching for ICD drivers named libGLX_nvidia.so.0 DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_intel.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_hasvk_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so INFO: /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/virtio_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_virtio.so INFO: /usr/lib/i386-linux-gnu/libvulkan_virtio.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_virtio.so was wrong bit-type. Ignoring this JSON DEBUG: Build ICD instance extension list LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/implicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/implicit_layer.d LAYER: /etc/xdg/vulkan/implicit_layer.d LAYER: /usr/local/etc/vulkan/implicit_layer.d LAYER: /etc/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d LAYER: /usr/share/ubuntu/vulkan/implicit_layer.d LAYER: /usr/share/gnome/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /usr/local/share/vulkan/implicit_layer.d LAYER: /usr/share/vulkan/implicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/implicit_layer.d LAYER: Found the following files: LAYER: amd_icd64.json LAYER: amd_icd32.json LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json LAYER: /usr/share/vulkan/implicit_layer.d/nvidia_layers.json LAYER: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json INFO: Found manifest file /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json (file version "1.1.2") INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetInstanceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetDeviceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/nvidia_layers.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version "1.0.0") LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/implicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/implicit_layer.d LAYER: /etc/xdg/vulkan/implicit_layer.d LAYER: /usr/local/etc/vulkan/implicit_layer.d LAYER: /etc/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d LAYER: /usr/share/ubuntu/vulkan/implicit_layer.d LAYER: /usr/share/gnome/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /usr/local/share/vulkan/implicit_layer.d LAYER: /usr/share/vulkan/implicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/implicit_layer.d LAYER: Found the following files: LAYER: amd_icd64.json LAYER: amd_icd32.json LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json LAYER: /usr/share/vulkan/implicit_layer.d/nvidia_layers.json LAYER: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json INFO: Found manifest file /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json (file version "1.1.2") INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetInstanceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetDeviceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/nvidia_layers.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version "1.0.0") LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/implicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/implicit_layer.d LAYER: /etc/xdg/vulkan/implicit_layer.d LAYER: /usr/local/etc/vulkan/implicit_layer.d LAYER: /etc/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d LAYER: /usr/share/ubuntu/vulkan/implicit_layer.d LAYER: /usr/share/gnome/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /usr/local/share/vulkan/implicit_layer.d LAYER: /usr/share/vulkan/implicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/implicit_layer.d LAYER: Found the following files: LAYER: amd_icd64.json LAYER: amd_icd32.json LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json LAYER: /usr/share/vulkan/implicit_layer.d/nvidia_layers.json LAYER: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json INFO: Found manifest file /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json (file version "1.1.2") INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetInstanceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetDeviceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/nvidia_layers.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version "1.0.0") LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/explicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/explicit_layer.d LAYER: /etc/xdg/vulkan/explicit_layer.d LAYER: /usr/local/etc/vulkan/explicit_layer.d LAYER: /etc/vulkan/explicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/explicit_layer.d LAYER: /usr/share/ubuntu/vulkan/explicit_layer.d LAYER: /usr/share/gnome/vulkan/explicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/explicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/explicit_layer.d LAYER: /usr/local/share/vulkan/explicit_layer.d LAYER: /usr/share/vulkan/explicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/explicit_layer.d LAYER: Found the following files: LAYER: /usr/share/vulkan/explicit_layer.d/VkLayer_INTEL_nullhw.json LAYER: /usr/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json INFO: Found manifest file /usr/share/vulkan/explicit_layer.d/VkLayer_INTEL_nullhw.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json (file version "1.0.0") LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/implicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/implicit_layer.d LAYER: /etc/xdg/vulkan/implicit_layer.d LAYER: /usr/local/etc/vulkan/implicit_layer.d LAYER: /etc/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d LAYER: /usr/share/ubuntu/vulkan/implicit_layer.d LAYER: /usr/share/gnome/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /usr/local/share/vulkan/implicit_layer.d LAYER: /usr/share/vulkan/implicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/implicit_layer.d LAYER: Found the following files: LAYER: amd_icd64.json LAYER: amd_icd32.json LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json LAYER: /usr/share/vulkan/implicit_layer.d/nvidia_layers.json LAYER: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json INFO: Found manifest file /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json (file version "1.1.2") INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetInstanceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetDeviceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/nvidia_layers.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version "1.0.0") LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/implicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/implicit_layer.d LAYER: /etc/xdg/vulkan/implicit_layer.d LAYER: /usr/local/etc/vulkan/implicit_layer.d LAYER: /etc/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d LAYER: /usr/share/ubuntu/vulkan/implicit_layer.d LAYER: /usr/share/gnome/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /usr/local/share/vulkan/implicit_layer.d LAYER: /usr/share/vulkan/implicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/implicit_layer.d LAYER: Found the following files: LAYER: amd_icd64.json LAYER: amd_icd32.json LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json LAYER: /usr/share/vulkan/implicit_layer.d/nvidia_layers.json LAYER: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json INFO: Found manifest file /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json (file version "1.1.2") INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetInstanceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetDeviceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/nvidia_layers.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version "1.0.0") LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/explicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/explicit_layer.d LAYER: /etc/xdg/vulkan/explicit_layer.d LAYER: /usr/local/etc/vulkan/explicit_layer.d LAYER: /etc/vulkan/explicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/explicit_layer.d LAYER: /usr/share/ubuntu/vulkan/explicit_layer.d LAYER: /usr/share/gnome/vulkan/explicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/explicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/explicit_layer.d LAYER: /usr/local/share/vulkan/explicit_layer.d LAYER: /usr/share/vulkan/explicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/explicit_layer.d LAYER: Found the following files: LAYER: /usr/share/vulkan/explicit_layer.d/VkLayer_INTEL_nullhw.json LAYER: /usr/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json INFO: Found manifest file /usr/share/vulkan/explicit_layer.d/VkLayer_INTEL_nullhw.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json (file version "1.0.0") LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/implicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/implicit_layer.d LAYER: /etc/xdg/vulkan/implicit_layer.d LAYER: /usr/local/etc/vulkan/implicit_layer.d LAYER: /etc/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d LAYER: /usr/share/ubuntu/vulkan/implicit_layer.d LAYER: /usr/share/gnome/vulkan/implicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/implicit_layer.d LAYER: /usr/local/share/vulkan/implicit_layer.d LAYER: /usr/share/vulkan/implicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/implicit_layer.d LAYER: Found the following files: LAYER: amd_icd64.json LAYER: amd_icd32.json LAYER: /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json LAYER: /usr/share/vulkan/implicit_layer.d/nvidia_layers.json LAYER: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json INFO: Found manifest file /home/jrumble/.local/share/vulkan/implicit_layer.d/renderdoc_capture.json (file version "1.1.2") INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetInstanceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Layer "VK_LAYER_RENDERDOC_Capture" using deprecated 'vkGetDeviceProcAddr' tag which was deprecated starting with JSON file version 1.1.0. The new vkNegotiateLoaderLayerInterfaceVersion function is preferred, though for compatibility reasons it may be desirable to continue using the deprecated tag. INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/nvidia_layers.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json (file version "1.0.0") LAYER: Searching for layer manifest files LAYER: In following folders: LAYER: /home/jrumble/.config/vulkan/explicit_layer.d LAYER: /etc/xdg/xdg-ubuntu/vulkan/explicit_layer.d LAYER: /etc/xdg/vulkan/explicit_layer.d LAYER: /usr/local/etc/vulkan/explicit_layer.d LAYER: /etc/vulkan/explicit_layer.d LAYER: /home/jrumble/.local/share/vulkan/explicit_layer.d LAYER: /usr/share/ubuntu/vulkan/explicit_layer.d LAYER: /usr/share/gnome/vulkan/explicit_layer.d LAYER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/explicit_layer.d LAYER: /var/lib/flatpak/exports/share/vulkan/explicit_layer.d LAYER: /usr/local/share/vulkan/explicit_layer.d LAYER: /usr/share/vulkan/explicit_layer.d LAYER: /var/lib/snapd/desktop/vulkan/explicit_layer.d LAYER: Found the following files: LAYER: /usr/share/vulkan/explicit_layer.d/VkLayer_INTEL_nullhw.json LAYER: /usr/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json INFO: Found manifest file /usr/share/vulkan/explicit_layer.d/VkLayer_INTEL_nullhw.json (file version "1.0.0") INFO: Found manifest file /usr/share/vulkan/explicit_layer.d/VkLayer_MESA_overlay.json (file version "1.0.0") DRIVER: Searching for driver manifest files DRIVER: In following folders: DRIVER: /home/jrumble/.config/vulkan/icd.d DRIVER: /etc/xdg/xdg-ubuntu/vulkan/icd.d DRIVER: /etc/xdg/vulkan/icd.d DRIVER: /usr/local/etc/vulkan/icd.d DRIVER: /etc/vulkan/icd.d DRIVER: /home/jrumble/.local/share/vulkan/icd.d DRIVER: /usr/share/ubuntu/vulkan/icd.d DRIVER: /usr/share/gnome/vulkan/icd.d DRIVER: /home/jrumble/.local/share/flatpak/exports/share/vulkan/icd.d DRIVER: /var/lib/flatpak/exports/share/vulkan/icd.d DRIVER: /usr/local/share/vulkan/icd.d DRIVER: /usr/share/vulkan/icd.d DRIVER: /var/lib/snapd/desktop/vulkan/icd.d DRIVER: Found the following files: DRIVER: amd_icd64.json DRIVER: amd_icd32.json DRIVER: /usr/share/vulkan/icd.d/intel_hasvk_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/radeon_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/lvp_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/intel_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/lvp_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/virtio_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/dzn_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/radeon_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/nvidia_icd.json DRIVER: /usr/share/vulkan/icd.d/intel_icd.x86_64.json DRIVER: /usr/share/vulkan/icd.d/intel_hasvk_icd.i686.json DRIVER: /usr/share/vulkan/icd.d/virtio_icd.i686.json ERROR: loader_get_json: Failed to open JSON file amd_icd64.json ERROR: loader_get_json: Failed to open JSON file amd_icd32.json DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_hasvk_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/radeon_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_radeon.so INFO: /usr/lib/i386-linux-gnu/libvulkan_radeon.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_radeon.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/lvp_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_lvp.so INFO: /usr/lib/i386-linux-gnu/libvulkan_lvp.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_lvp.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_intel.so INFO: /usr/lib/i386-linux-gnu/libvulkan_intel.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_intel.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/lvp_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/virtio_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_virtio.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/dzn_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_dzn.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/radeon_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/nvidia_icd.json, version "1.0.0" DEBUG: Searching for ICD drivers named libGLX_nvidia.so.0 DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_icd.x86_64.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/x86_64-linux-gnu/libvulkan_intel.so DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/intel_hasvk_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so INFO: /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_intel_hasvk.so was wrong bit-type. Ignoring this JSON DRIVER: Found ICD manifest file /usr/share/vulkan/icd.d/virtio_icd.i686.json, version "1.0.0" DEBUG: Searching for ICD drivers named /usr/lib/i386-linux-gnu/libvulkan_virtio.so INFO: /usr/lib/i386-linux-gnu/libvulkan_virtio.so: wrong ELF class: ELFCLASS32 DRIVER: Requested layer /usr/lib/i386-linux-gnu/libvulkan_virtio.so was wrong bit-type. Ignoring this JSON DEBUG: Build ICD instance extension list DEBUG | LAYER: Loading layer library libVkLayer_MESA_device_select.so INFO | LAYER: Insert instance layer VK_LAYER_MESA_device_select (libVkLayer_MESA_device_select.so) LAYER: vkCreateInstance layer callstack setup to: LAYER: LAYER: || LAYER: LAYER: || LAYER: VK_LAYER_MESA_device_select LAYER: Type: Implicit LAYER: Disable Env Var: NODEVICE_SELECT LAYER: Manifest: /usr/share/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json LAYER: Library: libVkLayer_MESA_device_select.so LAYER: || LAYER:

DEBUG: Build ICD instance extension list DEBUG: Build ICD instance extension list DEBUG: Build ICD instance extension list WARNING: terminator_CreateInstance: Failed to CreateInstance in ICD 2. Skipping ICD. DEBUG: Build ICD instance extension list WARNING: terminator_CreateInstance: Failed to CreateInstance in ICD 3. Skipping ICD. DEBUG: Build ICD instance extension list DEBUG: Build ICD instance extension list DEBUG: Build ICD instance extension list DEBUG: loader_phys_dev_ext_gpa: Adding unknown physical function vkGetPhysicalDeviceCalibrateableTimeDomainsKHR to internal store at index 0 DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_intel.so returned ptr 0x7f9e8590a6b0 for vkGetPhysicalDeviceCalibrateableTimeDomainsKHR DEBUG: loader_phys_dev_ext_gpa: Driver libGLX_nvidia.so.0 returned ptr 0x7f9e8590a6b0 for vkGetPhysicalDeviceCalibrateableTimeDomainsKHR DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so returned ptr 0x7f9e8590a6b0 for vkGetPhysicalDeviceCalibrateableTimeDomainsKHR DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so returned ptr 0x7f9e8590a6b0 for vkGetPhysicalDeviceCalibrateableTimeDomainsKHR DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so returned ptr 0x7f9e8590a6b0 for vkGetPhysicalDeviceCalibrateableTimeDomainsKHR DEBUG: loader_phys_dev_ext_gpa: Adding unknown physical function vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR to internal store at index 1 DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_intel.so returned ptr 0x7f9e8590a6ff for vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR DEBUG: loader_phys_dev_ext_gpa: Driver libGLX_nvidia.so.0 returned ptr 0x7f9e8590a6ff for vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so returned ptr 0x7f9e8590a6ff for vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so returned ptr 0x7f9e8590a6ff for vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so returned ptr 0x7f9e8590a6ff for vkGetPhysicalDeviceCooperativeMatrixPropertiesKHR DEBUG: loader_phys_dev_ext_gpa: Adding unknown physical function vkGetPhysicalDeviceOpticalFlowImageFormatsNV to internal store at index 2 DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_intel.so returned ptr 0x7f9e8590a74e for vkGetPhysicalDeviceOpticalFlowImageFormatsNV DEBUG: loader_phys_dev_ext_gpa: Driver libGLX_nvidia.so.0 returned ptr 0x7f9e8590a74e for vkGetPhysicalDeviceOpticalFlowImageFormatsNV DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_radeon.so returned ptr 0x7f9e8590a74e for vkGetPhysicalDeviceOpticalFlowImageFormatsNV DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_lvp.so returned ptr 0x7f9e8590a74e for vkGetPhysicalDeviceOpticalFlowImageFormatsNV DEBUG: loader_phys_dev_ext_gpa: Driver /usr/lib/x86_64-linux-gnu/libvulkan_intel_hasvk.so returned ptr 0x7f9e8590a74e for vkGetPhysicalDeviceOpticalFlowImageFormatsNV INFO | DRIVER: linux_read_sorted_physical_devices: INFO | DRIVER: Original order: INFO | DRIVER: [0] NVIDIA GeForce RTX 2060 INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 256 bits) INFO | DRIVER: Sorted order: INFO | DRIVER: [0] NVIDIA GeForce RTX 2060
INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 256 bits)
INFO | DRIVER: linux_read_sorted_physical_devices: INFO | DRIVER: Original order: INFO | DRIVER: [0] NVIDIA GeForce RTX 2060 INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 256 bits) INFO | DRIVER: Sorted order: INFO | DRIVER: [0] NVIDIA GeForce RTX 2060
INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 256 bits)
DEBUG | DRIVER: Copying old device 0 into new device 0 DEBUG | DRIVER: Copying old device 1 into new device 1 INFO | DRIVER: linux_read_sorted_physical_devices: INFO | DRIVER: Original order: INFO | DRIVER: [0] NVIDIA GeForce RTX 2060 INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 256 bits) INFO | DRIVER: Sorted order: INFO | DRIVER: [0] NVIDIA GeForce RTX 2060
INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 256 bits)
DEBUG | DRIVER: Copying old device 0 into new device 0 DEBUG | DRIVER: Copying old device 1 into new device 1 INFO | DRIVER: linux_read_sorted_physical_devices: INFO | DRIVER: Original order: INFO | DRIVER: [0] NVIDIA GeForce RTX 2060 INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 256 bits) INFO | DRIVER: Sorted order: INFO | DRIVER: [0] NVIDIA GeForce RTX 2060
INFO | DRIVER: [1] llvmpipe (LLVM 15.0.7, 256 bits)
DEBUG | DRIVER: Copying old device 0 into new device 0 DEBUG | DRIVER: Copying old device 1 into new device 1 DEBUG | LAYER: Loading layer library libVkLayer_MESA_device_select.so INFO | LAYER: Failed to find vkGetDeviceProcAddr in layer libVkLayer_MESA_device_select.so DRIVER | LAYER: vkCreateDevice layer callstack setup to: DRIVER | LAYER: DRIVER | LAYER: || DRIVER | LAYER: DRIVER | LAYER: || DRIVER | LAYER: DRIVER | LAYER: Using "NVIDIA GeForce RTX 2060" with driver: "libGLX_nvidia.so.0"

Segmentation fault (core dumped)

charles-lunarg commented 1 month ago

Does this crash occur with loader's that do not contain #1471 ? I ask because that refactored how surface objects are allocated & stored, which may have affected the manner in which the driver prevented usage of itself in surface functions.

I do think that the loader could do more to prevent this kind of issue - keeping track of which ICD's support what surfaces and then cross referencing that with the GetSurfaceSupport/Capabilities/PresentModes functions. However as you correctly point out, the fundamental issue is that the app has no way of knowing which Physical Devices are "okay" to call on given a VkSurfaceKHR handle - because the app knows which surface API was used to create it but has no clue which driver supports what surface API.

This is similar to #1541 because of the nature of surfaces being "instance" level objects instead of "physical device" level.

JamesRumble-IMG commented 1 month ago

Does this crash occur with loader's that do not contain https://github.com/KhronosGroup/Vulkan-Loader/pull/1471

I built the Loader at commit https://github.com/KhronosGroup/Vulkan-Loader/commit/fa3b7bdefadef01ee9af593245c47ca1a33212f4 and unfortunately I still observe the same crash as with latest main.

charles-lunarg commented 1 month ago

@JamesRumble-IMG

I have pushed up a branch which I believe will fix the crash. Are you able to build the loader and test the branch to confirm if it fixes it?

The loader was not keeping track of which surface extensions were supported by an ICD, that has been addressed and now calls to every surface creation function will check if the ICD supports the extension in addition to the already existing check for the function being non-NULL. I believe this crash could be avoided if nvidia didn't expose the function pointer, but fixing that in the driver might not be as simple, and the loader should have been checking if the extension was support in the first place (as the spec does require that extension functions only be called if the corresponding extension is available & enabled.)

JamesRumble-IMG commented 1 month ago

Thanks for raising the changes. Unfortunately the changes don't fix the crash I'm seeing. The changes look good either way - relying on checking the enabled extensions seems more robust in general :).

Sorry if I wasn't clear in my original issue but in my case nvidia isn't exposing the function pointer for the unsupported extension function (CreateHeadlessSurfaceEXT).

In my case the headless surface creation is skipped on nvidia (due to CreateHeadlessSurfaceEXT being nullptr and now also because of the extension check you added). The surface is being created successfully on another ICD which does support VK_EXT_headless_surface which in this case is llvmpipe. The crash occurs later when using the physical device not supporting headless surfaces (nvidia) and attempting to query support for the headless surface i.e. a call to GetPhysicalDeviceSurfaceSupportKHR which is funnelled through to nvidia which is presented with a surface it has no knowledge of.

charles-lunarg commented 1 month ago

Okay after looking at the code, I'm now pretty sure that the crash is due to the loader passing in the "VkSurfaceKHR" handle that the loader created instead of the drivers, and the driver goes "huh?" and crashes.

This behavior has irked me ever since I saw it - it makes no sense to do that. Drivers have no clue what the loader's handle means because the loader created it, not the driver! The loader intentionally unwraps that handle so that drivers don't ever see it.

I want to now remove that code and see if the crash is coming from that line.

https://github.com/KhronosGroup/Vulkan-Loader/blob/2d2d46f38fb2e8c0362668ca3605f81d71236f68/loader/wsi.c#L437

https://github.com/KhronosGroup/Vulkan-Loader/blame/2d2d46f38fb2e8c0362668ca3605f81d71236f68/loader/wsi.c#L264

https://github.com/KhronosGroup/Vulkan-Loader/blame/2d2d46f38fb2e8c0362668ca3605f81d71236f68/loader/wsi.c#L320

charles-lunarg commented 1 month ago

While I still have no clue why the loader passes the loader-specific handles to the drivers, I can at least say the logic to make sure each driver supports the extension used to create a VkSurfaceKHR wasn't too difficult to implement.

There may be some gaps for functions which take an array of surfaces, as I wanted to get a good draft going in order to validate that this actually fixes the issues seen.

JamesRumble-IMG commented 4 weeks ago

The changes are looking great. I hope you don't mind but I gave them a quick whirl this morning. I see a couple of issues:

charles-lunarg commented 4 weeks ago