aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Shader/Cache
diff options
context:
space:
mode:
authorriperiperi <rhy3756547@hotmail.com>2020-12-01 23:13:27 +0000
committerGitHub <noreply@github.com>2020-12-02 00:13:27 +0100
commit461c24092ae6e148d896c18aa3e86220c89981f8 (patch)
tree109060d3254bf2b5b0ae5ba91fb413cfb2db251c /Ryujinx.Graphics.Gpu/Shader/Cache
parente383c41b6e04d941788221e39bb3a68656d28138 (diff)
Implement Force Early Z Register (#1755)
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Shader/Cache')
-rw-r--r--Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs18
-rw-r--r--Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuAccessorHeader.cs4
-rw-r--r--Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuStateFlags.cs10
3 files changed, 30 insertions, 2 deletions
diff --git a/Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs b/Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs
index 1d492214..d10e4671 100644
--- a/Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs
+++ b/Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs
@@ -333,6 +333,23 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache
}
/// <summary>
+ /// Builds gpu state flags using information from the given gpu accessor.
+ /// </summary>
+ /// <param name="gpuAccessor">The gpu accessor</param>
+ /// <returns>The gpu state flags</returns>
+ private static GuestGpuStateFlags GetGpuStateFlags(IGpuAccessor gpuAccessor)
+ {
+ GuestGpuStateFlags flags = 0;
+
+ if (gpuAccessor.QueryEarlyZForce())
+ {
+ flags |= GuestGpuStateFlags.EarlyZForce;
+ }
+
+ return flags;
+ }
+
+ /// <summary>
/// Create a new instance of <see cref="GuestGpuAccessorHeader"/> from an gpu accessor.
/// </summary>
/// <param name="gpuAccessor">The gpu accessor</param>
@@ -347,6 +364,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache
ComputeLocalMemorySize = gpuAccessor.QueryComputeLocalMemorySize(),
ComputeSharedMemorySize = gpuAccessor.QueryComputeSharedMemorySize(),
PrimitiveTopology = gpuAccessor.QueryPrimitiveTopology(),
+ StateFlags = GetGpuStateFlags(gpuAccessor)
};
}
diff --git a/Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuAccessorHeader.cs b/Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuAccessorHeader.cs
index 396b0443..610b2da1 100644
--- a/Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuAccessorHeader.cs
+++ b/Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuAccessorHeader.cs
@@ -55,8 +55,8 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache.Definition
public ushort Reserved2;
/// <summary>
- /// Unused/reserved.
+ /// GPU boolean state that can influence shader compilation.
/// </summary>
- public byte Reserved3;
+ public GuestGpuStateFlags StateFlags;
}
}
diff --git a/Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuStateFlags.cs b/Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuStateFlags.cs
new file mode 100644
index 00000000..4b1fbb06
--- /dev/null
+++ b/Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuStateFlags.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace Ryujinx.Graphics.Gpu.Shader.Cache.Definition
+{
+ [Flags]
+ enum GuestGpuStateFlags : byte
+ {
+ EarlyZForce = 1 << 0
+ }
+}