skia2/resources/sksl/shared/NegatedVectorLiteral.sksl
John Stiles 6fb520fcd5 Improve optimization of prefix expressions at IR time.
- Values from constant variables are folded in when it helps, e.g.:

    const bool SHINY = true;
    const float SHININESS = 2;
    if (!SHINY) {  // <-- optimizes directly to `false`
       param = -SHININESS; // <-- optimizes to `-2`

- Doubled-up logical-not and negation are stripped:

    y = -(-x); // <-- optimizes to `y = x;`
    b = !!a; // <-- optimizes to `b = a;`

Removal of doubled-up negation and logical-not was actually never
implemented in the constant-propagation phase; I just noticed it while
I was here and thinking about it.

Change-Id: Ie28bb9b5af91376f03d926e26e37f4a131bbf550
Bug: skia:11343
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/379298
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2021-03-05 21:41:55 +00:00

32 lines
918 B
Plaintext

uniform half4 colorGreen, colorRed;
bool test_float() {
const float one = 1;
float two = 2;
float4 result;
result.r = (half4(-1) == -half4(-half2(-1), half2(1))) ? 1 : 0;
result.g = (half4(1) != -half4(1)) ? 1 : 0;
result.b = (-half4(two) == half4(-two, half3(-two))) ? 1 : 0;
result.a = (-half2(-one, one + one) == -half2(one - two, two)) ? 1 : 0;
return bool(result.r * result.g * result.b * -(-result.a));
}
bool test_int() {
int one = 1;
const int two = 2;
int4 result;
result.r = (int4(-1) == -int4(-int2(-1), int2(1))) ? 1 : 0;
result.g = (int4(1) != -int4(1)) ? 1 : 0;
result.b = (-int4(two) == int4(-two, int3(-two))) ? 1 : 0;
result.a = (-int2(-one, one + one) == -int2(one - two, two)) ? 1 : 0;
return bool(-(-result.r) * result.g * result.b * result.a);
}
half4 main() {
return test_float() && test_int() ? colorGreen : colorRed;
}