1cb93a386Sopenharmony_ci/*#pragma settings SkVMDebugTrace*/
2cb93a386Sopenharmony_ci
3cb93a386Sopenharmony_ciuniform half4 colorGreen, colorRed;
4cb93a386Sopenharmony_ci
5cb93a386Sopenharmony_cibool test_scalar() {
6cb93a386Sopenharmony_ci    mediump float mp  = 0.5;
7cb93a386Sopenharmony_ci    highp   float hp  = mp;
8cb93a386Sopenharmony_ci    highp   int   ihp = 2;
9cb93a386Sopenharmony_ci    mediump int   imp = ihp;
10cb93a386Sopenharmony_ci
11cb93a386Sopenharmony_ci    return mp == hp && ihp == imp;
12cb93a386Sopenharmony_ci}
13cb93a386Sopenharmony_ci
14cb93a386Sopenharmony_cibool test_vector() {
15cb93a386Sopenharmony_ci    mediump vec2 mp2 = vec2(2);
16cb93a386Sopenharmony_ci    highp   vec2 hp2 = mp2;
17cb93a386Sopenharmony_ci    mediump vec3 mp3 = vec3(3);
18cb93a386Sopenharmony_ci    highp   vec3 hp3 = mp3;
19cb93a386Sopenharmony_ci    mediump vec4 mp4 = vec4(4);
20cb93a386Sopenharmony_ci    highp   vec4 hp4 = mp4;
21cb93a386Sopenharmony_ci
22cb93a386Sopenharmony_ci    highp   ivec2 ihp2 = ivec2(2);
23cb93a386Sopenharmony_ci    mediump ivec2 imp2 = ihp2;
24cb93a386Sopenharmony_ci    highp   ivec3 ihp3 = ivec3(3);
25cb93a386Sopenharmony_ci    mediump ivec3 imp3 = ihp3;
26cb93a386Sopenharmony_ci    highp   ivec4 ihp4 = ivec4(4);
27cb93a386Sopenharmony_ci    mediump ivec4 imp4 = ihp4;
28cb93a386Sopenharmony_ci
29cb93a386Sopenharmony_ci    return mp2 == hp2   && hp3 == mp3   && mp4 == hp4 &&
30cb93a386Sopenharmony_ci           imp2 == ihp2 && ihp3 == imp3 && imp4 == ihp4;
31cb93a386Sopenharmony_ci}
32cb93a386Sopenharmony_ci
33cb93a386Sopenharmony_cibool test_matrix() {
34cb93a386Sopenharmony_ci    mediump mat2 mp2 = mat2(2);
35cb93a386Sopenharmony_ci    highp   mat2 hp2 = mp2;
36cb93a386Sopenharmony_ci    mediump mat3 mp3 = mat3(3);
37cb93a386Sopenharmony_ci    highp   mat3 hp3 = mp3;
38cb93a386Sopenharmony_ci    mediump mat4 mp4 = mat4(4);
39cb93a386Sopenharmony_ci    highp   mat4 hp4 = mp4;
40cb93a386Sopenharmony_ci
41cb93a386Sopenharmony_ci    return mp2 == hp2 && hp3 == mp3 && mp4 == hp4;
42cb93a386Sopenharmony_ci}
43cb93a386Sopenharmony_ci
44cb93a386Sopenharmony_cibool test_array() {
45cb93a386Sopenharmony_ci    mediump float  mf[1]; mf[0] = 1;
46cb93a386Sopenharmony_ci    highp   float  hf[1]; hf[0] = 1;
47cb93a386Sopenharmony_ci    mediump vec2   mv[2]; mv[0] = vec2(0, 1); mv[1] = vec2(2, 3);
48cb93a386Sopenharmony_ci    highp   vec2   hv[2]; hv[0] = vec2(0, 1); hv[1] = vec2(2, 3);
49cb93a386Sopenharmony_ci
50cb93a386Sopenharmony_ci    return mf[0] == hf[0] && hv[0] == mv[0] && mv[1] == hv[1];
51cb93a386Sopenharmony_ci}
52cb93a386Sopenharmony_ci
53cb93a386Sopenharmony_cibool highp_param  (highp   float value) { return value == 1; }
54cb93a386Sopenharmony_cibool mediump_param(mediump float value) { return value == 2; }
55cb93a386Sopenharmony_cibool lowp_param   (lowp    float value) { return value == 3; }
56cb93a386Sopenharmony_ci
57cb93a386Sopenharmony_civec4 main(vec2 coords) {
58cb93a386Sopenharmony_ci    highp   vec4 zero = vec4(0);
59cb93a386Sopenharmony_ci    mediump vec4 one = vec4(1);
60cb93a386Sopenharmony_ci    lowp    vec4 green = colorGreen;
61cb93a386Sopenharmony_ci    green = green * one + zero;
62cb93a386Sopenharmony_ci
63cb93a386Sopenharmony_ci    highp vec4 red = colorRed;
64cb93a386Sopenharmony_ci    red = (red + zero) * one;
65cb93a386Sopenharmony_ci
66cb93a386Sopenharmony_ci    return (test_scalar() && test_vector() && test_matrix() && test_array() &&
67cb93a386Sopenharmony_ci            highp_param(1) && mediump_param(2) && lowp_param(3)) ? green : red;
68cb93a386Sopenharmony_ci}
69