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
+=2, i
++) {
158 (out
+j
)[0] = (ushort
)(i
);
159 (out
+j
)[1] = (ushort
)((i
+1)%(nr
/2));
162 static void generate_tris_uint(
166 uint
*out
= (uint
*)_out
;
169 for (j
= i
= 0; j
< nr
; j
+=6, i
+=3) {
170 (out
+j
)[0] = (uint
)(i
);
171 (out
+j
)[1] = (uint
)(i
+1);
172 (out
+j
+2)[0] = (uint
)(i
+1);
173 (out
+j
+2)[1] = (uint
)(i
+2);
174 (out
+j
+4)[0] = (uint
)(i
+2);
175 (out
+j
+4)[1] = (uint
)(i
);
178 static void generate_tristrip_uint(
182 uint
*out
= (uint
*)_out
;
185 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
186 (out
+j
)[0] = (uint
)(i
);
187 (out
+j
)[1] = (uint
)(i
+1/*+(i&1)*/);
188 (out
+j
+2)[0] = (uint
)(i
+1/*+(i&1)*/);
189 (out
+j
+2)[1] = (uint
)(i
+2/*-(i&1)*/);
190 (out
+j
+4)[0] = (uint
)(i
+2/*-(i&1)*/);
191 (out
+j
+4)[1] = (uint
)(i
);
194 static void generate_trifan_uint(
198 uint
*out
= (uint
*)_out
;
201 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
202 (out
+j
)[0] = (uint
)(0);
203 (out
+j
)[1] = (uint
)(i
+1);
204 (out
+j
+2)[0] = (uint
)(i
+1);
205 (out
+j
+2)[1] = (uint
)(i
+2);
206 (out
+j
+4)[0] = (uint
)(i
+2);
207 (out
+j
+4)[1] = (uint
)(0);
210 static void generate_quads_uint(
214 uint
*out
= (uint
*)_out
;
217 for (j
= i
= 0; j
< nr
; j
+=8, i
+=4) {
218 (out
+j
)[0] = (uint
)(i
+0);
219 (out
+j
)[1] = (uint
)(i
+1);
220 (out
+j
+2)[0] = (uint
)(i
+1);
221 (out
+j
+2)[1] = (uint
)(i
+2);
222 (out
+j
+4)[0] = (uint
)(i
+2);
223 (out
+j
+4)[1] = (uint
)(i
+3);
224 (out
+j
+6)[0] = (uint
)(i
+3);
225 (out
+j
+6)[1] = (uint
)(i
+0);
228 static void generate_quadstrip_uint(
232 uint
*out
= (uint
*)_out
;
235 for (j
= i
= 0; j
< nr
; j
+=8, i
+=2) {
236 (out
+j
)[0] = (uint
)(i
+2);
237 (out
+j
)[1] = (uint
)(i
+0);
238 (out
+j
+2)[0] = (uint
)(i
+0);
239 (out
+j
+2)[1] = (uint
)(i
+1);
240 (out
+j
+4)[0] = (uint
)(i
+1);
241 (out
+j
+4)[1] = (uint
)(i
+3);
242 (out
+j
+6)[0] = (uint
)(i
+3);
243 (out
+j
+6)[1] = (uint
)(i
+2);
246 static void generate_polygon_uint(
250 uint
*out
= (uint
*)_out
;
253 for (j
= i
= 0; j
< nr
; j
+=2, i
++) {
254 (out
+j
)[0] = (uint
)(i
);
255 (out
+j
)[1] = (uint
)((i
+1)%(nr
/2));
258 static void translate_tris_ubyte2ushort(
263 const ubyte
*in
= (const ubyte
*)_in
;
264 ushort
*out
= (ushort
*)_out
;
267 for (j
= i
= 0; j
< nr
; j
+=6, i
+=3) {
268 (out
+j
)[0] = (ushort
)in
[i
];
269 (out
+j
)[1] = (ushort
)in
[i
+1];
270 (out
+j
+2)[0] = (ushort
)in
[i
+1];
271 (out
+j
+2)[1] = (ushort
)in
[i
+2];
272 (out
+j
+4)[0] = (ushort
)in
[i
+2];
273 (out
+j
+4)[1] = (ushort
)in
[i
];
276 static void translate_tristrip_ubyte2ushort(
281 const ubyte
*in
= (const ubyte
*)_in
;
282 ushort
*out
= (ushort
*)_out
;
285 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
286 (out
+j
)[0] = (ushort
)in
[i
];
287 (out
+j
)[1] = (ushort
)in
[i
+1/*+(i&1)*/];
288 (out
+j
+2)[0] = (ushort
)in
[i
+1/*+(i&1)*/];
289 (out
+j
+2)[1] = (ushort
)in
[i
+2/*-(i&1)*/];
290 (out
+j
+4)[0] = (ushort
)in
[i
+2/*-(i&1)*/];
291 (out
+j
+4)[1] = (ushort
)in
[i
];
294 static void translate_trifan_ubyte2ushort(
299 const ubyte
*in
= (const ubyte
*)_in
;
300 ushort
*out
= (ushort
*)_out
;
303 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
304 (out
+j
)[0] = (ushort
)in
[0];
305 (out
+j
)[1] = (ushort
)in
[i
+1];
306 (out
+j
+2)[0] = (ushort
)in
[i
+1];
307 (out
+j
+2)[1] = (ushort
)in
[i
+2];
308 (out
+j
+4)[0] = (ushort
)in
[i
+2];
309 (out
+j
+4)[1] = (ushort
)in
[0];
312 static void translate_quads_ubyte2ushort(
317 const ubyte
*in
= (const ubyte
*)_in
;
318 ushort
*out
= (ushort
*)_out
;
321 for (j
= i
= 0; j
< nr
; j
+=8, i
+=4) {
322 (out
+j
)[0] = (ushort
)in
[i
+0];
323 (out
+j
)[1] = (ushort
)in
[i
+1];
324 (out
+j
+2)[0] = (ushort
)in
[i
+1];
325 (out
+j
+2)[1] = (ushort
)in
[i
+2];
326 (out
+j
+4)[0] = (ushort
)in
[i
+2];
327 (out
+j
+4)[1] = (ushort
)in
[i
+3];
328 (out
+j
+6)[0] = (ushort
)in
[i
+3];
329 (out
+j
+6)[1] = (ushort
)in
[i
+0];
332 static void translate_quadstrip_ubyte2ushort(
337 const ubyte
*in
= (const ubyte
*)_in
;
338 ushort
*out
= (ushort
*)_out
;
341 for (j
= i
= 0; j
< nr
; j
+=8, i
+=2) {
342 (out
+j
)[0] = (ushort
)in
[i
+2];
343 (out
+j
)[1] = (ushort
)in
[i
+0];
344 (out
+j
+2)[0] = (ushort
)in
[i
+0];
345 (out
+j
+2)[1] = (ushort
)in
[i
+1];
346 (out
+j
+4)[0] = (ushort
)in
[i
+1];
347 (out
+j
+4)[1] = (ushort
)in
[i
+3];
348 (out
+j
+6)[0] = (ushort
)in
[i
+3];
349 (out
+j
+6)[1] = (ushort
)in
[i
+2];
352 static void translate_polygon_ubyte2ushort(
357 const ubyte
*in
= (const ubyte
*)_in
;
358 ushort
*out
= (ushort
*)_out
;
361 for (j
= i
= 0; j
< nr
; j
+=2, i
++) {
362 (out
+j
)[0] = (ushort
)in
[i
];
363 (out
+j
)[1] = (ushort
)in
[(i
+1)%(nr
/2)];
366 static void translate_tris_ubyte2uint(
371 const ubyte
*in
= (const ubyte
*)_in
;
372 uint
*out
= (uint
*)_out
;
375 for (j
= i
= 0; j
< nr
; j
+=6, i
+=3) {
376 (out
+j
)[0] = (uint
)in
[i
];
377 (out
+j
)[1] = (uint
)in
[i
+1];
378 (out
+j
+2)[0] = (uint
)in
[i
+1];
379 (out
+j
+2)[1] = (uint
)in
[i
+2];
380 (out
+j
+4)[0] = (uint
)in
[i
+2];
381 (out
+j
+4)[1] = (uint
)in
[i
];
384 static void translate_tristrip_ubyte2uint(
389 const ubyte
*in
= (const ubyte
*)_in
;
390 uint
*out
= (uint
*)_out
;
393 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
394 (out
+j
)[0] = (uint
)in
[i
];
395 (out
+j
)[1] = (uint
)in
[i
+1/*+(i&1)*/];
396 (out
+j
+2)[0] = (uint
)in
[i
+1/*+(i&1)*/];
397 (out
+j
+2)[1] = (uint
)in
[i
+2/*-(i&1)*/];
398 (out
+j
+4)[0] = (uint
)in
[i
+2/*-(i&1)*/];
399 (out
+j
+4)[1] = (uint
)in
[i
];
402 static void translate_trifan_ubyte2uint(
407 const ubyte
*in
= (const ubyte
*)_in
;
408 uint
*out
= (uint
*)_out
;
411 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
412 (out
+j
)[0] = (uint
)in
[0];
413 (out
+j
)[1] = (uint
)in
[i
+1];
414 (out
+j
+2)[0] = (uint
)in
[i
+1];
415 (out
+j
+2)[1] = (uint
)in
[i
+2];
416 (out
+j
+4)[0] = (uint
)in
[i
+2];
417 (out
+j
+4)[1] = (uint
)in
[0];
420 static void translate_quads_ubyte2uint(
425 const ubyte
*in
= (const ubyte
*)_in
;
426 uint
*out
= (uint
*)_out
;
429 for (j
= i
= 0; j
< nr
; j
+=8, i
+=4) {
430 (out
+j
)[0] = (uint
)in
[i
+0];
431 (out
+j
)[1] = (uint
)in
[i
+1];
432 (out
+j
+2)[0] = (uint
)in
[i
+1];
433 (out
+j
+2)[1] = (uint
)in
[i
+2];
434 (out
+j
+4)[0] = (uint
)in
[i
+2];
435 (out
+j
+4)[1] = (uint
)in
[i
+3];
436 (out
+j
+6)[0] = (uint
)in
[i
+3];
437 (out
+j
+6)[1] = (uint
)in
[i
+0];
440 static void translate_quadstrip_ubyte2uint(
445 const ubyte
*in
= (const ubyte
*)_in
;
446 uint
*out
= (uint
*)_out
;
449 for (j
= i
= 0; j
< nr
; j
+=8, i
+=2) {
450 (out
+j
)[0] = (uint
)in
[i
+2];
451 (out
+j
)[1] = (uint
)in
[i
+0];
452 (out
+j
+2)[0] = (uint
)in
[i
+0];
453 (out
+j
+2)[1] = (uint
)in
[i
+1];
454 (out
+j
+4)[0] = (uint
)in
[i
+1];
455 (out
+j
+4)[1] = (uint
)in
[i
+3];
456 (out
+j
+6)[0] = (uint
)in
[i
+3];
457 (out
+j
+6)[1] = (uint
)in
[i
+2];
460 static void translate_polygon_ubyte2uint(
465 const ubyte
*in
= (const ubyte
*)_in
;
466 uint
*out
= (uint
*)_out
;
469 for (j
= i
= 0; j
< nr
; j
+=2, i
++) {
470 (out
+j
)[0] = (uint
)in
[i
];
471 (out
+j
)[1] = (uint
)in
[(i
+1)%(nr
/2)];
474 static void translate_tris_ushort2ushort(
479 const ushort
*in
= (const ushort
*)_in
;
480 ushort
*out
= (ushort
*)_out
;
483 for (j
= i
= 0; j
< nr
; j
+=6, i
+=3) {
484 (out
+j
)[0] = (ushort
)in
[i
];
485 (out
+j
)[1] = (ushort
)in
[i
+1];
486 (out
+j
+2)[0] = (ushort
)in
[i
+1];
487 (out
+j
+2)[1] = (ushort
)in
[i
+2];
488 (out
+j
+4)[0] = (ushort
)in
[i
+2];
489 (out
+j
+4)[1] = (ushort
)in
[i
];
492 static void translate_tristrip_ushort2ushort(
497 const ushort
*in
= (const ushort
*)_in
;
498 ushort
*out
= (ushort
*)_out
;
501 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
502 (out
+j
)[0] = (ushort
)in
[i
];
503 (out
+j
)[1] = (ushort
)in
[i
+1/*+(i&1)*/];
504 (out
+j
+2)[0] = (ushort
)in
[i
+1/*+(i&1)*/];
505 (out
+j
+2)[1] = (ushort
)in
[i
+2/*-(i&1)*/];
506 (out
+j
+4)[0] = (ushort
)in
[i
+2/*-(i&1)*/];
507 (out
+j
+4)[1] = (ushort
)in
[i
];
510 static void translate_trifan_ushort2ushort(
515 const ushort
*in
= (const ushort
*)_in
;
516 ushort
*out
= (ushort
*)_out
;
519 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
520 (out
+j
)[0] = (ushort
)in
[0];
521 (out
+j
)[1] = (ushort
)in
[i
+1];
522 (out
+j
+2)[0] = (ushort
)in
[i
+1];
523 (out
+j
+2)[1] = (ushort
)in
[i
+2];
524 (out
+j
+4)[0] = (ushort
)in
[i
+2];
525 (out
+j
+4)[1] = (ushort
)in
[0];
528 static void translate_quads_ushort2ushort(
533 const ushort
*in
= (const ushort
*)_in
;
534 ushort
*out
= (ushort
*)_out
;
537 for (j
= i
= 0; j
< nr
; j
+=8, i
+=4) {
538 (out
+j
)[0] = (ushort
)in
[i
+0];
539 (out
+j
)[1] = (ushort
)in
[i
+1];
540 (out
+j
+2)[0] = (ushort
)in
[i
+1];
541 (out
+j
+2)[1] = (ushort
)in
[i
+2];
542 (out
+j
+4)[0] = (ushort
)in
[i
+2];
543 (out
+j
+4)[1] = (ushort
)in
[i
+3];
544 (out
+j
+6)[0] = (ushort
)in
[i
+3];
545 (out
+j
+6)[1] = (ushort
)in
[i
+0];
548 static void translate_quadstrip_ushort2ushort(
553 const ushort
*in
= (const ushort
*)_in
;
554 ushort
*out
= (ushort
*)_out
;
557 for (j
= i
= 0; j
< nr
; j
+=8, i
+=2) {
558 (out
+j
)[0] = (ushort
)in
[i
+2];
559 (out
+j
)[1] = (ushort
)in
[i
+0];
560 (out
+j
+2)[0] = (ushort
)in
[i
+0];
561 (out
+j
+2)[1] = (ushort
)in
[i
+1];
562 (out
+j
+4)[0] = (ushort
)in
[i
+1];
563 (out
+j
+4)[1] = (ushort
)in
[i
+3];
564 (out
+j
+6)[0] = (ushort
)in
[i
+3];
565 (out
+j
+6)[1] = (ushort
)in
[i
+2];
568 static void translate_polygon_ushort2ushort(
573 const ushort
*in
= (const ushort
*)_in
;
574 ushort
*out
= (ushort
*)_out
;
577 for (j
= i
= 0; j
< nr
; j
+=2, i
++) {
578 (out
+j
)[0] = (ushort
)in
[i
];
579 (out
+j
)[1] = (ushort
)in
[(i
+1)%(nr
/2)];
582 static void translate_tris_ushort2uint(
587 const ushort
*in
= (const ushort
*)_in
;
588 uint
*out
= (uint
*)_out
;
591 for (j
= i
= 0; j
< nr
; j
+=6, i
+=3) {
592 (out
+j
)[0] = (uint
)in
[i
];
593 (out
+j
)[1] = (uint
)in
[i
+1];
594 (out
+j
+2)[0] = (uint
)in
[i
+1];
595 (out
+j
+2)[1] = (uint
)in
[i
+2];
596 (out
+j
+4)[0] = (uint
)in
[i
+2];
597 (out
+j
+4)[1] = (uint
)in
[i
];
600 static void translate_tristrip_ushort2uint(
605 const ushort
*in
= (const ushort
*)_in
;
606 uint
*out
= (uint
*)_out
;
609 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
610 (out
+j
)[0] = (uint
)in
[i
];
611 (out
+j
)[1] = (uint
)in
[i
+1/*+(i&1)*/];
612 (out
+j
+2)[0] = (uint
)in
[i
+1/*+(i&1)*/];
613 (out
+j
+2)[1] = (uint
)in
[i
+2/*-(i&1)*/];
614 (out
+j
+4)[0] = (uint
)in
[i
+2/*-(i&1)*/];
615 (out
+j
+4)[1] = (uint
)in
[i
];
618 static void translate_trifan_ushort2uint(
623 const ushort
*in
= (const ushort
*)_in
;
624 uint
*out
= (uint
*)_out
;
627 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
628 (out
+j
)[0] = (uint
)in
[0];
629 (out
+j
)[1] = (uint
)in
[i
+1];
630 (out
+j
+2)[0] = (uint
)in
[i
+1];
631 (out
+j
+2)[1] = (uint
)in
[i
+2];
632 (out
+j
+4)[0] = (uint
)in
[i
+2];
633 (out
+j
+4)[1] = (uint
)in
[0];
636 static void translate_quads_ushort2uint(
641 const ushort
*in
= (const ushort
*)_in
;
642 uint
*out
= (uint
*)_out
;
645 for (j
= i
= 0; j
< nr
; j
+=8, i
+=4) {
646 (out
+j
)[0] = (uint
)in
[i
+0];
647 (out
+j
)[1] = (uint
)in
[i
+1];
648 (out
+j
+2)[0] = (uint
)in
[i
+1];
649 (out
+j
+2)[1] = (uint
)in
[i
+2];
650 (out
+j
+4)[0] = (uint
)in
[i
+2];
651 (out
+j
+4)[1] = (uint
)in
[i
+3];
652 (out
+j
+6)[0] = (uint
)in
[i
+3];
653 (out
+j
+6)[1] = (uint
)in
[i
+0];
656 static void translate_quadstrip_ushort2uint(
661 const ushort
*in
= (const ushort
*)_in
;
662 uint
*out
= (uint
*)_out
;
665 for (j
= i
= 0; j
< nr
; j
+=8, i
+=2) {
666 (out
+j
)[0] = (uint
)in
[i
+2];
667 (out
+j
)[1] = (uint
)in
[i
+0];
668 (out
+j
+2)[0] = (uint
)in
[i
+0];
669 (out
+j
+2)[1] = (uint
)in
[i
+1];
670 (out
+j
+4)[0] = (uint
)in
[i
+1];
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
+2];
676 static void translate_polygon_ushort2uint(
681 const ushort
*in
= (const ushort
*)_in
;
682 uint
*out
= (uint
*)_out
;
685 for (j
= i
= 0; j
< nr
; j
+=2, i
++) {
686 (out
+j
)[0] = (uint
)in
[i
];
687 (out
+j
)[1] = (uint
)in
[(i
+1)%(nr
/2)];
690 static void translate_tris_uint2ushort(
695 const uint
*in
= (const uint
*)_in
;
696 ushort
*out
= (ushort
*)_out
;
699 for (j
= i
= 0; j
< nr
; j
+=6, i
+=3) {
700 (out
+j
)[0] = (ushort
)in
[i
];
701 (out
+j
)[1] = (ushort
)in
[i
+1];
702 (out
+j
+2)[0] = (ushort
)in
[i
+1];
703 (out
+j
+2)[1] = (ushort
)in
[i
+2];
704 (out
+j
+4)[0] = (ushort
)in
[i
+2];
705 (out
+j
+4)[1] = (ushort
)in
[i
];
708 static void translate_tristrip_uint2ushort(
713 const uint
*in
= (const uint
*)_in
;
714 ushort
*out
= (ushort
*)_out
;
717 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
718 (out
+j
)[0] = (ushort
)in
[i
];
719 (out
+j
)[1] = (ushort
)in
[i
+1/*+(i&1)*/];
720 (out
+j
+2)[0] = (ushort
)in
[i
+1/*+(i&1)*/];
721 (out
+j
+2)[1] = (ushort
)in
[i
+2/*-(i&1)*/];
722 (out
+j
+4)[0] = (ushort
)in
[i
+2/*-(i&1)*/];
723 (out
+j
+4)[1] = (ushort
)in
[i
];
726 static void translate_trifan_uint2ushort(
731 const uint
*in
= (const uint
*)_in
;
732 ushort
*out
= (ushort
*)_out
;
735 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
736 (out
+j
)[0] = (ushort
)in
[0];
737 (out
+j
)[1] = (ushort
)in
[i
+1];
738 (out
+j
+2)[0] = (ushort
)in
[i
+1];
739 (out
+j
+2)[1] = (ushort
)in
[i
+2];
740 (out
+j
+4)[0] = (ushort
)in
[i
+2];
741 (out
+j
+4)[1] = (ushort
)in
[0];
744 static void translate_quads_uint2ushort(
749 const uint
*in
= (const uint
*)_in
;
750 ushort
*out
= (ushort
*)_out
;
753 for (j
= i
= 0; j
< nr
; j
+=8, i
+=4) {
754 (out
+j
)[0] = (ushort
)in
[i
+0];
755 (out
+j
)[1] = (ushort
)in
[i
+1];
756 (out
+j
+2)[0] = (ushort
)in
[i
+1];
757 (out
+j
+2)[1] = (ushort
)in
[i
+2];
758 (out
+j
+4)[0] = (ushort
)in
[i
+2];
759 (out
+j
+4)[1] = (ushort
)in
[i
+3];
760 (out
+j
+6)[0] = (ushort
)in
[i
+3];
761 (out
+j
+6)[1] = (ushort
)in
[i
+0];
764 static void translate_quadstrip_uint2ushort(
769 const uint
*in
= (const uint
*)_in
;
770 ushort
*out
= (ushort
*)_out
;
773 for (j
= i
= 0; j
< nr
; j
+=8, i
+=2) {
774 (out
+j
)[0] = (ushort
)in
[i
+2];
775 (out
+j
)[1] = (ushort
)in
[i
+0];
776 (out
+j
+2)[0] = (ushort
)in
[i
+0];
777 (out
+j
+2)[1] = (ushort
)in
[i
+1];
778 (out
+j
+4)[0] = (ushort
)in
[i
+1];
779 (out
+j
+4)[1] = (ushort
)in
[i
+3];
780 (out
+j
+6)[0] = (ushort
)in
[i
+3];
781 (out
+j
+6)[1] = (ushort
)in
[i
+2];
784 static void translate_polygon_uint2ushort(
789 const uint
*in
= (const uint
*)_in
;
790 ushort
*out
= (ushort
*)_out
;
793 for (j
= i
= 0; j
< nr
; j
+=2, i
++) {
794 (out
+j
)[0] = (ushort
)in
[i
];
795 (out
+j
)[1] = (ushort
)in
[(i
+1)%(nr
/2)];
798 static void translate_tris_uint2uint(
803 const uint
*in
= (const uint
*)_in
;
804 uint
*out
= (uint
*)_out
;
807 for (j
= i
= 0; j
< nr
; j
+=6, i
+=3) {
808 (out
+j
)[0] = (uint
)in
[i
];
809 (out
+j
)[1] = (uint
)in
[i
+1];
810 (out
+j
+2)[0] = (uint
)in
[i
+1];
811 (out
+j
+2)[1] = (uint
)in
[i
+2];
812 (out
+j
+4)[0] = (uint
)in
[i
+2];
813 (out
+j
+4)[1] = (uint
)in
[i
];
816 static void translate_tristrip_uint2uint(
821 const uint
*in
= (const uint
*)_in
;
822 uint
*out
= (uint
*)_out
;
825 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
826 (out
+j
)[0] = (uint
)in
[i
];
827 (out
+j
)[1] = (uint
)in
[i
+1/*+(i&1)*/];
828 (out
+j
+2)[0] = (uint
)in
[i
+1/*+(i&1)*/];
829 (out
+j
+2)[1] = (uint
)in
[i
+2/*-(i&1)*/];
830 (out
+j
+4)[0] = (uint
)in
[i
+2/*-(i&1)*/];
831 (out
+j
+4)[1] = (uint
)in
[i
];
834 static void translate_trifan_uint2uint(
839 const uint
*in
= (const uint
*)_in
;
840 uint
*out
= (uint
*)_out
;
843 for (j
= i
= 0; j
< nr
; j
+=6, i
++) {
844 (out
+j
)[0] = (uint
)in
[0];
845 (out
+j
)[1] = (uint
)in
[i
+1];
846 (out
+j
+2)[0] = (uint
)in
[i
+1];
847 (out
+j
+2)[1] = (uint
)in
[i
+2];
848 (out
+j
+4)[0] = (uint
)in
[i
+2];
849 (out
+j
+4)[1] = (uint
)in
[0];
852 static void translate_quads_uint2uint(
857 const uint
*in
= (const uint
*)_in
;
858 uint
*out
= (uint
*)_out
;
861 for (j
= i
= 0; j
< nr
; j
+=8, i
+=4) {
862 (out
+j
)[0] = (uint
)in
[i
+0];
863 (out
+j
)[1] = (uint
)in
[i
+1];
864 (out
+j
+2)[0] = (uint
)in
[i
+1];
865 (out
+j
+2)[1] = (uint
)in
[i
+2];
866 (out
+j
+4)[0] = (uint
)in
[i
+2];
867 (out
+j
+4)[1] = (uint
)in
[i
+3];
868 (out
+j
+6)[0] = (uint
)in
[i
+3];
869 (out
+j
+6)[1] = (uint
)in
[i
+0];
872 static void translate_quadstrip_uint2uint(
877 const uint
*in
= (const uint
*)_in
;
878 uint
*out
= (uint
*)_out
;
881 for (j
= i
= 0; j
< nr
; j
+=8, i
+=2) {
882 (out
+j
)[0] = (uint
)in
[i
+2];
883 (out
+j
)[1] = (uint
)in
[i
+0];
884 (out
+j
+2)[0] = (uint
)in
[i
+0];
885 (out
+j
+2)[1] = (uint
)in
[i
+1];
886 (out
+j
+4)[0] = (uint
)in
[i
+1];
887 (out
+j
+4)[1] = (uint
)in
[i
+3];
888 (out
+j
+6)[0] = (uint
)in
[i
+3];
889 (out
+j
+6)[1] = (uint
)in
[i
+2];
892 static void translate_polygon_uint2uint(
897 const uint
*in
= (const uint
*)_in
;
898 uint
*out
= (uint
*)_out
;
901 for (j
= i
= 0; j
< nr
; j
+=2, i
++) {
902 (out
+j
)[0] = (uint
)in
[i
];
903 (out
+j
)[1] = (uint
)in
[(i
+1)%(nr
/2)];
906 void u_unfilled_init( void )
908 static int firsttime
= 1;
909 if (!firsttime
) return;
911 generate_line
[OUT_USHORT
][PIPE_PRIM_TRIANGLES
] = generate_tris_ushort
;
912 generate_line
[OUT_USHORT
][PIPE_PRIM_TRIANGLE_FAN
] = generate_trifan_ushort
;
913 generate_line
[OUT_USHORT
][PIPE_PRIM_TRIANGLE_STRIP
] = generate_tristrip_ushort
;
914 generate_line
[OUT_USHORT
][PIPE_PRIM_QUADS
] = generate_quads_ushort
;
915 generate_line
[OUT_USHORT
][PIPE_PRIM_QUAD_STRIP
] = generate_quadstrip_ushort
;
916 generate_line
[OUT_USHORT
][PIPE_PRIM_POLYGON
] = generate_polygon_ushort
;
917 generate_line
[OUT_UINT
][PIPE_PRIM_TRIANGLES
] = generate_tris_uint
;
918 generate_line
[OUT_UINT
][PIPE_PRIM_TRIANGLE_FAN
] = generate_trifan_uint
;
919 generate_line
[OUT_UINT
][PIPE_PRIM_TRIANGLE_STRIP
] = generate_tristrip_uint
;
920 generate_line
[OUT_UINT
][PIPE_PRIM_QUADS
] = generate_quads_uint
;
921 generate_line
[OUT_UINT
][PIPE_PRIM_QUAD_STRIP
] = generate_quadstrip_uint
;
922 generate_line
[OUT_UINT
][PIPE_PRIM_POLYGON
] = generate_polygon_uint
;
923 translate_line
[IN_UBYTE
][OUT_USHORT
][PIPE_PRIM_TRIANGLES
] = translate_tris_ubyte2ushort
;
924 translate_line
[IN_UBYTE
][OUT_USHORT
][PIPE_PRIM_TRIANGLE_FAN
] = translate_trifan_ubyte2ushort
;
925 translate_line
[IN_UBYTE
][OUT_USHORT
][PIPE_PRIM_TRIANGLE_STRIP
] = translate_tristrip_ubyte2ushort
;
926 translate_line
[IN_UBYTE
][OUT_USHORT
][PIPE_PRIM_QUADS
] = translate_quads_ubyte2ushort
;
927 translate_line
[IN_UBYTE
][OUT_USHORT
][PIPE_PRIM_QUAD_STRIP
] = translate_quadstrip_ubyte2ushort
;
928 translate_line
[IN_UBYTE
][OUT_USHORT
][PIPE_PRIM_POLYGON
] = translate_polygon_ubyte2ushort
;
929 translate_line
[IN_UBYTE
][OUT_UINT
][PIPE_PRIM_TRIANGLES
] = translate_tris_ubyte2uint
;
930 translate_line
[IN_UBYTE
][OUT_UINT
][PIPE_PRIM_TRIANGLE_FAN
] = translate_trifan_ubyte2uint
;
931 translate_line
[IN_UBYTE
][OUT_UINT
][PIPE_PRIM_TRIANGLE_STRIP
] = translate_tristrip_ubyte2uint
;
932 translate_line
[IN_UBYTE
][OUT_UINT
][PIPE_PRIM_QUADS
] = translate_quads_ubyte2uint
;
933 translate_line
[IN_UBYTE
][OUT_UINT
][PIPE_PRIM_QUAD_STRIP
] = translate_quadstrip_ubyte2uint
;
934 translate_line
[IN_UBYTE
][OUT_UINT
][PIPE_PRIM_POLYGON
] = translate_polygon_ubyte2uint
;
935 translate_line
[IN_USHORT
][OUT_USHORT
][PIPE_PRIM_TRIANGLES
] = translate_tris_ushort2ushort
;
936 translate_line
[IN_USHORT
][OUT_USHORT
][PIPE_PRIM_TRIANGLE_FAN
] = translate_trifan_ushort2ushort
;
937 translate_line
[IN_USHORT
][OUT_USHORT
][PIPE_PRIM_TRIANGLE_STRIP
] = translate_tristrip_ushort2ushort
;
938 translate_line
[IN_USHORT
][OUT_USHORT
][PIPE_PRIM_QUADS
] = translate_quads_ushort2ushort
;
939 translate_line
[IN_USHORT
][OUT_USHORT
][PIPE_PRIM_QUAD_STRIP
] = translate_quadstrip_ushort2ushort
;
940 translate_line
[IN_USHORT
][OUT_USHORT
][PIPE_PRIM_POLYGON
] = translate_polygon_ushort2ushort
;
941 translate_line
[IN_USHORT
][OUT_UINT
][PIPE_PRIM_TRIANGLES
] = translate_tris_ushort2uint
;
942 translate_line
[IN_USHORT
][OUT_UINT
][PIPE_PRIM_TRIANGLE_FAN
] = translate_trifan_ushort2uint
;
943 translate_line
[IN_USHORT
][OUT_UINT
][PIPE_PRIM_TRIANGLE_STRIP
] = translate_tristrip_ushort2uint
;
944 translate_line
[IN_USHORT
][OUT_UINT
][PIPE_PRIM_QUADS
] = translate_quads_ushort2uint
;
945 translate_line
[IN_USHORT
][OUT_UINT
][PIPE_PRIM_QUAD_STRIP
] = translate_quadstrip_ushort2uint
;
946 translate_line
[IN_USHORT
][OUT_UINT
][PIPE_PRIM_POLYGON
] = translate_polygon_ushort2uint
;
947 translate_line
[IN_UINT
][OUT_USHORT
][PIPE_PRIM_TRIANGLES
] = translate_tris_uint2ushort
;
948 translate_line
[IN_UINT
][OUT_USHORT
][PIPE_PRIM_TRIANGLE_FAN
] = translate_trifan_uint2ushort
;
949 translate_line
[IN_UINT
][OUT_USHORT
][PIPE_PRIM_TRIANGLE_STRIP
] = translate_tristrip_uint2ushort
;
950 translate_line
[IN_UINT
][OUT_USHORT
][PIPE_PRIM_QUADS
] = translate_quads_uint2ushort
;
951 translate_line
[IN_UINT
][OUT_USHORT
][PIPE_PRIM_QUAD_STRIP
] = translate_quadstrip_uint2ushort
;
952 translate_line
[IN_UINT
][OUT_USHORT
][PIPE_PRIM_POLYGON
] = translate_polygon_uint2ushort
;
953 translate_line
[IN_UINT
][OUT_UINT
][PIPE_PRIM_TRIANGLES
] = translate_tris_uint2uint
;
954 translate_line
[IN_UINT
][OUT_UINT
][PIPE_PRIM_TRIANGLE_FAN
] = translate_trifan_uint2uint
;
955 translate_line
[IN_UINT
][OUT_UINT
][PIPE_PRIM_TRIANGLE_STRIP
] = translate_tristrip_uint2uint
;
956 translate_line
[IN_UINT
][OUT_UINT
][PIPE_PRIM_QUADS
] = translate_quads_uint2uint
;
957 translate_line
[IN_UINT
][OUT_UINT
][PIPE_PRIM_QUAD_STRIP
] = translate_quadstrip_uint2uint
;
958 translate_line
[IN_UINT
][OUT_UINT
][PIPE_PRIM_POLYGON
] = translate_polygon_uint2uint
;
960 #include "indices/u_unfilled_indices.c"