diff options
Diffstat (limited to 'Ryujinx.Graphics/Gal/Shader/GlslDecl.cs')
| -rw-r--r-- | Ryujinx.Graphics/Gal/Shader/GlslDecl.cs | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs b/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs index 56745bc1..25f64db8 100644 --- a/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs +++ b/Ryujinx.Graphics/Gal/Shader/GlslDecl.cs @@ -16,7 +16,6 @@ namespace Ryujinx.Graphics.Gal.Shader public const int VertexIdAttr = 0x2fc; public const int FaceAttr = 0x3fc; - public const int MaxFrameBufferAttachments = 8; public const int MaxUboSize = 1024; public const int GlPositionVec4Index = 7; @@ -94,16 +93,33 @@ namespace Ryujinx.Graphics.Gal.Shader m_Preds = new Dictionary<int, ShaderDeclInfo>(); } - public GlslDecl(ShaderIrBlock[] Blocks, GalShaderType ShaderType) : this(ShaderType) + public GlslDecl(ShaderIrBlock[] Blocks, GalShaderType ShaderType, ShaderHeader Header) + : this(ShaderType) { StagePrefix = StagePrefixes[(int)ShaderType] + "_"; if (ShaderType == GalShaderType.Fragment) { - //Note: Replace 1 with MaxFrameBufferAttachments when attachments start to work - for (int Index = 0; Index < 1; Index++) + int Index = 0; + + for (int Attachment = 0; Attachment < 8; Attachment++) { - m_Gprs.Add(Index * 4, new ShaderDeclInfo(FragmentOutputName + Index, Index * 4, false, 0, 4)); + for (int Component = 0; Component < 4; Component++) + { + if (Header.OmapTargets[Attachment].ComponentEnabled(Component)) + { + m_Gprs.TryAdd(Index, new ShaderDeclInfo(GetGprName(Index), Index)); + + Index++; + } + } + } + + if (Header.OmapDepth) + { + Index = Header.DepthRegister; + + m_Gprs.TryAdd(Index, new ShaderDeclInfo(GetGprName(Index), Index)); } } @@ -153,6 +169,11 @@ namespace Ryujinx.Graphics.Gal.Shader return Combined; } + public static string GetGprName(int Index) + { + return GprName + Index; + } + private static void Merge( Dictionary<int, ShaderDeclInfo> C, Dictionary<int, ShaderDeclInfo> A, @@ -316,9 +337,9 @@ namespace Ryujinx.Graphics.Gal.Shader case ShaderIrOperGpr Gpr: { - if (!Gpr.IsConst && !HasName(m_Gprs, Gpr.Index)) + if (!Gpr.IsConst) { - string Name = GprName + Gpr.Index; + string Name = GetGprName(Gpr.Index); m_Gprs.TryAdd(Gpr.Index, new ShaderDeclInfo(Name, Gpr.Index)); } |
