Use the same component for all components in a shift

This commit is contained in:
baldurk
2017-01-06 15:41:41 +00:00
parent 329ebc2d05
commit c088c9186d
+11 -10
View File
@@ -1522,10 +1522,11 @@ State State::GetNext(GlobalState &global, State quad[4]) const
}
case OPCODE_ISHL:
s.SetDst(op.operands[0], op, ShaderVariable("", srcOpers[0].value.i.x << srcOpers[1].value.i.x,
srcOpers[0].value.i.y << srcOpers[1].value.i.y,
srcOpers[0].value.i.z << srcOpers[1].value.i.z,
srcOpers[0].value.i.w << srcOpers[1].value.i.w));
s.SetDst(op.operands[0], op,
ShaderVariable("", srcOpers[0].value.i.x << (srcOpers[1].value.u.x & 0x1f),
srcOpers[0].value.i.y << (srcOpers[1].value.u.x & 0x1f),
srcOpers[0].value.i.z << (srcOpers[1].value.u.x & 0x1f),
srcOpers[0].value.i.w << (srcOpers[1].value.u.x & 0x1f)));
break;
case OPCODE_IBFE:
{
@@ -1619,16 +1620,16 @@ State State::GetNext(GlobalState &global, State quad[4]) const
case OPCODE_USHR:
s.SetDst(op.operands[0], op,
ShaderVariable("", srcOpers[0].value.u.x >> (srcOpers[1].value.u.x & 0x1f),
srcOpers[0].value.u.y >> (srcOpers[1].value.u.y & 0x1f),
srcOpers[0].value.u.z >> (srcOpers[1].value.u.z & 0x1f),
srcOpers[0].value.u.w >> (srcOpers[1].value.u.w & 0x1f)));
srcOpers[0].value.u.y >> (srcOpers[1].value.u.x & 0x1f),
srcOpers[0].value.u.z >> (srcOpers[1].value.u.x & 0x1f),
srcOpers[0].value.u.w >> (srcOpers[1].value.u.x & 0x1f)));
break;
case OPCODE_ISHR:
s.SetDst(op.operands[0], op,
ShaderVariable("", srcOpers[0].value.i.x >> (srcOpers[1].value.u.x & 0x1f),
srcOpers[0].value.i.y >> (srcOpers[1].value.u.y & 0x1f),
srcOpers[0].value.i.z >> (srcOpers[1].value.u.z & 0x1f),
srcOpers[0].value.i.w >> (srcOpers[1].value.u.w & 0x1f)));
srcOpers[0].value.i.y >> (srcOpers[1].value.u.x & 0x1f),
srcOpers[0].value.i.z >> (srcOpers[1].value.u.x & 0x1f),
srcOpers[0].value.i.w >> (srcOpers[1].value.u.x & 0x1f)));
break;
case OPCODE_AND:
s.SetDst(op.operands[0], op, ShaderVariable("", srcOpers[0].value.i.x & srcOpers[1].value.i.x,