Depth Sampler Fixes

This commit is contained in:
Isaac Marovitz 2024-05-22 15:44:00 -04:00 committed by Isaac Marovitz
parent 8b2cc4ccf1
commit 3e1f624308
3 changed files with 41 additions and 17 deletions

View file

@ -149,7 +149,6 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl
context.AppendLine("float4 position [[position]];"); context.AppendLine("float4 position [[position]];");
} }
foreach (var ioDefinition in inputs.OrderBy(x => x.Location)) foreach (var ioDefinition in inputs.OrderBy(x => x.Location))
{ {
string type = ioDefinition.IoVariable switch string type = ioDefinition.IoVariable switch

View file

@ -175,20 +175,25 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions
} }
else else
{ {
texCall += "sample("; texCall += "sample";
texCall += $"samp_{samplerName}"; if (isGather)
{
texCall += "_gather";
}
if (isShadow)
{
texCall += "_compare";
}
texCall += $"(samp_{samplerName}";
} }
int coordsCount = texOp.Type.GetDimensions(); int coordsCount = texOp.Type.GetDimensions();
int pCount = coordsCount; int pCount = coordsCount;
if (isShadow && !isGather)
{
pCount++;
}
void Append(string str) void Append(string str)
{ {
texCall += ", " + str; texCall += ", " + str;
@ -224,6 +229,13 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions
texCall += ", " + Src(AggregateType.S32); texCall += ", " + Src(AggregateType.S32);
} }
if (isShadow)
{
texCall += ", " + Src(AggregateType.S32);
}
// TODO: Support offsets
texCall += ")" + (colorIsVector ? GetMaskMultiDest(texOp.Index) : ""); texCall += ")" + (colorIsVector ? GetMaskMultiDest(texOp.Index) : "");
return texCall; return texCall;

View file

@ -158,16 +158,29 @@ namespace Ryujinx.Graphics.Shader
public static string ToMslTextureType(this SamplerType type) public static string ToMslTextureType(this SamplerType type)
{ {
string typeName = (type & SamplerType.Mask) switch string typeName;
if ((type & SamplerType.Shadow) != 0)
{
typeName = (type & SamplerType.Mask) switch
{
SamplerType.Texture2D => "depth2d",
SamplerType.TextureCube => "depthcube",
_ => throw new ArgumentException($"Invalid shadow texture type \"{type}\"."),
};
}
else
{
typeName = (type & SamplerType.Mask) switch
{ {
SamplerType.None => "texture",
SamplerType.Texture1D => "texture1d", SamplerType.Texture1D => "texture1d",
SamplerType.TextureBuffer => "texturebuffer", SamplerType.TextureBuffer => "texturebuffer",
SamplerType.Texture2D => "texture2d", SamplerType.Texture2D => "texture2d",
SamplerType.Texture3D => "texture3d", SamplerType.Texture3D => "texture3d",
SamplerType.TextureCube => "texturecube", SamplerType.TextureCube => "texturecube",
_ => throw new ArgumentException($"Invalid sampler type \"{type}\"."), _ => throw new ArgumentException($"Invalid texture type \"{type}\"."),
}; };
}
if ((type & SamplerType.Multisample) != 0) if ((type & SamplerType.Multisample) != 0)
{ {