mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
svga: add some comments about primitive conversion
And clean up the svga_translate_prim() function with better variable names. Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
8b3d4efed8
commit
1e16e48f88
2 changed files with 26 additions and 11 deletions
|
|
@ -225,6 +225,7 @@ svga_hwtnl_draw_arrays( struct svga_hwtnl *hwtnl,
|
|||
if (hwtnl->api_fillmode != PIPE_POLYGON_MODE_FILL &&
|
||||
prim >= PIPE_PRIM_TRIANGLES)
|
||||
{
|
||||
/* Convert unfilled polygons into points, lines, triangles */
|
||||
gen_type = u_unfilled_generator( prim,
|
||||
start,
|
||||
count,
|
||||
|
|
@ -235,6 +236,10 @@ svga_hwtnl_draw_arrays( struct svga_hwtnl *hwtnl,
|
|||
&gen_func );
|
||||
}
|
||||
else {
|
||||
/* Convert PIPE_PRIM_LINE_LOOP to PIPE_PRIM_LINESTRIP,
|
||||
* convert PIPE_PRIM_POLYGON to PIPE_PRIM_TRIANGLE_FAN,
|
||||
* etc, if needed (as determined by svga_hw_prims mask).
|
||||
*/
|
||||
gen_type = u_index_generator( svga_hw_prims,
|
||||
prim,
|
||||
start,
|
||||
|
|
|
|||
|
|
@ -35,7 +35,10 @@
|
|||
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) |
|
||||
|
|
@ -46,38 +49,45 @@ static const unsigned svga_hw_prims =
|
|||
(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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue