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]);