From 504e0d53d87e4a92c2b59beaeb2da25c6bb1cc09 Mon Sep 17 00:00:00 2001 From: David Rohr Date: Thu, 20 Feb 2025 00:11:02 +0100 Subject: [PATCH] GPU Display: Adapt Vulkan Backend to Vulkan headers >= 1.4 --- .../backend/GPUDisplayBackendVulkan.cxx | 24 +++++++++++-------- .../display/backend/GPUDisplayBackendVulkan.h | 2 -- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/GPU/GPUTracking/display/backend/GPUDisplayBackendVulkan.cxx b/GPU/GPUTracking/display/backend/GPUDisplayBackendVulkan.cxx index 64167afaa536d..6f0ebb9baf945 100644 --- a/GPU/GPUTracking/display/backend/GPUDisplayBackendVulkan.cxx +++ b/GPU/GPUTracking/display/backend/GPUDisplayBackendVulkan.cxx @@ -12,15 +12,16 @@ /// \file GPUDisplayBackendVulkan.cxx /// \author David Rohr +#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1 #include -#include - VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE #include "GPUCommonDef.h" #include "GPUDisplayBackendVulkan.h" #include "GPUDisplay.h" +#include + using namespace o2::gpu; #include "utils/qGetLdBinarySymbols.h" @@ -337,6 +338,7 @@ double GPUDisplayBackendVulkan::checkDevice(vk::PhysicalDevice device, const std void GPUDisplayBackendVulkan::createDevice() { + VULKAN_HPP_DEFAULT_DISPATCHER.init(); vk::ApplicationInfo appInfo{}; appInfo.pApplicationName = "GPU CA Standalone display"; appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0); @@ -353,28 +355,28 @@ void GPUDisplayBackendVulkan::createDevice() const std::vector reqValidationLayers = { "VK_LAYER_KHRONOS_validation"}; - auto debugCallback = [](VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) -> VkBool32 { + auto debugCallback = [](vk::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity, vk::DebugUtilsMessageTypeFlagsEXT messageType, const vk::DebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) -> VkBool32 { static int32_t throwOnError = getenv("GPUCA_VULKAN_VALIDATION_THROW") ? atoi(getenv("GPUCA_VULKAN_VALIDATION_THROW")) : 0; static bool showVulkanValidationInfo = getenv("GPUCA_VULKAN_VALIDATION_INFO") && atoi(getenv("GPUCA_VULKAN_VALIDATION_INFO")); switch (messageSeverity) { - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: + case vk::DebugUtilsMessageSeverityFlagBitsEXT::eVerbose: if (showVulkanValidationInfo) { GPUInfo("%s", pCallbackData->pMessage); } break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: + case vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning: GPUWarning("%s", pCallbackData->pMessage); if (throwOnError > 1) { throw std::logic_error("break_on_validation_warning"); } break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: + case vk::DebugUtilsMessageSeverityFlagBitsEXT::eError: GPUError("%s", pCallbackData->pMessage); if (throwOnError) { throw std::logic_error("break_on_validation_error"); } break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: + case vk::DebugUtilsMessageSeverityFlagBitsEXT::eInfo: default: GPUInfo("%s", pCallbackData->pMessage); break; @@ -403,10 +405,11 @@ void GPUDisplayBackendVulkan::createDevice() instanceCreateInfo.ppEnabledExtensionNames = reqInstanceExtensions.data(); mInstance = vk::createInstance(instanceCreateInfo, nullptr); - mDLD = {mInstance, mDL.getProcAddress("vkGetInstanceProcAddr")}; + VULKAN_HPP_DEFAULT_DISPATCHER.init(mInstance); if (mEnableValidationLayers) { - mDebugMessenger = mInstance.createDebugUtilsMessengerEXT(debugCreateInfo, nullptr, mDLD); + GPUInfo("Enabling Vulkan Validation Layers"); + mDebugMessenger = mInstance.createDebugUtilsMessengerEXT(debugCreateInfo, nullptr); } std::vector extensions = vk::enumerateInstanceExtensionProperties(nullptr); if (mDisplay->param()->par.debugLevel >= 3) { @@ -480,6 +483,7 @@ void GPUDisplayBackendVulkan::createDevice() deviceCreateInfo.enabledLayerCount = instanceCreateInfo.enabledLayerCount; deviceCreateInfo.ppEnabledLayerNames = instanceCreateInfo.ppEnabledLayerNames; mDevice = mPhysicalDevice.createDevice(deviceCreateInfo, nullptr); + VULKAN_HPP_DEFAULT_DISPATCHER.init(mDevice); mGraphicsQueue = mDevice.getQueue(mGraphicsFamily, 0); vk::CommandPoolCreateInfo poolInfo{}; @@ -494,7 +498,7 @@ void GPUDisplayBackendVulkan::clearDevice() mDevice.destroy(nullptr); mInstance.destroySurfaceKHR(mSurface, nullptr); if (mEnableValidationLayers) { - mInstance.destroyDebugUtilsMessengerEXT(mDebugMessenger, nullptr, mDLD); + mInstance.destroyDebugUtilsMessengerEXT(mDebugMessenger, nullptr); } } diff --git a/GPU/GPUTracking/display/backend/GPUDisplayBackendVulkan.h b/GPU/GPUTracking/display/backend/GPUDisplayBackendVulkan.h index 97c24084915f6..caefdd25388c1 100644 --- a/GPU/GPUTracking/display/backend/GPUDisplayBackendVulkan.h +++ b/GPU/GPUTracking/display/backend/GPUDisplayBackendVulkan.h @@ -133,8 +133,6 @@ class GPUDisplayBackendVulkan : public GPUDisplayBackend bool mEnableValidationLayers = false; vk::Instance mInstance; - vk::DynamicLoader mDL; - vk::DispatchLoaderDynamic mDLD; vk::DebugUtilsMessengerEXT mDebugMessenger; vk::PhysicalDevice mPhysicalDevice; vk::Device mDevice;