1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Test the writing Z in fragment shader.
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The red quad should be entirely in front of the blue quad even
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * though the overlap and intersect in Z.
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdio.h>
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "graw_util.h"
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int width = 300;
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int height = 300;
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct graw_info info;
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct vertex {
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   float position[4];
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   float color[4];
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define z0 0.2
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define z01 0.5
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define z1 0.4
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct vertex vertices[] =
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* left quad: clock-wise, front-facing, red */
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {-0.8, -0.9, z0, 1.0 },
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 1, 0, 0, 1 }
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { -0.2, -0.9, z0, 1.0 },
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 1, 0, 0, 1 }
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 0.2,  0.9, z01, 1.0 },
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 1, 0, 0, 1 }
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      {-0.9,  0.9, z01, 1.0 },
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 1, 0, 0, 1 }
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* right quad : counter-clock-wise, back-facing, green */
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 0.2,  -0.9, z1, 1.0 },
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 0, 0, 1, -1 }
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { -0.2,  0.8, z1, 1.0 },
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 0, 0, 1, -1 }
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 0.9,  0.8, z1, 1.0 },
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 0, 0, 1, -1 }
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   {
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 0.8, -0.9, z1, 1.0 },
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      { 0, 0, 1, -1 }
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   },
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define NUM_VERTS (sizeof(vertices) / sizeof(vertices[0]))
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_vertices(void)
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_vertex_element ve[2];
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct pipe_vertex_buffer vbuf;
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void *handle;
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   memset(ve, 0, sizeof ve);
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ve[0].src_offset = Offset(struct vertex, position);
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ve[0].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ve[1].src_offset = Offset(struct vertex, color);
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ve[1].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   handle = info.ctx->create_vertex_elements_state(info.ctx, 2, ve);
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   info.ctx->bind_vertex_elements_state(info.ctx, handle);
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   vbuf.stride = sizeof(struct vertex);
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   vbuf.buffer_offset = 0;
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   vbuf.buffer = pipe_buffer_create_with_data(info.ctx,
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                              PIPE_BIND_VERTEX_BUFFER,
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                              PIPE_USAGE_STATIC,
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                              sizeof(vertices),
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                              vertices);
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   info.ctx->set_vertex_buffers(info.ctx, 1, &vbuf);
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_vertex_shader(void)
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void *handle;
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const char *text =
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "VERT\n"
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "DCL IN[0]\n"
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "DCL IN[1]\n"
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "DCL OUT[0], POSITION\n"
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "DCL OUT[1], GENERIC[0]\n"
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "  0: MOV OUT[0], IN[0]\n"
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "  1: MOV OUT[1], IN[1]\n"
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "  2: END\n";
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   handle = graw_parse_vertex_shader(info.ctx, text);
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   info.ctx->bind_vs_state(info.ctx, handle);
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgset_fragment_shader(void)
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void *handle;
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const char *text =
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "FRAG\n"
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "DCL IN[0], GENERIC, CONSTANT\n"
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "DCL OUT[0], COLOR\n"
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "DCL OUT[1], POSITION\n"
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "DCL TEMP[0]\n"
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "IMM FLT32 {    1.0,     0.0,     0.0,     0.0 }\n"
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "IMM FLT32 {    0.0,     1.0,     0.0,     0.0 }\n"
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      "IMM FLT32 {    0.5,     0.4,     0.0,     0.0 }\n"
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      " 0: MOV OUT[0], IN[0]\n"    /* front-facing: red */
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      " 1: IF IN[0].xxxx :3\n"
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      " 2:   MOV OUT[1].z, IMM[2].yyyy\n"   /* red: Z = 0.4 */
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      " 3: ELSE :5\n"
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      " 4:   MOV OUT[1].z, IMM[2].xxxx\n"   /* blue: Z = 0.5 */
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      " 5: ENDIF\n"
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      " 6: END\n";
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   handle = graw_parse_fragment_shader(info.ctx, text);
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   info.ctx->bind_fs_state(info.ctx, handle);
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdraw(void)
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   union pipe_color_union clear_color;
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   clear_color.f[0] = 0.25;
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   clear_color.f[1] = 0.25;
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   clear_color.f[2] = 0.25;
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   clear_color.f[3] = 1.00;
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   info.ctx->clear(info.ctx,
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL,
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              &clear_color, 1.0, 0);
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   util_draw_arrays(info.ctx, PIPE_PRIM_QUADS, 0, NUM_VERTS);
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   info.ctx->flush(info.ctx, NULL);
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* At the moment, libgraw leaks out/makes available some of the
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * symbols from gallium/auxiliary, including these debug helpers.
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * Will eventually want to bless some of these paths, and lock the
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * others down so they aren't accessible from test programs.
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    *
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * This currently just happens to work on debug builds - a release
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    * build will probably fail to link here:
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    */
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   debug_dump_surface_bmp(info.ctx, "result.bmp", surf);
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   graw_util_flush_front(&info);
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgresize(int w, int h)
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   width = w;
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   height = h;
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   graw_util_viewport(&info, 0, 0, width, height, -1.0, 1.0);
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginit(void)
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!graw_util_create_window(&info, width, height, 1, TRUE))
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      exit(1);
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   graw_util_default_state(&info, TRUE);
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   graw_util_viewport(&info, 0, 0, width, height, -1.0, 1.0);
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   set_vertices();
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   set_vertex_shader();
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   set_fragment_shader();
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgmain(int argc, char *argv[])
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   init();
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   printf("The red quad should be entirely in front of the blue quad.\n");
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   graw_set_display_func(draw);
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /*graw_set_reshape_func(resize);*/
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   graw_main_loop();
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return 0;
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
224