82d4c12dd9
This is a reland of 23d8f94535
Original change's description:
> Fix array-of-matrix/struct comparisons in Metal.
>
> Metal needs helper functions in order to compare arrays, structs, and
> matrices. Depending on the input code, it was possible for the
> array-comparison helper to be emitted before a matrix-comparison
> or struct-comparison helper. If this occurred, array comparisons of that
> matrix or struct type would fail, because the operator== for the array's
> inner type was defined after array==, and Metal (like C++) parses
> top-to-bottom and only considers functions declared above the current
> function.
>
> We now emit prototypes for all the array, struct and matrix helper
> function. These prototypes are emitted above any helper functions. This
> ensures visibility no matter how your comparisons are organized.
>
> Change-Id: Ib3d8828c301fd0fa6c209788f9ea60800371edbe
> Bug: skia:12326
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/437739
> Commit-Queue: John Stiles <johnstiles@google.com>
> Auto-Submit: John Stiles <johnstiles@google.com>
> Reviewed-by: Brian Osman <brianosman@google.com>
Bug: skia:12326
Change-Id: Ife68020f6b01fae973b97f76099c6d5e8215636c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/438296
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
29 lines
940 B
Plaintext
29 lines
940 B
Plaintext
uniform half4 colorGreen, colorRed;
|
|
|
|
struct S {
|
|
int x, y;
|
|
};
|
|
|
|
half4 main(float2 coords) {
|
|
float f1[4] = float[4](1, 2, 3, 4);
|
|
float f2[4] = float[4](1, 2, 3, 4);
|
|
float f3[4] = float[4](1, 2, 3, -4);
|
|
|
|
int3 v1[2] = int3[2](int3(1, 2, 3), int3(4, 5, 6));
|
|
int3 v2[2] = int3[2](int3(1, 2, 3), int3(4, 5, 6));
|
|
int3 v3[2] = int3[2](int3(1, 2, 3), int3(4, 5, -6));
|
|
|
|
half2x2 m1[3] = half2x2[3](half2x2(1), half2x2(2), half2x2(3, 4, 5, 6));
|
|
half2x2 m2[3] = half2x2[3](half2x2(1), half2x2(2), half2x2(3, 4, 5, 6));
|
|
half2x2 m3[3] = half2x2[3](half2x2(1), half2x2(2, 3, 4, 5), half2x2(6));
|
|
|
|
S s1[3] = S[3](S(1, 2), S(3, 4), S(5, 6));
|
|
S s2[3] = S[3](S(1, 2), S(0, 0), S(5, 6));
|
|
S s3[3] = S[3](S(1, 2), S(3, 4), S(5, 6));
|
|
|
|
return (f1 == f2) && (f1 != f3) &&
|
|
(v1 == v2) && (v1 != v3) &&
|
|
(m1 == m2) && (m1 != m3) &&
|
|
(s1 != s2) && (s3 == s1) ? colorGreen : colorRed;
|
|
}
|