From 320c31711312e6862a32d73ac1023da82690a01d Mon Sep 17 00:00:00 2001 From: Samuliak Date: Tue, 14 May 2024 17:41:16 +0200 Subject: [PATCH] add: textures and samplers as shader arguments & fix: issue with casting --- .../CodeGen/Msl/Instructions/InstGenHelper.cs | 8 ++++---- .../CodeGen/Msl/Instructions/InstGenMemory.cs | 8 ++++---- .../CodeGen/Msl/Instructions/InstType.cs | 1 - src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs | 7 +++++++ 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenHelper.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenHelper.cs index 7991c942e..2ee3495e6 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenHelper.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenHelper.cs @@ -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"); diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs index 2cec9d18a..6639445e7 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstGenMemory.cs @@ -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(); diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstType.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstType.cs index 85930cb24..d8f6bfed1 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstType.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/Instructions/InstType.cs @@ -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, } diff --git a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs index 8fa9df0ca..1fe7f46ef 100644 --- a/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs +++ b/src/Ryujinx.Graphics.Shader/CodeGen/Msl/MslGenerator.cs @@ -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 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)})";