[vk, frontend] RAII Toggle (#247)

Co-authored-by: Pavel Barabanov <pavelbarabanov94@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/247
This commit is contained in:
PavelBARABANOV 2025-07-03 16:35:02 +00:00
parent a002730d68
commit 5d4c6e085d
No known key found for this signature in database
GPG key ID: BA8734FD0EE46976
30 changed files with 708 additions and 111 deletions

View file

@ -110,27 +110,18 @@ try
, device_memory(device_memory_)
, gpu(gpu_)
, library(OpenLibrary(context.get()))
,
, dld()
// Create raw Vulkan instance first
instance(CreateInstance(*library,
, 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)
, 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))
, surface(CreateSurface(instance, render_window.GetWindowInfo()))
, device(CreateDevice(instance, dld, *surface))
, memory_allocator(device)
, state_tracker()
@ -138,8 +129,8 @@ try
, swapchain(*surface,
device,
scheduler,
render_window.GetFramebufferLayout().width,
render_window.GetFramebufferLayout().height)
render_window.GetFramebufferLayout().width,
render_window.GetFramebufferLayout().height)
, present_manager(instance,
render_window,
device,
@ -171,23 +162,22 @@ try
present_manager,
scheduler,
PresentFiltersForAppletCapture)
, rasterizer(render_window, gpu, device_memory, device, memory_allocator, state_tracker, scheduler)
, applet_frame() {
, rasterizer(render_window, gpu, device_memory, device, memory_allocator, state_tracker, scheduler) {
// Initialize RAII wrappers after creating the main objects
if (Settings::values.enable_raii.GetValue()) {
managed_instance = MakeManagedInstance(instance, dld);
if (Settings::values.renderer_debug) {
managed_debug_messenger = MakeManagedDebugUtilsMessenger(debug_messenger, instance, dld);
}
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());
@ -223,12 +213,12 @@ class BooleanSetting {
BooleanSetting BooleanSetting::FRAME_INTERPOLATION(false);
// extern "C" JNIEXPORT jboolean JNICALL
// Java_org_uzuy_uzuy_1emu_features_settings_model_BooleanSetting_isFrameSkippingEnabled(JNIEnv* env, jobject /* this */) {
// Java_org_yuzu_yuzu_1emu_features_settings_model_BooleanSetting_isFrameSkippingEnabled(JNIEnv* env, jobject /* this */) {
// return static_cast<jboolean>(BooleanSetting::FRAME_SKIPPING.getBoolean());
// }
extern "C" JNIEXPORT jboolean JNICALL
Java_org_uzuy_uzuy_1emu_features_settings_model_BooleanSetting_isFrameInterpolationEnabled(JNIEnv* env, jobject /* this */) {
Java_org_yuzu_yuzu_1emu_features_settings_model_BooleanSetting_isFrameInterpolationEnabled(JNIEnv* env, jobject /* this */) {
return static_cast<jboolean>(BooleanSetting::FRAME_INTERPOLATION.getBoolean());
}