diff options
| author | Forrest Keller <forrestmarkx@outlook.com> | 2026-01-13 19:18:08 +0100 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-01-13 19:18:08 +0100 |
| commit | ecd01e13fd13b39bff0f2c7c7bc2387c3a2157f4 (patch) | |
| tree | 4e015762b742b0183f526d6b38b7b54d3a9d7dcb /src/common | |
| parent | f544004b5de4ea0fe7277e4a6a9790051b6d0120 (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.h | 18 | ||||
| -rw-r--r-- | src/common/settings_enums.h | 3 |
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); |
