Shaders: Handle Ipa PASS argument as needed in Fragment Shaders (#392)
This commit is contained in:
parent
bf28d8f1aa
commit
e72fd3f7a7
4 changed files with 52 additions and 2 deletions
|
@ -1026,7 +1026,31 @@ namespace Ryujinx.Graphics.Gal.Shader
|
|||
return "int(uint(" + GetOperExpr(Op, Op.OperandA) + "))";
|
||||
}
|
||||
|
||||
private string GetIpaExpr(ShaderIrOp Op) => GetSrcExpr(Op.OperandA);
|
||||
private string GetIpaExpr(ShaderIrOp Op)
|
||||
{
|
||||
ShaderIrMetaIpa Meta = (ShaderIrMetaIpa)Op.MetaData;
|
||||
|
||||
ShaderIrOperAbuf Abuf = (ShaderIrOperAbuf)Op.OperandA;
|
||||
|
||||
if (Meta.Mode == ShaderIpaMode.Pass)
|
||||
{
|
||||
int Index = Abuf.Offs >> 4;
|
||||
int Elem = (Abuf.Offs >> 2) & 3;
|
||||
|
||||
if (Decl.ShaderType == GalShaderType.Fragment && Index == GlslDecl.GlPositionVec4Index)
|
||||
{
|
||||
switch (Elem)
|
||||
{
|
||||
case 0: return "gl_FragCoord.x";
|
||||
case 1: return "gl_FragCoord.y";
|
||||
case 2: return "gl_FragCoord.z";
|
||||
case 3: return "1";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return GetSrcExpr(Op.OperandA);
|
||||
}
|
||||
|
||||
private string GetKilExpr(ShaderIrOp Op) => "discard";
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue