Merge branch 'mesa_7_5_branch'
[mesa.git] / src / gallium / auxiliary / indices / u_unfilled_gen.c
1 /* File automatically generated by u_unfilled_gen.py */
2
3 /*
4 * Copyright 2009 VMware, Inc.
5 * All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * on the rights to use, copy, modify, merge, publish, distribute, sub
11 * license, and/or sell copies of the Software, and to permit persons to whom
12 * the Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice (including the next
15 * paragraph) shall be included in all copies or substantial portions of the
16 * Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
21 * VMWARE AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
22 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24 * USE OR OTHER DEALINGS IN THE SOFTWARE.
25 */
26
27
28
29 /**
30 * @file
31 * Functions to translate and generate index lists
32 */
33
34 #include "indices/u_indices.h"
35 #include "indices/u_indices_priv.h"
36 #include "pipe/p_compiler.h"
37 #include "util/u_debug.h"
38 #include "pipe/p_defines.h"
39 #include "util/u_memory.h"
40
41
42 static unsigned out_size_idx( unsigned index_size )
43 {
44 switch (index_size) {
45 case 4: return OUT_UINT;
46 case 2: return OUT_USHORT;
47 default: assert(0); return OUT_USHORT;
48 }
49 }
50
51 static unsigned in_size_idx( unsigned index_size )
52 {
53 switch (index_size) {
54 case 4: return IN_UINT;
55 case 2: return IN_USHORT;
56 case 1: return IN_UBYTE;
57 default: assert(0); return IN_UBYTE;
58 }
59 }
60
61
62 static u_generate_func generate_line[OUT_COUNT][PRIM_COUNT];
63 static u_translate_func translate_line[IN_COUNT][OUT_COUNT][PRIM_COUNT];
64
65
66 static void generate_tris_ushort(
67 unsigned nr,
68 void *_out )
69 {
70 ushort *out = (ushort*)_out;
71 unsigned i, j;
72 (void)j;
73 for (j = i = 0; j < nr; j+=6, i+=3) {
74 (out+j)[0] = (ushort)(i);
75 (out+j)[1] = (ushort)(i+1);
76 (out+j+2)[0] = (ushort)(i+1);
77 (out+j+2)[1] = (ushort)(i+2);
78 (out+j+4)[0] = (ushort)(i+2);
79 (out+j+4)[1] = (ushort)(i);
80 }
81 }
82 static void generate_tristrip_ushort(
83 unsigned nr,
84 void *_out )
85 {
86 ushort *out = (ushort*)_out;
87 unsigned i, j;
88 (void)j;
89 for (j = i = 0; j < nr; j+=6, i++) {
90 (out+j)[0] = (ushort)(i);
91 (out+j)[1] = (ushort)(i+1/*+(i&1)*/);
92 (out+j+2)[0] = (ushort)(i+1/*+(i&1)*/);
93 (out+j+2)[1] = (ushort)(i+2/*-(i&1)*/);
94 (out+j+4)[0] = (ushort)(i+2/*-(i&1)*/);
95 (out+j+4)[1] = (ushort)(i);
96 }
97 }
98 static void generate_trifan_ushort(
99 unsigned nr,
100 void *_out )
101 {
102 ushort *out = (ushort*)_out;
103 unsigned i, j;
104 (void)j;
105 for (j = i = 0; j < nr; j+=6, i++) {
106 (out+j)[0] = (ushort)(0);
107 (out+j)[1] = (ushort)(i+1);
108 (out+j+2)[0] = (ushort)(i+1);
109 (out+j+2)[1] = (ushort)(i+2);
110 (out+j+4)[0] = (ushort)(i+2);
111 (out+j+4)[1] = (ushort)(0);
112 }
113 }
114 static void generate_quads_ushort(
115 unsigned nr,
116 void *_out )
117 {
118 ushort *out = (ushort*)_out;
119 unsigned i, j;
120 (void)j;
121 for (j = i = 0; j < nr; j+=8, i+=4) {
122 (out+j)[0] = (ushort)(i+0);
123 (out+j)[1] = (ushort)(i+1);
124 (out+j+2)[0] = (ushort)(i+1);
125 (out+j+2)[1] = (ushort)(i+2);
126 (out+j+4)[0] = (ushort)(i+2);
127 (out+j+4)[1] = (ushort)(i+3);
128 (out+j+6)[0] = (ushort)(i+3);
129 (out+j+6)[1] = (ushort)(i+0);
130 }
131 }
132 static void generate_quadstrip_ushort(
133 unsigned nr,
134 void *_out )
135 {
136 ushort *out = (ushort*)_out;
137 unsigned i, j;
138 (void)j;
139 for (j = i = 0; j < nr; j+=8, i+=2) {
140 (out+j)[0] = (ushort)(i+2);
141 (out+j)[1] = (ushort)(i+0);
142 (out+j+2)[0] = (ushort)(i+0);
143 (out+j+2)[1] = (ushort)(i+1);
144 (out+j+4)[0] = (ushort)(i+1);
145 (out+j+4)[1] = (ushort)(i+3);
146 (out+j+6)[0] = (ushort)(i+3);
147 (out+j+6)[1] = (ushort)(i+2);
148 }
149 }
150 static void generate_polygon_ushort(
151 unsigned nr,
152 void *_out )
153 {
154 ushort *out = (ushort*)_out;
155 unsigned i, j;
156 (void)j;
157 for (j = i = 0; j < nr; j+=6, i++) {
158 (out+j)[0] = (ushort)(0);
159 (out+j)[1] = (ushort)(i+1);
160 (out+j+2)[0] = (ushort)(i+1);
161 (out+j+2)[1] = (ushort)(i+2);
162 (out+j+4)[0] = (ushort)(i+2);
163 (out+j+4)[1] = (ushort)(0);
164 }
165 }
166 static void generate_tris_uint(
167 unsigned nr,
168 void *_out )
169 {
170 uint *out = (uint*)_out;
171 unsigned i, j;
172 (void)j;
173 for (j = i = 0; j < nr; j+=6, i+=3) {
174 (out+j)[0] = (uint)(i);
175 (out+j)[1] = (uint)(i+1);
176 (out+j+2)[0] = (uint)(i+1);
177 (out+j+2)[1] = (uint)(i+2);
178 (out+j+4)[0] = (uint)(i+2);
179 (out+j+4)[1] = (uint)(i);
180 }
181 }
182 static void generate_tristrip_uint(
183 unsigned nr,
184 void *_out )
185 {
186 uint *out = (uint*)_out;
187 unsigned i, j;
188 (void)j;
189 for (j = i = 0; j < nr; j+=6, i++) {
190 (out+j)[0] = (uint)(i);
191 (out+j)[1] = (uint)(i+1/*+(i&1)*/);
192 (out+j+2)[0] = (uint)(i+1/*+(i&1)*/);
193 (out+j+2)[1] = (uint)(i+2/*-(i&1)*/);
194 (out+j+4)[0] = (uint)(i+2/*-(i&1)*/);
195 (out+j+4)[1] = (uint)(i);
196 }
197 }
198 static void generate_trifan_uint(
199 unsigned nr,
200 void *_out )
201 {
202 uint *out = (uint*)_out;
203 unsigned i, j;
204 (void)j;
205 for (j = i = 0; j < nr; j+=6, i++) {
206 (out+j)[0] = (uint)(0);
207 (out+j)[1] = (uint)(i+1);
208 (out+j+2)[0] = (uint)(i+1);
209 (out+j+2)[1] = (uint)(i+2);
210 (out+j+4)[0] = (uint)(i+2);
211 (out+j+4)[1] = (uint)(0);
212 }
213 }
214 static void generate_quads_uint(
215 unsigned nr,
216 void *_out )
217 {
218 uint *out = (uint*)_out;
219 unsigned i, j;
220 (void)j;
221 for (j = i = 0; j < nr; j+=8, i+=4) {
222 (out+j)[0] = (uint)(i+0);
223 (out+j)[1] = (uint)(i+1);
224 (out+j+2)[0] = (uint)(i+1);
225 (out+j+2)[1] = (uint)(i+2);
226 (out+j+4)[0] = (uint)(i+2);
227 (out+j+4)[1] = (uint)(i+3);
228 (out+j+6)[0] = (uint)(i+3);
229 (out+j+6)[1] = (uint)(i+0);
230 }
231 }
232 static void generate_quadstrip_uint(
233 unsigned nr,
234 void *_out )
235 {
236 uint *out = (uint*)_out;
237 unsigned i, j;
238 (void)j;
239 for (j = i = 0; j < nr; j+=8, i+=2) {
240 (out+j)[0] = (uint)(i+2);
241 (out+j)[1] = (uint)(i+0);
242 (out+j+2)[0] = (uint)(i+0);
243 (out+j+2)[1] = (uint)(i+1);
244 (out+j+4)[0] = (uint)(i+1);
245 (out+j+4)[1] = (uint)(i+3);
246 (out+j+6)[0] = (uint)(i+3);
247 (out+j+6)[1] = (uint)(i+2);
248 }
249 }
250 static void generate_polygon_uint(
251 unsigned nr,
252 void *_out )
253 {
254 uint *out = (uint*)_out;
255 unsigned i, j;
256 (void)j;
257 for (j = i = 0; j < nr; j+=6, i++) {
258 (out+j)[0] = (uint)(0);
259 (out+j)[1] = (uint)(i+1);
260 (out+j+2)[0] = (uint)(i+1);
261 (out+j+2)[1] = (uint)(i+2);
262 (out+j+4)[0] = (uint)(i+2);
263 (out+j+4)[1] = (uint)(0);
264 }
265 }
266 static void translate_tris_ubyte2ushort(
267 const void * _in,
268 unsigned nr,
269 void *_out )
270 {
271 const ubyte*in = (const ubyte*)_in;
272 ushort *out = (ushort*)_out;
273 unsigned i, j;
274 (void)j;
275 for (j = i = 0; j < nr; j+=6, i+=3) {
276 (out+j)[0] = (ushort)in[i];
277 (out+j)[1] = (ushort)in[i+1];
278 (out+j+2)[0] = (ushort)in[i+1];
279 (out+j+2)[1] = (ushort)in[i+2];
280 (out+j+4)[0] = (ushort)in[i+2];
281 (out+j+4)[1] = (ushort)in[i];
282 }
283 }
284 static void translate_tristrip_ubyte2ushort(
285 const void * _in,
286 unsigned nr,
287 void *_out )
288 {
289 const ubyte*in = (const ubyte*)_in;
290 ushort *out = (ushort*)_out;
291 unsigned i, j;
292 (void)j;
293 for (j = i = 0; j < nr; j+=6, i++) {
294 (out+j)[0] = (ushort)in[i];
295 (out+j)[1] = (ushort)in[i+1/*+(i&1)*/];
296 (out+j+2)[0] = (ushort)in[i+1/*+(i&1)*/];
297 (out+j+2)[1] = (ushort)in[i+2/*-(i&1)*/];
298 (out+j+4)[0] = (ushort)in[i+2/*-(i&1)*/];
299 (out+j+4)[1] = (ushort)in[i];
300 }
301 }
302 static void translate_trifan_ubyte2ushort(
303 const void * _in,
304 unsigned nr,
305 void *_out )
306 {
307 const ubyte*in = (const ubyte*)_in;
308 ushort *out = (ushort*)_out;
309 unsigned i, j;
310 (void)j;
311 for (j = i = 0; j < nr; j+=6, i++) {
312 (out+j)[0] = (ushort)in[0];
313 (out+j)[1] = (ushort)in[i+1];
314 (out+j+2)[0] = (ushort)in[i+1];
315 (out+j+2)[1] = (ushort)in[i+2];
316 (out+j+4)[0] = (ushort)in[i+2];
317 (out+j+4)[1] = (ushort)in[0];
318 }
319 }
320 static void translate_quads_ubyte2ushort(
321 const void * _in,
322 unsigned nr,
323 void *_out )
324 {
325 const ubyte*in = (const ubyte*)_in;
326 ushort *out = (ushort*)_out;
327 unsigned i, j;
328 (void)j;
329 for (j = i = 0; j < nr; j+=8, i+=4) {
330 (out+j)[0] = (ushort)in[i+0];
331 (out+j)[1] = (ushort)in[i+1];
332 (out+j+2)[0] = (ushort)in[i+1];
333 (out+j+2)[1] = (ushort)in[i+2];
334 (out+j+4)[0] = (ushort)in[i+2];
335 (out+j+4)[1] = (ushort)in[i+3];
336 (out+j+6)[0] = (ushort)in[i+3];
337 (out+j+6)[1] = (ushort)in[i+0];
338 }
339 }
340 static void translate_quadstrip_ubyte2ushort(
341 const void * _in,
342 unsigned nr,
343 void *_out )
344 {
345 const ubyte*in = (const ubyte*)_in;
346 ushort *out = (ushort*)_out;
347 unsigned i, j;
348 (void)j;
349 for (j = i = 0; j < nr; j+=8, i+=2) {
350 (out+j)[0] = (ushort)in[i+2];
351 (out+j)[1] = (ushort)in[i+0];
352 (out+j+2)[0] = (ushort)in[i+0];
353 (out+j+2)[1] = (ushort)in[i+1];
354 (out+j+4)[0] = (ushort)in[i+1];
355 (out+j+4)[1] = (ushort)in[i+3];
356 (out+j+6)[0] = (ushort)in[i+3];
357 (out+j+6)[1] = (ushort)in[i+2];
358 }
359 }
360 static void translate_polygon_ubyte2ushort(
361 const void * _in,
362 unsigned nr,
363 void *_out )
364 {
365 const ubyte*in = (const ubyte*)_in;
366 ushort *out = (ushort*)_out;
367 unsigned i, j;
368 (void)j;
369 for (j = i = 0; j < nr; j+=6, i++) {
370 (out+j)[0] = (ushort)in[0];
371 (out+j)[1] = (ushort)in[i+1];
372 (out+j+2)[0] = (ushort)in[i+1];
373 (out+j+2)[1] = (ushort)in[i+2];
374 (out+j+4)[0] = (ushort)in[i+2];
375 (out+j+4)[1] = (ushort)in[0];
376 }
377 }
378 static void translate_tris_ubyte2uint(
379 const void * _in,
380 unsigned nr,
381 void *_out )
382 {
383 const ubyte*in = (const ubyte*)_in;
384 uint *out = (uint*)_out;
385 unsigned i, j;
386 (void)j;
387 for (j = i = 0; j < nr; j+=6, i+=3) {
388 (out+j)[0] = (uint)in[i];
389 (out+j)[1] = (uint)in[i+1];
390 (out+j+2)[0] = (uint)in[i+1];
391 (out+j+2)[1] = (uint)in[i+2];
392 (out+j+4)[0] = (uint)in[i+2];
393 (out+j+4)[1] = (uint)in[i];
394 }
395 }
396 static void translate_tristrip_ubyte2uint(
397 const void * _in,
398 unsigned nr,
399 void *_out )
400 {
401 const ubyte*in = (const ubyte*)_in;
402 uint *out = (uint*)_out;
403 unsigned i, j;
404 (void)j;
405 for (j = i = 0; j < nr; j+=6, i++) {
406 (out+j)[0] = (uint)in[i];
407 (out+j)[1] = (uint)in[i+1/*+(i&1)*/];
408 (out+j+2)[0] = (uint)in[i+1/*+(i&1)*/];
409 (out+j+2)[1] = (uint)in[i+2/*-(i&1)*/];
410 (out+j+4)[0] = (uint)in[i+2/*-(i&1)*/];
411 (out+j+4)[1] = (uint)in[i];
412 }
413 }
414 static void translate_trifan_ubyte2uint(
415 const void * _in,
416 unsigned nr,
417 void *_out )
418 {
419 const ubyte*in = (const ubyte*)_in;
420 uint *out = (uint*)_out;
421 unsigned i, j;
422 (void)j;
423 for (j = i = 0; j < nr; j+=6, i++) {
424 (out+j)[0] = (uint)in[0];
425 (out+j)[1] = (uint)in[i+1];
426 (out+j+2)[0] = (uint)in[i+1];
427 (out+j+2)[1] = (uint)in[i+2];
428 (out+j+4)[0] = (uint)in[i+2];
429 (out+j+4)[1] = (uint)in[0];
430 }
431 }
432 static void translate_quads_ubyte2uint(
433 const void * _in,
434 unsigned nr,
435 void *_out )
436 {
437 const ubyte*in = (const ubyte*)_in;
438 uint *out = (uint*)_out;
439 unsigned i, j;
440 (void)j;
441 for (j = i = 0; j < nr; j+=8, i+=4) {
442 (out+j)[0] = (uint)in[i+0];
443 (out+j)[1] = (uint)in[i+1];
444 (out+j+2)[0] = (uint)in[i+1];
445 (out+j+2)[1] = (uint)in[i+2];
446 (out+j+4)[0] = (uint)in[i+2];
447 (out+j+4)[1] = (uint)in[i+3];
448 (out+j+6)[0] = (uint)in[i+3];
449 (out+j+6)[1] = (uint)in[i+0];
450 }
451 }
452 static void translate_quadstrip_ubyte2uint(
453 const void * _in,
454 unsigned nr,
455 void *_out )
456 {
457 const ubyte*in = (const ubyte*)_in;
458 uint *out = (uint*)_out;
459 unsigned i, j;
460 (void)j;
461 for (j = i = 0; j < nr; j+=8, i+=2) {
462 (out+j)[0] = (uint)in[i+2];
463 (out+j)[1] = (uint)in[i+0];
464 (out+j+2)[0] = (uint)in[i+0];
465 (out+j+2)[1] = (uint)in[i+1];
466 (out+j+4)[0] = (uint)in[i+1];
467 (out+j+4)[1] = (uint)in[i+3];
468 (out+j+6)[0] = (uint)in[i+3];
469 (out+j+6)[1] = (uint)in[i+2];
470 }
471 }
472 static void translate_polygon_ubyte2uint(
473 const void * _in,
474 unsigned nr,
475 void *_out )
476 {
477 const ubyte*in = (const ubyte*)_in;
478 uint *out = (uint*)_out;
479 unsigned i, j;
480 (void)j;
481 for (j = i = 0; j < nr; j+=6, i++) {
482 (out+j)[0] = (uint)in[0];
483 (out+j)[1] = (uint)in[i+1];
484 (out+j+2)[0] = (uint)in[i+1];
485 (out+j+2)[1] = (uint)in[i+2];
486 (out+j+4)[0] = (uint)in[i+2];
487 (out+j+4)[1] = (uint)in[0];
488 }
489 }
490 static void translate_tris_ushort2ushort(
491 const void * _in,
492 unsigned nr,
493 void *_out )
494 {
495 const ushort*in = (const ushort*)_in;
496 ushort *out = (ushort*)_out;
497 unsigned i, j;
498 (void)j;
499 for (j = i = 0; j < nr; j+=6, i+=3) {
500 (out+j)[0] = (ushort)in[i];
501 (out+j)[1] = (ushort)in[i+1];
502 (out+j+2)[0] = (ushort)in[i+1];
503 (out+j+2)[1] = (ushort)in[i+2];
504 (out+j+4)[0] = (ushort)in[i+2];
505 (out+j+4)[1] = (ushort)in[i];
506 }
507 }
508 static void translate_tristrip_ushort2ushort(
509 const void * _in,
510 unsigned nr,
511 void *_out )
512 {
513 const ushort*in = (const ushort*)_in;
514 ushort *out = (ushort*)_out;
515 unsigned i, j;
516 (void)j;
517 for (j = i = 0; j < nr; j+=6, i++) {
518 (out+j)[0] = (ushort)in[i];
519 (out+j)[1] = (ushort)in[i+1/*+(i&1)*/];
520 (out+j+2)[0] = (ushort)in[i+1/*+(i&1)*/];
521 (out+j+2)[1] = (ushort)in[i+2/*-(i&1)*/];
522 (out+j+4)[0] = (ushort)in[i+2/*-(i&1)*/];
523 (out+j+4)[1] = (ushort)in[i];
524 }
525 }
526 static void translate_trifan_ushort2ushort(
527 const void * _in,
528 unsigned nr,
529 void *_out )
530 {
531 const ushort*in = (const ushort*)_in;
532 ushort *out = (ushort*)_out;
533 unsigned i, j;
534 (void)j;
535 for (j = i = 0; j < nr; j+=6, i++) {
536 (out+j)[0] = (ushort)in[0];
537 (out+j)[1] = (ushort)in[i+1];
538 (out+j+2)[0] = (ushort)in[i+1];
539 (out+j+2)[1] = (ushort)in[i+2];
540 (out+j+4)[0] = (ushort)in[i+2];
541 (out+j+4)[1] = (ushort)in[0];
542 }
543 }
544 static void translate_quads_ushort2ushort(
545 const void * _in,
546 unsigned nr,
547 void *_out )
548 {
549 const ushort*in = (const ushort*)_in;
550 ushort *out = (ushort*)_out;
551 unsigned i, j;
552 (void)j;
553 for (j = i = 0; j < nr; j+=8, i+=4) {
554 (out+j)[0] = (ushort)in[i+0];
555 (out+j)[1] = (ushort)in[i+1];
556 (out+j+2)[0] = (ushort)in[i+1];
557 (out+j+2)[1] = (ushort)in[i+2];
558 (out+j+4)[0] = (ushort)in[i+2];
559 (out+j+4)[1] = (ushort)in[i+3];
560 (out+j+6)[0] = (ushort)in[i+3];
561 (out+j+6)[1] = (ushort)in[i+0];
562 }
563 }
564 static void translate_quadstrip_ushort2ushort(
565 const void * _in,
566 unsigned nr,
567 void *_out )
568 {
569 const ushort*in = (const ushort*)_in;
570 ushort *out = (ushort*)_out;
571 unsigned i, j;
572 (void)j;
573 for (j = i = 0; j < nr; j+=8, i+=2) {
574 (out+j)[0] = (ushort)in[i+2];
575 (out+j)[1] = (ushort)in[i+0];
576 (out+j+2)[0] = (ushort)in[i+0];
577 (out+j+2)[1] = (ushort)in[i+1];
578 (out+j+4)[0] = (ushort)in[i+1];
579 (out+j+4)[1] = (ushort)in[i+3];
580 (out+j+6)[0] = (ushort)in[i+3];
581 (out+j+6)[1] = (ushort)in[i+2];
582 }
583 }
584 static void translate_polygon_ushort2ushort(
585 const void * _in,
586 unsigned nr,
587 void *_out )
588 {
589 const ushort*in = (const ushort*)_in;
590 ushort *out = (ushort*)_out;
591 unsigned i, j;
592 (void)j;
593 for (j = i = 0; j < nr; j+=6, i++) {
594 (out+j)[0] = (ushort)in[0];
595 (out+j)[1] = (ushort)in[i+1];
596 (out+j+2)[0] = (ushort)in[i+1];
597 (out+j+2)[1] = (ushort)in[i+2];
598 (out+j+4)[0] = (ushort)in[i+2];
599 (out+j+4)[1] = (ushort)in[0];
600 }
601 }
602 static void translate_tris_ushort2uint(
603 const void * _in,
604 unsigned nr,
605 void *_out )
606 {
607 const ushort*in = (const ushort*)_in;
608 uint *out = (uint*)_out;
609 unsigned i, j;
610 (void)j;
611 for (j = i = 0; j < nr; j+=6, i+=3) {
612 (out+j)[0] = (uint)in[i];
613 (out+j)[1] = (uint)in[i+1];
614 (out+j+2)[0] = (uint)in[i+1];
615 (out+j+2)[1] = (uint)in[i+2];
616 (out+j+4)[0] = (uint)in[i+2];
617 (out+j+4)[1] = (uint)in[i];
618 }
619 }
620 static void translate_tristrip_ushort2uint(
621 const void * _in,
622 unsigned nr,
623 void *_out )
624 {
625 const ushort*in = (const ushort*)_in;
626 uint *out = (uint*)_out;
627 unsigned i, j;
628 (void)j;
629 for (j = i = 0; j < nr; j+=6, i++) {
630 (out+j)[0] = (uint)in[i];
631 (out+j)[1] = (uint)in[i+1/*+(i&1)*/];
632 (out+j+2)[0] = (uint)in[i+1/*+(i&1)*/];
633 (out+j+2)[1] = (uint)in[i+2/*-(i&1)*/];
634 (out+j+4)[0] = (uint)in[i+2/*-(i&1)*/];
635 (out+j+4)[1] = (uint)in[i];
636 }
637 }
638 static void translate_trifan_ushort2uint(
639 const void * _in,
640 unsigned nr,
641 void *_out )
642 {
643 const ushort*in = (const ushort*)_in;
644 uint *out = (uint*)_out;
645 unsigned i, j;
646 (void)j;
647 for (j = i = 0; j < nr; j+=6, i++) {
648 (out+j)[0] = (uint)in[0];
649 (out+j)[1] = (uint)in[i+1];
650 (out+j+2)[0] = (uint)in[i+1];
651 (out+j+2)[1] = (uint)in[i+2];
652 (out+j+4)[0] = (uint)in[i+2];
653 (out+j+4)[1] = (uint)in[0];
654 }
655 }
656 static void translate_quads_ushort2uint(
657 const void * _in,
658 unsigned nr,
659 void *_out )
660 {
661 const ushort*in = (const ushort*)_in;
662 uint *out = (uint*)_out;
663 unsigned i, j;
664 (void)j;
665 for (j = i = 0; j < nr; j+=8, i+=4) {
666 (out+j)[0] = (uint)in[i+0];
667 (out+j)[1] = (uint)in[i+1];
668 (out+j+2)[0] = (uint)in[i+1];
669 (out+j+2)[1] = (uint)in[i+2];
670 (out+j+4)[0] = (uint)in[i+2];
671 (out+j+4)[1] = (uint)in[i+3];
672 (out+j+6)[0] = (uint)in[i+3];
673 (out+j+6)[1] = (uint)in[i+0];
674 }
675 }
676 static void translate_quadstrip_ushort2uint(
677 const void * _in,
678 unsigned nr,
679 void *_out )
680 {
681 const ushort*in = (const ushort*)_in;
682 uint *out = (uint*)_out;
683 unsigned i, j;
684 (void)j;
685 for (j = i = 0; j < nr; j+=8, i+=2) {
686 (out+j)[0] = (uint)in[i+2];
687 (out+j)[1] = (uint)in[i+0];
688 (out+j+2)[0] = (uint)in[i+0];
689 (out+j+2)[1] = (uint)in[i+1];
690 (out+j+4)[0] = (uint)in[i+1];
691 (out+j+4)[1] = (uint)in[i+3];
692 (out+j+6)[0] = (uint)in[i+3];
693 (out+j+6)[1] = (uint)in[i+2];
694 }
695 }
696 static void translate_polygon_ushort2uint(
697 const void * _in,
698 unsigned nr,
699 void *_out )
700 {
701 const ushort*in = (const ushort*)_in;
702 uint *out = (uint*)_out;
703 unsigned i, j;
704 (void)j;
705 for (j = i = 0; j < nr; j+=6, i++) {
706 (out+j)[0] = (uint)in[0];
707 (out+j)[1] = (uint)in[i+1];
708 (out+j+2)[0] = (uint)in[i+1];
709 (out+j+2)[1] = (uint)in[i+2];
710 (out+j+4)[0] = (uint)in[i+2];
711 (out+j+4)[1] = (uint)in[0];
712 }
713 }
714 static void translate_tris_uint2ushort(
715 const void * _in,
716 unsigned nr,
717 void *_out )
718 {
719 const uint*in = (const uint*)_in;
720 ushort *out = (ushort*)_out;
721 unsigned i, j;
722 (void)j;
723 for (j = i = 0; j < nr; j+=6, i+=3) {
724 (out+j)[0] = (ushort)in[i];
725 (out+j)[1] = (ushort)in[i+1];
726 (out+j+2)[0] = (ushort)in[i+1];
727 (out+j+2)[1] = (ushort)in[i+2];
728 (out+j+4)[0] = (ushort)in[i+2];
729 (out+j+4)[1] = (ushort)in[i];
730 }
731 }
732 static void translate_tristrip_uint2ushort(
733 const void * _in,
734 unsigned nr,
735 void *_out )
736 {
737 const uint*in = (const uint*)_in;
738 ushort *out = (ushort*)_out;
739 unsigned i, j;
740 (void)j;
741 for (j = i = 0; j < nr; j+=6, i++) {
742 (out+j)[0] = (ushort)in[i];
743 (out+j)[1] = (ushort)in[i+1/*+(i&1)*/];
744 (out+j+2)[0] = (ushort)in[i+1/*+(i&1)*/];
745 (out+j+2)[1] = (ushort)in[i+2/*-(i&1)*/];
746 (out+j+4)[0] = (ushort)in[i+2/*-(i&1)*/];
747 (out+j+4)[1] = (ushort)in[i];
748 }
749 }
750 static void translate_trifan_uint2ushort(
751 const void * _in,
752 unsigned nr,
753 void *_out )
754 {
755 const uint*in = (const uint*)_in;
756 ushort *out = (ushort*)_out;
757 unsigned i, j;
758 (void)j;
759 for (j = i = 0; j < nr; j+=6, i++) {
760 (out+j)[0] = (ushort)in[0];
761 (out+j)[1] = (ushort)in[i+1];
762 (out+j+2)[0] = (ushort)in[i+1];
763 (out+j+2)[1] = (ushort)in[i+2];
764 (out+j+4)[0] = (ushort)in[i+2];
765 (out+j+4)[1] = (ushort)in[0];
766 }
767 }
768 static void translate_quads_uint2ushort(
769 const void * _in,
770 unsigned nr,
771 void *_out )
772 {
773 const uint*in = (const uint*)_in;
774 ushort *out = (ushort*)_out;
775 unsigned i, j;
776 (void)j;
777 for (j = i = 0; j < nr; j+=8, i+=4) {
778 (out+j)[0] = (ushort)in[i+0];
779 (out+j)[1] = (ushort)in[i+1];
780 (out+j+2)[0] = (ushort)in[i+1];
781 (out+j+2)[1] = (ushort)in[i+2];
782 (out+j+4)[0] = (ushort)in[i+2];
783 (out+j+4)[1] = (ushort)in[i+3];
784 (out+j+6)[0] = (ushort)in[i+3];
785 (out+j+6)[1] = (ushort)in[i+0];
786 }
787 }
788 static void translate_quadstrip_uint2ushort(
789 const void * _in,
790 unsigned nr,
791 void *_out )
792 {
793 const uint*in = (const uint*)_in;
794 ushort *out = (ushort*)_out;
795 unsigned i, j;
796 (void)j;
797 for (j = i = 0; j < nr; j+=8, i+=2) {
798 (out+j)[0] = (ushort)in[i+2];
799 (out+j)[1] = (ushort)in[i+0];
800 (out+j+2)[0] = (ushort)in[i+0];
801 (out+j+2)[1] = (ushort)in[i+1];
802 (out+j+4)[0] = (ushort)in[i+1];
803 (out+j+4)[1] = (ushort)in[i+3];
804 (out+j+6)[0] = (ushort)in[i+3];
805 (out+j+6)[1] = (ushort)in[i+2];
806 }
807 }
808 static void translate_polygon_uint2ushort(
809 const void * _in,
810 unsigned nr,
811 void *_out )
812 {
813 const uint*in = (const uint*)_in;
814 ushort *out = (ushort*)_out;
815 unsigned i, j;
816 (void)j;
817 for (j = i = 0; j < nr; j+=6, i++) {
818 (out+j)[0] = (ushort)in[0];
819 (out+j)[1] = (ushort)in[i+1];
820 (out+j+2)[0] = (ushort)in[i+1];
821 (out+j+2)[1] = (ushort)in[i+2];
822 (out+j+4)[0] = (ushort)in[i+2];
823 (out+j+4)[1] = (ushort)in[0];
824 }
825 }
826 static void translate_tris_uint2uint(
827 const void * _in,
828 unsigned nr,
829 void *_out )
830 {
831 const uint*in = (const uint*)_in;
832 uint *out = (uint*)_out;
833 unsigned i, j;
834 (void)j;
835 for (j = i = 0; j < nr; j+=6, i+=3) {
836 (out+j)[0] = (uint)in[i];
837 (out+j)[1] = (uint)in[i+1];
838 (out+j+2)[0] = (uint)in[i+1];
839 (out+j+2)[1] = (uint)in[i+2];
840 (out+j+4)[0] = (uint)in[i+2];
841 (out+j+4)[1] = (uint)in[i];
842 }
843 }
844 static void translate_tristrip_uint2uint(
845 const void * _in,
846 unsigned nr,
847 void *_out )
848 {
849 const uint*in = (const uint*)_in;
850 uint *out = (uint*)_out;
851 unsigned i, j;
852 (void)j;
853 for (j = i = 0; j < nr; j+=6, i++) {
854 (out+j)[0] = (uint)in[i];
855 (out+j)[1] = (uint)in[i+1/*+(i&1)*/];
856 (out+j+2)[0] = (uint)in[i+1/*+(i&1)*/];
857 (out+j+2)[1] = (uint)in[i+2/*-(i&1)*/];
858 (out+j+4)[0] = (uint)in[i+2/*-(i&1)*/];
859 (out+j+4)[1] = (uint)in[i];
860 }
861 }
862 static void translate_trifan_uint2uint(
863 const void * _in,
864 unsigned nr,
865 void *_out )
866 {
867 const uint*in = (const uint*)_in;
868 uint *out = (uint*)_out;
869 unsigned i, j;
870 (void)j;
871 for (j = i = 0; j < nr; j+=6, i++) {
872 (out+j)[0] = (uint)in[0];
873 (out+j)[1] = (uint)in[i+1];
874 (out+j+2)[0] = (uint)in[i+1];
875 (out+j+2)[1] = (uint)in[i+2];
876 (out+j+4)[0] = (uint)in[i+2];
877 (out+j+4)[1] = (uint)in[0];
878 }
879 }
880 static void translate_quads_uint2uint(
881 const void * _in,
882 unsigned nr,
883 void *_out )
884 {
885 const uint*in = (const uint*)_in;
886 uint *out = (uint*)_out;
887 unsigned i, j;
888 (void)j;
889 for (j = i = 0; j < nr; j+=8, i+=4) {
890 (out+j)[0] = (uint)in[i+0];
891 (out+j)[1] = (uint)in[i+1];
892 (out+j+2)[0] = (uint)in[i+1];
893 (out+j+2)[1] = (uint)in[i+2];
894 (out+j+4)[0] = (uint)in[i+2];
895 (out+j+4)[1] = (uint)in[i+3];
896 (out+j+6)[0] = (uint)in[i+3];
897 (out+j+6)[1] = (uint)in[i+0];
898 }
899 }
900 static void translate_quadstrip_uint2uint(
901 const void * _in,
902 unsigned nr,
903 void *_out )
904 {
905 const uint*in = (const uint*)_in;
906 uint *out = (uint*)_out;
907 unsigned i, j;
908 (void)j;
909 for (j = i = 0; j < nr; j+=8, i+=2) {
910 (out+j)[0] = (uint)in[i+2];
911 (out+j)[1] = (uint)in[i+0];
912 (out+j+2)[0] = (uint)in[i+0];
913 (out+j+2)[1] = (uint)in[i+1];
914 (out+j+4)[0] = (uint)in[i+1];
915 (out+j+4)[1] = (uint)in[i+3];
916 (out+j+6)[0] = (uint)in[i+3];
917 (out+j+6)[1] = (uint)in[i+2];
918 }
919 }
920 static void translate_polygon_uint2uint(
921 const void * _in,
922 unsigned nr,
923 void *_out )
924 {
925 const uint*in = (const uint*)_in;
926 uint *out = (uint*)_out;
927 unsigned i, j;
928 (void)j;
929 for (j = i = 0; j < nr; j+=6, i++) {
930 (out+j)[0] = (uint)in[0];
931 (out+j)[1] = (uint)in[i+1];
932 (out+j+2)[0] = (uint)in[i+1];
933 (out+j+2)[1] = (uint)in[i+2];
934 (out+j+4)[0] = (uint)in[i+2];
935 (out+j+4)[1] = (uint)in[0];
936 }
937 }
938 void u_unfilled_init( void )
939 {
940 static int firsttime = 1;
941 if (!firsttime) return;
942 firsttime = 0;
943 generate_line[OUT_USHORT][PIPE_PRIM_TRIANGLES] = generate_tris_ushort;
944 generate_line[OUT_USHORT][PIPE_PRIM_TRIANGLE_FAN] = generate_trifan_ushort;
945 generate_line[OUT_USHORT][PIPE_PRIM_TRIANGLE_STRIP] = generate_tristrip_ushort;
946 generate_line[OUT_USHORT][PIPE_PRIM_QUADS] = generate_quads_ushort;
947 generate_line[OUT_USHORT][PIPE_PRIM_QUAD_STRIP] = generate_quadstrip_ushort;
948 generate_line[OUT_USHORT][PIPE_PRIM_POLYGON] = generate_polygon_ushort;
949 generate_line[OUT_UINT][PIPE_PRIM_TRIANGLES] = generate_tris_uint;
950 generate_line[OUT_UINT][PIPE_PRIM_TRIANGLE_FAN] = generate_trifan_uint;
951 generate_line[OUT_UINT][PIPE_PRIM_TRIANGLE_STRIP] = generate_tristrip_uint;
952 generate_line[OUT_UINT][PIPE_PRIM_QUADS] = generate_quads_uint;
953 generate_line[OUT_UINT][PIPE_PRIM_QUAD_STRIP] = generate_quadstrip_uint;
954 generate_line[OUT_UINT][PIPE_PRIM_POLYGON] = generate_polygon_uint;
955 translate_line[IN_UBYTE][OUT_USHORT][PIPE_PRIM_TRIANGLES] = translate_tris_ubyte2ushort;
956 translate_line[IN_UBYTE][OUT_USHORT][PIPE_PRIM_TRIANGLE_FAN] = translate_trifan_ubyte2ushort;
957 translate_line[IN_UBYTE][OUT_USHORT][PIPE_PRIM_TRIANGLE_STRIP] = translate_tristrip_ubyte2ushort;
958 translate_line[IN_UBYTE][OUT_USHORT][PIPE_PRIM_QUADS] = translate_quads_ubyte2ushort;
959 translate_line[IN_UBYTE][OUT_USHORT][PIPE_PRIM_QUAD_STRIP] = translate_quadstrip_ubyte2ushort;
960 translate_line[IN_UBYTE][OUT_USHORT][PIPE_PRIM_POLYGON] = translate_polygon_ubyte2ushort;
961 translate_line[IN_UBYTE][OUT_UINT][PIPE_PRIM_TRIANGLES] = translate_tris_ubyte2uint;
962 translate_line[IN_UBYTE][OUT_UINT][PIPE_PRIM_TRIANGLE_FAN] = translate_trifan_ubyte2uint;
963 translate_line[IN_UBYTE][OUT_UINT][PIPE_PRIM_TRIANGLE_STRIP] = translate_tristrip_ubyte2uint;
964 translate_line[IN_UBYTE][OUT_UINT][PIPE_PRIM_QUADS] = translate_quads_ubyte2uint;
965 translate_line[IN_UBYTE][OUT_UINT][PIPE_PRIM_QUAD_STRIP] = translate_quadstrip_ubyte2uint;
966 translate_line[IN_UBYTE][OUT_UINT][PIPE_PRIM_POLYGON] = translate_polygon_ubyte2uint;
967 translate_line[IN_USHORT][OUT_USHORT][PIPE_PRIM_TRIANGLES] = translate_tris_ushort2ushort;
968 translate_line[IN_USHORT][OUT_USHORT][PIPE_PRIM_TRIANGLE_FAN] = translate_trifan_ushort2ushort;
969 translate_line[IN_USHORT][OUT_USHORT][PIPE_PRIM_TRIANGLE_STRIP] = translate_tristrip_ushort2ushort;
970 translate_line[IN_USHORT][OUT_USHORT][PIPE_PRIM_QUADS] = translate_quads_ushort2ushort;
971 translate_line[IN_USHORT][OUT_USHORT][PIPE_PRIM_QUAD_STRIP] = translate_quadstrip_ushort2ushort;
972 translate_line[IN_USHORT][OUT_USHORT][PIPE_PRIM_POLYGON] = translate_polygon_ushort2ushort;
973 translate_line[IN_USHORT][OUT_UINT][PIPE_PRIM_TRIANGLES] = translate_tris_ushort2uint;
974 translate_line[IN_USHORT][OUT_UINT][PIPE_PRIM_TRIANGLE_FAN] = translate_trifan_ushort2uint;
975 translate_line[IN_USHORT][OUT_UINT][PIPE_PRIM_TRIANGLE_STRIP] = translate_tristrip_ushort2uint;
976 translate_line[IN_USHORT][OUT_UINT][PIPE_PRIM_QUADS] = translate_quads_ushort2uint;
977 translate_line[IN_USHORT][OUT_UINT][PIPE_PRIM_QUAD_STRIP] = translate_quadstrip_ushort2uint;
978 translate_line[IN_USHORT][OUT_UINT][PIPE_PRIM_POLYGON] = translate_polygon_ushort2uint;
979 translate_line[IN_UINT][OUT_USHORT][PIPE_PRIM_TRIANGLES] = translate_tris_uint2ushort;
980 translate_line[IN_UINT][OUT_USHORT][PIPE_PRIM_TRIANGLE_FAN] = translate_trifan_uint2ushort;
981 translate_line[IN_UINT][OUT_USHORT][PIPE_PRIM_TRIANGLE_STRIP] = translate_tristrip_uint2ushort;
982 translate_line[IN_UINT][OUT_USHORT][PIPE_PRIM_QUADS] = translate_quads_uint2ushort;
983 translate_line[IN_UINT][OUT_USHORT][PIPE_PRIM_QUAD_STRIP] = translate_quadstrip_uint2ushort;
984 translate_line[IN_UINT][OUT_USHORT][PIPE_PRIM_POLYGON] = translate_polygon_uint2ushort;
985 translate_line[IN_UINT][OUT_UINT][PIPE_PRIM_TRIANGLES] = translate_tris_uint2uint;
986 translate_line[IN_UINT][OUT_UINT][PIPE_PRIM_TRIANGLE_FAN] = translate_trifan_uint2uint;
987 translate_line[IN_UINT][OUT_UINT][PIPE_PRIM_TRIANGLE_STRIP] = translate_tristrip_uint2uint;
988 translate_line[IN_UINT][OUT_UINT][PIPE_PRIM_QUADS] = translate_quads_uint2uint;
989 translate_line[IN_UINT][OUT_UINT][PIPE_PRIM_QUAD_STRIP] = translate_quadstrip_uint2uint;
990 translate_line[IN_UINT][OUT_UINT][PIPE_PRIM_POLYGON] = translate_polygon_uint2uint;
991 }
992 #include "indices/u_unfilled_indices.c"