aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorForrest Keller <forrestmarkx@outlook.com>2026-01-13 19:18:08 +0100
committercrueter <crueter@eden-emu.dev>2026-01-13 19:18:08 +0100
commitecd01e13fd13b39bff0f2c7c7bc2387c3a2157f4 (patch)
tree4e015762b742b0183f526d6b38b7b54d3a9d7dcb /src/common
parentf544004b5de4ea0fe7277e4a6a9790051b6d0120 (diff)
[video_core] Implement GPU-accelerated texture unswizzling and optimize sparse texture handling (#3246)
- [Added] a new compute shader to handle block-linear unswizzling on the GPU, reducing CPU overhead during texture uploads - [Implemented] BlockLinearUnswizzle3DPass to take advantage of the new compute shader, unimplemented for OpenGL - [Implemented] texture streaming and queue system for large sparse textures to prevent hitches - [Implemented] aggressive garbage collection system to eject large sparse textures to save on memory (Unused) - [Added] user settings to adjust the streaming unswizzle system for low-end machines - [Improved] slightly the ASTC GPU decoding system Co-authored-by: Caio Oliveira <caiooliveirafarias0@gmail.com> Co-authored-by: CamilleLaVey <camillelavey99@gmail.com> Co-authored-by: DraVee <dravee@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3246 Reviewed-by: Maufeat <sahyno1996@gmail.com> Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: DraVee <dravee@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Co-authored-by: Forrest Keller <forrestmarkx@outlook.com> Co-committed-by: Forrest Keller <forrestmarkx@outlook.com>
Diffstat (limited to 'src/common')
-rw-r--r--src/common/settings.h18
-rw-r--r--src/common/settings_enums.h3
2 files changed, 21 insertions, 0 deletions
diff --git a/src/common/settings.h b/src/common/settings.h
index 874ba7aee2..0053f37ea9 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -513,6 +513,24 @@ struct Values {
SwitchableSetting<bool> use_asynchronous_shaders{linkage, false, "use_asynchronous_shaders",
Category::RendererHacks};
+ SwitchableSetting<GpuUnswizzleSize> gpu_unzwizzle_texture_size{linkage,
+ GpuUnswizzleSize::Large,
+ "gpu_unzwizzle_texture_size",
+ Category::RendererHacks,
+ Specialization::Default};
+
+ SwitchableSetting<GpuUnswizzle> gpu_unzwizzle_stream_size{linkage,
+ GpuUnswizzle::Medium,
+ "gpu_unzwizzle_stream_size",
+ Category::RendererHacks,
+ Specialization::Default};
+
+ SwitchableSetting<GpuUnswizzleChunk> gpu_unzwizzle_chunk_size{linkage,
+ GpuUnswizzleChunk::Medium,
+ "gpu_unzwizzle_chunk_size",
+ Category::RendererHacks,
+ Specialization::Default};
+
SwitchableSetting<ExtendedDynamicState> dyna_state{linkage,
#if defined (_WIN32)
ExtendedDynamicState::EDS3,
diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h
index bff5f0ec5a..be0c95906d 100644
--- a/src/common/settings_enums.h
+++ b/src/common/settings_enums.h
@@ -150,6 +150,9 @@ ENUM(ConsoleMode, Handheld, Docked);
ENUM(AppletMode, HLE, LLE);
ENUM(SpirvOptimizeMode, Never, OnLoad, Always);
ENUM(GpuOverclock, Normal, Medium, High)
+ENUM(GpuUnswizzleSize, VerySmall, Small, Normal, Large, VeryLarge)
+ENUM(GpuUnswizzle, VeryLow, Low, Normal, Medium, High)
+ENUM(GpuUnswizzleChunk, VeryLow, Low, Normal, Medium, High)
ENUM(TemperatureUnits, Celsius, Fahrenheit)
ENUM(ExtendedDynamicState, Disabled, EDS1, EDS2, EDS3);