Increase texture cache @ 4 GiB DRAM for higher VRAM cards

* Clean up texture cache code for low-VRAM GPUs
This commit is contained in:
KeatonTheBot
2025-12-27 22:05:51 -06:00
parent ecd1c1240c
commit d603cc51eb

View File

@@ -49,9 +49,10 @@ namespace Ryujinx.Graphics.Gpu.Image
private const int MinCountForDeletion = 32; private const int MinCountForDeletion = 32;
private const int MaxCapacity = 2048; private const int MaxCapacity = 2048;
private const ulong GiB = 1024 * 1024 * 1024; private const ulong GiB = 1024 * 1024 * 1024;
private ulong MaxTextureSizeCapacity = 4UL * GiB; private ulong MaxTextureSizeCapacity = 2UL * GiB;
private const ulong MinTextureSizeCapacity = 512 * 1024 * 1024; private const ulong MinTextureSizeCapacity = 512 * 1024 * 1024;
private const ulong DefaultTextureSizeCapacity = 1 * GiB; private const ulong DefaultTextureSizeCapacity = 1 * GiB;
private const ulong TextureSizeCapacity4GiB = 2 * GiB;
private const ulong TextureSizeCapacity6GiB = 4 * GiB; private const ulong TextureSizeCapacity6GiB = 4 * GiB;
private const ulong TextureSizeCapacity8GiB = 6 * GiB; private const ulong TextureSizeCapacity8GiB = 6 * GiB;
private const ulong TextureSizeCapacity12GiB = 12 * GiB; private const ulong TextureSizeCapacity12GiB = 12 * GiB;
@@ -73,31 +74,27 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <remarks> /// <remarks>
/// If the backend GPU has 0 memory capacity, the cache size defaults to `DefaultTextureSizeCapacity`. /// If the backend GPU has 0 memory capacity, the cache size defaults to `DefaultTextureSizeCapacity`.
/// ///
/// Reads the current Device total CPU Memory, to determine the maximum amount of Vram available. Capped to 50% of Current GPU Memory. /// Reads the current Device total CPU Memory, to determine the maximum amount of VRAM available. Capped to 50% of Current GPU Memory.
/// </remarks> /// </remarks>
/// <param name="context">The GPU context that the cache belongs to</param> /// <param name="context">The GPU context that the cache belongs to</param>
/// <param name="cpuMemorySize">The amount of physical CPU Memory Avaiable on the device.</param> /// <param name="cpuMemorySize">The amount of physical CPU Memory available on the device.</param>
public void Initialize(GpuContext context, ulong cpuMemorySize) public void Initialize(GpuContext context, ulong cpuMemorySize)
{ {
ulong cpuMemorySizeGiB = cpuMemorySize / GiB; ulong cpuMemorySizeGiB = cpuMemorySize / GiB;
ulong MaximumGpuMemoryGiB = context.Capabilities.MaximumGpuMemory / GiB;
if (cpuMemorySizeGiB < 6 || context.Capabilities.MaximumGpuMemory == 0) if (context.Capabilities.MaximumGpuMemory == 0 || cpuMemorySizeGiB < 6 && MaximumGpuMemoryGiB < 6)
{ {
_maxCacheMemoryUsage = DefaultTextureSizeCapacity; MaxTextureSizeCapacity = DefaultTextureSizeCapacity;
return;
}
else if (cpuMemorySizeGiB == 6)
{
MaxTextureSizeCapacity = TextureSizeCapacity6GiB;
}
else if (cpuMemorySizeGiB == 8)
{
MaxTextureSizeCapacity = TextureSizeCapacity8GiB;
} }
else else
{ MaxTextureSizeCapacity = cpuMemorySizeGiB switch
MaxTextureSizeCapacity = TextureSizeCapacity12GiB; {
} < 6 => TextureSizeCapacity4GiB,
6 => TextureSizeCapacity6GiB,
8 => TextureSizeCapacity8GiB,
_ => TextureSizeCapacity12GiB
};
ulong cacheMemory = (ulong)(context.Capabilities.MaximumGpuMemory * MemoryScaleFactor); ulong cacheMemory = (ulong)(context.Capabilities.MaximumGpuMemory * MemoryScaleFactor);