skia2/tests/sksl/shared/Operators.sksl
John Stiles 56b1b80795 Detect invalid boolean binary expressions.
GLSL does not allow most binary operations on bvec types; we can now
detect these and properly flag them as errors.

Note that `determine_binary_type` was also refactored. It originally
started with an enormous omni-switch over every possible Token type,
used to set various bools describing the type of binary expression at
hand. Instead of one big switch, this has been refactored into several
small switches in standalone functions that simply switch on the op and
immediately return true or false. Conceptually this seems like more
work (checking the op multiple times), but these tiny switches actually
boil down to little branchless shift-and-mask functions, so in practice
they should be quite efficient compared to the original omni-switch.

Change-Id: I81b473d98c65da1edd136f35fc8f656261f8930d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/338346
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-11-25 16:04:37 +00:00

29 lines
648 B
Plaintext

void main() {
float x = 1, y = 2;
int z = 3;
x = x - x + y * z * x * (y - z);
y = x / y / z;
z = (z / 2 % 3 << 4) >> 2 << 1;
bool b = (x > 4) == x < 2 || 2 >= sqrt(2) && y <= z;
bool c = sqrt(2) > 2;
bool d = b ^^ c;
bool e = b && c;
bool f = b || c;
x += 12;
x -= 12;
x *= y /= z = 10;
z |= 0;
z &= -1;
z ^= 0;
z >>= 2;
z <<= 4;
z %= 5;
x = (float2(sqrt(1)), 6);
<<<<<<< HEAD
y = (float(b), 6.0);
=======
y = float(b) * float(c) * float(d) * float(e) * float(f);
>>>>>>> 0a85d57fa0 (Detect invalid boolean binary expressions.)
z = (float2(sqrt(1)), 6);
}