From d512ce122cb1c9a7fe7cb40d3f85d642ee37f897 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Mon, 18 Oct 2021 18:38:04 -0300 Subject: Initial tessellation shader support (#2534) * Initial tessellation shader support * Nits * Re-arrange built-in table * This is not needed anymore * PR feedback --- Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs | 21 +++++++++++++++++++++ .../Cache/Definition/GuestGpuAccessorHeader.cs | 7 ++++++- 2 files changed, 27 insertions(+), 1 deletion(-) (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 33da42db..09107346 100644 --- a/Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs +++ b/Ryujinx.Graphics.Gpu/Shader/Cache/CacheHelper.cs @@ -349,6 +349,26 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache return flags; } + /// + /// Packs the tessellation parameters from the gpu accessor. + /// + /// The gpu accessor + /// The packed tessellation parameters + private static byte GetTessellationModePacked(IGpuAccessor gpuAccessor) + { + byte value; + + value = (byte)((int)gpuAccessor.QueryTessPatchType() & 3); + value |= (byte)(((int)gpuAccessor.QueryTessSpacing() & 3) << 2); + + if (gpuAccessor.QueryTessCw()) + { + value |= 0x10; + } + + return value; + } + /// /// Create a new instance of from an gpu accessor. /// @@ -364,6 +384,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache ComputeLocalMemorySize = gpuAccessor.QueryComputeLocalMemorySize(), ComputeSharedMemorySize = gpuAccessor.QueryComputeSharedMemorySize(), PrimitiveTopology = gpuAccessor.QueryPrimitiveTopology(), + TessellationModePacked = GetTessellationModePacked(gpuAccessor), StateFlags = GetGpuStateFlags(gpuAccessor) }; } diff --git a/Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuAccessorHeader.cs b/Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuAccessorHeader.cs index 610b2da1..2e044750 100644 --- a/Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuAccessorHeader.cs +++ b/Ryujinx.Graphics.Gpu/Shader/Cache/Definition/GuestGpuAccessorHeader.cs @@ -49,10 +49,15 @@ namespace Ryujinx.Graphics.Gpu.Shader.Cache.Definition /// public InputTopology PrimitiveTopology; + /// + /// Tessellation parameters (packed to fit on a byte). + /// + public byte TessellationModePacked; + /// /// Unused/reserved. /// - public ushort Reserved2; + public byte Reserved2; /// /// GPU boolean state that can influence shader compilation. -- cgit v1.2.3