This commit is contained in:
Gabriel A 2024-03-29 12:12:55 -03:00
parent 8320054ad9
commit 6d9e8b3d1b
8 changed files with 30 additions and 30 deletions

View file

@ -38,7 +38,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
AggregateType type = GetSrcVarType(operation.Inst, 0); AggregateType type = GetSrcVarType(operation.Inst, 0);
string srcExpr = GetSoureExpr(context, src, type); string srcExpr = GetSourceExpr(context, src, type);
string zero; string zero;
if (type == AggregateType.FP64) if (type == AggregateType.FP64)
@ -80,7 +80,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
for (int argIndex = operation.SourcesCount - arity + 2; argIndex < operation.SourcesCount; argIndex++) for (int argIndex = operation.SourcesCount - arity + 2; argIndex < operation.SourcesCount; argIndex++)
{ {
builder.Append($", {GetSoureExpr(context, operation.GetSource(argIndex), dstType)}"); builder.Append($", {GetSourceExpr(context, operation.GetSource(argIndex), dstType)}");
} }
} }
else else
@ -94,7 +94,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
AggregateType dstType = GetSrcVarType(inst, argIndex); AggregateType dstType = GetSrcVarType(inst, argIndex);
builder.Append(GetSoureExpr(context, operation.GetSource(argIndex), dstType)); builder.Append(GetSourceExpr(context, operation.GetSource(argIndex), dstType));
} }
} }
@ -107,7 +107,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
// Return may optionally have a return value (and in this case it is unary). // Return may optionally have a return value (and in this case it is unary).
if (inst == Instruction.Return && operation.SourcesCount != 0) if (inst == Instruction.Return && operation.SourcesCount != 0)
{ {
return $"{op} {GetSoureExpr(context, operation.GetSource(0), context.CurrentFunction.ReturnType)}"; return $"{op} {GetSourceExpr(context, operation.GetSource(0), context.CurrentFunction.ReturnType)}";
} }
int arity = (int)(info.Type & InstType.ArityMask); int arity = (int)(info.Type & InstType.ArityMask);
@ -118,7 +118,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
{ {
IAstNode src = operation.GetSource(index); IAstNode src = operation.GetSource(index);
string srcExpr = GetSoureExpr(context, src, GetSrcVarType(inst, index)); string srcExpr = GetSourceExpr(context, src, GetSrcVarType(inst, index));
bool isLhs = arity == 2 && index == 0; bool isLhs = arity == 2 && index == 0;

View file

@ -12,7 +12,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
{ {
AggregateType dstType = GetSrcVarType(operation.Inst, 0); AggregateType dstType = GetSrcVarType(operation.Inst, 0);
string arg = GetSoureExpr(context, operation.GetSource(0), dstType); string arg = GetSourceExpr(context, operation.GetSource(0), dstType);
char component = "xyzw"[operation.Index]; char component = "xyzw"[operation.Index];
if (context.HostCapabilities.SupportsShaderBallot) if (context.HostCapabilities.SupportsShaderBallot)

View file

@ -20,7 +20,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
for (int i = 0; i < args.Length; i++) for (int i = 0; i < args.Length; i++)
{ {
args[i] = GetSoureExpr(context, operation.GetSource(i + 1), function.GetArgumentType(i)); args[i] = GetSourceExpr(context, operation.GetSource(i + 1), function.GetArgumentType(i));
} }
return $"{function.Name}({string.Join(", ", args)})"; return $"{function.Name}({string.Join(", ", args)})";

View file

@ -140,7 +140,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
return _infoTable[(int)(inst & Instruction.Mask)]; return _infoTable[(int)(inst & Instruction.Mask)];
} }
public static string GetSoureExpr(CodeGenContext context, IAstNode node, AggregateType dstType) public static string GetSourceExpr(CodeGenContext context, IAstNode node, AggregateType dstType)
{ {
return ReinterpretCast(context, node, OperandManager.GetNodeDestType(context, node), dstType); return ReinterpretCast(context, node, OperandManager.GetNodeDestType(context, node), dstType);
} }

View file

@ -46,7 +46,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
string Src(AggregateType type) string Src(AggregateType type)
{ {
return GetSoureExpr(context, texOp.GetSource(srcIndex++), type); return GetSourceExpr(context, texOp.GetSource(srcIndex++), type);
} }
string imageName = GetImageName(context, texOp, ref srcIndex); string imageName = GetImageName(context, texOp, ref srcIndex);
@ -175,14 +175,14 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
for (int index = 0; index < coordsCount; index++) for (int index = 0; index < coordsCount; index++)
{ {
elems[index] = GetSoureExpr(context, texOp.GetSource(coordsIndex + index), AggregateType.FP32); elems[index] = GetSourceExpr(context, texOp.GetSource(coordsIndex + index), AggregateType.FP32);
} }
coordsExpr = "vec" + coordsCount + "(" + string.Join(", ", elems) + ")"; coordsExpr = "vec" + coordsCount + "(" + string.Join(", ", elems) + ")";
} }
else else
{ {
coordsExpr = GetSoureExpr(context, texOp.GetSource(coordsIndex), AggregateType.FP32); coordsExpr = GetSourceExpr(context, texOp.GetSource(coordsIndex), AggregateType.FP32);
} }
return $"textureQueryLod({samplerName}, {coordsExpr}){GetMask(texOp.Index)}"; return $"textureQueryLod({samplerName}, {coordsExpr}){GetMask(texOp.Index)}";
@ -257,7 +257,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
string Src(AggregateType type) string Src(AggregateType type)
{ {
return GetSoureExpr(context, texOp.GetSource(srcIndex++), type); return GetSourceExpr(context, texOp.GetSource(srcIndex++), type);
} }
string samplerName = GetSamplerName(context, texOp, ref srcIndex); string samplerName = GetSamplerName(context, texOp, ref srcIndex);
@ -469,7 +469,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
if (hasLod) if (hasLod)
{ {
IAstNode lod = operation.GetSource(srcIndex); IAstNode lod = operation.GetSource(srcIndex);
string lodExpr = GetSoureExpr(context, lod, GetSrcVarType(operation.Inst, srcIndex)); string lodExpr = GetSourceExpr(context, lod, GetSrcVarType(operation.Inst, srcIndex));
texCall = $"textureSize({samplerName}, {lodExpr}){GetMask(texOp.Index)}"; texCall = $"textureSize({samplerName}, {lodExpr}){GetMask(texOp.Index)}";
} }
@ -586,12 +586,12 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
if (storageKind == StorageKind.Input) if (storageKind == StorageKind.Input)
{ {
string expr = GetSoureExpr(context, operation.GetSource(srcIndex++), AggregateType.S32); string expr = GetSourceExpr(context, operation.GetSource(srcIndex++), AggregateType.S32);
varName = $"gl_in[{expr}].{varName}"; varName = $"gl_in[{expr}].{varName}";
} }
else if (storageKind == StorageKind.Output) else if (storageKind == StorageKind.Output)
{ {
string expr = GetSoureExpr(context, operation.GetSource(srcIndex++), AggregateType.S32); string expr = GetSourceExpr(context, operation.GetSource(srcIndex++), AggregateType.S32);
varName = $"gl_out[{expr}].{varName}"; varName = $"gl_out[{expr}].{varName}";
} }
} }
@ -624,14 +624,14 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
} }
else else
{ {
varName += $"[{GetSoureExpr(context, src, AggregateType.S32)}]"; varName += $"[{GetSourceExpr(context, src, AggregateType.S32)}]";
} }
} }
if (isStore) if (isStore)
{ {
varType &= AggregateType.ElementTypeMask; varType &= AggregateType.ElementTypeMask;
varName = $"{varName} = {GetSoureExpr(context, operation.GetSource(srcIndex), varType)}"; varName = $"{varName} = {GetSourceExpr(context, operation.GetSource(srcIndex), varType)}";
} }
return varName; return varName;
@ -644,7 +644,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
if (textureDefinition.ArrayLength != 1) if (textureDefinition.ArrayLength != 1)
{ {
name = $"{name}[{GetSoureExpr(context, texOp.GetSource(srcIndex++), AggregateType.S32)}]"; name = $"{name}[{GetSourceExpr(context, texOp.GetSource(srcIndex++), AggregateType.S32)}]";
} }
if (texOp.IsSeparate) if (texOp.IsSeparate)
@ -654,7 +654,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
if (samplerDefinition.ArrayLength != 1) if (samplerDefinition.ArrayLength != 1)
{ {
samplerName = $"{samplerName}[{GetSoureExpr(context, texOp.GetSource(srcIndex++), AggregateType.S32)}]"; samplerName = $"{samplerName}[{GetSourceExpr(context, texOp.GetSource(srcIndex++), AggregateType.S32)}]";
} }
name = $"{texOp.Type.ToGlslSamplerType()}({name}, {samplerName})"; name = $"{texOp.Type.ToGlslSamplerType()}({name}, {samplerName})";
@ -670,7 +670,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
if (definition.ArrayLength != 1) if (definition.ArrayLength != 1)
{ {
name = $"{name}[{GetSoureExpr(context, texOp.GetSource(srcIndex++), AggregateType.S32)}]"; name = $"{name}[{GetSourceExpr(context, texOp.GetSource(srcIndex++), AggregateType.S32)}]";
} }
return name; return name;

