diff options
Diffstat (limited to 'Ryujinx.Graphics.Shader/StructuredIr')
| -rw-r--r-- | Ryujinx.Graphics.Shader/StructuredIr/OperandInfo.cs | 16 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramContext.cs | 6 |
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); } |
