[Mesa-dev] [PATCH 8/8] svga: add some comments about primitive conversion

Brian Paul brianp at vmware.com
Wed Jun 19 09:40:00 PDT 2013


And clean up the svga_translate_prim() function with better
variable names.
---
 src/gallium/drivers/svga/svga_draw_arrays.c  |    5 ++++
 src/gallium/drivers/svga/svga_draw_private.h |   32 +++++++++++++++++---------
 2 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/src/gallium/drivers/svga/svga_draw_arrays.c b/src/gallium/drivers/svga/svga_draw_arrays.c
index a506371..7adefd0 100644
--- a/src/gallium/drivers/svga/svga_draw_arrays.c
+++ b/src/gallium/drivers/svga/svga_draw_arrays.c
@@ -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,
diff --git a/src/gallium/drivers/svga/svga_draw_private.h b/src/gallium/drivers/svga/svga_draw_private.h
index 8126f7e..1b05403 100644
--- a/src/gallium/drivers/svga/svga_draw_private.h
+++ b/src/gallium/drivers/svga/svga_draw_private.h
@@ -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;
    }
 }
-- 
1.7.10.4



More information about the mesa-dev mailing list