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]];");
}
foreach (var ioDefinition in inputs.OrderBy(x => x.Location))
{
string type = ioDefinition.IoVariable switch

View file

@ -175,20 +175,25 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions
}
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 pCount = coordsCount;
if (isShadow && !isGather)
{
pCount++;
}
void Append(string str)
{
texCall += ", " + str;
@ -224,6 +229,13 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Msl.Instructions
texCall += ", " + Src(AggregateType.S32);
}
if (isShadow)
{
texCall += ", " + Src(AggregateType.S32);
}
// TODO: Support offsets
texCall += ")" + (colorIsVector ? GetMaskMultiDest(texOp.Index) : "");
return texCall;

View file

@ -158,16 +158,29 @@ namespace Ryujinx.Graphics.Shader
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.TextureBuffer => "texturebuffer",
SamplerType.Texture2D => "texture2d",
SamplerType.Texture3D => "texture3d",
SamplerType.TextureCube => "texturecube",
_ => throw new ArgumentException($"Invalid sampler type \"{type}\"."),
_ => throw new ArgumentException($"Invalid texture type \"{type}\"."),
};
}
if ((type & SamplerType.Multisample) != 0)
{