aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Image
diff options
context:
space:
mode:
authorMary <me@thog.eu>2020-11-17 22:20:17 +0100
committerGitHub <noreply@github.com>2020-11-17 22:20:17 +0100
commit383c0390370aa52243abfd1189d23b080cbfbb14 (patch)
tree03a8436f3ad7db804ec2a7ae54e559c3fab66efb /Ryujinx.Graphics.Gpu/Image
parent787e20937fc29884e94497d2ab993ca6cdae7dc6 (diff)
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
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Image')
-rw-r--r--Ryujinx.Graphics.Gpu/Image/ITextureDescriptor.cs10
-rw-r--r--Ryujinx.Graphics.Gpu/Image/TextureDescriptor.cs12
-rw-r--r--Ryujinx.Graphics.Gpu/Image/TextureTarget.cs2
3 files changed, 17 insertions, 7 deletions
diff --git a/Ryujinx.Graphics.Gpu/Image/ITextureDescriptor.cs b/Ryujinx.Graphics.Gpu/Image/ITextureDescriptor.cs
new file mode 100644
index 00000000..378de44b
--- /dev/null
+++ b/Ryujinx.Graphics.Gpu/Image/ITextureDescriptor.cs
@@ -0,0 +1,10 @@
+namespace Ryujinx.Graphics.Gpu.Image
+{
+ interface ITextureDescriptor
+ {
+ public uint UnpackFormat();
+ public TextureTarget UnpackTextureTarget();
+ public bool UnpackSrgb();
+ public bool UnpackTextureCoordNormalized();
+ }
+}
diff --git a/Ryujinx.Graphics.Gpu/Image/TextureDescriptor.cs b/Ryujinx.Graphics.Gpu/Image/TextureDescriptor.cs
index 74fb9887..76d97bf8 100644
--- a/Ryujinx.Graphics.Gpu/Image/TextureDescriptor.cs
+++ b/Ryujinx.Graphics.Gpu/Image/TextureDescriptor.cs
@@ -5,7 +5,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <summary>
/// Maxwell texture descriptor, as stored on the GPU texture pool memory region.
/// </summary>
- struct TextureDescriptor
+ struct TextureDescriptor : ITextureDescriptor
{
#pragma warning disable CS0649
public uint Word0;
@@ -239,12 +239,12 @@ namespace Ryujinx.Graphics.Gpu.Image
GuestTextureDescriptor result = new GuestTextureDescriptor
{
Handle = uint.MaxValue,
- Descriptor = this
- };
+ Format = UnpackFormat(),
+ Target = UnpackTextureTarget(),
+ IsSrgb = UnpackSrgb(),
+ IsTextureCoordNormalized = UnpackTextureCoordNormalized(),
- // Clear the virtual address
- result.Descriptor.Word0 = 0;
- result.Descriptor.Word2 &= 0xFFFF0000;
+ };
return result;
}
diff --git a/Ryujinx.Graphics.Gpu/Image/TextureTarget.cs b/Ryujinx.Graphics.Gpu/Image/TextureTarget.cs
index 301fc87b..1db758fc 100644
--- a/Ryujinx.Graphics.Gpu/Image/TextureTarget.cs
+++ b/Ryujinx.Graphics.Gpu/Image/TextureTarget.cs
@@ -5,7 +5,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// <summary>
/// Texture target.
/// </summary>
- enum TextureTarget
+ enum TextureTarget : byte
{
Texture1D,
Texture2D,