56b1b80795
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>
29 lines
648 B
Plaintext
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);
|
|
}
|