d361690358
This was another place where we needed to use `getConstantSubexpression` to rebuild vectors/matrices; it is a more robust approach than trying handle each ctor type individually. The fuzzer found an edge case with double-casting matrices to vectors that fell through the cracks with the original approach. In adding additional tests, I also found a case that the constant-folder seems to ignore, `bool4(x,x,x,x) == bool4(x)`. This does fold for ints and floats, so this ought to be fixable in a followup, but it's not a big deal either way; this is very unlikely to occer in real code. Change-Id: I4d577c87ef7049306685ca95250ecdf93b1dbc06 Bug: oss-fuzz:37464 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/441238 Commit-Queue: John Stiles <johnstiles@google.com> Commit-Queue: Brian Osman <brianosman@google.com> Auto-Submit: John Stiles <johnstiles@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
36 lines
1.5 KiB
Plaintext
36 lines
1.5 KiB
Plaintext
uniform half4 colorGreen, colorRed;
|
|
uniform half2x2 testMatrix2x2;
|
|
|
|
half4 main(float2 coords) {
|
|
const half2x2 mat1234 = half2x2(1, 2, 3, 4);
|
|
const half2x2 bmat1234 = half2x2(1, 0, 1, 0);
|
|
|
|
bool ok = true;
|
|
|
|
ok = ok && half4(testMatrix2x2) == half4(1, 2, 3, 4);
|
|
ok = ok && half4(half2x2(1, 2, 3, 4)) == half4(1, 2, 3, 4);
|
|
ok = ok && half4(mat1234) == half4(1, 2, 3, 4);
|
|
ok = ok && half4(half2x2(2)) == half4(2, 0, 0, 2);
|
|
ok = ok && half4(half2x2(2, 2, 2, 2)) == half4(2);
|
|
|
|
ok = ok && float4(testMatrix2x2) == float4(1, 2, 3, 4);
|
|
ok = ok && float4(half2x2(1, 2, 3, 4)) == float4(1, 2, 3, 4);
|
|
ok = ok && float4(mat1234) == float4(1, 2, 3, 4);
|
|
ok = ok && float4(float2x2(4)) == float4(4, 0, 0, 4);
|
|
ok = ok && float4(float2x2(2, 2, 2, 2)) == float4(2);
|
|
|
|
ok = ok && int4(testMatrix2x2) == int4(1, 2, 3, 4);
|
|
ok = ok && int4(half2x2(1, 2, 3, 4)) == int4(1, 2, 3, 4);
|
|
ok = ok && int4(mat1234) == int4(1, 2, 3, 4);
|
|
ok = ok && int4(float2x2(8)) == int4(8, 0, 0, 8);
|
|
ok = ok && int4(float2x2(8, 8, 8, 8)) == int4(8);
|
|
|
|
ok = ok && bool4(testMatrix2x2) == bool4(true, true, true, true);
|
|
ok = ok && bool4(half2x2(0, 1, 0, 1)) == bool4(false, true, false, true);
|
|
ok = ok && bool4(bmat1234) == bool4(true, false, true, false);
|
|
ok = ok && bool4(half2x2(1)) == bool4(true, false, false, true);
|
|
ok = ok && bool4(half2x2(1, 1, 1, 1)) == bool4(true);
|
|
|
|
return ok ? colorGreen : colorRed;
|
|
}
|