add: textures and samplers as shader arguments & fix: issue with casting

This commit is contained in:
Samuliak 2024-05-14 17:41:16 +02:00 committed by Isaac Marovitz
parent 6295153a28
commit 320c317113
4 changed files with 15 additions and 9 deletions

View file

@ -53,13 +53,13 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions
Add(Instruction.ConditionalSelect, InstType.OpTernary, "?:", 12);
Add(Instruction.ConvertFP32ToFP64, 0); // MSL does not have a 64-bit FP
Add(Instruction.ConvertFP64ToFP32, 0); // MSL does not have a 64-bit FP
Add(Instruction.ConvertFP32ToS32, InstType.Cast, "int");
Add(Instruction.ConvertFP32ToU32, InstType.Cast, "uint");
Add(Instruction.ConvertFP32ToS32, InstType.CallUnary, "int");
Add(Instruction.ConvertFP32ToU32, InstType.CallUnary, "uint");
Add(Instruction.ConvertFP64ToS32, 0); // MSL does not have a 64-bit FP
Add(Instruction.ConvertFP64ToU32, 0); // MSL does not have a 64-bit FP
Add(Instruction.ConvertS32ToFP32, InstType.Cast, "float");
Add(Instruction.ConvertS32ToFP32, InstType.CallUnary, "float");
Add(Instruction.ConvertS32ToFP64, 0); // MSL does not have a 64-bit FP
Add(Instruction.ConvertU32ToFP32, InstType.Cast, "float");
Add(Instruction.ConvertU32ToFP32, InstType.CallUnary, "float");
Add(Instruction.ConvertU32ToFP64, 0); // MSL does not have a 64-bit FP
Add(Instruction.Cosine, InstType.CallUnary, "cos");
Add(Instruction.Ddx, InstType.CallUnary, "dfdx");

View file

@ -158,7 +158,9 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions
bool colorIsVector = isGather || !isShadow;
string texCall = "texture.";
string samplerName = GetSamplerName(context.Properties, texOp);
string texCall = $"tex_{samplerName}";
texCall += ".";
int srcIndex = 0;
@ -175,9 +177,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions
{
texCall += "sample(";
string samplerName = GetSamplerName(context.Properties, texOp);
texCall += samplerName;
texCall += $"samp_{samplerName}";
}
int coordsCount = texOp.Type.GetDimensions();

View file

@ -29,7 +29,6 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions
Call = 1 << 10,
Atomic = 1 << 11,
Special = 1 << 12,
Cast = 1 << 13,
ArityMask = 0xff,
}

View file

@ -122,6 +122,13 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl
{
args = args.Append($"device float4 *{storageBuffers.Name} [[buffer({storageBuffers.Binding})]]").ToArray();
}
foreach (var texture in context.Properties.Textures.Values)
{
// TODO: don't use always texture2d
args = args.Append($"texture2d<float> tex_{texture.Name} [[texture({texture.Binding})]]").ToArray();
args = args.Append($"sampler samp_{texture.Name} [[sampler({texture.Binding})]]").ToArray();
}
}
return $"{funcKeyword} {returnType} {funcName ?? function.Name}({string.Join(", ", args)})";