|
|
|
@ -110,27 +110,16 @@ try |
|
|
|
, 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())) |
|
|
|
, |
|
|
|
// 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{}) |
|
|
|
, 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)) |
|
|
|
, dld() |
|
|
|
// Initialize resources in the same order as they are declared in the header
|
|
|
|
, instance(CreateInstance(*library, |
|
|
|
dld, |
|
|
|
VK_API_VERSION_1_1, |
|
|
|
render_window.GetWindowInfo().type, |
|
|
|
Settings::values.renderer_debug.GetValue())) |
|
|
|
, debug_messenger(Settings::values.renderer_debug ? CreateDebugUtilsCallback(instance) |
|
|
|
: vk::DebugUtilsMessenger{}) |
|
|
|
, surface(CreateSurface(instance, render_window.GetWindowInfo())) |
|
|
|
, device(CreateDevice(instance, dld, *surface)) |
|
|
|
, memory_allocator(device) |
|
|
|
, state_tracker() |
|
|
|
@ -172,22 +161,19 @@ try |
|
|
|
scheduler, |
|
|
|
PresentFiltersForAppletCapture) |
|
|
|
, rasterizer(render_window, gpu, device_memory, device, memory_allocator, state_tracker, scheduler) |
|
|
|
, applet_frame() { |
|
|
|
, turbo_mode() |
|
|
|
, applet_frame() |
|
|
|
, managed_instance(MakeManagedInstance(instance, dld)) |
|
|
|
, managed_debug_messenger(Settings::values.renderer_debug |
|
|
|
? MakeManagedDebugUtilsMessenger(debug_messenger, instance, dld) |
|
|
|
: ManagedDebugUtilsMessenger{}) |
|
|
|
, managed_surface(MakeManagedSurface(surface, instance, dld)) { |
|
|
|
|
|
|
|
if (Settings::values.renderer_force_max_clock.GetValue() && device.ShouldBoostClocks()) { |
|
|
|
turbo_mode.emplace(instance, dld); |
|
|
|
scheduler.RegisterOnSubmit([this] { turbo_mode->QueueSubmitted(); }); |
|
|
|
} |
|
|
|
|
|
|
|
#ifndef ANDROID
|
|
|
|
// Release ownership from the old instance and surface
|
|
|
|
instance.release(); |
|
|
|
surface.release(); |
|
|
|
if (Settings::values.renderer_debug) { |
|
|
|
debug_messenger.release(); |
|
|
|
} |
|
|
|
#endif
|
|
|
|
|
|
|
|
Report(); |
|
|
|
} catch (const vk::Exception& exception) { |
|
|
|
LOG_ERROR(Render_Vulkan, "Vulkan initialization failed with error: {}", exception.what()); |
|
|
|
|