early-access version 1984
This commit is contained in:
parent
c8db4e5c9e
commit
bdd9b5d7c2
@ -1,7 +1,7 @@
|
|||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 1983.
|
This is the source code for early-access 1984.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
|
@ -59,6 +59,7 @@ void LogSettings() {
|
|||||||
log_setting("Renderer_UseVsync", values.use_vsync.GetValue());
|
log_setting("Renderer_UseVsync", values.use_vsync.GetValue());
|
||||||
log_setting("Renderer_ShaderBackend", values.shader_backend.GetValue());
|
log_setting("Renderer_ShaderBackend", values.shader_backend.GetValue());
|
||||||
log_setting("Renderer_UseAsynchronousShaders", values.use_asynchronous_shaders.GetValue());
|
log_setting("Renderer_UseAsynchronousShaders", values.use_asynchronous_shaders.GetValue());
|
||||||
|
log_setting("Renderer_UseGarbageCollection", values.use_caches_gc.GetValue());
|
||||||
log_setting("Renderer_AnisotropicFilteringLevel", values.max_anisotropy.GetValue());
|
log_setting("Renderer_AnisotropicFilteringLevel", values.max_anisotropy.GetValue());
|
||||||
log_setting("Audio_OutputEngine", values.sink_id.GetValue());
|
log_setting("Audio_OutputEngine", values.sink_id.GetValue());
|
||||||
log_setting("Audio_EnableAudioStretching", values.enable_audio_stretching.GetValue());
|
log_setting("Audio_EnableAudioStretching", values.enable_audio_stretching.GetValue());
|
||||||
@ -142,6 +143,7 @@ void RestoreGlobalState(bool is_powered_on) {
|
|||||||
values.shader_backend.SetGlobal(true);
|
values.shader_backend.SetGlobal(true);
|
||||||
values.use_asynchronous_shaders.SetGlobal(true);
|
values.use_asynchronous_shaders.SetGlobal(true);
|
||||||
values.use_fast_gpu_time.SetGlobal(true);
|
values.use_fast_gpu_time.SetGlobal(true);
|
||||||
|
values.use_caches_gc.SetGlobal(true);
|
||||||
values.bg_red.SetGlobal(true);
|
values.bg_red.SetGlobal(true);
|
||||||
values.bg_green.SetGlobal(true);
|
values.bg_green.SetGlobal(true);
|
||||||
values.bg_blue.SetGlobal(true);
|
values.bg_blue.SetGlobal(true);
|
||||||
|
@ -356,6 +356,7 @@ struct Values {
|
|||||||
Setting<ShaderBackend> shader_backend{ShaderBackend::GLASM, "shader_backend"};
|
Setting<ShaderBackend> shader_backend{ShaderBackend::GLASM, "shader_backend"};
|
||||||
Setting<bool> use_asynchronous_shaders{false, "use_asynchronous_shaders"};
|
Setting<bool> use_asynchronous_shaders{false, "use_asynchronous_shaders"};
|
||||||
Setting<bool> use_fast_gpu_time{true, "use_fast_gpu_time"};
|
Setting<bool> use_fast_gpu_time{true, "use_fast_gpu_time"};
|
||||||
|
Setting<bool> use_caches_gc{false, "use_caches_gc"};
|
||||||
|
|
||||||
Setting<u8> bg_red{0, "bg_red"};
|
Setting<u8> bg_red{0, "bg_red"};
|
||||||
Setting<u8> bg_green{0, "bg_green"};
|
Setting<u8> bg_green{0, "bg_green"};
|
||||||
|
@ -485,7 +485,7 @@ void BufferCache<P>::TickFrame() {
|
|||||||
const bool skip_preferred = hits * 256 < shots * 251;
|
const bool skip_preferred = hits * 256 < shots * 251;
|
||||||
uniform_buffer_skip_cache_size = skip_preferred ? DEFAULT_SKIP_CACHE_SIZE : 0;
|
uniform_buffer_skip_cache_size = skip_preferred ? DEFAULT_SKIP_CACHE_SIZE : 0;
|
||||||
|
|
||||||
if (total_used_memory >= EXPECTED_MEMORY) {
|
if (Settings::values.use_caches_gc.GetValue() && total_used_memory >= EXPECTED_MEMORY) {
|
||||||
RunGarbageCollector();
|
RunGarbageCollector();
|
||||||
}
|
}
|
||||||
++frame_tick;
|
++frame_tick;
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "common/literals.h"
|
#include "common/literals.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
|
#include "common/settings.h"
|
||||||
#include "video_core/compatible_formats.h"
|
#include "video_core/compatible_formats.h"
|
||||||
#include "video_core/delayed_destruction_ring.h"
|
#include "video_core/delayed_destruction_ring.h"
|
||||||
#include "video_core/dirty_flags.h"
|
#include "video_core/dirty_flags.h"
|
||||||
@ -509,7 +510,7 @@ void TextureCache<P>::RunGarbageCollector() {
|
|||||||
|
|
||||||
template <class P>
|
template <class P>
|
||||||
void TextureCache<P>::TickFrame() {
|
void TextureCache<P>::TickFrame() {
|
||||||
if (total_used_memory > minimum_memory) {
|
if (Settings::values.use_caches_gc.GetValue() && total_used_memory > minimum_memory) {
|
||||||
RunGarbageCollector();
|
RunGarbageCollector();
|
||||||
}
|
}
|
||||||
sentenced_images.Tick();
|
sentenced_images.Tick();
|
||||||
|
@ -832,6 +832,7 @@ void Config::ReadRendererValues() {
|
|||||||
ReadGlobalSetting(Settings::values.shader_backend);
|
ReadGlobalSetting(Settings::values.shader_backend);
|
||||||
ReadGlobalSetting(Settings::values.use_asynchronous_shaders);
|
ReadGlobalSetting(Settings::values.use_asynchronous_shaders);
|
||||||
ReadGlobalSetting(Settings::values.use_fast_gpu_time);
|
ReadGlobalSetting(Settings::values.use_fast_gpu_time);
|
||||||
|
ReadGlobalSetting(Settings::values.use_caches_gc);
|
||||||
ReadGlobalSetting(Settings::values.bg_red);
|
ReadGlobalSetting(Settings::values.bg_red);
|
||||||
ReadGlobalSetting(Settings::values.bg_green);
|
ReadGlobalSetting(Settings::values.bg_green);
|
||||||
ReadGlobalSetting(Settings::values.bg_blue);
|
ReadGlobalSetting(Settings::values.bg_blue);
|
||||||
@ -1383,6 +1384,7 @@ void Config::SaveRendererValues() {
|
|||||||
Settings::values.shader_backend.UsingGlobal());
|
Settings::values.shader_backend.UsingGlobal());
|
||||||
WriteGlobalSetting(Settings::values.use_asynchronous_shaders);
|
WriteGlobalSetting(Settings::values.use_asynchronous_shaders);
|
||||||
WriteGlobalSetting(Settings::values.use_fast_gpu_time);
|
WriteGlobalSetting(Settings::values.use_fast_gpu_time);
|
||||||
|
WriteGlobalSetting(Settings::values.use_caches_gc);
|
||||||
WriteGlobalSetting(Settings::values.bg_red);
|
WriteGlobalSetting(Settings::values.bg_red);
|
||||||
WriteGlobalSetting(Settings::values.bg_green);
|
WriteGlobalSetting(Settings::values.bg_green);
|
||||||
WriteGlobalSetting(Settings::values.bg_blue);
|
WriteGlobalSetting(Settings::values.bg_blue);
|
||||||
|
@ -24,6 +24,36 @@
|
|||||||
<layout class="QHBoxLayout" name="GeneralHorizontalLayout">
|
<layout class="QHBoxLayout" name="GeneralHorizontalLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QVBoxLayout" name="GeneralVerticalLayout">
|
<layout class="QVBoxLayout" name="GeneralVerticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="fps_cap_label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Framerate Cap</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Requires the use of the FPS Limiter Toggle hotkey to take effect.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="fps_cap">
|
||||||
|
<property name="suffix">
|
||||||
|
<string>x</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>1000</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>500</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
@ -51,36 +81,6 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="fps_cap_label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Framerate Cap</string>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Requires the use of the FPS Limiter Toggle hotkey to take effect.</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QSpinBox" name="fps_cap">
|
|
||||||
<property name="suffix">
|
|
||||||
<string>x</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>1000</number>
|
|
||||||
</property>
|
|
||||||
<property name="value">
|
|
||||||
<number>500</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="use_multi_core">
|
<widget class="QCheckBox" name="use_multi_core">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -28,6 +28,7 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
|
|||||||
|
|
||||||
ui->use_vsync->setChecked(Settings::values.use_vsync.GetValue());
|
ui->use_vsync->setChecked(Settings::values.use_vsync.GetValue());
|
||||||
ui->use_asynchronous_shaders->setChecked(Settings::values.use_asynchronous_shaders.GetValue());
|
ui->use_asynchronous_shaders->setChecked(Settings::values.use_asynchronous_shaders.GetValue());
|
||||||
|
ui->use_caches_gc->setChecked(Settings::values.use_caches_gc.GetValue());
|
||||||
ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue());
|
ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue());
|
||||||
|
|
||||||
if (Settings::IsConfiguringGlobal()) {
|
if (Settings::IsConfiguringGlobal()) {
|
||||||
@ -54,6 +55,8 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() {
|
|||||||
ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders,
|
ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders,
|
||||||
ui->use_asynchronous_shaders,
|
ui->use_asynchronous_shaders,
|
||||||
use_asynchronous_shaders);
|
use_asynchronous_shaders);
|
||||||
|
ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_caches_gc, ui->use_caches_gc,
|
||||||
|
use_caches_gc);
|
||||||
ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_fast_gpu_time,
|
ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_fast_gpu_time,
|
||||||
ui->use_fast_gpu_time, use_fast_gpu_time);
|
ui->use_fast_gpu_time, use_fast_gpu_time);
|
||||||
}
|
}
|
||||||
@ -78,6 +81,7 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
|
|||||||
ui->use_asynchronous_shaders->setEnabled(
|
ui->use_asynchronous_shaders->setEnabled(
|
||||||
Settings::values.use_asynchronous_shaders.UsingGlobal());
|
Settings::values.use_asynchronous_shaders.UsingGlobal());
|
||||||
ui->use_fast_gpu_time->setEnabled(Settings::values.use_fast_gpu_time.UsingGlobal());
|
ui->use_fast_gpu_time->setEnabled(Settings::values.use_fast_gpu_time.UsingGlobal());
|
||||||
|
ui->use_caches_gc->setEnabled(Settings::values.use_caches_gc.UsingGlobal());
|
||||||
ui->anisotropic_filtering_combobox->setEnabled(
|
ui->anisotropic_filtering_combobox->setEnabled(
|
||||||
Settings::values.max_anisotropy.UsingGlobal());
|
Settings::values.max_anisotropy.UsingGlobal());
|
||||||
|
|
||||||
@ -90,6 +94,8 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
|
|||||||
use_asynchronous_shaders);
|
use_asynchronous_shaders);
|
||||||
ConfigurationShared::SetColoredTristate(ui->use_fast_gpu_time,
|
ConfigurationShared::SetColoredTristate(ui->use_fast_gpu_time,
|
||||||
Settings::values.use_fast_gpu_time, use_fast_gpu_time);
|
Settings::values.use_fast_gpu_time, use_fast_gpu_time);
|
||||||
|
ConfigurationShared::SetColoredTristate(ui->use_caches_gc, Settings::values.use_caches_gc,
|
||||||
|
use_caches_gc);
|
||||||
ConfigurationShared::SetColoredComboBox(
|
ConfigurationShared::SetColoredComboBox(
|
||||||
ui->gpu_accuracy, ui->label_gpu_accuracy,
|
ui->gpu_accuracy, ui->label_gpu_accuracy,
|
||||||
static_cast<int>(Settings::values.gpu_accuracy.GetValue(true)));
|
static_cast<int>(Settings::values.gpu_accuracy.GetValue(true)));
|
||||||
|
@ -37,4 +37,5 @@ private:
|
|||||||
ConfigurationShared::CheckState use_vsync;
|
ConfigurationShared::CheckState use_vsync;
|
||||||
ConfigurationShared::CheckState use_asynchronous_shaders;
|
ConfigurationShared::CheckState use_asynchronous_shaders;
|
||||||
ConfigurationShared::CheckState use_fast_gpu_time;
|
ConfigurationShared::CheckState use_fast_gpu_time;
|
||||||
|
ConfigurationShared::CheckState use_caches_gc;
|
||||||
};
|
};
|
||||||
|
@ -96,6 +96,16 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="use_caches_gc">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Enables garbage collection for the GPU caches, this will try to keep VRAM within 3-4 GB by flushing the least used textures/buffers. May cause issues in a few games.</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Enable GPU cache garbage collection (experimental)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QWidget" name="af_layout" native="true">
|
<widget class="QWidget" name="af_layout" native="true">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_1">
|
<layout class="QHBoxLayout" name="horizontalLayout_1">
|
||||||
|
@ -468,6 +468,7 @@ void Config::ReadValues() {
|
|||||||
ReadSetting("Renderer", Settings::values.nvdec_emulation);
|
ReadSetting("Renderer", Settings::values.nvdec_emulation);
|
||||||
ReadSetting("Renderer", Settings::values.accelerate_astc);
|
ReadSetting("Renderer", Settings::values.accelerate_astc);
|
||||||
ReadSetting("Renderer", Settings::values.use_fast_gpu_time);
|
ReadSetting("Renderer", Settings::values.use_fast_gpu_time);
|
||||||
|
ReadSetting("Renderer", Settings::values.use_caches_gc);
|
||||||
|
|
||||||
ReadSetting("Renderer", Settings::values.bg_red);
|
ReadSetting("Renderer", Settings::values.bg_red);
|
||||||
ReadSetting("Renderer", Settings::values.bg_green);
|
ReadSetting("Renderer", Settings::values.bg_green);
|
||||||
|
Loading…
Reference in New Issue
Block a user