mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-09-06 12:13:57 +00:00
Magic toggles for tests
This commit is contained in:
+2
@@ -30,6 +30,8 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting {
|
||||
RENDERER_REACTIVE_FLUSHING("use_reactive_flushing"),
|
||||
ENABLE_BUFFER_HISTORY("enable_buffer_history"),
|
||||
USE_OPTIMIZED_VERTEX_BUFFERS("use_optimized_vertex_buffers"),
|
||||
ENABLE_MULTI_RANGE_STORAGE("enable_multi_range_storage"),
|
||||
ENABLE_SPARSE_BUFFER_BINDING("enable_sparse_buffer_binding"),
|
||||
ENABLE_GPU_BUFFER_READBACK("enable_gpu_buffer_readback"),
|
||||
SYNC_MEMORY_OPERATIONS("sync_memory_operations"),
|
||||
BUFFER_REORDER_DISABLE("disable_buffer_reorder"),
|
||||
|
||||
+14
@@ -927,6 +927,20 @@ abstract class SettingsItem(
|
||||
descriptionId = R.string.use_optimized_vertex_buffers_description
|
||||
)
|
||||
)
|
||||
put(
|
||||
SwitchSetting(
|
||||
BooleanSetting.ENABLE_MULTI_RANGE_STORAGE,
|
||||
titleId = R.string.enable_multi_range_storage,
|
||||
descriptionId = R.string.enable_multi_range_storage_description
|
||||
)
|
||||
)
|
||||
put(
|
||||
SwitchSetting(
|
||||
BooleanSetting.ENABLE_SPARSE_BUFFER_BINDING,
|
||||
titleId = R.string.enable_sparse_buffer_binding,
|
||||
descriptionId = R.string.enable_sparse_buffer_binding_description
|
||||
)
|
||||
)
|
||||
put(
|
||||
SwitchSetting(
|
||||
BooleanSetting.SYNC_MEMORY_OPERATIONS,
|
||||
|
||||
+2
@@ -338,6 +338,8 @@ class SettingsFragmentPresenter(
|
||||
add(BooleanSetting.ENABLE_BUFFER_HISTORY.key)
|
||||
add(BooleanSetting.ENABLE_GPU_BUFFER_READBACK.key)
|
||||
add(BooleanSetting.USE_OPTIMIZED_VERTEX_BUFFERS.key)
|
||||
add(BooleanSetting.ENABLE_MULTI_RANGE_STORAGE.key)
|
||||
add(BooleanSetting.ENABLE_SPARSE_BUFFER_BINDING.key)
|
||||
|
||||
add(HeaderSetting(R.string.hacks))
|
||||
|
||||
|
||||
@@ -570,6 +570,10 @@
|
||||
<string name="enable_gpu_buffer_readback_description">Preserves GPU-modified buffer data by reading it back before uploads. Some games require this to render certain effects properly. May cause issues if the hardware cannot handle the additional workload.</string>
|
||||
<string name="use_optimized_vertex_buffers">Optimized Vertex Buffers</string>
|
||||
<string name="use_optimized_vertex_buffers_description">Enables optimized vertex buffer binding for improved performance. Requires Mesa 26.0+ Turnip drivers/ QCOM drivers. Will crash on older Turnip drivers (25.3 and below).</string>
|
||||
<string name="enable_multi_range_storage">Multi-Range Storage Buffers</string>
|
||||
<string name="enable_multi_range_storage_description">toggle for test on multi-range.</string>
|
||||
<string name="enable_sparse_buffer_binding">Sparse Buffer Binding</string>
|
||||
<string name="enable_sparse_buffer_binding_description">toggle for test on sparse buffer binding.</string>
|
||||
|
||||
<string name="hacks">Hacks</string>
|
||||
|
||||
|
||||
@@ -592,6 +592,22 @@ struct Values {
|
||||
true,
|
||||
true};
|
||||
|
||||
SwitchableSetting<bool> enable_multi_range_storage{linkage,
|
||||
false,
|
||||
"enable_multi_range_storage",
|
||||
Category::RendererAdvanced,
|
||||
Specialization::Default,
|
||||
true,
|
||||
true};
|
||||
|
||||
SwitchableSetting<bool> enable_sparse_buffer_binding{linkage,
|
||||
false,
|
||||
"enable_sparse_buffer_binding",
|
||||
Category::RendererAdvanced,
|
||||
Specialization::Default,
|
||||
true,
|
||||
true};
|
||||
|
||||
#ifdef __ANDROID__
|
||||
SwitchableSetting<bool> use_optimized_vertex_buffers{linkage,
|
||||
false,
|
||||
|
||||
@@ -267,6 +267,10 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QObject* parent) {
|
||||
INSERT(Settings, enable_buffer_history, tr("Enable buffer history"),
|
||||
tr("Enables access to previous buffer states.\nThis option may improve rendering "
|
||||
"quality and performance consistency in some games."));
|
||||
INSERT(Settings, enable_multi_range_storage, tr("Multi-range storage buffers"),
|
||||
tr("toggle for test on multi-range."));
|
||||
INSERT(Settings, enable_sparse_buffer_binding, tr("Sparse buffer binding"),
|
||||
tr("toggle for test on sparse buffer binding."));
|
||||
INSERT(Settings, fix_bloom_effects, tr("Fix bloom effects"), tr("Removes bloom in Burnout."));
|
||||
|
||||
INSERT(Settings, rescale_hack, tr("Enable Legacy Rescale Pass"),
|
||||
|
||||
@@ -114,7 +114,12 @@ void BufferCache<P>::TickFrame() {
|
||||
|
||||
template <class P>
|
||||
void BufferCache<P>::UnmapGPUMemory(size_t as_id, GPUVAddr gpu_addr, size_t size) {
|
||||
virtual_ranges.Unmap(as_id, gpu_addr, size);
|
||||
if constexpr (requires { runtime.SupportsMultiRange(); }) {
|
||||
if (!runtime.SupportsMultiRange()) {
|
||||
return;
|
||||
}
|
||||
virtual_ranges.Unmap(as_id, gpu_addr, size);
|
||||
}
|
||||
}
|
||||
|
||||
template <class P>
|
||||
@@ -1009,6 +1014,9 @@ void BufferCache<P>::ResolveMultiRangeStorage(Binding& binding, bool is_written,
|
||||
binding.segment_first = 0;
|
||||
binding.segment_count = 0;
|
||||
if constexpr (requires { runtime.BindMultiRangeStorageBuffer(u64{}); }) {
|
||||
if (!runtime.SupportsMultiRange()) {
|
||||
return;
|
||||
}
|
||||
if (binding.gpu_addr == 0 || binding.size == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -175,6 +175,10 @@ public:
|
||||
return multi_range_buffers.BlockSize();
|
||||
}
|
||||
|
||||
[[nodiscard]] bool SupportsMultiRange() const noexcept {
|
||||
return Settings::values.enable_multi_range_storage.GetValue();
|
||||
}
|
||||
|
||||
[[nodiscard]] bool PrefersSparseSources() const noexcept {
|
||||
return multi_range_buffers.UsesSparse();
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ u64 MultiRangeBufferCache::HashSources(std::span<const MultiRangeSource> sources
|
||||
}
|
||||
|
||||
bool MultiRangeBufferCache::CanBindSparse(std::span<const MultiRangeSource> sources) const {
|
||||
if (!use_sparse) {
|
||||
if (!UsesSparse()) {
|
||||
return false;
|
||||
}
|
||||
for (const MultiRangeSource& source : sources) {
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "common/common_types.h"
|
||||
#include "common/settings.h"
|
||||
#include "video_core/vulkan_common/vulkan_memory_allocator.h"
|
||||
#include "video_core/vulkan_common/vulkan_wrapper.h"
|
||||
|
||||
@@ -44,7 +45,7 @@ public:
|
||||
MultiRangeBufferCache& operator=(const MultiRangeBufferCache&) = delete;
|
||||
|
||||
[[nodiscard]] bool UsesSparse() const noexcept {
|
||||
return use_sparse;
|
||||
return use_sparse && Settings::values.enable_sparse_buffer_binding.GetValue();
|
||||
}
|
||||
|
||||
[[nodiscard]] VkDeviceSize BlockSize() const noexcept {
|
||||
|
||||
Reference in New Issue
Block a user