Commit 7f301812 by Nicolas Capens Committed by Nicolas Capens

Fix emulation of Short to Byte saturation.

We weren't clamping the value when less than zero. Bug b/37496082 Change-Id: I3170d14a622f8571f0142dd4ce80f96617c7e0aa Reviewed-on: https://swiftshader-review.googlesource.com/12948Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarCasey Dahlin <sadmac@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent 75b9c1c8
......@@ -2718,7 +2718,7 @@ namespace sw
RValue<Byte> SaturateUnsigned(RValue<Short> x)
{
return Byte(IfThenElse(Int(x) > 0xFF, Int(0xFF), Int(x)));
return Byte(IfThenElse(Int(x) > 0xFF, Int(0xFF), IfThenElse(Int(x) < 0, Int(0), Int(x))));
}
RValue<Byte8> AddSat(RValue<Byte8> x, RValue<Byte8> y)
......@@ -3977,7 +3977,7 @@ namespace sw
return RValue<UShort4>(V(result));
}
RValue<UShort> SaturateUShort(RValue<Int> x)
RValue<UShort> SaturateUnsigned(RValue<Int> x)
{
return UShort(IfThenElse(x > 0xFFFF, Int(0xFFFF), IfThenElse(x < 0, Int(0), x)));
}
......@@ -3987,10 +3987,10 @@ namespace sw
if(emulateIntrinsics)
{
UShort4 result;
result = Insert(result, SaturateUShort(Int(Extract(x, 0)) + Int(Extract(y, 0))), 0);
result = Insert(result, SaturateUShort(Int(Extract(x, 1)) + Int(Extract(y, 1))), 1);
result = Insert(result, SaturateUShort(Int(Extract(x, 2)) + Int(Extract(y, 2))), 2);
result = Insert(result, SaturateUShort(Int(Extract(x, 3)) + Int(Extract(y, 3))), 3);
result = Insert(result, SaturateUnsigned(Int(Extract(x, 0)) + Int(Extract(y, 0))), 0);
result = Insert(result, SaturateUnsigned(Int(Extract(x, 1)) + Int(Extract(y, 1))), 1);
result = Insert(result, SaturateUnsigned(Int(Extract(x, 2)) + Int(Extract(y, 2))), 2);
result = Insert(result, SaturateUnsigned(Int(Extract(x, 3)) + Int(Extract(y, 3))), 3);
return result;
}
......@@ -4013,10 +4013,10 @@ namespace sw
if(emulateIntrinsics)
{
UShort4 result;
result = Insert(result, SaturateUShort(Int(Extract(x, 0)) - Int(Extract(y, 0))), 0);
result = Insert(result, SaturateUShort(Int(Extract(x, 1)) - Int(Extract(y, 1))), 1);
result = Insert(result, SaturateUShort(Int(Extract(x, 2)) - Int(Extract(y, 2))), 2);
result = Insert(result, SaturateUShort(Int(Extract(x, 3)) - Int(Extract(y, 3))), 3);
result = Insert(result, SaturateUnsigned(Int(Extract(x, 0)) - Int(Extract(y, 0))), 0);
result = Insert(result, SaturateUnsigned(Int(Extract(x, 1)) - Int(Extract(y, 1))), 1);
result = Insert(result, SaturateUnsigned(Int(Extract(x, 2)) - Int(Extract(y, 2))), 2);
result = Insert(result, SaturateUnsigned(Int(Extract(x, 3)) - Int(Extract(y, 3))), 3);
return result;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment