From 50d7ecf76d07366a814cae19038199b887d3fda6 Mon Sep 17 00:00:00 2001 From: riperiperi Date: Thu, 5 May 2022 20:16:58 +0100 Subject: [PATCH] Add alternative "GL" enum values for StencilOp (#3321) This PR adds the alternative enum values for StencilOp. Similar to the other enums, I added these with the same names but with Gl added to the end. These are used by homebrew using Nouveau, though they might be used by games with the official Vulkan driver. https://github.com/envytools/envytools/blob/39d90be897f41434d67277ebdf244d6bd419ecd9/rnndb/graph/nv_3ddefs.xml#L77 Fixes some broken graphics in Citra, such as missing shadows in Mario Kart 7. Likely fixes other homebrew. --- Ryujinx.Graphics.GAL/StencilOp.cs | 11 ++++++++++- Ryujinx.Graphics.OpenGL/EnumConversion.cs | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Ryujinx.Graphics.GAL/StencilOp.cs b/Ryujinx.Graphics.GAL/StencilOp.cs index f0ac829e67..fe999b0fc7 100644 --- a/Ryujinx.Graphics.GAL/StencilOp.cs +++ b/Ryujinx.Graphics.GAL/StencilOp.cs @@ -9,6 +9,15 @@ namespace Ryujinx.Graphics.GAL DecrementAndClamp, Invert, IncrementAndWrap, - DecrementAndWrap + DecrementAndWrap, + + ZeroGl = 0x0, + InvertGl = 0x150a, + KeepGl = 0x1e00, + ReplaceGl = 0x1e01, + IncrementAndClampGl = 0x1e02, + DecrementAndClampGl = 0x1e03, + IncrementAndWrapGl = 0x8507, + DecrementAndWrapGl = 0x8508 } } \ No newline at end of file diff --git a/Ryujinx.Graphics.OpenGL/EnumConversion.cs b/Ryujinx.Graphics.OpenGL/EnumConversion.cs index 24cf1fc4d6..4a06e96499 100644 --- a/Ryujinx.Graphics.OpenGL/EnumConversion.cs +++ b/Ryujinx.Graphics.OpenGL/EnumConversion.cs @@ -379,20 +379,28 @@ namespace Ryujinx.Graphics.OpenGL switch (op) { case GAL.StencilOp.Keep: + case GAL.StencilOp.KeepGl: return OpenTK.Graphics.OpenGL.StencilOp.Keep; case GAL.StencilOp.Zero: + case GAL.StencilOp.ZeroGl: return OpenTK.Graphics.OpenGL.StencilOp.Zero; case GAL.StencilOp.Replace: + case GAL.StencilOp.ReplaceGl: return OpenTK.Graphics.OpenGL.StencilOp.Replace; case GAL.StencilOp.IncrementAndClamp: + case GAL.StencilOp.IncrementAndClampGl: return OpenTK.Graphics.OpenGL.StencilOp.Incr; case GAL.StencilOp.DecrementAndClamp: + case GAL.StencilOp.DecrementAndClampGl: return OpenTK.Graphics.OpenGL.StencilOp.Decr; case GAL.StencilOp.Invert: + case GAL.StencilOp.InvertGl: return OpenTK.Graphics.OpenGL.StencilOp.Invert; case GAL.StencilOp.IncrementAndWrap: + case GAL.StencilOp.IncrementAndWrapGl: return OpenTK.Graphics.OpenGL.StencilOp.IncrWrap; case GAL.StencilOp.DecrementAndWrap: + case GAL.StencilOp.DecrementAndWrapGl: return OpenTK.Graphics.OpenGL.StencilOp.DecrWrap; }