aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/StructuredIr
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Shader/StructuredIr')
-rw-r--r--Ryujinx.Graphics.Shader/StructuredIr/OperandInfo.cs16
-rw-r--r--Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs6
2 files changed, 14 insertions, 8 deletions
diff --git a/Ryujinx.Graphics.Shader/StructuredIr/OperandInfo.cs b/Ryujinx.Graphics.Shader/StructuredIr/OperandInfo.cs
index 95c5731a..e56008f0 100644
--- a/Ryujinx.Graphics.Shader/StructuredIr/OperandInfo.cs
+++ b/Ryujinx.Graphics.Shader/StructuredIr/OperandInfo.cs
@@ -19,15 +19,15 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
public static VariableType GetVarType(OperandType type)
{
- switch (type)
+ return type switch
{
- case OperandType.Attribute: return VariableType.F32;
- case OperandType.Constant: return VariableType.S32;
- case OperandType.ConstantBuffer: return VariableType.F32;
- case OperandType.Undefined: return VariableType.S32;
- }
-
- throw new ArgumentException($"Invalid operand type \"{type}\".");
+ OperandType.Attribute => VariableType.F32,
+ OperandType.AttributePerPatch => VariableType.F32,
+ OperandType.Constant => VariableType.S32,
+ OperandType.ConstantBuffer => VariableType.F32,
+ OperandType.Undefined => VariableType.S32,
+ _ => throw new ArgumentException($"Invalid operand type \"{type}\".")
+ };
}
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs
index a9e44175..2a39d021 100644
--- a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs
+++ b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs
@@ -282,6 +282,12 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
public AstOperand GetOperandUse(Operand operand)
{
+ // If this flag is set, we're reading from an output attribute instead.
+ if (operand.Type.IsAttribute() && (operand.Value & AttributeConsts.LoadOutputMask) != 0)
+ {
+ return GetOperandDef(operand);
+ }
+
return GetOperand(operand);
}