Merge remote branch 'upstream/gallium-0.2' into nouveau-gallium-0.2
[mesa.git] / src / gallium / state_trackers / g3dvl / tests / test_b_rendering.c
1 #include <stdio.h>
2 #include <X11/Xlib.h>
3 #include <vl_context.h>
4 #include <vl_surface.h>
5 #include <xsp_winsys.h>
6
7 static const unsigned short ycbcr16x16_420[8*8*6] =
8 {
9 0x00A5,0x00A5,0x00A5,0x0072,0x00A5,0x0072,0x0072,0x0072,
10 0x0072,0x00A5,0x0072,0x0072,0x00A5,0x0072,0x0072,0x0072,
11 0x0072,0x00A5,0x0072,0x0072,0x00A5,0x00A5,0x0072,0x0072,
12 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
13 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
14 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
15 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
16 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
17
18 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
19 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
20 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
21 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
22 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
23 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
24 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
25 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
26
27 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
28 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
29 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
30 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
31 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
32 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
33 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
34 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
35
36 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
37 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
38 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
39 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,
40 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x00A5,
41 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x00A5,0x00A5,
42 0x0072,0x0072,0x0072,0x0072,0x0072,0x00A5,0x00A5,0x00A5,
43 0x0072,0x0072,0x0072,0x0072,0x00A5,0x00A5,0x00A5,0x00A5,
44
45 0x004F,0x004F,0x004F,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,
46 0x00B2,0x00B2,0x004F,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,
47 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,
48 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,
49 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,
50 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,
51 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x004F,
52 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x004F,0x004F,
53
54 0x003E,0x003E,0x003E,0x0060,0x0060,0x0060,0x0060,0x0060,
55 0x0060,0x0060,0x003E,0x0060,0x0060,0x0060,0x0060,0x0060,
56 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,
57 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,
58 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,
59 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,
60 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x003E,
61 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x003E,0x003E
62 };
63
64 static const signed short ycbcr16x16_420_2[8*8*6] =
65 {
66 -0x00A5,-0x00A5,-0x00A5,-0x0072,-0x00A5,-0x0072,-0x0072,-0x0072,
67 -0x0072,-0x00A5,-0x0072,-0x0072,-0x00A5,-0x0072,-0x0072,-0x0072,
68 -0x0072,-0x00A5,-0x0072,-0x0072,-0x00A5,-0x00A5,-0x0072,-0x0072,
69 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
70 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
71 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
72 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
73 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
74
75 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
76 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
77 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
78 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
79 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
80 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
81 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
82 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
83
84 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
85 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
86 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
87 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
88 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
89 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
90 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
91 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
92
93 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
94 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
95 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
96 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,
97 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x00A5,
98 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x00A5,-0x00A5,
99 -0x0072,-0x0072,-0x0072,-0x0072,-0x0072,-0x00A5,-0x00A5,-0x00A5,
100 -0x0072,-0x0072,-0x0072,-0x0072,-0x00A5,-0x00A5,-0x00A5,-0x00A5,
101
102 -0x004F,-0x004F,-0x004F,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,
103 -0x00B2,-0x00B2,-0x004F,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,
104 -0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,
105 -0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,
106 -0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,
107 -0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,
108 -0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x004F,
109 -0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x00B2,-0x004F,-0x004F,
110
111 -0x003E,-0x003E,-0x003E,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,
112 -0x0060,-0x0060,-0x003E,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,
113 -0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,
114 -0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,
115 -0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,
116 -0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,
117 -0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x003E,
118 -0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x0060,-0x003E,-0x003E
119 };
120
121 int main(int argc, char **argv)
122 {
123 const unsigned int video_width = 32, video_height = 32;
124 const unsigned int window_width = video_width * 2, window_height = video_height * 2;
125 int quit = 0;
126 Display *display;
127 Window root, window;
128 Pixmap framebuffer;
129 XEvent event;
130 struct pipe_context *pipe;
131 struct VL_CONTEXT *ctx;
132 struct VL_SURFACE *sfc, *past_sfc, *future_sfc;
133 struct VL_MOTION_VECTOR motion_vector[2] =
134 {
135 {
136 {0, 0}, {0, 0}
137 },
138 {
139 {0, 0}, {0, 0}
140 }
141 };
142
143 display = XOpenDisplay(NULL);
144 root = XDefaultRootWindow(display);
145 window = XCreateSimpleWindow(display, root, 0, 0, window_width, window_height, 0, 0, 0);
146 framebuffer = XCreatePixmap(display, root, window_width, window_height, 24);
147
148 XSelectInput(display, window, ExposureMask | KeyPressMask);
149 XMapWindow(display, window);
150 XSync(display, 0);
151
152 pipe = create_pipe_context(display);
153 vlCreateContext(display, pipe, video_width, video_height, VL_FORMAT_YCBCR_420, &ctx);
154 vlCreateSurface(ctx, &sfc);
155 vlCreateSurface(ctx, &past_sfc);
156 vlCreateSurface(ctx, &future_sfc);
157
158 vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 0, 0, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, past_sfc);
159 vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 1, 0, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, past_sfc);
160 vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 0, 1, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, past_sfc);
161 vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 1, 1, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, past_sfc);
162 vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 0, 0, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, future_sfc);
163 vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 1, 0, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, future_sfc);
164 vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 0, 1, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, future_sfc);
165 vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 1, 1, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, future_sfc);
166 vlRenderBMacroBlock
167 (
168 VL_FRAME_PICTURE,
169 VL_FIELD_FIRST,
170 0,
171 0,
172 VL_FRAME_MC,
173 motion_vector,
174 0x3F,
175 VL_DCT_FRAME_CODED,
176 (short*)ycbcr16x16_420_2,
177 past_sfc,
178 future_sfc,
179 sfc
180 );
181 vlPutSurface(sfc, framebuffer, 0, 0, video_width, video_height, 0, 0, window_width, window_height, VL_FRAME_PICTURE);
182
183 puts("Press any key to continue...");
184
185 while (!quit)
186 {
187 XNextEvent(display, &event);
188 switch (event.type)
189 {
190 case Expose:
191 {
192 XCopyArea
193 (
194 display,
195 framebuffer,
196 window,
197 XDefaultGC(display, XDefaultScreen(display)),
198 0,
199 0,
200 window_width,
201 window_height,
202 0,
203 0
204 );
205 break;
206 }
207 case KeyPress:
208 {
209 quit = 1;
210 break;
211 }
212 }
213 }
214
215 vlDestroySurface(sfc);
216 vlDestroySurface(past_sfc);
217 vlDestroySurface(future_sfc);
218 vlDestroyContext(ctx);
219
220 XFreePixmap(display, framebuffer);
221 XDestroyWindow(display, window);
222 XCloseDisplay(display);
223
224 return 0;
225 }
226