132001f49Smrg$ /*
232001f49Smrg$ Shader test script.
332001f49Smrg$ 
432001f49Smrg$ Author: Michal Krol
532001f49Smrg$ 
632001f49Smrg$ Comment line starts with dollar sign and white space.
732001f49Smrg$ 
832001f49Smrg$ $program <name> starts a new test program section called <name>. Contains all other sections.
932001f49Smrg$ 
1032001f49Smrg$ $attrib <name> starts vertex data input section for attrib called <name>. Each line consists of
1132001f49Smrg$   four values that form single vertex attrib.
1232001f49Smrg$ 
1332001f49Smrg$ $vertex starts vertex shader section. Contains $code and &output sections.
1432001f49Smrg$ 
1532001f49Smrg$ $code starts source code section. All text in this section gets compiled into appropriate
1632001f49Smrg$   shader object.
1732001f49Smrg$ 
1832001f49Smrg$ $output starts shader execution results section. These are compared, value-by-value,
1932001f49Smrg$   with results of executing printMESA() functions within a shader.
2032001f49Smrg$ */
2132001f49Smrg
2232001f49Smrg
2332001f49Smrg$ /*
2432001f49Smrg$ --------------------------------------------------------------------------------------------------
2532001f49Smrg$ Test printMESA() function.
2632001f49Smrg$ */
2732001f49Smrg
2832001f49Smrg$program PRINT TEST
2932001f49Smrg
3032001f49Smrg$vertex
3132001f49Smrg
3232001f49Smrg$code
3332001f49Smrg
3432001f49Smrg#version 110
3532001f49Smrg
3632001f49Smrg#extension MESA_shader_debug: require
3732001f49Smrg
3832001f49Smrgvoid main () {
3932001f49Smrg   gl_Position = gl_ModelViewMatrix * gl_Vertex;
4032001f49Smrg   gl_FrontColor = vec4 (1.0);
4132001f49Smrg
4232001f49Smrg   printMESA (11.1);
4332001f49Smrg   printMESA (111);
4432001f49Smrg   printMESA (true);
4532001f49Smrg
4632001f49Smrg   printMESA (vec2 (22.1, 22.2));
4732001f49Smrg   printMESA (vec3 (33.1, 33.2, 33.3));
4832001f49Smrg   printMESA (vec4 (44.1, 44.2, 44.3, 44.4));
4932001f49Smrg
5032001f49Smrg   printMESA (ivec2 (221, 222));
5132001f49Smrg   printMESA (ivec3 (331, 332, 333));
5232001f49Smrg   printMESA (ivec4 (441, 442, 443, 444));
5332001f49Smrg
5432001f49Smrg   printMESA (bvec2 (false, true));
5532001f49Smrg   printMESA (bvec3 (true, true, false));
5632001f49Smrg   printMESA (bvec4 (true, false, true, false));
5732001f49Smrg
5832001f49Smrg   printMESA (mat2 (55.11, 55.12, 55.21, 55.22));
5932001f49Smrg   printMESA (mat3 (66.11, 66.12, 66.13,
6032001f49Smrg                    66.21, 66.22, 66.23,
6132001f49Smrg                    66.31, 66.32, 66.33));
6232001f49Smrg   printMESA (mat4 (77.11, 77.12, 77.13, 77.14,
6332001f49Smrg                    77.21, 77.22, 77.23, 77.24,
6432001f49Smrg                    77.31, 77.32, 77.33, 77.34,
6532001f49Smrg                    77.41, 77.42, 77.43, 77.44));
6632001f49Smrg}
6732001f49Smrg
6832001f49Smrg$output
6932001f49Smrg
7032001f49Smrg11.1
7132001f49Smrg111
7232001f49Smrgtrue
7332001f49Smrg
7432001f49Smrg22.1
7532001f49Smrg22.2
7632001f49Smrg33.1
7732001f49Smrg33.2
7832001f49Smrg33.3
7932001f49Smrg44.1
8032001f49Smrg44.2
8132001f49Smrg44.3
8232001f49Smrg44.4
8332001f49Smrg
8432001f49Smrg221
8532001f49Smrg222
8632001f49Smrg331
8732001f49Smrg332
8832001f49Smrg333
8932001f49Smrg441
9032001f49Smrg442
9132001f49Smrg443
9232001f49Smrg444
9332001f49Smrg
9432001f49Smrgfalse
9532001f49Smrgtrue
9632001f49Smrgtrue
9732001f49Smrgtrue
9832001f49Smrgfalse
9932001f49Smrgtrue
10032001f49Smrgfalse
10132001f49Smrgtrue
10232001f49Smrgfalse
10332001f49Smrg
10432001f49Smrg55.11
10532001f49Smrg55.12
10632001f49Smrg55.21
10732001f49Smrg55.22
10832001f49Smrg
10932001f49Smrg66.11
11032001f49Smrg66.12
11132001f49Smrg66.13
11232001f49Smrg66.21
11332001f49Smrg66.22
11432001f49Smrg66.23
11532001f49Smrg66.31
11632001f49Smrg66.32
11732001f49Smrg66.33
11832001f49Smrg
11932001f49Smrg77.11
12032001f49Smrg77.12
12132001f49Smrg77.13
12232001f49Smrg77.14
12332001f49Smrg77.21
12432001f49Smrg77.22
12532001f49Smrg77.23
12632001f49Smrg77.24
12732001f49Smrg77.31
12832001f49Smrg77.32
12932001f49Smrg77.33
13032001f49Smrg77.34
13132001f49Smrg77.41
13232001f49Smrg77.42
13332001f49Smrg77.43
13432001f49Smrg77.44
13532001f49Smrg
13632001f49Smrg
13732001f49Smrg$ /*
13832001f49Smrg$ --------------------------------------------------------------------------------------------------
13932001f49Smrg$ Test type casting.
14032001f49Smrg$ */
14132001f49Smrg
14232001f49Smrg$program TYPE CAST TEST
14332001f49Smrg
14432001f49Smrg$attrib gl_Vertex
14532001f49Smrg0.0 0.0 0.0 1.0
14632001f49Smrg
14732001f49Smrg$attrib _Zero
14832001f49Smrg0.0 0.0 0.0 0.0
14932001f49Smrg
15032001f49Smrg$attrib _One
15132001f49Smrg1.1 0.0 0.0 0.0
15232001f49Smrg
15332001f49Smrg$attrib _Two
15432001f49Smrg2.2 0.0 0.0 0.0
15532001f49Smrg
15632001f49Smrg$attrib _MinusThree
15732001f49Smrg-3.3 0.0 0.0 0.0
15832001f49Smrg
15932001f49Smrg$vertex
16032001f49Smrg
16132001f49Smrg$code
16232001f49Smrg
16332001f49Smrg#version 110
16432001f49Smrg
16532001f49Smrg#extension MESA_shader_debug: require
16632001f49Smrg
16732001f49Smrgattribute float _Zero;
16832001f49Smrgattribute float _One;
16932001f49Smrgattribute float _Two;
17032001f49Smrgattribute float _MinusThree;
17132001f49Smrg
17232001f49Smrgvoid main () {
17332001f49Smrg   gl_Position = gl_ModelViewMatrix * gl_Vertex;
17432001f49Smrg   gl_FrontColor = vec4 (1.0);
17532001f49Smrg
17632001f49Smrg   printMESA (_Zero);
17732001f49Smrg   printMESA (_One);
17832001f49Smrg   printMESA (_Two);
17932001f49Smrg   printMESA (_MinusThree);
18032001f49Smrg
18132001f49Smrg   printMESA (float (_Zero));
18232001f49Smrg   printMESA (float (_One));
18332001f49Smrg   printMESA (float (_Two));
18432001f49Smrg   printMESA (float (_MinusThree));
18532001f49Smrg   printMESA (float (45.99));
18632001f49Smrg   printMESA (float (-6.17));
18732001f49Smrg
18832001f49Smrg   printMESA (bool (_Zero));
18932001f49Smrg   printMESA (bool (_One));
19032001f49Smrg   printMESA (bool (_Two));
19132001f49Smrg   printMESA (bool (_MinusThree));
19232001f49Smrg   printMESA (bool (45.99));
19332001f49Smrg   printMESA (bool (-6.17));
19432001f49Smrg   printMESA (bool (0.0001));
19532001f49Smrg   printMESA (bool (0.0));
19632001f49Smrg
19732001f49Smrg   printMESA (int (_Zero));
19832001f49Smrg   printMESA (int (_One));
19932001f49Smrg   printMESA (int (_Two));
20032001f49Smrg   printMESA (int (_MinusThree));
20132001f49Smrg   printMESA (int (45.99));
20232001f49Smrg   printMESA (int (45.22));
20332001f49Smrg   printMESA (int (-6.17));
20432001f49Smrg   printMESA (int (-6.87));
20532001f49Smrg}
20632001f49Smrg
20732001f49Smrg$output
20832001f49Smrg
20932001f49Smrg0.0
21032001f49Smrg1.1
21132001f49Smrg2.2
21232001f49Smrg-3.3
21332001f49Smrg
21432001f49Smrg0.0
21532001f49Smrg1.1
21632001f49Smrg2.2
21732001f49Smrg-3.3
21832001f49Smrg45.99
21932001f49Smrg-6.17
22032001f49Smrg
22132001f49Smrgfalse
22232001f49Smrgtrue
22332001f49Smrgtrue
22432001f49Smrgtrue
22532001f49Smrgtrue
22632001f49Smrgtrue
22732001f49Smrgtrue
22832001f49Smrgfalse
22932001f49Smrg
23032001f49Smrg0
23132001f49Smrg1
23232001f49Smrg2
23332001f49Smrg-3
23432001f49Smrg45
23532001f49Smrg45
23632001f49Smrg-6
23732001f49Smrg-6
23832001f49Smrg
23932001f49Smrg$ /*
24032001f49Smrg$ --------------------------------------------------------------------------------------------------
24132001f49Smrg$ Test vector swizzles.
24232001f49Smrg$ */
24332001f49Smrg
24432001f49Smrg$program SWIZZLE TEST
24532001f49Smrg
24632001f49Smrg$attrib gl_Vertex
24732001f49Smrg0.0 0.0 0.0 1.0
24832001f49Smrg
24932001f49Smrg$attrib _One
25032001f49Smrg1.1 1.2 1.3 1.4
25132001f49Smrg
25232001f49Smrg$attrib _Two
25332001f49Smrg2.1 2.2 2.3 2.4
25432001f49Smrg
25532001f49Smrg$vertex
25632001f49Smrg
25732001f49Smrg$code
25832001f49Smrg
25932001f49Smrg#version 110
26032001f49Smrg
26132001f49Smrg#extension MESA_shader_debug: require
26232001f49Smrg
26332001f49Smrgattribute vec4 _One;
26432001f49Smrgattribute vec4 _Two;
26532001f49Smrg
26632001f49Smrgvoid assign5678 (out vec4 v)
26732001f49Smrg{
26832001f49Smrg   v.x = 5.5;
26932001f49Smrg   v.y = 6.6;
27032001f49Smrg   v.z = 7.7;
27132001f49Smrg   v.w = 8.8;
27232001f49Smrg}
27332001f49Smrg
27432001f49Smrgvoid main () {
27532001f49Smrg   gl_Position = gl_ModelViewMatrix * gl_Vertex;
27632001f49Smrg   gl_FrontColor = vec4 (1.0);
27732001f49Smrg
27832001f49Smrg   printMESA (_One);
27932001f49Smrg   printMESA (_Two);
28032001f49Smrg
28132001f49Smrg   printMESA (_One.x);
28232001f49Smrg   printMESA (_One.y);
28332001f49Smrg   printMESA (_One.z);
28432001f49Smrg   printMESA (_One.w);
28532001f49Smrg
28632001f49Smrg   printMESA (_Two.xy);
28732001f49Smrg   printMESA (_Two.yx);
28832001f49Smrg   printMESA (_Two.xw);
28932001f49Smrg   printMESA (_Two.wx);
29032001f49Smrg   printMESA (_Two.yz);
29132001f49Smrg   printMESA (_Two.zy);
29232001f49Smrg   printMESA (_Two.xz);
29332001f49Smrg   printMESA (_Two.zx);
29432001f49Smrg   printMESA (_Two.zw);
29532001f49Smrg   printMESA (_Two.wz);
29632001f49Smrg
29732001f49Smrg   printMESA (_One.xyz);
29832001f49Smrg   printMESA (_One.yzx);
29932001f49Smrg   printMESA (_One.zxy);
30032001f49Smrg   printMESA (_One.xzy);
30132001f49Smrg   printMESA (_One.yzw);
30232001f49Smrg   printMESA (_One.zwx);
30332001f49Smrg
30432001f49Smrg   printMESA (_Two.xyzw);
30532001f49Smrg   printMESA (_Two.yzwx);
30632001f49Smrg   printMESA (_Two.wzyx);
30732001f49Smrg   printMESA (_Two.zwyx);
30832001f49Smrg
30932001f49Smrg   printMESA (_One.xx);
31032001f49Smrg   printMESA (_One.zz);
31132001f49Smrg   printMESA (_One.ww);
31232001f49Smrg
31332001f49Smrg   printMESA (_Two.xxx);
31432001f49Smrg   printMESA (_Two.yyy);
31532001f49Smrg   printMESA (_Two.www);
31632001f49Smrg
31732001f49Smrg   printMESA (_One.xxxx);
31832001f49Smrg   printMESA (_One.zzzz);
31932001f49Smrg
32032001f49Smrg   printMESA (_Two.xxyy);
32132001f49Smrg   printMESA (_Two.wwxx);
32232001f49Smrg   printMESA (_Two.zxxw);
32332001f49Smrg
32432001f49Smrg   vec4 v;
32532001f49Smrg
32632001f49Smrg   v.zxwy = vec4 (5.5, 6.6, 7.7, 8.8);
32732001f49Smrg   printMESA (v);
32832001f49Smrg
32932001f49Smrg   assign5678 (v.ywxz);
33032001f49Smrg   printMESA (v);
33132001f49Smrg}
33232001f49Smrg
33332001f49Smrg$output
33432001f49Smrg
33532001f49Smrg1.1
33632001f49Smrg1.2
33732001f49Smrg1.3
33832001f49Smrg1.4
33932001f49Smrg2.1
34032001f49Smrg2.2
34132001f49Smrg2.3
34232001f49Smrg2.4
34332001f49Smrg
34432001f49Smrg1.1
34532001f49Smrg1.2
34632001f49Smrg1.3
34732001f49Smrg1.4
34832001f49Smrg
34932001f49Smrg2.1
35032001f49Smrg2.2
35132001f49Smrg2.2
35232001f49Smrg2.1
35332001f49Smrg2.1
35432001f49Smrg2.4
35532001f49Smrg2.4
35632001f49Smrg2.1
35732001f49Smrg2.2
35832001f49Smrg2.3
35932001f49Smrg2.3
36032001f49Smrg2.2
36132001f49Smrg2.1
36232001f49Smrg2.3
36332001f49Smrg2.3
36432001f49Smrg2.1
36532001f49Smrg2.3
36632001f49Smrg2.4
36732001f49Smrg2.4
36832001f49Smrg2.3
36932001f49Smrg
37032001f49Smrg1.1
37132001f49Smrg1.2
37232001f49Smrg1.3
37332001f49Smrg1.2
37432001f49Smrg1.3
37532001f49Smrg1.1
37632001f49Smrg1.3
37732001f49Smrg1.1
37832001f49Smrg1.2
37932001f49Smrg1.1
38032001f49Smrg1.3
38132001f49Smrg1.2
38232001f49Smrg1.2
38332001f49Smrg1.3
38432001f49Smrg1.4
38532001f49Smrg1.3
38632001f49Smrg1.4
38732001f49Smrg1.1
38832001f49Smrg
38932001f49Smrg2.1
39032001f49Smrg2.2
39132001f49Smrg2.3
39232001f49Smrg2.4
39332001f49Smrg2.2
39432001f49Smrg2.3
39532001f49Smrg2.4
39632001f49Smrg2.1
39732001f49Smrg2.4
39832001f49Smrg2.3
39932001f49Smrg2.2
40032001f49Smrg2.1
40132001f49Smrg2.3
40232001f49Smrg2.4
40332001f49Smrg2.2
40432001f49Smrg2.1
40532001f49Smrg
40632001f49Smrg1.1
40732001f49Smrg1.1
40832001f49Smrg1.3
40932001f49Smrg1.3
41032001f49Smrg1.4
41132001f49Smrg1.4
41232001f49Smrg
41332001f49Smrg2.1
41432001f49Smrg2.1
41532001f49Smrg2.1
41632001f49Smrg2.2
41732001f49Smrg2.2
41832001f49Smrg2.2
41932001f49Smrg2.4
42032001f49Smrg2.4
42132001f49Smrg2.4
42232001f49Smrg
42332001f49Smrg1.1
42432001f49Smrg1.1
42532001f49Smrg1.1
42632001f49Smrg1.1
42732001f49Smrg1.3
42832001f49Smrg1.3
42932001f49Smrg1.3
43032001f49Smrg1.3
43132001f49Smrg
43232001f49Smrg2.1
43332001f49Smrg2.1
43432001f49Smrg2.2
43532001f49Smrg2.2
43632001f49Smrg2.4
43732001f49Smrg2.4
43832001f49Smrg2.1
43932001f49Smrg2.1
44032001f49Smrg2.3
44132001f49Smrg2.1
44232001f49Smrg2.1
44332001f49Smrg2.4
44432001f49Smrg
44532001f49Smrg6.6
44632001f49Smrg8.8
44732001f49Smrg5.5
44832001f49Smrg7.7
44932001f49Smrg
45032001f49Smrg7.7
45132001f49Smrg5.5
45232001f49Smrg8.8
45332001f49Smrg6.6
45432001f49Smrg
45532001f49Smrg
45632001f49Smrg$ /*
45732001f49Smrg$ --------------------------------------------------------------------------------------------------
45832001f49Smrg$ Test relational operators.
45932001f49Smrg$ */
46032001f49Smrg
46132001f49Smrg$program RELATIONAL OPERATOR TEST
46232001f49Smrg
46332001f49Smrg$attrib gl_Vertex
46432001f49Smrg0.0 0.0 0.0 1.0
46532001f49Smrg
46632001f49Smrg$attrib _Two
46732001f49Smrg2.0 0.0 0.0 0.0
46832001f49Smrg
46932001f49Smrg$attrib _Two2
47032001f49Smrg2.0 0.0 0.0 0.0
47132001f49Smrg
47232001f49Smrg$attrib _MinusThree
47332001f49Smrg-3.0 0.0 0.0 0.0
47432001f49Smrg
47532001f49Smrg$vertex
47632001f49Smrg
47732001f49Smrg$code
47832001f49Smrg
47932001f49Smrg#version 110
48032001f49Smrg
48132001f49Smrg#extension MESA_shader_debug: require
48232001f49Smrg
48332001f49Smrgattribute float _Two;
48432001f49Smrgattribute float _Two2;
48532001f49Smrgattribute float _MinusThree;
48632001f49Smrg
48732001f49Smrgstruct foo
48832001f49Smrg{
48932001f49Smrg	float f;
49032001f49Smrg	vec4 v4;
49132001f49Smrg	vec3 v3;
49232001f49Smrg	mat4 m4;
49332001f49Smrg	int i;
49432001f49Smrg	bool b;
49532001f49Smrg};
49632001f49Smrg
49732001f49Smrgvoid printMESA (const in foo bar)
49832001f49Smrg{
49932001f49Smrg	printMESA (bar.f);
50032001f49Smrg	printMESA (bar.v4);
50132001f49Smrg	printMESA (bar.v3);
50232001f49Smrg	printMESA (bar.m4);
50332001f49Smrg	printMESA (bar.i);
50432001f49Smrg	printMESA (bar.b);
50532001f49Smrg}
50632001f49Smrg
50732001f49Smrgvoid main () {
50832001f49Smrg   gl_Position = gl_ModelViewMatrix * gl_Vertex;
50932001f49Smrg   gl_FrontColor = vec4 (1.0);
51032001f49Smrg
51132001f49Smrg   int iTwo = int (_Two);
51232001f49Smrg   int iTwo2 = int (_Two2);
51332001f49Smrg   int iMinusThree = int (_MinusThree);
51432001f49Smrg
51532001f49Smrg   printMESA (_Two <= _Two);
51632001f49Smrg   printMESA (_Two <= _Two2);
51732001f49Smrg   printMESA (_Two <= _MinusThree);
51832001f49Smrg   printMESA (_MinusThree <= _Two);
51932001f49Smrg   printMESA (iTwo <= iTwo);
52032001f49Smrg   printMESA (iTwo <= iTwo2);
52132001f49Smrg   printMESA (iTwo <= iMinusThree);
52232001f49Smrg   printMESA (iMinusThree <= iTwo);
52332001f49Smrg
52432001f49Smrg   printMESA (_Two >= _Two);
52532001f49Smrg   printMESA (_Two >= _Two2);
52632001f49Smrg   printMESA (_Two >= _MinusThree);
52732001f49Smrg   printMESA (_MinusThree >= _Two);
52832001f49Smrg   printMESA (iTwo >= iTwo);
52932001f49Smrg   printMESA (iTwo >= iTwo2);
53032001f49Smrg   printMESA (iTwo >= iMinusThree);
53132001f49Smrg   printMESA (iMinusThree >= iTwo);
53232001f49Smrg
53332001f49Smrg   printMESA (_Two < _Two);
53432001f49Smrg   printMESA (_Two < _Two2);
53532001f49Smrg   printMESA (_Two < _MinusThree);
53632001f49Smrg   printMESA (_MinusThree < _Two);
53732001f49Smrg   printMESA (iTwo < iTwo);
53832001f49Smrg   printMESA (iTwo < iTwo2);
53932001f49Smrg   printMESA (iTwo < iMinusThree);
54032001f49Smrg   printMESA (iMinusThree < iTwo);
54132001f49Smrg
54232001f49Smrg   printMESA (_Two > _Two);
54332001f49Smrg   printMESA (_Two > _Two2);
54432001f49Smrg   printMESA (_Two > _MinusThree);
54532001f49Smrg   printMESA (_MinusThree > _Two);
54632001f49Smrg   printMESA (iTwo > iTwo);
54732001f49Smrg   printMESA (iTwo > iTwo2);
54832001f49Smrg   printMESA (iTwo > iMinusThree);
54932001f49Smrg   printMESA (iMinusThree > iTwo);
55032001f49Smrg
55132001f49Smrg   printMESA (_Two == _Two);
55232001f49Smrg   printMESA (_Two == _Two2);
55332001f49Smrg   printMESA (_Two == _MinusThree);
55432001f49Smrg   printMESA (_MinusThree == _MinusThree);
55532001f49Smrg   printMESA (iTwo == iTwo);
55632001f49Smrg   printMESA (iTwo == iTwo2);
55732001f49Smrg   printMESA (iTwo == iMinusThree);
55832001f49Smrg   printMESA (iMinusThree == iMinusThree);
55932001f49Smrg
56032001f49Smrg   printMESA (_Two != _Two);
56132001f49Smrg   printMESA (_Two != _Two2);
56232001f49Smrg   printMESA (_Two != _MinusThree);
56332001f49Smrg   printMESA (_MinusThree != _MinusThree);
56432001f49Smrg   printMESA (iTwo != iTwo);
56532001f49Smrg   printMESA (iTwo != iTwo2);
56632001f49Smrg   printMESA (iTwo != iMinusThree);
56732001f49Smrg   printMESA (iMinusThree != iMinusThree);
56832001f49Smrg
56932001f49Smrg   foo foo1;
57032001f49Smrg   foo1.f = 13.31;
57132001f49Smrg   foo1.v4 = vec4 (44.11, 44.22, 44.33, 44.44);
57232001f49Smrg   foo1.v3 = vec3 (33.11, 33.22, 33.33);
57332001f49Smrg   foo1.m4 = mat4 (17.88);
57432001f49Smrg   foo1.i = 666;
57532001f49Smrg   foo1.b = true;
57632001f49Smrg   printMESA (foo1);
57732001f49Smrg
57832001f49Smrg   // make foo2 the same as foo1
57932001f49Smrg   foo foo2;
58032001f49Smrg   foo2.f = 13.31;
58132001f49Smrg   foo2.v4 = vec4 (44.11, 44.22, 44.33, 44.44);
58232001f49Smrg   foo2.v3 = vec3 (33.11, 33.22, 33.33);
58332001f49Smrg   foo2.m4 = mat4 (17.88);
58432001f49Smrg   foo2.i = 666;
58532001f49Smrg   foo2.b = true;
58632001f49Smrg
58732001f49Smrg   printMESA (foo1 == foo2);
58832001f49Smrg   printMESA (foo1 != foo2);
58932001f49Smrg
59032001f49Smrg   // make them a little bit different
59132001f49Smrg   foo2.m4[2].y = 333.333;
59232001f49Smrg   printMESA (foo2);
59332001f49Smrg
59432001f49Smrg   printMESA (foo1 == foo2);
59532001f49Smrg   printMESA (foo1 != foo2);
59632001f49Smrg}
59732001f49Smrg
59832001f49Smrg$output
59932001f49Smrg
60032001f49Smrgtrue
60132001f49Smrgtrue
60232001f49Smrgfalse
60332001f49Smrgtrue
60432001f49Smrgtrue
60532001f49Smrgtrue
60632001f49Smrgfalse
60732001f49Smrgtrue
60832001f49Smrg
60932001f49Smrgtrue
61032001f49Smrgtrue
61132001f49Smrgtrue
61232001f49Smrgfalse
61332001f49Smrgtrue
61432001f49Smrgtrue
61532001f49Smrgtrue
61632001f49Smrgfalse
61732001f49Smrg
61832001f49Smrgfalse
61932001f49Smrgfalse
62032001f49Smrgfalse
62132001f49Smrgtrue
62232001f49Smrgfalse
62332001f49Smrgfalse
62432001f49Smrgfalse
62532001f49Smrgtrue
62632001f49Smrg
62732001f49Smrgfalse
62832001f49Smrgfalse
62932001f49Smrgtrue
63032001f49Smrgfalse
63132001f49Smrgfalse
63232001f49Smrgfalse
63332001f49Smrgtrue
63432001f49Smrgfalse
63532001f49Smrg
63632001f49Smrgtrue
63732001f49Smrgtrue
63832001f49Smrgfalse
63932001f49Smrgtrue
64032001f49Smrgtrue
64132001f49Smrgtrue
64232001f49Smrgfalse
64332001f49Smrgtrue
64432001f49Smrg
64532001f49Smrgfalse
64632001f49Smrgfalse
64732001f49Smrgtrue
64832001f49Smrgfalse
64932001f49Smrgfalse
65032001f49Smrgfalse
65132001f49Smrgtrue
65232001f49Smrgfalse
65332001f49Smrg
65432001f49Smrg13.31
65532001f49Smrg44.11
65632001f49Smrg44.22
65732001f49Smrg44.33
65832001f49Smrg44.44
65932001f49Smrg33.11
66032001f49Smrg33.22
66132001f49Smrg33.33
66232001f49Smrg17.88
66332001f49Smrg0.0
66432001f49Smrg0.0
66532001f49Smrg0.0
66632001f49Smrg0.0
66732001f49Smrg17.88
66832001f49Smrg0.0
66932001f49Smrg0.0
67032001f49Smrg0.0
67132001f49Smrg0.0
67232001f49Smrg17.88
67332001f49Smrg0.0
67432001f49Smrg0.0
67532001f49Smrg0.0
67632001f49Smrg0.0
67732001f49Smrg17.88
67832001f49Smrg666
67932001f49Smrgtrue
68032001f49Smrg
68132001f49Smrgtrue
68232001f49Smrgfalse
68332001f49Smrg
68432001f49Smrg13.31
68532001f49Smrg44.11
68632001f49Smrg44.22
68732001f49Smrg44.33
68832001f49Smrg44.44
68932001f49Smrg33.11
69032001f49Smrg33.22
69132001f49Smrg33.33
69232001f49Smrg17.88
69332001f49Smrg0.0
69432001f49Smrg0.0
69532001f49Smrg0.0
69632001f49Smrg0.0
69732001f49Smrg17.88
69832001f49Smrg0.0
69932001f49Smrg0.0
70032001f49Smrg0.0
70132001f49Smrg333.333
70232001f49Smrg17.88
70332001f49Smrg0.0
70432001f49Smrg0.0
70532001f49Smrg0.0
70632001f49Smrg0.0
70732001f49Smrg17.88
70832001f49Smrg666
70932001f49Smrgtrue
71032001f49Smrg
71132001f49Smrgfalse
71232001f49Smrgtrue
71332001f49Smrg
71432001f49Smrg
71532001f49Smrg$ /*
71632001f49Smrg$ --------------------------------------------------------------------------------------------------
71732001f49Smrg$ Test logical operators.
71832001f49Smrg$ */
71932001f49Smrg
72032001f49Smrg$program LOGICAL OPERATOR TEST
72132001f49Smrg
72232001f49Smrg$attrib gl_Vertex
72332001f49Smrg0.0 0.0 0.0 1.0
72432001f49Smrg
72532001f49Smrg$attrib _False
72632001f49Smrg0.0 0.0 0.0 0.0
72732001f49Smrg
72832001f49Smrg$attrib _True
72932001f49Smrg1.0 0.0 0.0 0.0
73032001f49Smrg
73132001f49Smrg$attrib _False2
73232001f49Smrg0.0 0.0 0.0 0.0
73332001f49Smrg
73432001f49Smrg$attrib _True2
73532001f49Smrg1.0 0.0 0.0 0.0
73632001f49Smrg
73732001f49Smrg$vertex
73832001f49Smrg
73932001f49Smrg$code
74032001f49Smrg
74132001f49Smrg#version 110
74232001f49Smrg
74332001f49Smrg#extension MESA_shader_debug: require
74432001f49Smrg
74532001f49Smrgattribute float _False;
74632001f49Smrgattribute float _True;
74732001f49Smrgattribute float _False2;
74832001f49Smrgattribute float _True2;
74932001f49Smrg
75032001f49Smrgvoid main () {
75132001f49Smrg   gl_Position = gl_ModelViewMatrix * gl_Vertex;
75232001f49Smrg   gl_FrontColor = vec4 (1.0);
75332001f49Smrg
75432001f49Smrg   printMESA (_False);
75532001f49Smrg   printMESA (_True);
75632001f49Smrg   printMESA (_False2);
75732001f49Smrg   printMESA (_True2);
75832001f49Smrg
75932001f49Smrg   bool False = bool (_False);
76032001f49Smrg   bool True = bool (_True);
76132001f49Smrg   bool False2 = bool (_False2);
76232001f49Smrg   bool True2 = bool (_True2);
76332001f49Smrg
76432001f49Smrg   //
76532001f49Smrg   // It is important to test each operator with the following argument types:
76632001f49Smrg   // * Both arguments are different variables, even if they have the same values.
76732001f49Smrg   //   False and False2 are distinct attributes, but are the same in value.
76832001f49Smrg   // * Both arguments may be the same variables. This case tests possible
76932001f49Smrg   //   optimizations, e.g. X && X --> X.
77032001f49Smrg   // * Both arguments are constant. This tests constant folding.
77132001f49Smrg   //
77232001f49Smrg
77332001f49Smrg   printMESA (!False);
77432001f49Smrg   printMESA (!True);
77532001f49Smrg   printMESA (!false);
77632001f49Smrg   printMESA (!true);
77732001f49Smrg
77832001f49Smrg   printMESA (False ^^ False2);
77932001f49Smrg   printMESA (False ^^ True2);
78032001f49Smrg   printMESA (True ^^ False2);
78132001f49Smrg   printMESA (True ^^ True2);
78232001f49Smrg   printMESA (False ^^ False);
78332001f49Smrg   printMESA (False ^^ True);
78432001f49Smrg   printMESA (True ^^ False);
78532001f49Smrg   printMESA (True ^^ True);
78632001f49Smrg   printMESA (false ^^ false);
78732001f49Smrg   printMESA (false ^^ true);
78832001f49Smrg   printMESA (true ^^ false);
78932001f49Smrg   printMESA (true ^^ true);
79032001f49Smrg
79132001f49Smrg   printMESA (False && False2);
79232001f49Smrg   printMESA (False && True2);
79332001f49Smrg   printMESA (True && False2);
79432001f49Smrg   printMESA (True && True2);
79532001f49Smrg   printMESA (False && False);
79632001f49Smrg   printMESA (False && True);
79732001f49Smrg   printMESA (True && False);
79832001f49Smrg   printMESA (True && True);
79932001f49Smrg   printMESA (false && false);
80032001f49Smrg   printMESA (false && true);
80132001f49Smrg   printMESA (true && false);
80232001f49Smrg   printMESA (true && true);
80332001f49Smrg
80432001f49Smrg   printMESA (False || False2);
80532001f49Smrg   printMESA (False || True2);
80632001f49Smrg   printMESA (True || False2);
80732001f49Smrg   printMESA (True || True2);
80832001f49Smrg   printMESA (False || False);
80932001f49Smrg   printMESA (False || True);
81032001f49Smrg   printMESA (True || False);
81132001f49Smrg   printMESA (True || True);
81232001f49Smrg   printMESA (false || false);
81332001f49Smrg   printMESA (false || true);
81432001f49Smrg   printMESA (true || false);
81532001f49Smrg   printMESA (true || true);
81632001f49Smrg
81732001f49Smrg   //
81832001f49Smrg   // Test short-circuit evaluation of && and ||. The right expression evaluation depends
81932001f49Smrg   // on the value of the left expression. If the right expression has side effects, we
82032001f49Smrg   // can easily test if it happened.
82132001f49Smrg   //
82232001f49Smrg
82332001f49Smrg   bool x;
82432001f49Smrg
82532001f49Smrg   x = false;
82632001f49Smrg   printMESA (x);
82732001f49Smrg   printMESA (False && (x = true));
82832001f49Smrg   printMESA (x);
82932001f49Smrg
83032001f49Smrg   x = false;
83132001f49Smrg   printMESA (x);
83232001f49Smrg   printMESA (false && (x = true));
83332001f49Smrg   printMESA (x);
83432001f49Smrg
83532001f49Smrg   x = true;
83632001f49Smrg   printMESA (x);
83732001f49Smrg   printMESA (True || (x = false));
83832001f49Smrg   printMESA (x);
83932001f49Smrg
84032001f49Smrg   x = true;
84132001f49Smrg   printMESA (x);
84232001f49Smrg   printMESA (true || (x = false));
84332001f49Smrg   printMESA (x);
84432001f49Smrg}
84532001f49Smrg
84632001f49Smrg$output
84732001f49Smrg
84832001f49Smrg0.0
84932001f49Smrg1.0
85032001f49Smrg0.0
85132001f49Smrg1.0
85232001f49Smrg
85332001f49Smrgtrue
85432001f49Smrgfalse
85532001f49Smrgtrue
85632001f49Smrgfalse
85732001f49Smrg
85832001f49Smrgfalse
85932001f49Smrgtrue
86032001f49Smrgtrue
86132001f49Smrgfalse
86232001f49Smrgfalse
86332001f49Smrgtrue
86432001f49Smrgtrue
86532001f49Smrgfalse
86632001f49Smrgfalse
86732001f49Smrgtrue
86832001f49Smrgtrue
86932001f49Smrgfalse
87032001f49Smrg
87132001f49Smrgfalse
87232001f49Smrgfalse
87332001f49Smrgfalse
87432001f49Smrgtrue
87532001f49Smrgfalse
87632001f49Smrgfalse
87732001f49Smrgfalse
87832001f49Smrgtrue
87932001f49Smrgfalse
88032001f49Smrgfalse
88132001f49Smrgfalse
88232001f49Smrgtrue
88332001f49Smrg
88432001f49Smrgfalse
88532001f49Smrgtrue
88632001f49Smrgtrue
88732001f49Smrgtrue
88832001f49Smrgfalse
88932001f49Smrgtrue
89032001f49Smrgtrue
89132001f49Smrgtrue
89232001f49Smrgfalse
89332001f49Smrgtrue
89432001f49Smrgtrue
89532001f49Smrgtrue
89632001f49Smrg
89732001f49Smrgfalse
89832001f49Smrgfalse
89932001f49Smrgfalse
90032001f49Smrg
90132001f49Smrgfalse
90232001f49Smrgfalse
90332001f49Smrgfalse
90432001f49Smrg
90532001f49Smrgtrue
90632001f49Smrgtrue
90732001f49Smrgtrue
90832001f49Smrg
90932001f49Smrgtrue
91032001f49Smrgtrue
91132001f49Smrgtrue
91232001f49Smrg
91332001f49Smrg
91432001f49Smrg$ /*
91532001f49Smrg$ --------------------------------------------------------------------------------------------------
91632001f49Smrg$ Test subscript operator/array access.
91732001f49Smrg$ */
91832001f49Smrg
91932001f49Smrg$program ARRAY ACCESS TEST
92032001f49Smrg
92132001f49Smrg$attrib gl_Vertex
92232001f49Smrg0.0 0.0 0.0 1.0
92332001f49Smrg
92432001f49Smrg$attrib _Zero
92532001f49Smrg0.0 0.0 0.0 0.0
92632001f49Smrg
92732001f49Smrg$attrib _One
92832001f49Smrg1.1 0.0 0.0 0.0
92932001f49Smrg
93032001f49Smrg$attrib _Two
93132001f49Smrg2.9 0.0 0.0 0.0
93232001f49Smrg
93332001f49Smrg$attrib _Vec
93432001f49Smrg11.11 22.22 33.33 44.44
93532001f49Smrg
93632001f49Smrg$vertex
93732001f49Smrg
93832001f49Smrg$code
93932001f49Smrg
94032001f49Smrg#version 110
94132001f49Smrg
94232001f49Smrg#extension MESA_shader_debug: require
94332001f49Smrg
94432001f49Smrgattribute float _Zero;
94532001f49Smrgattribute float _One;
94632001f49Smrgattribute float _Two;
94732001f49Smrgattribute vec4 _Vec;
94832001f49Smrg
94932001f49Smrgvoid main () {
95032001f49Smrg   gl_Position = gl_ModelViewMatrix * gl_Vertex;
95132001f49Smrg   gl_FrontColor = vec4 (1.0);
95232001f49Smrg
95332001f49Smrg   printMESA (_Zero);
95432001f49Smrg   printMESA (_One);
95532001f49Smrg   printMESA (_Two);
95632001f49Smrg   printMESA (_Vec);
95732001f49Smrg
95832001f49Smrg   printMESA (_Vec[0]);
95932001f49Smrg   printMESA (_Vec[1]);
96032001f49Smrg   printMESA (_Vec[2]);
96132001f49Smrg   printMESA (_Vec[3]);
96232001f49Smrg
96332001f49Smrg   printMESA (_Vec[int (_Zero)]);
96432001f49Smrg   printMESA (_Vec[int (_One)]);
96532001f49Smrg   printMESA (_Vec[int (_Two)]);
96632001f49Smrg}
96732001f49Smrg
96832001f49Smrg$output
96932001f49Smrg
97032001f49Smrg0.0
97132001f49Smrg1.1
97232001f49Smrg2.9
97332001f49Smrg11.11
97432001f49Smrg22.22
97532001f49Smrg33.33
97632001f49Smrg44.44
97732001f49Smrg
97832001f49Smrg11.11
97932001f49Smrg22.22
98032001f49Smrg33.33
98132001f49Smrg44.44
98232001f49Smrg
98332001f49Smrg11.11
98432001f49Smrg22.22
98532001f49Smrg33.33
98632001f49Smrg
98732001f49Smrg
98832001f49Smrg$ /*
98932001f49Smrg$ --------------------------------------------------------------------------------------------------
99032001f49Smrg$ Test pre/post-increment/decrement operators.
99132001f49Smrg$ Note: assumes relational operators being correct.
99232001f49Smrg$ */
99332001f49Smrg
99432001f49Smrg$program PRE/POST-INC/DEC OPERATOR TEST
99532001f49Smrg
99632001f49Smrg$attrib gl_Vertex
99732001f49Smrg0.0 0.0 0.0 1.0
99832001f49Smrg
99932001f49Smrg$attrib _Zero
100032001f49Smrg0.0 0.0 0.0 0.0
100132001f49Smrg
100232001f49Smrg$attrib _One
100332001f49Smrg1.1 0.0 0.0 0.0
100432001f49Smrg
100532001f49Smrg$attrib _Two4
100632001f49Smrg2.1 2.2 2.3 2.4
100732001f49Smrg
100832001f49Smrg$vertex
100932001f49Smrg
101032001f49Smrg$code
101132001f49Smrg
101232001f49Smrg#version 110
101332001f49Smrg
101432001f49Smrg#extension MESA_shader_debug: require
101532001f49Smrg
101632001f49Smrgattribute float _Zero;
101732001f49Smrgattribute float _One;
101832001f49Smrgattribute vec4 _Two4;
101932001f49Smrg
102032001f49Smrgfloat fZero, fOne;
102132001f49Smrgvec4 fTwo4;
102232001f49Smrgint iZero, iOne;
102332001f49Smrgivec4 iTwo4;
102432001f49Smrg
102532001f49Smrgvoid reset () {
102632001f49Smrg   fZero = _Zero;
102732001f49Smrg   fOne = _One;
102832001f49Smrg   fTwo4 = _Two4;
102932001f49Smrg   iZero = int (_Zero);
103032001f49Smrg   iOne = int (_One);
103132001f49Smrg   iTwo4 = ivec4 (_Two4);
103232001f49Smrg}
103332001f49Smrg
103432001f49Smrgvoid main () {
103532001f49Smrg   gl_Position = gl_ModelViewMatrix * gl_Vertex;
103632001f49Smrg   gl_FrontColor = vec4 (1.0);
103732001f49Smrg
103832001f49Smrg   printMESA (_Zero);
103932001f49Smrg   printMESA (_One);
104032001f49Smrg   printMESA (_Two4);
104132001f49Smrg
104232001f49Smrg   // pre-increment
104332001f49Smrg   reset ();
104432001f49Smrg   printMESA (++fZero);
104532001f49Smrg   printMESA (++fOne);
104632001f49Smrg   printMESA (++iZero);
104732001f49Smrg   printMESA (++iOne);
104832001f49Smrg   printMESA (fZero);
104932001f49Smrg   printMESA (fOne);
105032001f49Smrg   printMESA (iZero);
105132001f49Smrg   printMESA (iOne);
105232001f49Smrg   printMESA (++fTwo4 == _Two4 + 1.0);
105332001f49Smrg   printMESA (++iTwo4 == ivec4 (_Two4) + 1);
105432001f49Smrg
105532001f49Smrg   // pre-decrement
105632001f49Smrg   reset ();
105732001f49Smrg   printMESA (--fZero);
105832001f49Smrg   printMESA (--fOne);
105932001f49Smrg   printMESA (--iZero);
106032001f49Smrg   printMESA (--iOne);
106132001f49Smrg   printMESA (fZero);
106232001f49Smrg   printMESA (fOne);
106332001f49Smrg   printMESA (iZero);
106432001f49Smrg   printMESA (iOne);
106532001f49Smrg   printMESA (--fTwo4 == _Two4 - 1.0);
106632001f49Smrg   printMESA (--iTwo4 == ivec4 (_Two4) - 1);
106732001f49Smrg
106832001f49Smrg   // post-increment
106932001f49Smrg   reset ();
107032001f49Smrg   printMESA (fZero++);
107132001f49Smrg   printMESA (fOne++);
107232001f49Smrg   printMESA (iZero++);
107332001f49Smrg   printMESA (iOne++);
107432001f49Smrg   printMESA (fZero);
107532001f49Smrg   printMESA (fOne);
107632001f49Smrg   printMESA (iZero);
107732001f49Smrg   printMESA (iOne);
107832001f49Smrg   printMESA (fTwo4++ == _Two4);
107932001f49Smrg   printMESA (iTwo4++ == ivec4 (_Two4));
108032001f49Smrg
108132001f49Smrg   // post-decrement
108232001f49Smrg   reset ();
108332001f49Smrg   printMESA (fZero--);
108432001f49Smrg   printMESA (fOne--);
108532001f49Smrg   printMESA (iZero--);
108632001f49Smrg   printMESA (iOne--);
108732001f49Smrg   printMESA (fZero);
108832001f49Smrg   printMESA (fOne);
108932001f49Smrg   printMESA (iZero);
109032001f49Smrg   printMESA (iOne);
109132001f49Smrg   printMESA (fTwo4-- == _Two4);
109232001f49Smrg   printMESA (iTwo4-- == ivec4 (_Two4));
109332001f49Smrg}
109432001f49Smrg
109532001f49Smrg$output
109632001f49Smrg
109732001f49Smrg0.0
109832001f49Smrg1.1
109932001f49Smrg2.1
110032001f49Smrg2.2
110132001f49Smrg2.3
110232001f49Smrg2.4
110332001f49Smrg
110432001f49Smrg1.0
110532001f49Smrg2.1
110632001f49Smrg1
110732001f49Smrg2
110832001f49Smrg1.0
110932001f49Smrg2.1
111032001f49Smrg1
111132001f49Smrg2
111232001f49Smrgtrue
111332001f49Smrgtrue
111432001f49Smrg
111532001f49Smrg-1.0
111632001f49Smrg0.1
111732001f49Smrg-1
111832001f49Smrg0
111932001f49Smrg-1.0
112032001f49Smrg0.1
112132001f49Smrg-1
112232001f49Smrg0
112332001f49Smrgtrue
112432001f49Smrgtrue
112532001f49Smrg
112632001f49Smrg0.0
112732001f49Smrg1.1
112832001f49Smrg0
112932001f49Smrg1
113032001f49Smrg1.0
113132001f49Smrg2.1
113232001f49Smrg1
113332001f49Smrg2
113432001f49Smrgtrue
113532001f49Smrgtrue
113632001f49Smrg
113732001f49Smrg0.0
113832001f49Smrg1.1
113932001f49Smrg0
114032001f49Smrg1
114132001f49Smrg-1.0
114232001f49Smrg0.1
114332001f49Smrg-1
114432001f49Smrg0
114532001f49Smrgtrue
114632001f49Smrgtrue
114732001f49Smrg
114832001f49Smrg
114932001f49Smrg$ /*
115032001f49Smrg$ --------------------------------------------------------------------------------------------------
115132001f49Smrg$ Test arithmetical operators.
115232001f49Smrg$ */
115332001f49Smrg
115432001f49Smrg$program ARITHMETICAL OPERATOR TEST
115532001f49Smrg
115632001f49Smrg$attrib gl_Vertex
115732001f49Smrg0.0 0.0 0.0 1.0
115832001f49Smrg
115932001f49Smrg$attrib _Zero
116032001f49Smrg0.0 0.0 0.0 0.0
116132001f49Smrg
116232001f49Smrg$attrib _One
116332001f49Smrg1.1 0.0 0.0 0.0
116432001f49Smrg
116532001f49Smrg$attrib _Two4
116632001f49Smrg2.1 2.2 2.3 2.4
116732001f49Smrg
116832001f49Smrg$vertex
116932001f49Smrg
117032001f49Smrg$code
117132001f49Smrg
117232001f49Smrg#version 110
117332001f49Smrg
117432001f49Smrg#extension MESA_shader_debug: require
117532001f49Smrg
117632001f49Smrgattribute float _Zero;
117732001f49Smrgattribute float _One;
117832001f49Smrgattribute vec4 _Two4;
117932001f49Smrg
118032001f49Smrgvoid main () {
118132001f49Smrg   gl_Position = gl_ModelViewMatrix * gl_Vertex;
118232001f49Smrg   gl_FrontColor = vec4 (1.0);
118332001f49Smrg
118432001f49Smrg   printMESA (_Zero);
118532001f49Smrg   printMESA (_One);
118632001f49Smrg   printMESA (_Two4);
118732001f49Smrg
118832001f49Smrg   int iZero = int (_Zero);
118932001f49Smrg   int iOne = int (_One);
119032001f49Smrg   ivec4 iTwo4 = ivec4 (_Two4);
119132001f49Smrg
119232001f49Smrg   printMESA (-_Zero);
119332001f49Smrg   printMESA (-_One);
119432001f49Smrg   printMESA (-_Two4);
119532001f49Smrg   printMESA (-_Two4.z);
119632001f49Smrg
119732001f49Smrg   printMESA (_Zero + 0.0);
119832001f49Smrg   printMESA (_One + 0.0);
119932001f49Smrg   printMESA (_Two4 + 0.0);
120032001f49Smrg   printMESA (_Two4.y + 0.0);
120132001f49Smrg
120232001f49Smrg   printMESA (_Zero + _Zero);
120332001f49Smrg   printMESA (_Zero + _One);
120432001f49Smrg   printMESA (_Zero + _Two4);
120532001f49Smrg   printMESA (_One + _Zero);
120632001f49Smrg   printMESA (_One + _Two4);
120732001f49Smrg   printMESA (_Two4 + _Two4);
120832001f49Smrg
120932001f49Smrg   printMESA (_Zero - 0.0);
121032001f49Smrg   printMESA (_One - 0.0);
121132001f49Smrg   printMESA (_Two4 - 0.0);
121232001f49Smrg   printMESA (_Two4.y - 0.0);
121332001f49Smrg
121432001f49Smrg   printMESA (_Zero - _Zero);
121532001f49Smrg   printMESA (_Zero - _One);
121632001f49Smrg   printMESA (_Zero - _Two4);
121732001f49Smrg   printMESA (_One - _Zero);
121832001f49Smrg   printMESA (_One - _Two4);
121932001f49Smrg   printMESA (_Two4 - _Two4);
122032001f49Smrg
122132001f49Smrg   printMESA (_Zero * 1.0);
122232001f49Smrg   printMESA (_One * 1.0);
122332001f49Smrg   printMESA (_Two4 * 1.0);
122432001f49Smrg   printMESA (_Two4.x * 1.0);
122532001f49Smrg
122632001f49Smrg   printMESA (_Zero * _Zero);
122732001f49Smrg   printMESA (_Zero * _One);
122832001f49Smrg   printMESA (_Zero * _Two4);
122932001f49Smrg   printMESA (_One * _Zero);
123032001f49Smrg   printMESA (_One * _One);
123132001f49Smrg   printMESA (_One * _Two4);
123232001f49Smrg   printMESA (_Two4 * _Two4);
123332001f49Smrg
123432001f49Smrg   printMESA (_Zero / 1.0);
123532001f49Smrg   printMESA (_One / 1.0);
123632001f49Smrg   printMESA (_Two4 / 1.0);
123732001f49Smrg   printMESA (_Two4.x / 1.0);
123832001f49Smrg
123932001f49Smrg   printMESA (_Zero / _One);
124032001f49Smrg   printMESA (_Zero / _Two4);
124132001f49Smrg   printMESA (_One / _One);
124232001f49Smrg   printMESA (_One / _Two4);
124332001f49Smrg   printMESA (_Two4 / _Two4);
124432001f49Smrg}
124532001f49Smrg
124632001f49Smrg$output
124732001f49Smrg
124832001f49Smrg0.0
124932001f49Smrg1.1
125032001f49Smrg2.1
125132001f49Smrg2.2
125232001f49Smrg2.3
125332001f49Smrg2.4
125432001f49Smrg
125532001f49Smrg0.0
125632001f49Smrg-1.1
125732001f49Smrg-2.1
125832001f49Smrg-2.2
125932001f49Smrg-2.3
126032001f49Smrg-2.4
126132001f49Smrg-2.3
126232001f49Smrg
126332001f49Smrg0.0
126432001f49Smrg1.1
126532001f49Smrg2.1
126632001f49Smrg2.2
126732001f49Smrg2.3
126832001f49Smrg2.4
126932001f49Smrg2.2
127032001f49Smrg
127132001f49Smrg0.0
127232001f49Smrg1.1
127332001f49Smrg2.1
127432001f49Smrg2.2
127532001f49Smrg2.3
127632001f49Smrg2.4
127732001f49Smrg1.1
127832001f49Smrg3.2
127932001f49Smrg3.3
128032001f49Smrg3.4
128132001f49Smrg3.5
128232001f49Smrg4.2
128332001f49Smrg4.4
128432001f49Smrg4.6
128532001f49Smrg4.8
128632001f49Smrg
128732001f49Smrg0.0
128832001f49Smrg1.1
128932001f49Smrg2.1
129032001f49Smrg2.2
129132001f49Smrg2.3
129232001f49Smrg2.4
129332001f49Smrg2.2
129432001f49Smrg
129532001f49Smrg0.0
129632001f49Smrg-1.1
129732001f49Smrg-2.1
129832001f49Smrg-2.2
129932001f49Smrg-2.3
130032001f49Smrg-2.4
130132001f49Smrg1.1
130232001f49Smrg-1.0
130332001f49Smrg-1.1
130432001f49Smrg-1.2
130532001f49Smrg-1.3
130632001f49Smrg0.0
130732001f49Smrg0.0
130832001f49Smrg0.0
130932001f49Smrg0.0
131032001f49Smrg
131132001f49Smrg0.0
131232001f49Smrg1.1
131332001f49Smrg2.1
131432001f49Smrg2.2
131532001f49Smrg2.3
131632001f49Smrg2.4
131732001f49Smrg2.1
131832001f49Smrg
131932001f49Smrg0.0
132032001f49Smrg0.0
132132001f49Smrg0.0
132232001f49Smrg0.0
132332001f49Smrg0.0
132432001f49Smrg0.0
132532001f49Smrg0.0
132632001f49Smrg1.21
132732001f49Smrg2.31
132832001f49Smrg2.42
132932001f49Smrg2.53
133032001f49Smrg2.64
133132001f49Smrg4.41
133232001f49Smrg4.84
133332001f49Smrg5.29
133432001f49Smrg5.76
133532001f49Smrg
133632001f49Smrg0.0
133732001f49Smrg1.1
133832001f49Smrg2.1
133932001f49Smrg2.2
134032001f49Smrg2.3
134132001f49Smrg2.4
134232001f49Smrg2.1
134332001f49Smrg
134432001f49Smrg0.0
134532001f49Smrg0.0
134632001f49Smrg0.0
134732001f49Smrg0.0
134832001f49Smrg0.0
134932001f49Smrg1.0
135032001f49Smrg0.52381
135132001f49Smrg0.5
135232001f49Smrg0.47826
135332001f49Smrg0.45833
135432001f49Smrg1.0
135532001f49Smrg1.0
135632001f49Smrg1.0
135732001f49Smrg1.0
135832001f49Smrg
135932001f49Smrg
136032001f49Smrg$ /*
136132001f49Smrg$ --------------------------------------------------------------------------------------------------
136232001f49Smrg$ Test matrix operations.
136332001f49Smrg$ Note: assumes relational operators being correct.
136432001f49Smrg$ */
136532001f49Smrg
136632001f49Smrg$program MATRIX TEST
136732001f49Smrg
136832001f49Smrg$attrib gl_Vertex
136932001f49Smrg0.0 0.0 0.0 1.0
137032001f49Smrg
137132001f49Smrg$attrib _Zero
137232001f49Smrg0.0 0.0 0.0 0.0
137332001f49Smrg
137432001f49Smrg$attrib _One
137532001f49Smrg1.0 1.0 1.0 1.0
137632001f49Smrg
137732001f49Smrg$attrib _Two
137832001f49Smrg2.0 2.0 2.0 2.0
137932001f49Smrg
138032001f49Smrg$vertex
138132001f49Smrg
138232001f49Smrg$code
138332001f49Smrg
138432001f49Smrg#version 110
138532001f49Smrg
138632001f49Smrg#extension MESA_shader_debug: require
138732001f49Smrg
138832001f49Smrgattribute vec4 _Zero;
138932001f49Smrgattribute vec4 _One;
139032001f49Smrgattribute vec4 _Two;
139132001f49Smrg
139232001f49Smrgvoid main () {
139332001f49Smrg   gl_Position = gl_ModelViewMatrix * gl_Vertex;
139432001f49Smrg   gl_FrontColor = vec4 (1.0);
139532001f49Smrg
139632001f49Smrg   printMESA (_Zero);
139732001f49Smrg   printMESA (_One);
139832001f49Smrg   printMESA (_Two);
139932001f49Smrg
140032001f49Smrg   mat4 Identity = mat4 (_One.x);
140132001f49Smrg
140232001f49Smrg   printMESA (Identity == mat4 (1.0, 0.0, 0.0, 0.0,
140332001f49Smrg                                0.0, 1.0, 0.0, 0.0,
140432001f49Smrg                                0.0, 0.0, 1.0, 0.0,
140532001f49Smrg                                0.0, 0.0, 0.0, 1.0));
140632001f49Smrg   printMESA (Identity * _Two == _Two);
140732001f49Smrg
140832001f49Smrg   mat4 Matrix = mat4 (1.1, 1.2, 1.3, 1.4,
140932001f49Smrg                       2.1, 2.2, 2.3, 2.4,
141032001f49Smrg                       3.1, 3.2, 3.3, 3.4,
141132001f49Smrg                       4.1, 4.2, 4.3, 4.4);
141232001f49Smrg
141332001f49Smrg   printMESA (Matrix[2].y);
141432001f49Smrg   printMESA (Matrix[1]);
141532001f49Smrg}
141632001f49Smrg
141732001f49Smrg$output
141832001f49Smrg
141932001f49Smrg0.0
142032001f49Smrg0.0
142132001f49Smrg0.0
142232001f49Smrg0.0
142332001f49Smrg1.0
142432001f49Smrg1.0
142532001f49Smrg1.0
142632001f49Smrg1.0
142732001f49Smrg2.0
142832001f49Smrg2.0
142932001f49Smrg2.0
143032001f49Smrg2.0
143132001f49Smrgtrue
143232001f49Smrgtrue
143332001f49Smrg3.2
143432001f49Smrg2.1
143532001f49Smrg2.2
143632001f49Smrg2.3
143732001f49Smrg2.4
143832001f49Smrg
143932001f49Smrg
144032001f49Smrg$ /*
144132001f49Smrg$ --------------------------------------------------------------------------------------------------
144232001f49Smrg$ Test vec4 extension operations.
144332001f49Smrg$ */
144432001f49Smrg
144532001f49Smrg$program VEC4 EXTENSION OPERATIONS
144632001f49Smrg
144732001f49Smrg$attrib gl_Vertex
144832001f49Smrg0.0 0.0 0.0 1.0
144932001f49Smrg
145032001f49Smrg$attrib _One
145132001f49Smrg1.1 0.0 0.0 0.0
145232001f49Smrg
145332001f49Smrg$attrib _Two4
145432001f49Smrg2.1 2.2 2.3 2.4
145532001f49Smrg
145632001f49Smrg$attrib _Three4
145732001f49Smrg3.1 3.2 3.3 3.4
145832001f49Smrg
145932001f49Smrg$vertex
146032001f49Smrg
146132001f49Smrg$code
146232001f49Smrg
146332001f49Smrg#version 110
146432001f49Smrg
146532001f49Smrg#extension MESA_shader_debug: require
146632001f49Smrg
146732001f49Smrgattribute float _One;
146832001f49Smrgattribute vec4 _Two4;
146932001f49Smrgattribute vec4 _Three4;
147032001f49Smrg
147132001f49Smrgvoid main () {
147232001f49Smrg   gl_Position = gl_ModelViewMatrix * gl_Vertex;
147332001f49Smrg   gl_FrontColor = vec4 (1.0);
147432001f49Smrg
147532001f49Smrg   printMESA (_One);
147632001f49Smrg   printMESA (_Two4);
147732001f49Smrg   printMESA (_Three4);
147832001f49Smrg
147932001f49Smrg   printMESA (vec4 (_One));
148032001f49Smrg
148132001f49Smrg   printMESA (_Two4 + _Three4);
148232001f49Smrg   printMESA (_Two4 - _Three4);
148332001f49Smrg   printMESA (_Two4 * _Three4);
148432001f49Smrg   printMESA (_Two4 / _Three4);
148532001f49Smrg
148632001f49Smrg   printMESA (_Two4 + _One);
148732001f49Smrg   printMESA (_Two4 - _One);
148832001f49Smrg   printMESA (_Two4 * _One);
148932001f49Smrg   printMESA (_Two4 / _One);
149032001f49Smrg
149132001f49Smrg   printMESA (_One + _Two4);
149232001f49Smrg   printMESA (_One - _Two4);
149332001f49Smrg   printMESA (_One * _Two4);
149432001f49Smrg   printMESA (_One / _Two4);
149532001f49Smrg
149632001f49Smrg   printMESA (-_Three4);
149732001f49Smrg
149832001f49Smrg   printMESA (dot (_Two4.xyz, _Three4.xyz));
149932001f49Smrg   printMESA (dot (_Two4, _Three4));
150032001f49Smrg
150132001f49Smrg   printMESA (length (_Two4.xyz));
150232001f49Smrg   printMESA (length (_Three4));
150332001f49Smrg
150432001f49Smrg   printMESA (normalize (_Two4.xyz));
150532001f49Smrg   printMESA (normalize (_Three4));
150632001f49Smrg
150732001f49Smrg   vec4 tmp = _Two4;
150832001f49Smrg   printMESA (tmp);
150932001f49Smrg
151032001f49Smrg   printMESA (_Two4 == _Three4);
151132001f49Smrg   printMESA (_Two4 != _Three4);
151232001f49Smrg   printMESA (_Two4 == _Two4);
151332001f49Smrg   printMESA (_Three4 != _Three4);
151432001f49Smrg   printMESA (_Two4 != vec4 (_Two4.xyz, 999.0));
151532001f49Smrg   printMESA (_Two4 != vec4 (999.0, _Two4.yzw));
151632001f49Smrg}
151732001f49Smrg
151832001f49Smrg$output
151932001f49Smrg
152032001f49Smrg1.1
152132001f49Smrg2.1
152232001f49Smrg2.2
152332001f49Smrg2.3
152432001f49Smrg2.4
152532001f49Smrg3.1
152632001f49Smrg3.2
152732001f49Smrg3.3
152832001f49Smrg3.4
152932001f49Smrg
153032001f49Smrg1.1
153132001f49Smrg1.1
153232001f49Smrg1.1
153332001f49Smrg1.1
153432001f49Smrg
153532001f49Smrg5.2
153632001f49Smrg5.4
153732001f49Smrg5.6
153832001f49Smrg5.8
153932001f49Smrg-1.0
154032001f49Smrg-1.0
154132001f49Smrg-1.0
154232001f49Smrg-1.0
154332001f49Smrg6.51
154432001f49Smrg7.04
154532001f49Smrg7.59
154632001f49Smrg8.16
154732001f49Smrg0.677419
154832001f49Smrg0.6875
154932001f49Smrg0.69697
155032001f49Smrg0.705882
155132001f49Smrg
155232001f49Smrg3.2
155332001f49Smrg3.3
155432001f49Smrg3.4
155532001f49Smrg3.5
155632001f49Smrg1.0
155732001f49Smrg1.1
155832001f49Smrg1.2
155932001f49Smrg1.3
156032001f49Smrg2.31
156132001f49Smrg2.42
156232001f49Smrg2.53
156332001f49Smrg2.64
156432001f49Smrg1.909091
156532001f49Smrg2.0
156632001f49Smrg2.090909
156732001f49Smrg2.181818
156832001f49Smrg
156932001f49Smrg3.2
157032001f49Smrg3.3
157132001f49Smrg3.4
157232001f49Smrg3.5
157332001f49Smrg-1.0
157432001f49Smrg-1.1
157532001f49Smrg-1.2
157632001f49Smrg-1.3
157732001f49Smrg2.31
157832001f49Smrg2.42
157932001f49Smrg2.53
158032001f49Smrg2.64
158132001f49Smrg0.52381
158232001f49Smrg0.5
158332001f49Smrg0.478261
158432001f49Smrg0.458333
158532001f49Smrg
158632001f49Smrg-3.1
158732001f49Smrg-3.2
158832001f49Smrg-3.3
158932001f49Smrg-3.4
159032001f49Smrg
159132001f49Smrg21.14
159232001f49Smrg29.3
159332001f49Smrg
159432001f49Smrg3.813135
159532001f49Smrg6.503845
159632001f49Smrg
159732001f49Smrg0.550728
159832001f49Smrg0.576953
159932001f49Smrg0.603178
160032001f49Smrg0.476641
160132001f49Smrg0.492017
160232001f49Smrg0.507392
160332001f49Smrg0.522768
160432001f49Smrg
160532001f49Smrg2.1
160632001f49Smrg2.2
160732001f49Smrg2.3
160832001f49Smrg2.4
160932001f49Smrg
161032001f49Smrgfalse
161132001f49Smrgtrue
161232001f49Smrgtrue
161332001f49Smrgfalse
161432001f49Smrgtrue
161532001f49Smrgtrue
1616