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]];");
|
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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue