Fix fragment shaders (and fuck everything up)
This commit is contained in:
parent
2890fc1069
commit
511db833db
4 changed files with 21 additions and 6 deletions
|
@ -20,8 +20,9 @@ namespace Ryujinx.Graphics.Metal
|
||||||
{
|
{
|
||||||
for (int index = 0; index < shaders.Length; index++)
|
for (int index = 0; index < shaders.Length; index++)
|
||||||
{
|
{
|
||||||
var libraryError = new NSError(IntPtr.Zero);
|
|
||||||
ShaderSource shader = shaders[index];
|
ShaderSource shader = shaders[index];
|
||||||
|
|
||||||
|
var libraryError = new NSError(IntPtr.Zero);
|
||||||
var shaderLibrary = device.NewLibrary(StringHelper.NSString(shader.Code), new MTLCompileOptions(IntPtr.Zero), ref libraryError);
|
var shaderLibrary = device.NewLibrary(StringHelper.NSString(shader.Code), new MTLCompileOptions(IntPtr.Zero), ref libraryError);
|
||||||
if (libraryError != IntPtr.Zero)
|
if (libraryError != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
|
|
|
@ -67,6 +67,10 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl
|
||||||
{
|
{
|
||||||
context.AppendLine("VertexOutput out;");
|
context.AppendLine("VertexOutput out;");
|
||||||
}
|
}
|
||||||
|
else if (stage == ShaderStage.Fragment)
|
||||||
|
{
|
||||||
|
context.AppendLine("FragmentOutput out;");
|
||||||
|
}
|
||||||
|
|
||||||
foreach (AstOperand decl in function.Locals)
|
foreach (AstOperand decl in function.Locals)
|
||||||
{
|
{
|
||||||
|
@ -133,8 +137,9 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl
|
||||||
{
|
{
|
||||||
string type = GetVarTypeName(context, context.Definitions.GetUserDefinedType(ioDefinition.Location, isOutput: false));
|
string type = GetVarTypeName(context, context.Definitions.GetUserDefinedType(ioDefinition.Location, isOutput: false));
|
||||||
string name = $"{DefaultNames.IAttributePrefix}{ioDefinition.Location}";
|
string name = $"{DefaultNames.IAttributePrefix}{ioDefinition.Location}";
|
||||||
|
string suffix = context.Definitions.Stage == ShaderStage.Vertex ? $" [[attribute({ioDefinition.Location})]]" : "";
|
||||||
|
|
||||||
context.AppendLine($"{type} {name} [[attribute({ioDefinition.Location})]];");
|
context.AppendLine($"{type} {name}{suffix};");
|
||||||
}
|
}
|
||||||
|
|
||||||
context.LeaveScope(";");
|
context.LeaveScope(";");
|
||||||
|
@ -173,9 +178,17 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl
|
||||||
foreach (var ioDefinition in inputs.OrderBy(x => x.Location))
|
foreach (var ioDefinition in inputs.OrderBy(x => x.Location))
|
||||||
{
|
{
|
||||||
string type = GetVarTypeName(context, context.Definitions.GetUserDefinedType(ioDefinition.Location, isOutput: true));
|
string type = GetVarTypeName(context, context.Definitions.GetUserDefinedType(ioDefinition.Location, isOutput: true));
|
||||||
string name = $"{DefaultNames.OAttributePrefix}{ioDefinition.Location}";
|
string name = ioDefinition.IoVariable switch
|
||||||
name = ioDefinition.IoVariable == IoVariable.Position ? "position" : name;
|
{
|
||||||
string suffix = ioDefinition.IoVariable == IoVariable.Position ? " [[position]]" : "";
|
IoVariable.Position => "position",
|
||||||
|
IoVariable.FragmentOutputColor => "color",
|
||||||
|
_ => $"{DefaultNames.OAttributePrefix}{ioDefinition.Location}"
|
||||||
|
};
|
||||||
|
string suffix = ioDefinition.IoVariable switch
|
||||||
|
{
|
||||||
|
IoVariable.Position => " [[position]]",
|
||||||
|
_ => ""
|
||||||
|
};
|
||||||
|
|
||||||
context.AppendLine($"{type} {name}{suffix};");
|
context.AppendLine($"{type} {name}{suffix};");
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,7 +70,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions
|
||||||
{
|
{
|
||||||
return $"{op} {GetSourceExpr(context, operation.GetSource(0), context.CurrentFunction.ReturnType)}";
|
return $"{op} {GetSourceExpr(context, operation.GetSource(0), context.CurrentFunction.ReturnType)}";
|
||||||
}
|
}
|
||||||
else if (inst == Instruction.Return && context.Definitions.Stage == ShaderStage.Vertex)
|
if (inst == Instruction.Return && context.Definitions.Stage is ShaderStage.Vertex or ShaderStage.Fragment)
|
||||||
{
|
{
|
||||||
return $"{op} out";
|
return $"{op} out";
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl
|
||||||
{
|
{
|
||||||
funcKeyword = "fragment";
|
funcKeyword = "fragment";
|
||||||
funcName = "fragmentMain";
|
funcName = "fragmentMain";
|
||||||
|
returnType = "FragmentOutput";
|
||||||
}
|
}
|
||||||
else if (stage == ShaderStage.Compute)
|
else if (stage == ShaderStage.Compute)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue