1 /* File automatically generated by u_unfilled_gen.py */
4 * Copyright 2009 VMware, Inc.
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:
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
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.
31 * Functions to translate and generate index lists
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"
42 static unsigned out_size_idx( unsigned index_size
)
45 case 4: return OUT_UINT
;
46 case 2: return OUT_USHORT
;
47 default: assert(0); return OUT_USHORT
;
51 static unsigned in_size_idx( unsigned 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
;
62 static u_generate_func generate_line
[OUT_COUNT
][PRIM_COUNT
];
63 static u_translate_func translate_line
[IN_COUNT
][OUT_COUNT
][PRIM_COUNT
];
66 static void generate_tris_ushort(
70 ushort
*out
= (ushort
*)_out
;
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
);
82 static void generate_tristrip_ushort(
86 ushort
*out
= (ushort
*)_out
;
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
);
98 static void generate_trifan_ushort(
102 ushort
*out
= (ushort
*)_out
;
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);
114 static void generate_quads_ushort(
118 ushort
*out
= (ushort
*)_out
;
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);
132 static void generate_quadstrip_ushort(
136 ushort
*out
= (ushort
*)_out
;
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);
150 static void generate_polygon_ushort(
154 ushort
*out
= (ushort
*)_out
;
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);
166 static void generate_tris_uint(
170 uint
*out
= (uint
*)_out
;
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
);
182 static void generate_tristrip_uint(
186 uint
*out
= (uint
*)_out
;
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
);
198 static void generate_trifan_uint(
202 uint
*out
= (uint
*)_out
;
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);
214 static void generate_quads_uint(
218 uint
*out
= (uint
*)_out
;
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);
232 static void generate_quadstrip_uint(
236 uint
*out
= (uint
*)_out
;
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);
250 static void generate_polygon_uint(
254 uint
*out
= (uint
*)_out
;
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);
266 static void translate_tris_ubyte2ushort(
271 const ubyte
*in
= (const ubyte
*)_in
;
272 ushort
*out
= (ushort
*)_out
;
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
];
284 static void translate_tristrip_ubyte2ushort(
289 const ubyte
*in
= (const ubyte
*)_in
;
290 ushort
*out
= (ushort
*)_out
;
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
];
302 static void translate_trifan_ubyte2ushort(
307 const ubyte
*in
= (const ubyte
*)_in
;
308 ushort
*out
= (ushort
*)_out
;
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];
320 static void translate_quads_ubyte2ushort(
325 const ubyte
*in
= (const ubyte
*)_in
;
326 ushort
*out
= (ushort
*)_out
;
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];
340 static void translate_quadstrip_ubyte2ushort(
345 const ubyte
*in
= (const ubyte
*)_in
;
346 ushort
*out
= (ushort
*)_out
;
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];
360 static void translate_polygon_ubyte2ushort(
365 const ubyte
*in
= (const ubyte
*)_in
;
366 ushort
*out
= (ushort
*)_out
;
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];
378 static void translate_tris_ubyte2uint(
383 const ubyte
*in
= (const ubyte
*)_in
;
384 uint
*out
= (uint
*)_out
;
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
];
396 static void translate_tristrip_ubyte2uint(
401 const ubyte
*in
= (const ubyte
*)_in
;
402 uint
*out
= (uint
*)_out
;
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
];
414 static void translate_trifan_ubyte2uint(
419 const ubyte
*in
= (const ubyte
*)_in
;
420 uint
*out
= (uint
*)_out
;
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];
432 static void translate_quads_ubyte2uint(
437 const ubyte
*in
= (const ubyte
*)_in
;
438 uint
*out
= (uint
*)_out
;
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];
452 static void translate_quadstrip_ubyte2uint(
457 const ubyte
*in
= (const ubyte
*)_in
;
458 uint
*out
= (uint
*)_out
;
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];
472 static void translate_polygon_ubyte2uint(
477 const ubyte
*in
= (const ubyte
*)_in
;
478 uint
*out
= (uint
*)_out
;
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];
490 static void translate_tris_ushort2ushort(
495 const ushort
*in
= (const ushort
*)_in
;
496 ushort
*out
= (ushort
*)_out
;
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
];
508 static void translate_tristrip_ushort2ushort(
513 const ushort
*in
= (const ushort
*)_in
;
514 ushort
*out
= (ushort
*)_out
;
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
];
526 static void translate_trifan_ushort2ushort(
531 const ushort
*in
= (const ushort
*)_in
;
532 ushort
*out
= (ushort
*)_out
;
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];
544 static void translate_quads_ushort2ushort(
549 const ushort
*in
= (const ushort
*)_in
;
550 ushort
*out
= (ushort
*)_out
;
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];
564 static void translate_quadstrip_ushort2ushort(
569 const ushort
*in
= (const ushort
*)_in
;
570 ushort
*out
= (ushort
*)_out
;
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];
584 static void translate_polygon_ushort2ushort(
589 const ushort
*in
= (const ushort
*)_in
;
590 ushort
*out
= (ushort
*)_out
;
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];
602 static void translate_tris_ushort2uint(
607 const ushort
*in
= (const ushort
*)_in
;
608 uint
*out
= (uint
*)_out
;
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
];
620 static void translate_tristrip_ushort2uint(
625 const ushort
*in
= (const ushort
*)_in
;
626 uint
*out
= (uint
*)_out
;
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
];
638 static void translate_trifan_ushort2uint(
643 const ushort
*in
= (const ushort
*)_in
;
644 uint
*out
= (uint
*)_out
;
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];
656 static void translate_quads_ushort2uint(
661 const ushort
*in
= (const ushort
*)_in
;
662 uint
*out
= (uint
*)_out
;
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];
676 static void translate_quadstrip_ushort2uint(
681 const ushort
*in
= (const ushort
*)_in
;
682 uint
*out
= (uint
*)_out
;
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];
696 static void translate_polygon_ushort2uint(
701 const ushort
*in
= (const ushort
*)_in
;
702 uint
*out
= (uint
*)_out
;
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];
714 static void translate_tris_uint2ushort(
719 const uint
*in
= (const uint
*)_in
;
720 ushort
*out
= (ushort
*)_out
;
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
];
732 static void translate_tristrip_uint2ushort(
737 const uint
*in
= (const uint
*)_in
;
738 ushort
*out
= (ushort
*)_out
;
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
];
750 static void translate_trifan_uint2ushort(
755 const uint
*in
= (const uint
*)_in
;
756 ushort
*out
= (ushort
*)_out
;
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];
768 static void translate_quads_uint2ushort(
773 const uint
*in
= (const uint
*)_in
;
774 ushort
*out
= (ushort
*)_out
;
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];
788 static void translate_quadstrip_uint2ushort(
793 const uint
*in
= (const uint
*)_in
;
794 ushort
*out
= (ushort
*)_out
;
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];
808 static void translate_polygon_uint2ushort(
813 const uint
*in
= (const uint
*)_in
;
814 ushort
*out
= (ushort
*)_out
;
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];
826 static void translate_tris_uint2uint(
831 const uint
*in
= (const uint
*)_in
;
832 uint
*out
= (uint
*)_out
;
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
];
844 static void translate_tristrip_uint2uint(
849 const uint
*in
= (const uint
*)_in
;
850 uint
*out
= (uint
*)_out
;
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
];
862 static void translate_trifan_uint2uint(
867 const uint
*in
= (const uint
*)_in
;
868 uint
*out
= (uint
*)_out
;
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];
880 static void translate_quads_uint2uint(
885 const uint
*in
= (const uint
*)_in
;
886 uint
*out
= (uint
*)_out
;
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];
900 static void translate_quadstrip_uint2uint(
905 const uint
*in
= (const uint
*)_in
;
906 uint
*out
= (uint
*)_out
;
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];
920 static void translate_polygon_uint2uint(
925 const uint
*in
= (const uint
*)_in
;
926 uint
*out
= (uint
*)_out
;
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];
938 void u_unfilled_init( void )
940 static int firsttime
= 1;
941 if (!firsttime
) return;
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
;
992 #include "indices/u_unfilled_indices.c"