View file

@ -13,8 +13,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
IAstNode src0 = operation.GetSource(0); IAstNode src0 = operation.GetSource(0);
IAstNode src1 = operation.GetSource(1); IAstNode src1 = operation.GetSource(1);
string src0Expr = GetSoureExpr(context, src0, GetSrcVarType(operation.Inst, 0)); string src0Expr = GetSourceExpr(context, src0, GetSrcVarType(operation.Inst, 0));
string src1Expr = GetSoureExpr(context, src1, GetSrcVarType(operation.Inst, 1)); string src1Expr = GetSourceExpr(context, src1, GetSrcVarType(operation.Inst, 1));
return $"packDouble2x32(uvec2({src0Expr}, {src1Expr}))"; return $"packDouble2x32(uvec2({src0Expr}, {src1Expr}))";
} }
@ -24,8 +24,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
IAstNode src0 = operation.GetSource(0); IAstNode src0 = operation.GetSource(0);
IAstNode src1 = operation.GetSource(1); IAstNode src1 = operation.GetSource(1);
string src0Expr = GetSoureExpr(context, src0, GetSrcVarType(operation.Inst, 0)); string src0Expr = GetSourceExpr(context, src0, GetSrcVarType(operation.Inst, 0));
string src1Expr = GetSoureExpr(context, src1, GetSrcVarType(operation.Inst, 1)); string src1Expr = GetSourceExpr(context, src1, GetSrcVarType(operation.Inst, 1));
return $"packHalf2x16(vec2({src0Expr}, {src1Expr}))"; return $"packHalf2x16(vec2({src0Expr}, {src1Expr}))";
} }
@ -34,7 +34,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
{ {
IAstNode src = operation.GetSource(0); IAstNode src = operation.GetSource(0);
string srcExpr = GetSoureExpr(context, src, GetSrcVarType(operation.Inst, 0)); string srcExpr = GetSourceExpr(context, src, GetSrcVarType(operation.Inst, 0));
return $"unpackDouble2x32({srcExpr}){GetMask(operation.Index)}"; return $"unpackDouble2x32({srcExpr}){GetMask(operation.Index)}";
} }
@ -43,7 +43,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
{ {
IAstNode src = operation.GetSource(0); IAstNode src = operation.GetSource(0);
string srcExpr = GetSoureExpr(context, src, GetSrcVarType(operation.Inst, 0)); string srcExpr = GetSourceExpr(context, src, GetSrcVarType(operation.Inst, 0));
return $"unpackHalf2x16({srcExpr}){GetMask(operation.Index)}"; return $"unpackHalf2x16({srcExpr}){GetMask(operation.Index)}";
} }

View file

@ -9,8 +9,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
{ {
public static string Shuffle(CodeGenContext context, AstOperation operation) public static string Shuffle(CodeGenContext context, AstOperation operation)
{ {
string value = GetSoureExpr(context, operation.GetSource(0), AggregateType.FP32); string value = GetSourceExpr(context, operation.GetSource(0), AggregateType.FP32);
string index = GetSoureExpr(context, operation.GetSource(1), AggregateType.U32); string index = GetSourceExpr(context, operation.GetSource(1), AggregateType.U32);
if (context.HostCapabilities.SupportsShaderBallot) if (context.HostCapabilities.SupportsShaderBallot)
{ {

View file

@ -13,7 +13,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
IAstNode vector = operation.GetSource(0); IAstNode vector = operation.GetSource(0);
IAstNode index = operation.GetSource(1); IAstNode index = operation.GetSource(1);
string vectorExpr = GetSoureExpr(context, vector, OperandManager.GetNodeDestType(context, vector)); string vectorExpr = GetSourceExpr(context, vector, OperandManager.GetNodeDestType(context, vector));
if (index is AstOperand indexOperand && indexOperand.Type == OperandType.Constant) if (index is AstOperand indexOperand && indexOperand.Type == OperandType.Constant)
{ {
@ -23,7 +23,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
} }
else else
{ {
string indexExpr = GetSoureExpr(context, index, GetSrcVarType(operation.Inst, 1)); string indexExpr = GetSourceExpr(context, index, GetSrcVarType(operation.Inst, 1));
return $"{vectorExpr}[{indexExpr}]"; return $"{vectorExpr}[{indexExpr}]";
} }