Implement multiple rendertarget attachments and depth writting (#375)
* Add depth writting * Implement multiple attachments * Address feedback
This commit is contained in:
parent
9977acad0f
commit
624e813cd3
7 changed files with 201 additions and 29 deletions
|
@ -120,8 +120,8 @@ namespace Ryujinx.Graphics.Gal.Shader
|
|||
Blocks = ShaderDecoder.Decode(Memory, VpAPosition);
|
||||
BlocksB = ShaderDecoder.Decode(Memory, VpBPosition);
|
||||
|
||||
GlslDecl DeclVpA = new GlslDecl(Blocks, ShaderType);
|
||||
GlslDecl DeclVpB = new GlslDecl(BlocksB, ShaderType);
|
||||
GlslDecl DeclVpA = new GlslDecl(Blocks, ShaderType, Header);
|
||||
GlslDecl DeclVpB = new GlslDecl(BlocksB, ShaderType, HeaderB);
|
||||
|
||||
Decl = GlslDecl.Merge(DeclVpA, DeclVpB);
|
||||
|
||||
|
@ -136,7 +136,7 @@ namespace Ryujinx.Graphics.Gal.Shader
|
|||
Blocks = ShaderDecoder.Decode(Memory, Position);
|
||||
BlocksB = null;
|
||||
|
||||
Decl = new GlslDecl(Blocks, ShaderType);
|
||||
Decl = new GlslDecl(Blocks, ShaderType, Header);
|
||||
|
||||
return Decompile();
|
||||
}
|
||||
|
@ -304,7 +304,17 @@ namespace Ryujinx.Graphics.Gal.Shader
|
|||
|
||||
private void PrintDeclOutAttributes()
|
||||
{
|
||||
if (Decl.ShaderType != GalShaderType.Fragment)
|
||||
if (Decl.ShaderType == GalShaderType.Fragment)
|
||||
{
|
||||
for (int Attachment = 0; Attachment < 8; Attachment++)
|
||||
{
|
||||
if (Header.OmapTargets[Attachment].Enabled)
|
||||
{
|
||||
SB.AppendLine("layout (location = " + Attachment + ") out vec4 " + GlslDecl.FragmentOutputName + Attachment + ";");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SB.AppendLine("layout (location = " + GlslDecl.PositionOutAttrLocation + ") out vec4 " + GlslDecl.PositionOutAttrName + ";");
|
||||
}
|
||||
|
@ -432,6 +442,33 @@ namespace Ryujinx.Graphics.Gal.Shader
|
|||
PrintAttrToOutput();
|
||||
}
|
||||
|
||||
if (Decl.ShaderType == GalShaderType.Fragment)
|
||||
{
|
||||
if (Header.OmapDepth)
|
||||
{
|
||||
SB.AppendLine(IdentationStr + "gl_FragDepth = " + GlslDecl.GetGprName(Header.DepthRegister) + ";");
|
||||
}
|
||||
|
||||
int GprIndex = 0;
|
||||
|
||||
for (int Attachment = 0; Attachment < 8; Attachment++)
|
||||
{
|
||||
string Output = GlslDecl.FragmentOutputName + Attachment;
|
||||
|
||||
OmapTarget Target = Header.OmapTargets[Attachment];
|
||||
|
||||
for (int Component = 0; Component < 4; Component++)
|
||||
{
|
||||
if (Target.ComponentEnabled(Component))
|
||||
{
|
||||
SB.AppendLine(IdentationStr + Output + "[" + Component + "] = " + GlslDecl.GetGprName(GprIndex) + ";");
|
||||
|
||||
GprIndex++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SB.AppendLine("}");
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue