Browse Source
renderer_vulkan: Create debug callback on separate file and throw
renderer_vulkan: Create debug callback on separate file and throw
Initialize debug callbacks (messenger) from a separate file. This allows sharing code with different backends. Change our Vulkan error handling to use exceptions instead of error codes, simplifying the initialization process.pull/15/merge
8 changed files with 88 additions and 79 deletions
-
2src/video_core/CMakeLists.txt
-
37src/video_core/renderer_vulkan/renderer_vulkan.cpp
-
4src/video_core/renderer_vulkan/renderer_vulkan.h
-
45src/video_core/vulkan_common/vulkan_debug_callback.cpp
-
11src/video_core/vulkan_common/vulkan_debug_callback.h
-
14src/video_core/vulkan_common/vulkan_instance.cpp
-
39src/video_core/vulkan_common/vulkan_wrapper.cpp
-
15src/video_core/vulkan_common/vulkan_wrapper.h
@ -0,0 +1,45 @@ |
|||
// Copyright 2020 yuzu Emulator Project
|
|||
// Licensed under GPLv2 or any later version
|
|||
// Refer to the license.txt file included.
|
|||
|
|||
#include <string_view>
|
|||
#include "common/logging/log.h"
|
|||
#include "video_core/vulkan_common/vulkan_debug_callback.h"
|
|||
|
|||
namespace Vulkan { |
|||
namespace { |
|||
VkBool32 Callback(VkDebugUtilsMessageSeverityFlagBitsEXT severity, |
|||
VkDebugUtilsMessageTypeFlagsEXT type, |
|||
const VkDebugUtilsMessengerCallbackDataEXT* data, |
|||
[[maybe_unused]] void* user_data) { |
|||
const std::string_view message{data->pMessage}; |
|||
if (severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) { |
|||
LOG_CRITICAL(Render_Vulkan, "{}", message); |
|||
} else if (severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) { |
|||
LOG_WARNING(Render_Vulkan, "{}", message); |
|||
} else if (severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) { |
|||
LOG_INFO(Render_Vulkan, "{}", message); |
|||
} else if (severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) { |
|||
LOG_DEBUG(Render_Vulkan, "{}", message); |
|||
} |
|||
return VK_FALSE; |
|||
} |
|||
} // Anonymous namespace
|
|||
|
|||
vk::DebugUtilsMessenger CreateDebugCallback(const vk::Instance& instance) { |
|||
return instance.CreateDebugUtilsMessenger(VkDebugUtilsMessengerCreateInfoEXT{ |
|||
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, |
|||
.pNext = nullptr, |
|||
.flags = 0, |
|||
.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | |
|||
VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | |
|||
VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | |
|||
VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, |
|||
.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | |
|||
VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | |
|||
VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT, |
|||
.pfnUserCallback = Callback, |
|||
}); |
|||
} |
|||
|
|||
} // namespace Vulkan
|
|||
@ -0,0 +1,11 @@ |
|||
// Copyright 2020 yuzu Emulator Project |
|||
// Licensed under GPLv2 or any later version |
|||
// Refer to the license.txt file included. |
|||
|
|||
#include "video_core/vulkan_common/vulkan_wrapper.h" |
|||
|
|||
namespace Vulkan { |
|||
|
|||
vk::DebugUtilsMessenger CreateDebugCallback(const vk::Instance& instance); |
|||
|
|||
} // namespace Vulkan |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue