diff options
| author | 2020-12-25 02:01:13 -0300 | |
|---|---|---|
| committer | 2020-12-31 02:07:33 -0300 | |
| commit | 47843b4f097ced5e99c5567b8ac3fd53b80fab0a (patch) | |
| tree | 190309df63e67b03d651da034c07b0e4a994cc5f /src/video_core/renderer_vulkan | |
| parent | renderer_vulkan: Move instance initialization to a separate file (diff) | |
| download | yuzu-47843b4f097ced5e99c5567b8ac3fd53b80fab0a.tar.gz yuzu-47843b4f097ced5e99c5567b8ac3fd53b80fab0a.tar.xz yuzu-47843b4f097ced5e99c5567b8ac3fd53b80fab0a.zip | |
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.
Diffstat (limited to 'src/video_core/renderer_vulkan')
| -rw-r--r-- | src/video_core/renderer_vulkan/renderer_vulkan.cpp | 37 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/renderer_vulkan.h | 4 |
2 files changed, 7 insertions, 34 deletions
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index 82619bc61..8e01dc191 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include "video_core/renderer_vulkan/vk_scheduler.h" | 29 | #include "video_core/renderer_vulkan/vk_scheduler.h" |
| 30 | #include "video_core/renderer_vulkan/vk_state_tracker.h" | 30 | #include "video_core/renderer_vulkan/vk_state_tracker.h" |
| 31 | #include "video_core/renderer_vulkan/vk_swapchain.h" | 31 | #include "video_core/renderer_vulkan/vk_swapchain.h" |
| 32 | #include "video_core/vulkan_common/vulkan_debug_callback.h" | ||
| 32 | #include "video_core/vulkan_common/vulkan_instance.h" | 33 | #include "video_core/vulkan_common/vulkan_instance.h" |
| 33 | #include "video_core/vulkan_common/vulkan_library.h" | 34 | #include "video_core/vulkan_common/vulkan_library.h" |
| 34 | #include "video_core/vulkan_common/vulkan_wrapper.h" | 35 | #include "video_core/vulkan_common/vulkan_wrapper.h" |
| @@ -48,24 +49,6 @@ | |||
| 48 | 49 | ||
| 49 | namespace Vulkan { | 50 | namespace Vulkan { |
| 50 | namespace { | 51 | namespace { |
| 51 | VkBool32 DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT severity, | ||
| 52 | VkDebugUtilsMessageTypeFlagsEXT type, | ||
| 53 | const VkDebugUtilsMessengerCallbackDataEXT* data, | ||
| 54 | [[maybe_unused]] void* user_data) { | ||
| 55 | const char* const message{data->pMessage}; | ||
| 56 | |||
| 57 | if (severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) { | ||
| 58 | LOG_CRITICAL(Render_Vulkan, "{}", message); | ||
| 59 | } else if (severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) { | ||
| 60 | LOG_WARNING(Render_Vulkan, "{}", message); | ||
| 61 | } else if (severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) { | ||
| 62 | LOG_INFO(Render_Vulkan, "{}", message); | ||
| 63 | } else if (severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) { | ||
| 64 | LOG_DEBUG(Render_Vulkan, "{}", message); | ||
| 65 | } | ||
| 66 | return VK_FALSE; | ||
| 67 | } | ||
| 68 | |||
| 69 | std::string GetReadableVersion(u32 version) { | 52 | std::string GetReadableVersion(u32 version) { |
| 70 | return fmt::format("{}.{}.{}", VK_VERSION_MAJOR(version), VK_VERSION_MINOR(version), | 53 | return fmt::format("{}.{}.{}", VK_VERSION_MAJOR(version), VK_VERSION_MINOR(version), |
| 71 | VK_VERSION_PATCH(version)); | 54 | VK_VERSION_PATCH(version)); |
| @@ -158,7 +141,11 @@ bool RendererVulkan::Init() { | |||
| 158 | library = OpenLibrary(); | 141 | library = OpenLibrary(); |
| 159 | std::tie(instance, instance_version) = CreateInstance( | 142 | std::tie(instance, instance_version) = CreateInstance( |
| 160 | library, dld, render_window.GetWindowInfo().type, true, Settings::values.renderer_debug); | 143 | library, dld, render_window.GetWindowInfo().type, true, Settings::values.renderer_debug); |
| 161 | if (!instance || !CreateDebugCallback() || !CreateSurface() || !PickDevices()) { | 144 | if (Settings::values.renderer_debug) { |
| 145 | debug_callback = CreateDebugCallback(instance); | ||
| 146 | } | ||
| 147 | |||
| 148 | if (!CreateSurface() || !PickDevices()) { | ||
| 162 | return false; | 149 | return false; |
| 163 | } | 150 | } |
| 164 | 151 | ||
| @@ -201,18 +188,6 @@ void RendererVulkan::ShutDown() { | |||
| 201 | device.reset(); | 188 | device.reset(); |
| 202 | } | 189 | } |
| 203 | 190 | ||
| 204 | bool RendererVulkan::CreateDebugCallback() { | ||
| 205 | if (!Settings::values.renderer_debug) { | ||
| 206 | return true; | ||
| 207 | } | ||
| 208 | debug_callback = instance.TryCreateDebugCallback(DebugCallback); | ||
| 209 | if (!debug_callback) { | ||
| 210 | LOG_ERROR(Render_Vulkan, "Failed to create debug callback"); | ||
| 211 | return false; | ||
| 212 | } | ||
| 213 | return true; | ||
| 214 | } | ||
| 215 | |||
| 216 | bool RendererVulkan::CreateSurface() { | 191 | bool RendererVulkan::CreateSurface() { |
| 217 | [[maybe_unused]] const auto& window_info = render_window.GetWindowInfo(); | 192 | [[maybe_unused]] const auto& window_info = render_window.GetWindowInfo(); |
| 218 | VkSurfaceKHR unsafe_surface = nullptr; | 193 | VkSurfaceKHR unsafe_surface = nullptr; |
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.h b/src/video_core/renderer_vulkan/renderer_vulkan.h index 4a0abfaad..fa7628d0e 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.h +++ b/src/video_core/renderer_vulkan/renderer_vulkan.h | |||
| @@ -56,8 +56,6 @@ public: | |||
| 56 | static std::vector<std::string> EnumerateDevices(); | 56 | static std::vector<std::string> EnumerateDevices(); |
| 57 | 57 | ||
| 58 | private: | 58 | private: |
| 59 | bool CreateDebugCallback(); | ||
| 60 | |||
| 61 | bool CreateSurface(); | 59 | bool CreateSurface(); |
| 62 | 60 | ||
| 63 | bool PickDevices(); | 61 | bool PickDevices(); |
| @@ -78,7 +76,7 @@ private: | |||
| 78 | 76 | ||
| 79 | VKScreenInfo screen_info; | 77 | VKScreenInfo screen_info; |
| 80 | 78 | ||
| 81 | vk::DebugCallback debug_callback; | 79 | vk::DebugUtilsMessenger debug_callback; |
| 82 | std::unique_ptr<VKDevice> device; | 80 | std::unique_ptr<VKDevice> device; |
| 83 | std::unique_ptr<VKMemoryManager> memory_manager; | 81 | std::unique_ptr<VKMemoryManager> memory_manager; |
| 84 | std::unique_ptr<StateTracker> state_tracker; | 82 | std::unique_ptr<StateTracker> state_tracker; |