From 461c24092ae6e148d896c18aa3e86220c89981f8 Mon Sep 17 00:00:00 2001 From: riperiperi Date: Tue, 1 Dec 2020 23:13:27 +0000 Subject: Implement Force Early Z Register (#1755) --- Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs | 18 ++++++++++++++++++ .../Shader/Cache/Definition/GuestGpuAccessorHeader.cs | 4 ++-- .../Shader/Cache/Definition/GuestGpuStateFlags.cs | 10 ++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuStateFlags.cs (limited to 'Ryujinx.Graphics.Gpu/Shader/Cache') 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 @@ -332,6 +332,23 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache return null; } + /// + /// Builds gpu state flags using information from the given gpu accessor. + /// + /// The gpu accessor + /// The gpu state flags + private static GuestGpuStateFlags GetGpuStateFlags(IGpuAccessor gpuAccessor) + { + GuestGpuStateFlags flags = 0; + + if (gpuAccessor.QueryEarlyZForce()) + { + flags |= GuestGpuStateFlags.EarlyZForce; + } + + return flags; + } + /// /// Create a new instance of from an gpu accessor. /// @@ -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; /// - /// Unused/reserved. + /// GPU boolean state that can influence shader compilation. /// - 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 + } +} -- cgit v1.2.3