Depth Sampler Fixes
This commit is contained in:
parent
8b2cc4ccf1
commit
3e1f624308
3 changed files with 41 additions and 17 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue