Texture instructions related fixes

This commit is contained in:
gdkchan 2019-04-10 08:10:51 -03:00
parent afde155da5
commit c5faac2c00
2 changed files with 21 additions and 14 deletions

View file

@ -132,8 +132,8 @@ namespace Ryujinx.Graphics.Shader.Decoders
Set("110000xxxx111x", InstEmit.Tex, typeof(OpCodeTex));
Set("1101111010111x", InstEmit.Tex_B, typeof(OpCodeTex));
Set("1101x00xxxxxxx", InstEmit.Texs, typeof(OpCodeTexs));
Set("1101101xxxxxxx", InstEmit.Texs, typeof(OpCodeTlds));
Set("1101111100xxxx", InstEmit.Texs, typeof(OpCodeTld4s));
Set("1101x01xxxxxxx", InstEmit.Texs, typeof(OpCodeTlds));
Set("1101x11100xxxx", InstEmit.Texs, typeof(OpCodeTld4s));
Set("1101110000111x", InstEmit.Tld, typeof(OpCodeTld));
Set("1101110100111x", InstEmit.Tld_B, typeof(OpCodeTld));
Set("110010xxxx111x", InstEmit.Tld4, typeof(OpCodeTld4));

View file

@ -273,7 +273,7 @@ namespace Ryujinx.Graphics.Shader.Instructions
{
case TldsType.Texture1DLodZero:
sourcesList.Add(Ra());
sourcesList.Add(ConstF(0));
sourcesList.Add(Const(0));
break;
case TldsType.Texture1DLodLevel:
@ -284,14 +284,14 @@ namespace Ryujinx.Graphics.Shader.Instructions
case TldsType.Texture2DLodZero:
sourcesList.Add(Ra());
sourcesList.Add(Rb());
sourcesList.Add(ConstF(0));
sourcesList.Add(Const(0));
break;
case TldsType.Texture2DLodZeroOffset:
case TldsType.Texture2DLodZeroMultisample:
sourcesList.Add(Ra());
sourcesList.Add(Ra());
sourcesList.Add(ConstF(0));
sourcesList.Add(Const(0));
sourcesList.Add(Rb());
break;
@ -305,14 +305,14 @@ namespace Ryujinx.Graphics.Shader.Instructions
sourcesList.Add(Ra());
sourcesList.Add(Ra());
sourcesList.Add(Rb());
sourcesList.Add(ConstF(0));
sourcesList.Add(Const(0));
break;
case TldsType.Texture2DArrayLodZero:
sourcesList.Add(Rb());
sourcesList.Add(Rb());
sourcesList.Add(Ra());
sourcesList.Add(ConstF(0));
sourcesList.Add(Const(0));
break;
case TldsType.Texture2DLodLevelOffset:
@ -339,19 +339,26 @@ namespace Ryujinx.Graphics.Shader.Instructions
type = TextureType.Texture2D;
flags = TextureFlags.Gather;
if (tld4sOp.HasOffset)
{
sourcesList.Add(Rb());
flags |= TextureFlags.Offset;
}
if (tld4sOp.HasDepthCompare)
{
sourcesList.Add(Rb());
type |= TextureType.Shadow;
}
if (tld4sOp.HasOffset)
{
Operand packedOffs = Rb();
for (int index = 0; index < type.GetCoordsCount(); index++)
{
sourcesList.Add(context.BitfieldExtractS32(packedOffs, Const(index * 8), Const(6)));
}
flags |= TextureFlags.Offset;
}
sourcesList.Add(Const(tld4sOp.GatherCompIndex));
}
else
{