summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2020-12-25 02:01:13 -0300
committerGravatar ReinUsesLisp2020-12-31 02:07:33 -0300
commit47843b4f097ced5e99c5567b8ac3fd53b80fab0a (patch)
tree190309df63e67b03d651da034c07b0e4a994cc5f /src/video_core/renderer_vulkan
parentrenderer_vulkan: Move instance initialization to a separate file (diff)
downloadyuzu-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.cpp37
-rw-r--r--src/video_core/renderer_vulkan/renderer_vulkan.h4
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
49namespace Vulkan { 50namespace Vulkan {
50namespace { 51namespace {
51VkBool32 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
69std::string GetReadableVersion(u32 version) { 52std::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
204bool 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
216bool RendererVulkan::CreateSurface() { 191bool 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
58private: 58private:
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;