skia2/resources/sksl/shared/Overflow.sksl
John Stiles 35981296a8 Prevent overflow of integral types during constant-folding.
Expressions which would overflow/wrap the result type are now left
as-is.

Change-Id: I6a942f337e6e5761823f5c9dcd214fa58227a626
Bug: skia:10932, skia:12050
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/413138
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2021-05-27 20:12:57 +00:00

34 lines
1.5 KiB
Plaintext

uniform half4 colorGreen;
half4 main(float2 coords) {
half huge = 999999999.9 * 999999999.9 * 999999999.9 * 999999999.9 *
999999999.9 * 999999999.9 * 999999999.9 * 999999999.9 *
999999999.9 * 999999999.9 * 999999999.9 * 999999999.9 *
999999999.9 * 999999999.9;
int hugeI = 16384
* 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
* 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2;
uint hugeU = uint(16384)
* 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
* 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2;
short hugeS = short(8192)
* 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2;
ushort hugeUS = ushort(8192)
* 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2;
int hugeNI = -16384
* 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
* 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2;
short hugeNS = short(-8192)
* 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2;
return colorGreen * saturate(huge) * saturate(half(hugeI)) * saturate(half(hugeU)) *
saturate(half(hugeS)) * saturate(half(hugeUS)) *
saturate(half(hugeNI)) * saturate(half(hugeNS));
}