174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samstypedef struct FragmentTestRec {
374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	const char * name;
474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	uint32_t texCount;
574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	const char * txt;
674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams} FragmentTest;
774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsstatic FragmentTest fpFill = {
974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"Solid color", 0,
1074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
1174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "precision mediump float;\n"
1274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "uniform vec4 u_color;\n"
1374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "void main() {\n"
1474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  gl_FragColor = u_color;\n"
1574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "}\n"
1674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams};
1774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
1874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsstatic FragmentTest fpGradient = {
1974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"Solid gradient", 0,
2074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
2174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "precision mediump float;\n"
2274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "varying lowp vec4 v_color;\n"
2374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "void main() {\n"
2474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  gl_FragColor = v_color;\n"
2574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "}\n"
2674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams};
2774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
2874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsstatic FragmentTest fpCopyTex = {
2974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"Texture copy", 1,
3074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
3174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "precision mediump float;\n"
3274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "varying vec2 v_tex0;\n"
3374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "uniform sampler2D u_tex0;\n"
3474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "void main() {\n"
3574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  gl_FragColor = texture2D(u_tex0, v_tex0);\n"
3674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "}\n"
3774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams};
3874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
3974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsstatic FragmentTest fpCopyTexGamma = {
4074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"Texture copy with gamma", 1,
4174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
4274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "precision mediump float;\n"
4374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "varying vec2 v_tex0;\n"
4474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "uniform sampler2D u_tex0;\n"
4574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "void main() {\n"
4674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  vec4 t = texture2D(u_tex0, v_tex0);\n"
4774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  t.rgb = pow(t.rgb, vec3(1.4, 1.4, 1.4));\n"
4874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  gl_FragColor = t;\n"
4974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "}\n"
5074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams};
5174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
5274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsstatic FragmentTest fpTexSpec = {
5374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"Texture spec", 1,
5474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
5574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "precision mediump float;\n"
5674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "varying vec2 v_tex0;\n"
5774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "uniform sampler2D u_tex0;\n"
5874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "void main() {\n"
5974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  vec4 t = texture2D(u_tex0, v_tex0);\n"
6074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  float simSpec = dot(gl_FragCoord.xyz, gl_FragCoord.xyz);\n"
6174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  simSpec = pow(clamp(simSpec, 0.1, 1.0), 40.0);\n"
6274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  gl_FragColor = t + vec4(simSpec, simSpec, simSpec, simSpec);\n"
6374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "}\n"
6474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams};
6574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
6674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsstatic FragmentTest fpDepTex = {
6774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"Dependent Lookup", 1,
6874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
6974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "precision mediump float;\n"
7074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "varying vec2 v_tex0;\n"
7174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "uniform sampler2D u_tex0;\n"
7274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "void main() {\n"
7374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  vec4 t = texture2D(u_tex0, v_tex0);\n"
7474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  t += texture2D(u_tex0, t.xy);\n"
7574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  gl_FragColor = t;\n"
7674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "}\n"
7774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams};
7874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
7974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsstatic FragmentTest fpModulateConstantTex = {
8074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"Texture modulate constant", 1,
8174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
8274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "precision mediump float;\n"
8374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "varying vec2 v_tex0;\n"
8474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "uniform sampler2D u_tex0;\n"
8574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "uniform vec4 u_color;\n"
8674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
8774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "void main() {\n"
8874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  lowp vec4 c = texture2D(u_tex0, v_tex0);\n"
8974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"  c *= u_color;\n"
9074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  gl_FragColor = c;\n"
9174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "}\n"
9274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams};
9374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
9474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsstatic FragmentTest fpModulateVaryingTex = {
9574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"Texture modulate gradient", 1,
9674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
9774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "precision mediump float;\n"
9874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "varying vec2 v_tex0;\n"
9974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "varying lowp vec4 v_color;\n"
10074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "uniform sampler2D u_tex0;\n"
10174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
10274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "void main() {\n"
10374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  lowp vec4 c = texture2D(u_tex0, v_tex0);\n"
10474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"  c *= v_color;\n"
10574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  gl_FragColor = c;\n"
10674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "}\n"
10774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams};
10874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
10974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsstatic FragmentTest fpModulateVaryingConstantTex = {
11074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"Texture modulate gradient constant", 1,
11174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
11274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "precision mediump float;\n"
11374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "varying vec2 v_tex0;\n"
11474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "varying lowp vec4 v_color;\n"
11574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "uniform sampler2D u_tex0;\n"
11674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "uniform vec4 u_color;\n"
11774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
11874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "void main() {\n"
11974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  lowp vec4 c = texture2D(u_tex0, v_tex0);\n"
12074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"  c *= v_color;\n"
12174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	"  c *= u_color;\n"
12274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "  gl_FragColor = c;\n"
12374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams    "}\n"
12474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams};
12574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
12674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsstatic FragmentTest *gFragmentTests[] = {
12774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	&fpFill,
12874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	&fpGradient,
12974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	&fpCopyTex,
13074b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	&fpCopyTexGamma,
13174b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams   &fpTexSpec,
13274b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams   &fpDepTex,
13374b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	&fpModulateConstantTex,
13474b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	&fpModulateVaryingTex,
13574b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams	&fpModulateVaryingConstantTex,
13674b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
13774b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams};
13874b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Sams
13974b28e45c38d742a517ca95e29ab8cbbb1645fd5Jason Samsstatic const size_t gFragmentTestCount = sizeof(gFragmentTests) / sizeof(gFragmentTests[0]);
140