1212// / \file GPUDisplayBackendVulkan.cxx
1313// / \author David Rohr
1414
15+ #define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
1516#include < vulkan/vulkan.hpp>
16- #include < mutex>
17-
1817VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
1918
2019#include " GPUCommonDef.h"
2120#include " GPUDisplayBackendVulkan.h"
2221#include " GPUDisplay.h"
2322
23+ #include < mutex>
24+
2425using namespace o2 ::gpu;
2526
2627#include " utils/qGetLdBinarySymbols.h"
@@ -337,6 +338,7 @@ double GPUDisplayBackendVulkan::checkDevice(vk::PhysicalDevice device, const std
337338
338339void GPUDisplayBackendVulkan::createDevice ()
339340{
341+ VULKAN_HPP_DEFAULT_DISPATCHER.init ();
340342 vk::ApplicationInfo appInfo{};
341343 appInfo.pApplicationName = " GPU CA Standalone display" ;
342344 appInfo.applicationVersion = VK_MAKE_VERSION (1 , 0 , 0 );
@@ -353,28 +355,28 @@ void GPUDisplayBackendVulkan::createDevice()
353355
354356 const std::vector<const char *> reqValidationLayers = {
355357 " VK_LAYER_KHRONOS_validation" };
356- auto debugCallback = [](VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT * pCallbackData, void * pUserData) -> VkBool32 {
358+ auto debugCallback = [](vk::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, vk::DebugUtilsMessageTypeFlagsEXT messageType, const vk::DebugUtilsMessengerCallbackDataEXT * pCallbackData, void * pUserData) -> VkBool32 {
357359 static int32_t throwOnError = getenv (" GPUCA_VULKAN_VALIDATION_THROW" ) ? atoi (getenv (" GPUCA_VULKAN_VALIDATION_THROW" )) : 0 ;
358360 static bool showVulkanValidationInfo = getenv (" GPUCA_VULKAN_VALIDATION_INFO" ) && atoi (getenv (" GPUCA_VULKAN_VALIDATION_INFO" ));
359361 switch (messageSeverity) {
360- case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT :
362+ case vk::DebugUtilsMessageSeverityFlagBitsEXT::eVerbose :
361363 if (showVulkanValidationInfo) {
362364 GPUInfo (" %s" , pCallbackData->pMessage );
363365 }
364366 break ;
365- case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT :
367+ case vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning :
366368 GPUWarning (" %s" , pCallbackData->pMessage );
367369 if (throwOnError > 1 ) {
368370 throw std::logic_error (" break_on_validation_warning" );
369371 }
370372 break ;
371- case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT :
373+ case vk::DebugUtilsMessageSeverityFlagBitsEXT::eError :
372374 GPUError (" %s" , pCallbackData->pMessage );
373375 if (throwOnError) {
374376 throw std::logic_error (" break_on_validation_error" );
375377 }
376378 break ;
377- case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT :
379+ case vk::DebugUtilsMessageSeverityFlagBitsEXT::eInfo :
378380 default :
379381 GPUInfo (" %s" , pCallbackData->pMessage );
380382 break ;
@@ -403,10 +405,11 @@ void GPUDisplayBackendVulkan::createDevice()
403405 instanceCreateInfo.ppEnabledExtensionNames = reqInstanceExtensions.data ();
404406
405407 mInstance = vk::createInstance (instanceCreateInfo, nullptr );
406- mDLD = { mInstance , mDL . getProcAddress <PFN_vkGetInstanceProcAddr>( " vkGetInstanceProcAddr " )} ;
408+ VULKAN_HPP_DEFAULT_DISPATCHER. init ( mInstance ) ;
407409
408410 if (mEnableValidationLayers ) {
409- mDebugMessenger = mInstance .createDebugUtilsMessengerEXT (debugCreateInfo, nullptr , mDLD );
411+ GPUInfo (" Enabling Vulkan Validation Layers" );
412+ mDebugMessenger = mInstance .createDebugUtilsMessengerEXT (debugCreateInfo, nullptr );
410413 }
411414 std::vector<vk::ExtensionProperties> extensions = vk::enumerateInstanceExtensionProperties (nullptr );
412415 if (mDisplay ->param ()->par .debugLevel >= 3 ) {
@@ -480,6 +483,7 @@ void GPUDisplayBackendVulkan::createDevice()
480483 deviceCreateInfo.enabledLayerCount = instanceCreateInfo.enabledLayerCount ;
481484 deviceCreateInfo.ppEnabledLayerNames = instanceCreateInfo.ppEnabledLayerNames ;
482485 mDevice = mPhysicalDevice .createDevice (deviceCreateInfo, nullptr );
486+ VULKAN_HPP_DEFAULT_DISPATCHER.init (mDevice );
483487 mGraphicsQueue = mDevice .getQueue (mGraphicsFamily , 0 );
484488
485489 vk::CommandPoolCreateInfo poolInfo{};
@@ -494,7 +498,7 @@ void GPUDisplayBackendVulkan::clearDevice()
494498 mDevice .destroy (nullptr );
495499 mInstance .destroySurfaceKHR (mSurface , nullptr );
496500 if (mEnableValidationLayers ) {
497- mInstance .destroyDebugUtilsMessengerEXT (mDebugMessenger , nullptr , mDLD );
501+ mInstance .destroyDebugUtilsMessengerEXT (mDebugMessenger , nullptr );
498502 }
499503}
500504
0 commit comments