skia2/resources/sksl/folding/MatrixFoldingES2.sksl
John Stiles 5abb9e1426 Represent matrix resizes as a dedicated expression type.
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>
2021-04-06 18:35:06 +00:00

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;
}