Add parentheses around ambiguous WGSL binary-op intrinsics.

Intrinsic ops like `equal(x, y)` and `lessThan(x, y)` are
implemented in WGSL as binary-ops like `x == y` or `x < y`.
This makes them subject to WGSL's unique associativity rules:
https://www.w3.org/TR/WGSL/#operator-precedence-associativity

In particular, relational and equality operators are lumped
together into one group which do _not_ associate with each
other, and generate a compile error if you try. For instance,
our `runtime_intrinsics_relational` slide has a test like
this:
`notEqual(lessThanEqual(p, v1), greaterThanEqual(p, v1))``

Which would expand in WGSL to:
`p <= v1 != p >= v1`

Note the lack of parentheses; SkSL/GLSL/C++ put (in)equality
and relational-comparison into separate precedence groups.
WGSL, however, just rejects this expression as invalid.

We are now more cautious when emitting binary-op intrinsics,
and emit parentheses whenever a relative op is used.

Change-Id: Ib8ee7ed84915c00040f02b5f5c1b45b8480377a4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/744664
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
17 files changed