shader cache: Fix invalid virtual address clean up (#1717)
* shader cache: Fix invalid virtual address clean up This fix an issue causing the virtual address of texture descriptors to not be cleaned up when caching and instead cleaning texture format and swizzle. This should fix duplicate high duplication in the cache for certain games and possible texture corruption issues. **THIS WILL INVALIDATE ALL SHADER CACHE LEVELS CONSIDERING THE NATURE OF THE ISSUE** * shader cache: Address gdk's comment
This commit is contained in:
parent
787e20937f
commit
383c039037
9 changed files with 58 additions and 22 deletions
|
@ -12,7 +12,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
|
|||
private readonly GpuContext _context;
|
||||
private readonly ReadOnlyMemory<byte> _data;
|
||||
private readonly GuestGpuAccessorHeader _header;
|
||||
private readonly Dictionary<int, Image.TextureDescriptor> _textureDescriptors;
|
||||
private readonly Dictionary<int, GuestTextureDescriptor> _textureDescriptors;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of the cached GPU state accessor for shader translation.
|
||||
|
@ -26,11 +26,11 @@ namespace Ryujinx.Graphics.Gpu.Shader
|
|||
_context = context;
|
||||
_data = data;
|
||||
_header = header;
|
||||
_textureDescriptors = new Dictionary<int, Image.TextureDescriptor>();
|
||||
_textureDescriptors = new Dictionary<int, GuestTextureDescriptor>();
|
||||
|
||||
foreach (KeyValuePair<int, GuestTextureDescriptor> guestTextureDescriptor in guestTextureDescriptors)
|
||||
{
|
||||
_textureDescriptors.Add(guestTextureDescriptor.Key, guestTextureDescriptor.Value.Descriptor);
|
||||
_textureDescriptors.Add(guestTextureDescriptor.Key, guestTextureDescriptor.Value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -141,9 +141,9 @@ namespace Ryujinx.Graphics.Gpu.Shader
|
|||
/// </summary>
|
||||
/// <param name="handle">Index of the texture (this is the word offset of the handle in the constant buffer)</param>
|
||||
/// <returns>Texture descriptor</returns>
|
||||
public override Image.TextureDescriptor GetTextureDescriptor(int handle)
|
||||
public override Image.ITextureDescriptor GetTextureDescriptor(int handle)
|
||||
{
|
||||
if (!_textureDescriptors.TryGetValue(handle, out Image.TextureDescriptor textureDescriptor))
|
||||
if (!_textureDescriptors.TryGetValue(handle, out GuestTextureDescriptor textureDescriptor))
|
||||
{
|
||||
throw new ArgumentException();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue