5abb9e1426
This shook out a long-standing bug; constant folding would treat a matrix resize as if the cells not covered by the original matrix were all zero. This is wrong; GLSL populates the unknown cells with an identity matrix. We actually tested for the wrong behavior, so the tests were updated to match the correct behavior, and an equivalent test was added that does not constant-fold (to verify that our constant folder matches reality). Change-Id: I03df10ce646fbef0a36e9c1a841a7637182de122 Bug: skia:11032 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/392916 Commit-Queue: John Stiles <johnstiles@google.com> Auto-Submit: John Stiles <johnstiles@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
41 lines
1.8 KiB
Plaintext
41 lines
1.8 KiB
Plaintext
uniform half4 colorRed, colorGreen;
|
|
uniform half unknownInput;
|
|
|
|
bool test() {
|
|
bool ok = true;
|
|
ok = ok && (float2x2(float2(1.0, 0.0), float2(0.0, 1.0)) ==
|
|
float2x2(float2(1.0, 0.0), float2(0.0, 1.0)));
|
|
ok = ok && !(float2x2(float2(1.0, 0.0), float2(1.0, 1.0)) ==
|
|
float2x2(float2(1.0, 0.0), float2(0.0, 1.0)));
|
|
|
|
ok = ok && ( float2x2(1) == float2x2(1));
|
|
ok = ok && !( float2x2(1) == float2x2(0));
|
|
ok = ok && ( float2x2(-1) == -float2x2(1));
|
|
ok = ok && ( float2x2(0) == -float2x2(0));
|
|
ok = ok && (-float2x2(-1) == float2x2(1));
|
|
ok = ok && (-float2x2(0) == -float2x2(-0));
|
|
|
|
ok = ok && (float2x2(1) == float2x2(float2(1.0, 0.0), float2(0.0, 1.0)));
|
|
ok = ok && !(float2x2(2) == float2x2(float2(1.0, 0.0), float2(0.0, 1.0)));
|
|
|
|
ok = ok && !(float2x2(1) != float2x2(1));
|
|
ok = ok && (float2x2(1) != float2x2(0));
|
|
ok = ok && (float3x3(float3(1.0, 0.0, 0.0), float3(0.0, 1.0, 0.0), float3(0.0, 0.0, 1.0)) ==
|
|
float3x3(float2x2(1.0)));
|
|
ok = ok && (float3x3(float3(9.0, 0.0, 0.0), float3(0.0, 9.0, 0.0), float3(0.0, 0.0, 1.0)) ==
|
|
float3x3(float2x2(9.0)));
|
|
ok = ok && (float3x3(unknownInput) == float3x3(float2x2(1.0)));
|
|
ok = ok && (float3x3(float3(9).x00, float3(9).0x0, float3(unknownInput).00x) ==
|
|
float3x3(float2x2(9.0)));
|
|
ok = ok && (float2x2(float3x3(1.0)) == float2x2(1.0));
|
|
ok = ok && (float2x2(float3x3(1.0)) == float2x2(1.0));
|
|
ok = ok && (float2x2(float4(1.0, 0.0, 0.0, 1.0)) == float2x2(1.0));
|
|
ok = ok && (float2x2(1.0, 0.0, float2(0.0, 1.0)) == float2x2(1.0));
|
|
ok = ok && (float2x2(float2(1.0, 0.0), 0.0, 1.0) == float2x2(1.0));
|
|
return ok;
|
|
}
|
|
|
|
half4 main() {
|
|
return test() ? colorGreen : colorRed;
|
|
}
|