O2 crashes in GPUDisplayBackendVulkan

Dear all,

I just tried to build O2 and it fails in GPUDisplayBackendVulkan.cxx, the relevant lines seem to be:

/home/sheckel/alice/sw/SOURCES/O2/dev/0/GPU/GPUTracking/display/GPUDisplayBackendVulkan.cxx: In instantiation of 'void setupDebugMessenger(VkInstance_T*&, VkDebugUtilsMessengerEXT_T*&, T&) [with T = o2::gpu::GPUDisplayBackendVulkan::createDevice()::<lambda(VkDebugUtilsMessageSeverityFlagBitsEXT, VkDebugUtilsMessageTypeFlagsEXT, const VkDebugUtilsMessengerCallbackDataEXT*, void*)>; VkInstance = VkInstance_T*; VkDebugUtilsMessengerEXT = VkDebugUtilsMessengerEXT_T*]':
/home/sheckel/alice/sw/SOURCES/O2/dev/0/GPU/GPUTracking/display/GPUDisplayBackendVulkan.cxx:335:66:   required from here
/home/sheckel/alice/sw/SOURCES/O2/dev/0/GPU/GPUTracking/display/GPUDisplayBackendVulkan.cxx:165:30: error: invalid user-defined conversion from 'o2::gpu::GPUDisplayBackendVulkan::createDevice()::<lambda(VkDebugUtilsMessageSeverityFlagBitsEXT, VkDebugUtilsMessageTypeFlagsEXT, const VkDebugUtilsMessengerCallbackDataEXT*, void*)>' to 'PFN_vkDebugUtilsMessengerCallbackEXT' {aka 'unsigned int (*)(VkDebugUtilsMessageSeverityFlagBitsEXT, unsigned int, const VkDebugUtilsMessengerCallbackDataEXT*, void*)'} [-fpermissive]
  165 |   createInfo.pfnUserCallback = debugCallback;
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
/home/sheckel/alice/sw/SOURCES/O2/dev/0/GPU/GPUTracking/display/GPUDisplayBackendVulkan.cxx:300:24: note: candidate is: 'constexpr o2::gpu::GPUDisplayBackendVulkan::createDevice()::<lambda(VkDebugUtilsMessageSeverityFlagBitsEXT, VkDebugUtilsMessageTypeFlagsEXT, const VkDebugUtilsMessengerCallbackDataEXT*, void*)>::operator int (*)(VkDebugUtilsMessageSeverityFlagBitsEXT, VkDebugUtilsMessageTypeFlagsEXT, const VkDebugUtilsMessengerCallbackDataEXT*, void*)() const' (near match)
  300 |   auto debugCallback = [](VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) {
      |                        ^
/home/sheckel/alice/sw/SOURCES/O2/dev/0/GPU/GPUTracking/display/GPUDisplayBackendVulkan.cxx:300:24: note:   no known conversion from 'int (*)(VkDebugUtilsMessageSeverityFlagBitsEXT, VkDebugUtilsMessageTypeFlagsEXT, const VkDebugUtilsMessengerCallbackDataEXT*, void*)' {aka 'int (*)(VkDebugUtilsMessageSeverityFlagBitsEXT, unsigned int, const VkDebugUtilsMessengerCallbackDataEXT*, void*)'} to 'PFN_vkDebugUtilsMessengerCallbackEXT' {aka 'unsigned int (*)(VkDebugUtilsMessageSeverityFlagBitsEXT, unsigned int, const VkDebugUtilsMessengerCallbackDataEXT*, void*)'}

Some information:

  • I am on Ubuntu 18.04
  • I have alidist/master, O2/dev and QualityControl/master from today
  • I try to compile with:
aliBuild build QualityControl --defaults o2

The full log can be found here.

I guess, @drohr is the one to ping here, at least I see from him a recent commit on this part in O2.

Thanks for any help, cheers,
Stefan

ok, will check. That is probably related to my change in the visualization.
I assume Vulkan is not present in the CI container, so it was not tested in the CI.

Argh, kann das nicht reproduzieren. Das scheint an der Vulkan API zu hängen.
Was für ein OS hast du? Was für ne GPU?

OS, as written above, is Ubuntu 18.04.
The GPU might be the issue, my GPU is: none… at least not a real one, just on-board graphics, more precise: Intel® UHD Graphics 630 (CFL GT2)

Perhaps 18.04 has too old Vulkan API, I will check if I can add a version check.
Can you try if https://github.com/AliceO2Group/AliceO2/pull/8216 solves your issue.
Can you sent me a list of all Ubuntu packages you have installed with vulkan in the name (case insensitive)?

Hi @drohr, thanks for the quick help. I have a similar machine and the same system as Stefan. Saw the same error and the fix works!

Cheers,
Thomas

Sorry, managed only now to test the fix. I can confirm what Thomas has written, also for me this solves the issue! Thanks a lot for the super quick fix! :slight_smile: