Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 14 additions & 10 deletions GPU/GPUTracking/display/backend/GPUDisplayBackendVulkan.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,16 @@
/// \file GPUDisplayBackendVulkan.cxx
/// \author David Rohr

#define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1
#include <vulkan/vulkan.hpp>
#include <mutex>

VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE

#include "GPUCommonDef.h"
#include "GPUDisplayBackendVulkan.h"
#include "GPUDisplay.h"

#include <mutex>

using namespace o2::gpu;

#include "utils/qGetLdBinarySymbols.h"
Expand Down Expand Up @@ -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);
Expand All @@ -353,28 +355,28 @@ void GPUDisplayBackendVulkan::createDevice()

const std::vector<const char*> 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;
Expand Down Expand Up @@ -403,10 +405,11 @@ void GPUDisplayBackendVulkan::createDevice()
instanceCreateInfo.ppEnabledExtensionNames = reqInstanceExtensions.data();

mInstance = vk::createInstance(instanceCreateInfo, nullptr);
mDLD = {mInstance, mDL.getProcAddress<PFN_vkGetInstanceProcAddr>("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<vk::ExtensionProperties> extensions = vk::enumerateInstanceExtensionProperties(nullptr);
if (mDisplay->param()->par.debugLevel >= 3) {
Expand Down Expand Up @@ -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{};
Expand All @@ -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);
}
}

Expand Down
2 changes: 0 additions & 2 deletions GPU/GPUTracking/display/backend/GPUDisplayBackendVulkan.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down