Browse Source

Add ability for integrated devices to control the amount of memory used by the emulator

pull/2528/head
MaranBr 6 months ago
committed by crueter
parent
commit
0cd6a28229
  1. 5
      src/qt_common/shared_translation.cpp
  2. 20
      src/video_core/vulkan_common/vulkan_device.cpp

5
src/qt_common/shared_translation.cpp

@ -246,10 +246,7 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QObject* parent)
INSERT(Settings,
vram_usage_mode,
tr("VRAM Usage Mode:"),
tr("Selects whether the emulator should prefer to conserve memory or make maximum usage "
"of available video memory for performance.\nHas no effect on integrated graphics. "
"Aggressive mode may severely impact the performance of other applications such as "
"recording software."));
tr("Selects whether the emulator should prefer to conserve memory or make maximum usage of available video memory for performance.\nAggressive mode may severely impact the performance of other applications such as recording software."));
INSERT(Settings,
skip_cpu_inner_invalidation,
tr("Skip CPU Inner Invalidation"),

20
src/video_core/vulkan_common/vulkan_device.cpp

@ -1395,23 +1395,23 @@ void Device::CollectPhysicalMemoryInfo() {
}
device_access_memory += mem_properties.memoryHeaps[element].size;
}
if (!is_integrated) {
if (is_integrated) {
const s64 available_memory = static_cast<s64>(device_access_memory - device_initial_usage);
if (Settings::values.vram_usage_mode.GetValue() == Settings::VramUsageMode::Aggressive) {
device_access_memory = static_cast<u64>(std::max<s64>(std::min<s64>(available_memory - 8_GiB, 6_GiB), std::min<s64>(local_memory, 6_GiB)));
} else {
device_access_memory = static_cast<u64>(std::max<s64>(std::min<s64>(available_memory - 8_GiB, 4_GiB), std::min<s64>(local_memory, 6_GiB)));
}
} else {
const u64 reserve_memory = std::min<u64>(device_access_memory / 8, 1_GiB);
device_access_memory -= reserve_memory;
if (Settings::values.vram_usage_mode.GetValue() != Settings::VramUsageMode::Aggressive) {
// Account for resolution scaling in memory limits
const size_t normal_memory = 6_GiB;
const size_t scaler_memory = 1_GiB * Settings::values.resolution_info.ScaleUp(1);
device_access_memory =
std::min<u64>(device_access_memory, normal_memory + scaler_memory);
device_access_memory = std::min<u64>(device_access_memory, normal_memory + scaler_memory);
}
return;
}
const s64 available_memory = static_cast<s64>(device_access_memory - device_initial_usage);
device_access_memory = static_cast<u64>(std::max<s64>(
std::min<s64>(available_memory - 8_GiB, 6_GiB), std::min<s64>(local_memory, 6_GiB)));
}
}
void Device::CollectToolingInfo() {

Loading…
Cancel
Save