struct svga_context;
struct u_upload_mgr;
-/* Should include polygon?
+/**
+ * Mask indicating which types of gallium primitives are actually
+ * handled by the svga device. Other types will be converted to
+ * these types by the index/translation code.
*/
static const unsigned svga_hw_prims =
((1 << PIPE_PRIM_POINTS) |
(1 << PIPE_PRIM_TRIANGLE_FAN));
-static INLINE unsigned svga_translate_prim(unsigned mode,
- unsigned count,
- unsigned *out_count)
+/**
+ * Translate a gallium PIPE_PRIM_x value to an SVGA3D_PRIMITIVE_x value.
+ * Also, compute the number of primitives that'll be drawn given a
+ * vertex count.
+ * Note that this function doesn't have to handle PIPE_PRIM_LINE_LOOP,
+ * PIPE_PRIM_QUADS, PIPE_PRIM_QUAD_STRIP or PIPE_PRIM_POLYGON. We convert
+ * those to other types of primitives with index/translation code.
+ */
+static inline unsigned
+svga_translate_prim(unsigned mode, unsigned vcount,unsigned *prim_count)
{
switch (mode) {
case PIPE_PRIM_POINTS:
- *out_count = count;
+ *prim_count = vcount;
return SVGA3D_PRIMITIVE_POINTLIST;
case PIPE_PRIM_LINES:
- *out_count = count / 2;
+ *prim_count = vcount / 2;
return SVGA3D_PRIMITIVE_LINELIST;
case PIPE_PRIM_LINE_STRIP:
- *out_count = count - 1;
+ *prim_count = vcount - 1;
return SVGA3D_PRIMITIVE_LINESTRIP;
case PIPE_PRIM_TRIANGLES:
- *out_count = count / 3;
+ *prim_count = vcount / 3;
return SVGA3D_PRIMITIVE_TRIANGLELIST;
case PIPE_PRIM_TRIANGLE_STRIP:
- *out_count = count - 2;
+ *prim_count = vcount - 2;
return SVGA3D_PRIMITIVE_TRIANGLESTRIP;
case PIPE_PRIM_TRIANGLE_FAN:
- *out_count = count - 2;
+ *prim_count = vcount - 2;
return SVGA3D_PRIMITIVE_TRIANGLEFAN;
default:
assert(0);
- *out_count = 0;
+ *prim_count = 0;
return 0;
}
}