'tristrip',
'quads',
'quadstrip',
- 'polygon')
+ 'polygon',
+ 'trisadj',
+ 'tristripadj')
LONGPRIMS=('PIPE_PRIM_TRIANGLES',
'PIPE_PRIM_TRIANGLE_FAN',
'PIPE_PRIM_TRIANGLE_STRIP',
'PIPE_PRIM_QUADS',
'PIPE_PRIM_QUAD_STRIP',
- 'PIPE_PRIM_POLYGON')
+ 'PIPE_PRIM_POLYGON',
+ 'PIPE_PRIM_TRIANGLES_ADJACENCY',
+ 'PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY')
longprim = dict(zip(PRIMS, LONGPRIMS))
intype_idx = dict(ubyte='IN_UBYTE', ushort='IN_USHORT', uint='IN_UINT')
postamble()
+def trisadj(intype, outtype):
+ preamble(intype, outtype, prim='trisadj')
+ print ' for (i = start, j = 0; j < out_nr; j+=6, i+=6) { '
+ do_tri( intype, outtype, 'out+j', 'i', 'i+2', 'i+4' );
+ print ' }'
+ postamble()
+
+
+def tristripadj(intype, outtype):
+ preamble(intype, outtype, prim='tristripadj')
+ print ' for (i = start, j = 0; j < out_nr; j+=6, i+=2) { '
+ do_tri( intype, outtype, 'out+j', 'i', 'i+2', 'i+4' );
+ print ' }'
+ postamble()
+
+
def emit_funcs():
for intype in INTYPES:
for outtype in OUTTYPES:
quads(intype, outtype)
quadstrip(intype, outtype)
polygon(intype, outtype)
+ trisadj(intype, outtype)
+ tristripadj(intype, outtype)
def init(intype, outtype, prim):
if intype == GENERATE:
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+
+/*
+ * NOTE: This file is not compiled by itself. It's actually #included
+ * by the generated u_unfilled_gen.c file!
+ */
+
#include "u_indices.h"
#include "u_indices_priv.h"
#include "util/u_prim.h"
return (nr - 2) / 2 * 8;
case PIPE_PRIM_POLYGON:
return 2 * nr; /* a line (two verts) for each polygon edge */
+ /* Note: these cases can't really be handled since drawing lines instead
+ * of triangles would also require changing the GS. But if there's no GS,
+ * this should work.
+ */
+ case PIPE_PRIM_TRIANGLES_ADJACENCY:
+ return (nr / 6) * 6;
+ case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
+ return ((nr - 4) / 2) * 6;
default:
assert(0);
return 0;