diff --git a/app/src/main/cpp/skyline/common/android_settings.h b/app/src/main/cpp/skyline/common/android_settings.h index c6d026f4..eedbd7c4 100644 --- a/app/src/main/cpp/skyline/common/android_settings.h +++ b/app/src/main/cpp/skyline/common/android_settings.h @@ -39,7 +39,7 @@ namespace skyline { disableFrameThrottling = ktSettings.GetBool("disableFrameThrottling"); gpuDriver = ktSettings.GetString("gpuDriver"); gpuDriverLibraryName = ktSettings.GetString("gpuDriverLibraryName"); - executorSlotCount = ktSettings.GetInt("executorSlotCount"); + executorSlotCountScale = ktSettings.GetInt("executorSlotCountScale"); enableFastGpuReadbackHack = ktSettings.GetBool("enableFastGpuReadbackHack"); isAudioOutputDisabled = ktSettings.GetBool("isAudioOutputDisabled"); validationLayer = ktSettings.GetBool("validationLayer"); diff --git a/app/src/main/cpp/skyline/common/settings.h b/app/src/main/cpp/skyline/common/settings.h index 4c8ee61b..47cc2ca4 100644 --- a/app/src/main/cpp/skyline/common/settings.h +++ b/app/src/main/cpp/skyline/common/settings.h @@ -71,7 +71,7 @@ namespace skyline { // GPU Setting gpuDriver; //!< The label of the GPU driver to use Setting gpuDriverLibraryName; //!< The name of the GPU driver library to use - Setting executorSlotCount; //!< Number of GPU executor slots that can be used concurrently + Setting executorSlotCountScale; //!< Number of GPU executor slots that can be used concurrently // Hacks Setting enableFastGpuReadbackHack; //!< If the CPU texture readback skipping hack should be used diff --git a/app/src/main/cpp/skyline/gpu/interconnect/command_executor.cpp b/app/src/main/cpp/skyline/gpu/interconnect/command_executor.cpp index 6b8485f8..af239a77 100644 --- a/app/src/main/cpp/skyline/gpu/interconnect/command_executor.cpp +++ b/app/src/main/cpp/skyline/gpu/interconnect/command_executor.cpp @@ -7,12 +7,13 @@ #include #include #include "command_executor.h" +#include namespace skyline::gpu::interconnect { CommandRecordThread::CommandRecordThread(const DeviceState &state) : state{state}, - incoming{*state.settings->executorSlotCount}, - outgoing{*state.settings->executorSlotCount}, + incoming{1U << *state.settings->executorSlotCountScale}, + outgoing{1U << *state.settings->executorSlotCountScale}, thread{&CommandRecordThread::Run, this} {} CommandRecordThread::Slot::ScopedBegin::ScopedBegin(CommandRecordThread::Slot &slot) : slot{slot} {} @@ -126,7 +127,7 @@ namespace skyline::gpu::interconnect { } std::vector slots{}; - std::generate_n(std::back_inserter(slots), *state.settings->executorSlotCount, [&] () -> Slot { return gpu; }); + std::generate_n(std::back_inserter(slots), (1U << *state.settings->executorSlotCountScale), [&] () -> Slot { return gpu; }); outgoing.AppendTranform(span(slots), [](auto &slot) { return &slot; }); @@ -472,7 +473,7 @@ namespace skyline::gpu::interconnect { renderPassIndex = 0; // Periodically clear preserve attachments just in case there are new waiters which would otherwise end up waiting forever - if ((submissionNumber % (*state.settings->executorSlotCount * 2)) == 0) { + if ((submissionNumber % (2U << *state.settings->executorSlotCountScale)) == 0) { preserveAttachedBuffers.clear(); preserveAttachedTextures.clear(); } diff --git a/app/src/main/java/emu/skyline/utils/NativeSettings.kt b/app/src/main/java/emu/skyline/utils/NativeSettings.kt index 5f2c825c..39ce55da 100644 --- a/app/src/main/java/emu/skyline/utils/NativeSettings.kt +++ b/app/src/main/java/emu/skyline/utils/NativeSettings.kt @@ -25,7 +25,7 @@ class NativeSettings(context : Context, pref : PreferenceSettings) { // GPU var gpuDriver : String = if (pref.gpuDriver == PreferenceSettings.SYSTEM_GPU_DRIVER) "" else pref.gpuDriver var gpuDriverLibraryName : String = if (pref.gpuDriver == PreferenceSettings.SYSTEM_GPU_DRIVER) "" else GpuDriverHelper.getLibraryName(context, pref.gpuDriver) - var executorSlotCount : Int = pref.executorSlotCount + var executorSlotCountScale : Int = pref.executorSlotCountScale // Hacks var enableFastGpuReadbackHack : Boolean = pref.enableFastGpuReadbackHack diff --git a/app/src/main/java/emu/skyline/utils/PreferenceSettings.kt b/app/src/main/java/emu/skyline/utils/PreferenceSettings.kt index 29378f22..00555579 100644 --- a/app/src/main/java/emu/skyline/utils/PreferenceSettings.kt +++ b/app/src/main/java/emu/skyline/utils/PreferenceSettings.kt @@ -38,7 +38,7 @@ class PreferenceSettings @Inject constructor(@ApplicationContext private val con // GPU var gpuDriver by sharedPreferences(context, SYSTEM_GPU_DRIVER) - var executorSlotCount by sharedPreferences(context, 6) + var executorSlotCountScale by sharedPreferences(context, 6) // Hacks var enableFastGpuReadbackHack by sharedPreferences(context, false) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 441f8fc0..e1bc619f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -73,8 +73,8 @@ Respect Display Cutout Do not draw UI elements in the cutout area Allow UI elements to be drawn in the cutout area - Executor Slot Count - Maximum number of simultaneous GPU executions (Higher may sometimes perform better but will use more RAM) + Executor Slot Count Scale + Scale controlling the maximum number of simultaneous GPU executions (Higher may sometimes perform better but will use more RAM) Hacks Enable fast GPU readback diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 84eb983d..7a70b9b2 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -129,11 +129,11 @@ app:title="@string/respect_display_cutout" />