diff options
| author | MrPurple666 <antoniosacramento666usa@gmail.com> | 2025-04-30 16:19:06 -0300 |
|---|---|---|
| committer | MrPurple666 <antoniosacramento666usa@gmail.com> | 2025-04-30 16:19:06 -0300 |
| commit | 7bd606bece182715d877fe5bbfb73daaac6546b7 (patch) | |
| tree | 9ac3698b78005301e4e69a28369a9d7afeb55e5e /src/video_core/renderer_vulkan | |
| parent | bb2f527b162372d6b63bbd5cc768f3e82dac0c5c (diff) | |
| parent | 4cf41673ba0a1861d7409f9bfe7c6cc3ff170564 (diff) | |
Merge https://git.eden-emu.dev/eden-emu/eden
Diffstat (limited to 'src/video_core/renderer_vulkan')
| -rw-r--r-- | src/video_core/renderer_vulkan/renderer_vulkan.cpp | 13 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/renderer_vulkan.h | 10 |
2 files changed, 21 insertions, 2 deletions
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index c4fe8235c7..ebc50290a9 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -106,11 +106,20 @@ RendererVulkan::RendererVulkan(Core::Frontend::EmuWindow& emu_window, std::unique_ptr<Core::Frontend::GraphicsContext> context_) try : RendererBase(emu_window, std::move(context_)), device_memory(device_memory_), gpu(gpu_), library(OpenLibrary(context.get())), + // Create raw Vulkan instance first instance(CreateInstance(*library, dld, VK_API_VERSION_1_1, render_window.GetWindowInfo().type, - Settings::values.renderer_debug.GetValue())), + Settings::values.renderer_debug.GetValue())), + // Now create RAII wrappers for the resources in the correct order + managed_instance(MakeManagedInstance(instance, dld)), + // Create debug messenger if debug is enabled debug_messenger(Settings::values.renderer_debug ? CreateDebugUtilsCallback(instance) - : vk::DebugUtilsMessenger{}), + : vk::DebugUtilsMessenger{}), + managed_debug_messenger(Settings::values.renderer_debug + ? MakeManagedDebugUtilsMessenger(debug_messenger, instance, dld) + : ManagedDebugUtilsMessenger{}), + // Create surface surface(CreateSurface(instance, render_window.GetWindowInfo())), + managed_surface(MakeManagedSurface(surface, instance, dld)), device(CreateDevice(instance, dld, *surface)), memory_allocator(device), state_tracker(), scheduler(device, state_tracker), swapchain(*surface, device, scheduler, render_window.GetFramebufferLayout().width, diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.h b/src/video_core/renderer_vulkan/renderer_vulkan.h index 0a606d6fed..748981cc6f 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.h +++ b/src/video_core/renderer_vulkan/renderer_vulkan.h @@ -21,6 +21,7 @@ #include "video_core/vulkan_common/vulkan_memory_allocator.h" #include "video_core/vulkan_common/hybrid_memory.h" #include "video_core/vulkan_common/vulkan_wrapper.h" +#include "video_core/vulkan_common/vulkan_raii.h" namespace Core::Memory { class Memory; @@ -76,9 +77,18 @@ private: std::shared_ptr<Common::DynamicLibrary> library; vk::InstanceDispatch dld; + // Keep original handles for compatibility with existing code vk::Instance instance; + // RAII wrapper for instance + ManagedInstance managed_instance; + vk::DebugUtilsMessenger debug_messenger; + // RAII wrapper for debug messenger + ManagedDebugUtilsMessenger managed_debug_messenger; + vk::SurfaceKHR surface; + // RAII wrapper for surface + ManagedSurface managed_surface; Device device; MemoryAllocator memory_allocator; |
