skia2/tests/sksl/shared/Matrices.glsl
John Stiles a9f7a8b617 Implement constant-folding for matrix-op-scalar and scalar-op-matrix.
GLSL supports adding, subtracting, multiplying, and dividing matrices
with scalars. This works by splatting the scalar across every matrix
component and then performing the op componentwise. Our constant folder
now knows how to fold out these simplifications.

Change-Id: Idb8751ec16135e1b61da0d58cfd0505ab31ac087
Bug: skia:12819
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/497738
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
2022-01-25 17:52:31 +00:00

60 lines
2.5 KiB
GLSL

out vec4 sk_FragColor;
uniform vec4 colorGreen;
uniform vec4 colorRed;
bool test_half_b() {
bool ok = true;
mat2 m1 = mat2(1.0, 2.0, 3.0, 4.0);
ok = ok && m1 == mat2(1.0, 2.0, 3.0, 4.0);
mat2 m3 = m1;
ok = ok && m3 == mat2(1.0, 2.0, 3.0, 4.0);
mat2 m4 = mat2(6.0);
ok = ok && m4 == mat2(6.0, 0.0, 0.0, 6.0);
m3 *= m4;
ok = ok && m3 == mat2(6.0, 12.0, 18.0, 24.0);
mat2 m5 = mat2(m1[1].y);
ok = ok && m5 == mat2(4.0, 0.0, 0.0, 4.0);
m1 += m5;
ok = ok && m1 == mat2(5.0, 2.0, 3.0, 8.0);
mat2 m7 = mat2(5.0, 6.0, 7.0, 8.0);
ok = ok && m7 == mat2(5.0, 6.0, 7.0, 8.0);
mat3 m9 = mat3(9.0);
ok = ok && m9 == mat3(9.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 9.0);
mat4 m10 = mat4(11.0);
ok = ok && m10 == mat4(11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0);
mat4 m11 = mat4(20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0);
m11 -= m10;
ok = ok && m11 == mat4(9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0);
return ok;
}
bool test_comma_b() {
mat2 x;
mat2 y;
return ((x = mat2(1.0, 2.0, 3.0, 4.0), y = mat2(1.0, 2.0, 3.0, 4.0)), x == y);
}
vec4 main() {
bool _0_ok = true;
mat2 _1_m1 = mat2(1.0, 2.0, 3.0, 4.0);
_0_ok = _0_ok && _1_m1 == mat2(1.0, 2.0, 3.0, 4.0);
mat2 _2_m3 = _1_m1;
_0_ok = _0_ok && _2_m3 == mat2(1.0, 2.0, 3.0, 4.0);
mat2 _3_m4 = mat2(6.0);
_0_ok = _0_ok && _3_m4 == mat2(6.0, 0.0, 0.0, 6.0);
_2_m3 *= _3_m4;
_0_ok = _0_ok && _2_m3 == mat2(6.0, 12.0, 18.0, 24.0);
mat2 _4_m5 = mat2(_1_m1[1].y);
_0_ok = _0_ok && _4_m5 == mat2(4.0, 0.0, 0.0, 4.0);
_1_m1 += _4_m5;
_0_ok = _0_ok && _1_m1 == mat2(5.0, 2.0, 3.0, 8.0);
mat2 _5_m7 = mat2(5.0, 6.0, 7.0, 8.0);
_0_ok = _0_ok && _5_m7 == mat2(5.0, 6.0, 7.0, 8.0);
mat3 _6_m9 = mat3(9.0);
_0_ok = _0_ok && _6_m9 == mat3(9.0, 0.0, 0.0, 0.0, 9.0, 0.0, 0.0, 0.0, 9.0);
mat4 _7_m10 = mat4(11.0);
_0_ok = _0_ok && _7_m10 == mat4(11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0, 0.0, 0.0, 0.0, 0.0, 11.0);
mat4 _8_m11 = mat4(20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0);
_8_m11 -= _7_m10;
_0_ok = _0_ok && _8_m11 == mat4(9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0, 20.0, 20.0, 20.0, 20.0, 9.0);
return (_0_ok && test_half_b()) && test_comma_b() ? colorGreen : colorRed;
}