mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2025-10-05 15:52:45 +02:00
RAII toggle
This commit is contained in:
@@ -40,6 +40,7 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
|
||||
|
||||
SOC_OVERLAY_BACKGROUND("soc_overlay_background"),
|
||||
|
||||
ENABLE_RAII("enable_raii"),
|
||||
FRAME_INTERPOLATION("frame_interpolation"),
|
||||
// FRAME_SKIPPING("frame_skipping"),
|
||||
|
||||
@@ -54,7 +55,9 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
|
||||
SHOW_SHADERS_BUILDING("show_shaders_building"),
|
||||
DEBUG_FLUSH_BY_LINE("flush_lines"),
|
||||
USE_LRU_CACHE("use_lru_cache"),;
|
||||
// external fun isFrameSkippingEnabled(): Boolean
|
||||
|
||||
external fun isRaiiEnabled(): Boolean
|
||||
// external fun isFrameSkippingEnabled(): Boolean
|
||||
external fun isFrameInterpolationEnabled(): Boolean
|
||||
|
||||
|
||||
|
@@ -210,7 +210,13 @@ abstract class SettingsItem(
|
||||
|
||||
override fun reset() = BooleanSetting.USE_DOCKED_MODE.reset()
|
||||
}
|
||||
|
||||
put(
|
||||
SwitchSetting(
|
||||
BooleanSetting.ENABLE_RAII,
|
||||
titleId = R.string.enable_raii,
|
||||
descriptionId = R.string.enable_raii_description
|
||||
)
|
||||
)
|
||||
put(
|
||||
SwitchSetting(
|
||||
BooleanSetting.FRAME_INTERPOLATION,
|
||||
|
@@ -434,6 +434,7 @@ class SettingsFragmentPresenter(
|
||||
add(BooleanSetting.RENDERER_DESCRIPTOR_INDEXING.key)
|
||||
|
||||
add(HeaderSetting(R.string.veil_renderer))
|
||||
add(BooleanSetting.ENABLE_RAII.key)
|
||||
add(BooleanSetting.FRAME_INTERPOLATION.key)
|
||||
add(BooleanSetting.RENDERER_FAST_GPU.key)
|
||||
add(IntSetting.FAST_GPU_TIME.key)
|
||||
|
@@ -66,6 +66,8 @@
|
||||
<string name="eden_veil_warning_description">Настройки в Eden\'s Veil являются экспериментальными и могут вызывать проблемы. Если ваша игра не запускается, отключите все расширения и установите расширенное динамическое состояние на 0.</string>
|
||||
<string name="frame_skipping">В разработке: Пропуск кадров</string>
|
||||
<string name="frame_skipping_description">Включите или отключите пропуск кадров для повышения производительности за счет уменьшения количества отображаемых кадров. Эта функция находится в разработке и будет включена в будущих версиях.</string>
|
||||
<string name="enable_raii">RAII</string>
|
||||
<string name="enable_raii_description">Метод автоматического управления ресурсами в Vulkan, который обеспечивает правильное освобождение ресурсов при их ненадобности, но может вызывать сбои в бандл-играх.</string>
|
||||
<string name="frame_interpolation">Улучшенная синхронизация кадров</string>
|
||||
<string name="frame_interpolation_description">Обеспечивает плавную и стабильную подачу кадров за счет синхронизации их времени, уменьшая подтормаживания и неравномерную анимацию. Идеально для игр с нестабильным временем кадров или микро-подтормаживаниями во время игры.</string>
|
||||
<string name="use_lru_cache">Включить LRU-кеш</string>
|
||||
|
@@ -74,6 +74,8 @@
|
||||
<string name="descriptor_indexing_description">Improves texture and buffer handling, as well as the Maxwell translation layer. Supported by some Vulkan 1.1 GPUs and all Vulkan 1.2+ GPUs.</string>
|
||||
|
||||
<string name="veil_renderer">Renderer</string>
|
||||
<string name="enable_raii">RAII</string>
|
||||
<string name="enable_raii_description">A method of automatic resource management in Vulkan that ensures proper release of resources when they are no longer needed, but may cause crashes in bundled games.</string>
|
||||
<string name="frame_interpolation">Enhanced Frame Pacing</string>
|
||||
<string name="frame_interpolation_description">Ensures smooth and consistent frame delivery by synchronizing the timing between frames, reducing stuttering and uneven animation. Ideal for games that experience frame timing instability or micro-stutters during gameplay.</string>
|
||||
<string name="use_auto_stub">Use Auto Stub</string>
|
||||
|
@@ -302,6 +302,8 @@ struct Values {
|
||||
"shader_backend", Category::Renderer, Specialization::RuntimeList};
|
||||
SwitchableSetting<int> vulkan_device{linkage, 0, "vulkan_device", Category::Renderer,
|
||||
Specialization::RuntimeList};
|
||||
SwitchableSetting<bool> enable_raii{linkage, false, "enable_raii", Category::Renderer,
|
||||
Specialization::RuntimeList};
|
||||
#ifdef __ANDROID__
|
||||
SwitchableSetting<bool> frame_interpolation{linkage, true, "frame_interpolation", Category::Renderer,
|
||||
Specialization::RuntimeList};
|
||||
@@ -450,7 +452,7 @@ struct Values {
|
||||
SwitchableSetting<bool> use_asynchronous_shaders{linkage, false, "use_asynchronous_shaders",
|
||||
Category::RendererAdvanced};
|
||||
SwitchableSetting<bool> use_fast_gpu_time{linkage,
|
||||
false,
|
||||
true,
|
||||
"use_fast_gpu_time",
|
||||
Category::RendererAdvanced,
|
||||
Specialization::Paired,
|
||||
|
@@ -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,8 +162,15 @@ 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);
|
||||
@@ -180,11 +178,13 @@ try
|
||||
}
|
||||
|
||||
#ifndef ANDROID
|
||||
// Release ownership from the old instance and surface
|
||||
instance.release();
|
||||
surface.release();
|
||||
if (Settings::values.renderer_debug) {
|
||||
debug_messenger.release();
|
||||
if (Settings::values.enable_raii.GetValue()) {
|
||||
// Release ownership of the original resources if using RAII
|
||||
instance.release();
|
||||
surface.release();
|
||||
if (Settings::values.renderer_debug) {
|
||||
debug_messenger.release();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -223,12 +223,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());
|
||||
}
|
||||
|
||||
|
@@ -317,6 +317,12 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QWidget* parent)
|
||||
tr("Improves rendering of transparency effects in specific games."));
|
||||
|
||||
// Renderer (Extensions)
|
||||
INSERT(Settings,
|
||||
enable_raii,
|
||||
tr("RAII"),
|
||||
tr("A method of automatic resource management in Vulkan "
|
||||
"that ensures proper release of resources "
|
||||
"when they are no longer needed, but may cause crashes in bundled games."));
|
||||
INSERT(Settings,
|
||||
dyna_state,
|
||||
tr("Extended Dynamic State"),
|
||||
|
Reference in New Issue
Block a user