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 ...@@ -2718,7 +2718,7 @@ namespace sw
RValue<Byte> SaturateUnsigned(RValue<Short> x) 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) RValue<Byte8> AddSat(RValue<Byte8> x, RValue<Byte8> y)
...@@ -3977,7 +3977,7 @@ namespace sw ...@@ -3977,7 +3977,7 @@ namespace sw
return RValue<UShort4>(V(result)); 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))); return UShort(IfThenElse(x > 0xFFFF, Int(0xFFFF), IfThenElse(x < 0, Int(0), x)));
} }
...@@ -3987,10 +3987,10 @@ namespace sw ...@@ -3987,10 +3987,10 @@ namespace sw
if(emulateIntrinsics) if(emulateIntrinsics)
{ {
UShort4 result; UShort4 result;
result = Insert(result, SaturateUShort(Int(Extract(x, 0)) + Int(Extract(y, 0))), 0); result = Insert(result, SaturateUnsigned(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, SaturateUnsigned(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, SaturateUnsigned(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, 3)) + Int(Extract(y, 3))), 3);
return result; return result;
} }
...@@ -4013,10 +4013,10 @@ namespace sw ...@@ -4013,10 +4013,10 @@ namespace sw
if(emulateIntrinsics) if(emulateIntrinsics)
{ {
UShort4 result; UShort4 result;
result = Insert(result, SaturateUShort(Int(Extract(x, 0)) - Int(Extract(y, 0))), 0); result = Insert(result, SaturateUnsigned(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, SaturateUnsigned(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, SaturateUnsigned(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, 3)) - Int(Extract(y, 3))), 3);
return result; 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