typedef struct FragmentTestRec { const char * name; uint32_t texCount; const char * txt; } FragmentTest; static FragmentTest fpFill = { "Solid color", 0, "precision mediump float;\n" "uniform vec4 u_color;\n" "void main() {\n" " gl_FragColor = u_color;\n" "}\n" }; static FragmentTest fpGradient = { "Solid gradient", 0, "precision mediump float;\n" "varying lowp vec4 v_color;\n" "void main() {\n" " gl_FragColor = v_color;\n" "}\n" }; static FragmentTest fpCopyTex = { "Texture copy", 1, "precision mediump float;\n" "varying vec2 v_tex0;\n" "uniform sampler2D u_tex0;\n" "void main() {\n" " gl_FragColor = texture2D(u_tex0, v_tex0);\n" "}\n" }; static FragmentTest fpCopyTexGamma = { "Texture copy with gamma", 1, "precision mediump float;\n" "varying vec2 v_tex0;\n" "uniform sampler2D u_tex0;\n" "void main() {\n" " vec4 t = texture2D(u_tex0, v_tex0);\n" " t.rgb = pow(t.rgb, vec3(1.4, 1.4, 1.4));\n" " gl_FragColor = t;\n" "}\n" }; static FragmentTest fpTexSpec = { "Texture spec", 1, "precision mediump float;\n" "varying vec2 v_tex0;\n" "uniform sampler2D u_tex0;\n" "void main() {\n" " vec4 t = texture2D(u_tex0, v_tex0);\n" " float simSpec = dot(gl_FragCoord.xyz, gl_FragCoord.xyz);\n" " simSpec = pow(clamp(simSpec, 0.1, 1.0), 40.0);\n" " gl_FragColor = t + vec4(simSpec, simSpec, simSpec, simSpec);\n" "}\n" }; static FragmentTest fpDepTex = { "Dependent Lookup", 1, "precision mediump float;\n" "varying vec2 v_tex0;\n" "uniform sampler2D u_tex0;\n" "void main() {\n" " vec4 t = texture2D(u_tex0, v_tex0);\n" " t += texture2D(u_tex0, t.xy);\n" " gl_FragColor = t;\n" "}\n" }; static FragmentTest fpModulateConstantTex = { "Texture modulate constant", 1, "precision mediump float;\n" "varying vec2 v_tex0;\n" "uniform sampler2D u_tex0;\n" "uniform vec4 u_color;\n" "void main() {\n" " lowp vec4 c = texture2D(u_tex0, v_tex0);\n" " c *= u_color;\n" " gl_FragColor = c;\n" "}\n" }; static FragmentTest fpModulateVaryingTex = { "Texture modulate gradient", 1, "precision mediump float;\n" "varying vec2 v_tex0;\n" "varying lowp vec4 v_color;\n" "uniform sampler2D u_tex0;\n" "void main() {\n" " lowp vec4 c = texture2D(u_tex0, v_tex0);\n" " c *= v_color;\n" " gl_FragColor = c;\n" "}\n" }; static FragmentTest fpModulateVaryingConstantTex = { "Texture modulate gradient constant", 1, "precision mediump float;\n" "varying vec2 v_tex0;\n" "varying lowp vec4 v_color;\n" "uniform sampler2D u_tex0;\n" "uniform vec4 u_color;\n" "void main() {\n" " lowp vec4 c = texture2D(u_tex0, v_tex0);\n" " c *= v_color;\n" " c *= u_color;\n" " gl_FragColor = c;\n" "}\n" }; static FragmentTest *gFragmentTests[] = { &fpFill, &fpGradient, &fpCopyTex, &fpCopyTexGamma, &fpTexSpec, &fpDepTex, &fpModulateConstantTex, &fpModulateVaryingTex, &fpModulateVaryingConstantTex, }; static const size_t gFragmentTestCount = sizeof(gFragmentTests) / sizeof(gFragmentTests[0]);