#include "pipe/p_compiler.h"
+/* First/last provoking vertex */
#define PV_FIRST 0
#define PV_LAST 1
#define PV_COUNT 2
#define PR_DISABLE 0
#define PR_ENABLE 1
#define PR_COUNT 2
+
+
/**
* Index translator function (for glDrawElements() case)
*
* \param in the input index buffer
* \param start the index of the first vertex (pipe_draw_info::start)
* \param nr the number of vertices (pipe_draw_info::count)
- * \param out output buffer big enough or nr vertices (of
+ * \param out output buffer big enough for nr vertices (of
* @out_index_size bytes each)
*/
typedef void (*u_translate_func)( const void *in,
*
* \param start the index of the first vertex (pipe_draw_info::start)
* \param nr the number of vertices (pipe_draw_info::count)
- * \param out output buffer big enough or nr vertices (of
+ * \param out output buffer big enough for nr vertices (of
* @out_index_size bytes each)
*/
typedef void (*u_generate_func)( unsigned start,
void u_index_init( void );
+
+/**
+ * For indexed drawing, this function determines what kind of primitive
+ * transformation is needed (if any) for handling:
+ * - unsupported primitive types (such as PIPE_PRIM_POLYGON)
+ * - changing the provoking vertex
+ * - primitive restart
+ * - index size (1 byte, 2 byte or 4 byte indexes)
+ */
enum indices_mode
u_index_translator(unsigned hw_mask,
unsigned prim,
unsigned *out_nr,
u_translate_func *out_translate);
-/* Note that even when generating it is necessary to know what the
+
+/**
+ * For non-indexed drawing, this function determines what kind of primitive
+ * transformation is needed (see above).
+ *
+ * Note that even when generating it is necessary to know what the
* API's PV is, as the indices generated will depend on whether it is
* the same as hardware or not, and in the case of triangle strips,
* whether it is first or last.
void u_unfilled_init( void );
+/**
+ * If the driver can't handle "unfilled" primitives (i.e. drawing triangle
+ * primitives as 3 lines or 3 points) this function can be used to translate
+ * an indexed primitive into a new indexed primitive to draw as lines or
+ * points.
+ */
enum indices_mode
u_unfilled_translator(unsigned prim,
unsigned in_index_size,
unsigned *out_nr,
u_translate_func *out_translate);
+/**
+ * As above, but for non-indexed (array) primitives.
+ */
enum indices_mode
u_unfilled_generator(unsigned prim,
unsigned start,