Small leftovers -- add missing break and continue, remove unused properties, other improvements

This commit is contained in:
gdkchan 2019-04-04 18:01:46 -03:00
commit 6f37aefd33
5 changed files with 8 additions and 10 deletions

View file

@ -92,6 +92,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
Add(Instruction.LogicalExclusiveOr, InstFlags.OpBinary, "^^", 10); Add(Instruction.LogicalExclusiveOr, InstFlags.OpBinary, "^^", 10);
Add(Instruction.LogicalNot, InstFlags.OpUnary, "!", 0); Add(Instruction.LogicalNot, InstFlags.OpUnary, "!", 0);
Add(Instruction.LogicalOr, InstFlags.OpBinary, "||", 11); Add(Instruction.LogicalOr, InstFlags.OpBinary, "||", 11);
Add(Instruction.LoopBreak, InstFlags.OpNullary, "break");
Add(Instruction.LoopContinue, InstFlags.OpNullary, "continue");
Add(Instruction.ShiftLeft, InstFlags.OpBinary, "<<", 3); Add(Instruction.ShiftLeft, InstFlags.OpBinary, "<<", 3);
Add(Instruction.ShiftRightS32, InstFlags.OpBinary, ">>", 3); Add(Instruction.ShiftRightS32, InstFlags.OpBinary, ">>", 3);
Add(Instruction.ShiftRightU32, InstFlags.OpBinary, ">>", 3); Add(Instruction.ShiftRightU32, InstFlags.OpBinary, ">>", 3);

View file

@ -44,14 +44,14 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
{ {
switch (srcType) switch (srcType)
{ {
case VariableType.Bool: return $"intBitsToFloat({ReinterpretBoolToInt(expr, VariableType.S32)})"; case VariableType.Bool: return $"intBitsToFloat({ReinterpretBoolToInt(expr, node, VariableType.S32)})";
case VariableType.S32: return $"intBitsToFloat({expr})"; case VariableType.S32: return $"intBitsToFloat({expr})";
case VariableType.U32: return $"uintBitsToFloat({expr})"; case VariableType.U32: return $"uintBitsToFloat({expr})";
} }
} }
else if (srcType == VariableType.Bool) else if (srcType == VariableType.Bool)
{ {
return ReinterpretBoolToInt(expr, dstType); return ReinterpretBoolToInt(expr, node, dstType);
} }
else if (dstType == VariableType.Bool) else if (dstType == VariableType.Bool)
{ {
@ -71,12 +71,14 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
throw new ArgumentException($"Invalid reinterpret cast from \"{srcType}\" to \"{dstType}\"."); throw new ArgumentException($"Invalid reinterpret cast from \"{srcType}\" to \"{dstType}\".");
} }
private static string ReinterpretBoolToInt(string expr, VariableType dstType) private static string ReinterpretBoolToInt(string expr, IAstNode node, VariableType dstType)
{ {
string trueExpr = NumberFormatter.FormatInt(IrConsts.True, dstType); string trueExpr = NumberFormatter.FormatInt(IrConsts.True, dstType);
string falseExpr = NumberFormatter.FormatInt(IrConsts.False, dstType); string falseExpr = NumberFormatter.FormatInt(IrConsts.False, dstType);
return $"(({expr}) ? {trueExpr} : {falseExpr})"; expr = Instructions.Enclose(expr, node, Instruction.ConditionalSelect, isLhs: false);
return $"({expr} ? {trueExpr} : {falseExpr})";
} }
} }
} }

View file

@ -2,8 +2,6 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation
{ {
interface INode interface INode
{ {
BasicBlock Parent { get; set; }
Operand Dest { get; set; } Operand Dest { get; set; }
int SourcesCount { get; } int SourcesCount { get; }

View file

@ -2,8 +2,6 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation
{ {
class Operation : INode class Operation : INode
{ {
public BasicBlock Parent { get; set; }
public Instruction Inst { get; private set; } public Instruction Inst { get; private set; }
private Operand _dest; private Operand _dest;

View file

@ -4,8 +4,6 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation
{ {
class PhiNode : INode class PhiNode : INode
{ {
public BasicBlock Parent { get; set; }
private Operand _dest; private Operand _dest;
public Operand Dest public Operand Dest