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