aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/texture_cache/texture_cache.h
diff options
context:
space:
mode:
authorxbzk <xbzk@eden-emu.dev>2026-02-12 00:11:54 +0100
committercrueter <crueter@eden-emu.dev>2026-02-12 00:11:54 +0100
commit2ab5b37137c1e1aa8e96d93bd0992aee872de44c (patch)
tree81fb2d543ee2108f277e3b67f1ad2d5371d26ba8 /src/video_core/texture_cache/texture_cache.h
parentf6547fac8ccd75c8b9d15db21cc189d57e4fefa6 (diff)
[android, ui] unswizzle combo picker core (#3516)
Combo picker for unswizzle. Attempt to combine settings + Enable toggle added. WARNING! The toggle won't have effect! It just controls GPU_UNSWIZZLE_ENABLED boolean setting, and will need @PavelBARABANOV unswizzle enable/disable integration. Co-authored-by: PavelBARABANOV <pavelbarabanov94@gmail.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3516 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: Maufeat <sahyno1996@gmail.com> Co-authored-by: xbzk <xbzk@eden-emu.dev> Co-committed-by: xbzk <xbzk@eden-emu.dev>
Diffstat (limited to 'src/video_core/texture_cache/texture_cache.h')
-rw-r--r--src/video_core/texture_cache/texture_cache.h64
1 files changed, 38 insertions, 26 deletions
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index 0ed65e29e9..603a042ba2 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -80,31 +80,39 @@ TextureCache<P>::TextureCache(Runtime& runtime_, Tegra::MaxwellDeviceMemoryManag
lowmemorydevice = true;
}
- switch (Settings::values.gpu_unswizzle_texture_size.GetValue()) {
- case Settings::GpuUnswizzleSize::VerySmall: gpu_unswizzle_maxsize = 16_MiB; break;
- case Settings::GpuUnswizzleSize::Small: gpu_unswizzle_maxsize = 32_MiB; break;
- case Settings::GpuUnswizzleSize::Normal: gpu_unswizzle_maxsize = 128_MiB; break;
- case Settings::GpuUnswizzleSize::Large: gpu_unswizzle_maxsize = 256_MiB; break;
- case Settings::GpuUnswizzleSize::VeryLarge: gpu_unswizzle_maxsize = 512_MiB; break;
- default: gpu_unswizzle_maxsize = 128_MiB; break;
- }
-
- switch (Settings::values.gpu_unswizzle_stream_size.GetValue()) {
- case Settings::GpuUnswizzle::VeryLow: swizzle_chunk_size = 4_MiB; break;
- case Settings::GpuUnswizzle::Low: swizzle_chunk_size = 8_MiB; break;
- case Settings::GpuUnswizzle::Normal: swizzle_chunk_size = 16_MiB; break;
- case Settings::GpuUnswizzle::Medium: swizzle_chunk_size = 32_MiB; break;
- case Settings::GpuUnswizzle::High: swizzle_chunk_size = 64_MiB; break;
- default: swizzle_chunk_size = 16_MiB;
- }
-
- switch (Settings::values.gpu_unswizzle_chunk_size.GetValue()) {
- case Settings::GpuUnswizzleChunk::VeryLow: swizzle_slices_per_batch = 32; break;
- case Settings::GpuUnswizzleChunk::Low: swizzle_slices_per_batch = 64; break;
- case Settings::GpuUnswizzleChunk::Normal: swizzle_slices_per_batch = 128; break;
- case Settings::GpuUnswizzleChunk::Medium: swizzle_slices_per_batch = 256; break;
- case Settings::GpuUnswizzleChunk::High: swizzle_slices_per_batch = 512; break;
- default: swizzle_slices_per_batch = 128;
+ const bool gpu_unswizzle_enabled = Settings::values.gpu_unswizzle_enabled.GetValue();
+
+ if (gpu_unswizzle_enabled) {
+ switch (Settings::values.gpu_unswizzle_texture_size.GetValue()) {
+ case Settings::GpuUnswizzleSize::VerySmall: gpu_unswizzle_maxsize = 16_MiB; break;
+ case Settings::GpuUnswizzleSize::Small: gpu_unswizzle_maxsize = 32_MiB; break;
+ case Settings::GpuUnswizzleSize::Normal: gpu_unswizzle_maxsize = 128_MiB; break;
+ case Settings::GpuUnswizzleSize::Large: gpu_unswizzle_maxsize = 256_MiB; break;
+ case Settings::GpuUnswizzleSize::VeryLarge: gpu_unswizzle_maxsize = 512_MiB; break;
+ default: gpu_unswizzle_maxsize = 128_MiB; break;
+ }
+
+ switch (Settings::values.gpu_unswizzle_stream_size.GetValue()) {
+ case Settings::GpuUnswizzle::VeryLow: swizzle_chunk_size = 4_MiB; break;
+ case Settings::GpuUnswizzle::Low: swizzle_chunk_size = 8_MiB; break;
+ case Settings::GpuUnswizzle::Normal: swizzle_chunk_size = 16_MiB; break;
+ case Settings::GpuUnswizzle::Medium: swizzle_chunk_size = 32_MiB; break;
+ case Settings::GpuUnswizzle::High: swizzle_chunk_size = 64_MiB; break;
+ default: swizzle_chunk_size = 16_MiB;
+ }
+
+ switch (Settings::values.gpu_unswizzle_chunk_size.GetValue()) {
+ case Settings::GpuUnswizzleChunk::VeryLow: swizzle_slices_per_batch = 32; break;
+ case Settings::GpuUnswizzleChunk::Low: swizzle_slices_per_batch = 64; break;
+ case Settings::GpuUnswizzleChunk::Normal: swizzle_slices_per_batch = 128; break;
+ case Settings::GpuUnswizzleChunk::Medium: swizzle_slices_per_batch = 256; break;
+ case Settings::GpuUnswizzleChunk::High: swizzle_slices_per_batch = 512; break;
+ default: swizzle_slices_per_batch = 128;
+ }
+ } else {
+ gpu_unswizzle_maxsize = 0;
+ swizzle_chunk_size = 0;
+ swizzle_slices_per_batch = 0;
}
}
@@ -1161,7 +1169,11 @@ void TextureCache<P>::RefreshContents(Image& image, ImageId image_id) {
QueueAsyncDecode(image, image_id);
return;
}
- if (IsPixelFormatBCn(image.info.format) &&
+
+ const bool gpu_unswizzle_enabled = Settings::values.gpu_unswizzle_enabled.GetValue();
+
+ if (gpu_unswizzle_enabled &&
+ IsPixelFormatBCn(image.info.format) &&
image.info.type == ImageType::e3D &&
image.info.resources.levels == 1 &&
image.info.resources.layers == 1 &&