Texture instructions related fixes
This commit is contained in:
parent
afde155da5
commit
c5faac2c00
2 changed files with 21 additions and 14 deletions
|
@ -132,8 +132,8 @@ namespace Ryujinx.Graphics.Shader.Decoders
|
||||||
Set("110000xxxx111x", InstEmit.Tex, typeof(OpCodeTex));
|
Set("110000xxxx111x", InstEmit.Tex, typeof(OpCodeTex));
|
||||||
Set("1101111010111x", InstEmit.Tex_B, typeof(OpCodeTex));
|
Set("1101111010111x", InstEmit.Tex_B, typeof(OpCodeTex));
|
||||||
Set("1101x00xxxxxxx", InstEmit.Texs, typeof(OpCodeTexs));
|
Set("1101x00xxxxxxx", InstEmit.Texs, typeof(OpCodeTexs));
|
||||||
Set("1101101xxxxxxx", InstEmit.Texs, typeof(OpCodeTlds));
|
Set("1101x01xxxxxxx", InstEmit.Texs, typeof(OpCodeTlds));
|
||||||
Set("1101111100xxxx", InstEmit.Texs, typeof(OpCodeTld4s));
|
Set("1101x11100xxxx", InstEmit.Texs, typeof(OpCodeTld4s));
|
||||||
Set("1101110000111x", InstEmit.Tld, typeof(OpCodeTld));
|
Set("1101110000111x", InstEmit.Tld, typeof(OpCodeTld));
|
||||||
Set("1101110100111x", InstEmit.Tld_B, typeof(OpCodeTld));
|
Set("1101110100111x", InstEmit.Tld_B, typeof(OpCodeTld));
|
||||||
Set("110010xxxx111x", InstEmit.Tld4, typeof(OpCodeTld4));
|
Set("110010xxxx111x", InstEmit.Tld4, typeof(OpCodeTld4));
|
||||||
|
|
|
@ -273,7 +273,7 @@ namespace Ryujinx.Graphics.Shader.Instructions
|
||||||
{
|
{
|
||||||
case TldsType.Texture1DLodZero:
|
case TldsType.Texture1DLodZero:
|
||||||
sourcesList.Add(Ra());
|
sourcesList.Add(Ra());
|
||||||
sourcesList.Add(ConstF(0));
|
sourcesList.Add(Const(0));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TldsType.Texture1DLodLevel:
|
case TldsType.Texture1DLodLevel:
|
||||||
|
@ -284,14 +284,14 @@ namespace Ryujinx.Graphics.Shader.Instructions
|
||||||
case TldsType.Texture2DLodZero:
|
case TldsType.Texture2DLodZero:
|
||||||
sourcesList.Add(Ra());
|
sourcesList.Add(Ra());
|
||||||
sourcesList.Add(Rb());
|
sourcesList.Add(Rb());
|
||||||
sourcesList.Add(ConstF(0));
|
sourcesList.Add(Const(0));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TldsType.Texture2DLodZeroOffset:
|
case TldsType.Texture2DLodZeroOffset:
|
||||||
case TldsType.Texture2DLodZeroMultisample:
|
case TldsType.Texture2DLodZeroMultisample:
|
||||||
sourcesList.Add(Ra());
|
sourcesList.Add(Ra());
|
||||||
sourcesList.Add(Ra());
|
sourcesList.Add(Ra());
|
||||||
sourcesList.Add(ConstF(0));
|
sourcesList.Add(Const(0));
|
||||||
sourcesList.Add(Rb());
|
sourcesList.Add(Rb());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -305,14 +305,14 @@ namespace Ryujinx.Graphics.Shader.Instructions
|
||||||
sourcesList.Add(Ra());
|
sourcesList.Add(Ra());
|
||||||
sourcesList.Add(Ra());
|
sourcesList.Add(Ra());
|
||||||
sourcesList.Add(Rb());
|
sourcesList.Add(Rb());
|
||||||
sourcesList.Add(ConstF(0));
|
sourcesList.Add(Const(0));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TldsType.Texture2DArrayLodZero:
|
case TldsType.Texture2DArrayLodZero:
|
||||||
sourcesList.Add(Rb());
|
sourcesList.Add(Rb());
|
||||||
sourcesList.Add(Rb());
|
sourcesList.Add(Rb());
|
||||||
sourcesList.Add(Ra());
|
sourcesList.Add(Ra());
|
||||||
sourcesList.Add(ConstF(0));
|
sourcesList.Add(Const(0));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TldsType.Texture2DLodLevelOffset:
|
case TldsType.Texture2DLodLevelOffset:
|
||||||
|
@ -339,19 +339,26 @@ namespace Ryujinx.Graphics.Shader.Instructions
|
||||||
type = TextureType.Texture2D;
|
type = TextureType.Texture2D;
|
||||||
flags = TextureFlags.Gather;
|
flags = TextureFlags.Gather;
|
||||||
|
|
||||||
if (tld4sOp.HasOffset)
|
|
||||||
{
|
|
||||||
sourcesList.Add(Rb());
|
|
||||||
|
|
||||||
flags |= TextureFlags.Offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tld4sOp.HasDepthCompare)
|
if (tld4sOp.HasDepthCompare)
|
||||||
{
|
{
|
||||||
sourcesList.Add(Rb());
|
sourcesList.Add(Rb());
|
||||||
|
|
||||||
type |= TextureType.Shadow;
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue