draw: move pt_pipeline code to draw_pipe.c
authorKeith Whitwell <keith@tungstengraphics.com>
Sat, 19 Apr 2008 15:39:24 +0000 (16:39 +0100)
committerKeith Whitwell <keith@tungstengraphics.com>
Sat, 19 Apr 2008 15:39:43 +0000 (16:39 +0100)
This is now the drawing interface to the pipeline.  No more
calling into pipeline.first->tri(), etc.

src/gallium/auxiliary/draw/Makefile
src/gallium/auxiliary/draw/SConscript
src/gallium/auxiliary/draw/draw_pipe.c
src/gallium/auxiliary/draw/draw_private.h
src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline.c
src/gallium/auxiliary/draw/draw_pt_pipeline.c [deleted file]

index 4fffd11b77044ce20a19bfa83d1ad71d1f471e74..5289f2660afdccce051e967701da7496b7663f97 100644 (file)
@@ -26,7 +26,6 @@ C_SOURCES = \
        draw_pt_fetch.c \
        draw_pt_fetch_emit.c \
        draw_pt_fetch_shade_pipeline.c \
-       draw_pt_pipeline.c \
        draw_pt_post_vs.c \
        draw_pt_vcache.c \
        draw_vertex.c \
index 5fa35d3005610204f3fccff3298c76ee935dddcd..6f3ca4fa49c988cbf241e633693461c57568cc9c 100644 (file)
@@ -25,7 +25,6 @@ draw = env.ConvenienceLibrary(
                'draw_pt_fetch.c',
                'draw_pt_fetch_emit.c',
                'draw_pt_fetch_shade_pipeline.c',
-               'draw_pt_pipeline.c',
                'draw_pt_post_vs.c',
                'draw_pt_vcache.c',
                'draw_vs.c',
index 9d62cb2c650de326f16607d297d9ef67a762637a..b18b747d9cea89de3be5fcea2595bd09b31618f8 100644 (file)
@@ -35,6 +35,7 @@
 #include "draw/draw_pipe.h"
 
 
+
 boolean draw_pipeline_init( struct draw_context *draw )
 {
    /* create pipeline stages */
@@ -142,6 +143,60 @@ void draw_free_temp_verts( struct draw_stage *stage )
    }
 }
 
+
+
+static void do_point( struct draw_context *draw,
+                     const char *v0 )
+{
+   struct prim_header prim;
+   
+   prim.reset_line_stipple = 0;
+   prim.edgeflags = 1;
+   prim.pad = 0;
+   prim.v[0] = (struct vertex_header *)v0;
+
+   draw->pipeline.first->point( draw->pipeline.first, &prim );
+}
+
+
+static void do_line( struct draw_context *draw,
+                    const char *v0,
+                    const char *v1 )
+{
+   struct prim_header prim;
+   
+   prim.reset_line_stipple = 1; /* fixme */
+   prim.edgeflags = 1;
+   prim.pad = 0;
+   prim.v[0] = (struct vertex_header *)v0;
+   prim.v[1] = (struct vertex_header *)v1;
+
+   draw->pipeline.first->line( draw->pipeline.first, &prim );
+}
+
+
+static void do_triangle( struct draw_context *draw,
+                        char *v0,
+                        char *v1,
+                        char *v2 )
+{
+   struct prim_header prim;
+   
+   prim.v[0] = (struct vertex_header *)v0;
+   prim.v[1] = (struct vertex_header *)v1;
+   prim.v[2] = (struct vertex_header *)v2;
+   prim.reset_line_stipple = 1;
+   prim.edgeflags = ((prim.v[0]->edgeflag)      |
+                     (prim.v[1]->edgeflag << 1) |
+                     (prim.v[2]->edgeflag << 2));
+   prim.pad = 0;
+
+   draw->pipeline.first->tri( draw->pipeline.first, &prim );
+}
+
+
+/* Reset vertex ids.  This is basically a type of flush.
+ */
 void draw_reset_vertex_ids(struct draw_context *draw)
 {
    struct draw_stage *stage = draw->pipeline.first;
@@ -155,7 +210,67 @@ void draw_reset_vertex_ids(struct draw_context *draw)
       stage = stage->next;
    }
 
-   draw_pt_reset_vertex_ids(draw);
+   if (draw->pipeline.verts)
+   {
+      unsigned i;
+      char *verts = draw->pipeline.verts;
+      unsigned stride = draw->pipeline.vertex_stride;
+
+      for (i = 0; i < draw->pipeline.vertex_count; i++) {
+         ((struct vertex_header *)verts)->vertex_id = UNDEFINED_VERTEX_ID;
+         verts += stride;
+      }
+   }
 }
 
 
+/* Code to run the pipeline on a fairly arbitary collection of vertices.
+ *
+ * Vertex headers must be pre-initialized with the
+ * UNDEFINED_VERTEX_ID, this code will cause that id to become
+ * overwritten, so it may have to be reset if there is the intention
+ * to reuse the vertices.
+ *
+ * This code provides a callback to reset the vertex id's which the
+ * draw_vbuf.c code uses when it has to perform a flush.
+ */
+void draw_pipeline_run( struct draw_context *draw,
+                        unsigned prim,
+                        struct vertex_header *vertices,
+                        unsigned vertex_count,
+                        unsigned stride,
+                        const ushort *elts,
+                        unsigned count )
+{
+   char *verts = (char *)vertices;
+   unsigned i;
+
+   draw->pipeline.verts = verts;
+   draw->pipeline.vertex_stride = stride;
+   draw->pipeline.vertex_count = vertex_count;
+   
+   switch (prim) {
+   case PIPE_PRIM_POINTS:
+      for (i = 0; i < count; i++) 
+         do_point( draw, 
+                   verts + stride * elts[i] );
+      break;
+   case PIPE_PRIM_LINES:
+      for (i = 0; i+1 < count; i += 2) 
+         do_line( draw, 
+                  verts + stride * elts[i+0],
+                  verts + stride * elts[i+1]);
+      break;
+   case PIPE_PRIM_TRIANGLES:
+      for (i = 0; i+2 < count; i += 3)
+         do_triangle( draw, 
+                      verts + stride * elts[i+0],
+                      verts + stride * elts[i+1],
+                      verts + stride * elts[i+2]);
+      break;
+   }
+   
+   draw->pipeline.verts = NULL;
+   draw->pipeline.vertex_count = 0;
+}
+
index b2b2f82b8ffb37b1bc103726995f555d353472c5..4d123cf8d9ca6612c69f23b18b90a3bd37b7708c 100644 (file)
@@ -128,6 +128,11 @@ struct draw_context
       boolean line_stipple;       /**< do line stipple? */
       boolean point_sprite;       /**< convert points to quads for sprites? */
 
+      /* Temporary storage while the pipeline is being run:
+       */
+      char *verts;
+      unsigned vertex_stride;
+      unsigned vertex_count;
    } pipeline;
 
 
@@ -144,13 +149,6 @@ struct draw_context
       struct {
          struct draw_pt_front_end *vcache;
       } front;
-
-      struct {
-         char *verts;
-         unsigned vertex_stride;
-         unsigned vertex_count;
-      } pipeline;
-
    } pt;
 
    boolean flushing;
@@ -235,10 +233,22 @@ void draw_pt_reset_vertex_ids( struct draw_context *draw );
 boolean draw_pipeline_init( struct draw_context *draw );
 void draw_pipeline_destroy( struct draw_context *draw );
 
+void draw_pipeline_run( struct draw_context *draw,
+                        unsigned prim,
+                        struct vertex_header *vertices,
+                        unsigned vertex_count,
+                        unsigned stride,
+                        const ushort *elts,
+                        unsigned count );
+
 boolean draw_need_pipeline(const struct draw_context *draw,
                            unsigned prim );
 
 
+/*******************************************************************************
+ * Flushing 
+ */
+
 #define DRAW_FLUSH_STATE_CHANGE              0x8
 #define DRAW_FLUSH_BACKEND                   0x10
 
index 560f1bcd92f7a7acc52626310829ee40a0a3801b..a47693ba2050cf5d569fee364b896e150c925d27 100644 (file)
@@ -148,13 +148,13 @@ static void fetch_pipeline_run( struct draw_pt_middle_end *middle,
    /* Do we need to run the pipeline?
     */
    if (opt & PT_PIPELINE) {
-      draw_pt_run_pipeline( fpme->draw,
-                            fpme->prim,
-                            pipeline_verts,
-                            fetch_count,
-                            fpme->vertex_size,
-                            draw_elts,
-                            draw_count );
+      draw_pipeline_run( fpme->draw,
+                         fpme->prim,
+                         pipeline_verts,
+                         fetch_count,
+                         fpme->vertex_size,
+                         draw_elts,
+                         draw_count );
    } 
    else {
       draw_pt_emit( fpme->emit,
diff --git a/src/gallium/auxiliary/draw/draw_pt_pipeline.c b/src/gallium/auxiliary/draw/draw_pt_pipeline.c
deleted file mode 100644 (file)
index 922344e..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- * 
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- * 
- **************************************************************************/
-
- /*
-  * Authors:
-  *   Keith Whitwell <keith@tungstengraphics.com>
-  */
-
-#include "pipe/p_util.h"
-#include "draw/draw_context.h"
-#include "draw/draw_private.h"
-#include "draw/draw_vertex.h"
-#include "draw/draw_pt.h"
-#include "draw/draw_pipe.h"
-
-static void do_point( struct draw_context *draw,
-                     const char *v0 )
-{
-   struct prim_header prim;
-   
-   prim.reset_line_stipple = 0;
-   prim.edgeflags = 1;
-   prim.pad = 0;
-   prim.v[0] = (struct vertex_header *)v0;
-
-   draw->pipeline.first->point( draw->pipeline.first, &prim );
-}
-
-
-static void do_line( struct draw_context *draw,
-                    const char *v0,
-                    const char *v1 )
-{
-   struct prim_header prim;
-   
-   prim.reset_line_stipple = 1; /* fixme */
-   prim.edgeflags = 1;
-   prim.pad = 0;
-   prim.v[0] = (struct vertex_header *)v0;
-   prim.v[1] = (struct vertex_header *)v1;
-
-   draw->pipeline.first->line( draw->pipeline.first, &prim );
-}
-
-
-static void do_triangle( struct draw_context *draw,
-                        char *v0,
-                        char *v1,
-                        char *v2 )
-{
-   struct prim_header prim;
-   
-   prim.v[0] = (struct vertex_header *)v0;
-   prim.v[1] = (struct vertex_header *)v1;
-   prim.v[2] = (struct vertex_header *)v2;
-   prim.reset_line_stipple = 1;
-   prim.edgeflags = ((prim.v[0]->edgeflag)      |
-                     (prim.v[1]->edgeflag << 1) |
-                     (prim.v[2]->edgeflag << 2));
-   prim.pad = 0;
-
-   if (0) debug_printf("tri ef: %d %d %d\n", 
-                       prim.v[0]->edgeflag,
-                       prim.v[1]->edgeflag,
-                       prim.v[2]->edgeflag);
-   
-   draw->pipeline.first->tri( draw->pipeline.first, &prim );
-}
-
-
-
-void draw_pt_reset_vertex_ids( struct draw_context *draw )
-{
-   unsigned i;
-   char *verts = draw->pt.pipeline.verts;
-   unsigned stride = draw->pt.pipeline.vertex_stride;
-
-   for (i = 0; i < draw->pt.pipeline.vertex_count; i++) {
-      ((struct vertex_header *)verts)->vertex_id = UNDEFINED_VERTEX_ID;
-      verts += stride;
-   }
-}
-
-
-/* Code to run the pipeline on a fairly arbitary collection of vertices.
- *
- * Vertex headers must be pre-initialized with the
- * UNDEFINED_VERTEX_ID, this code will cause that id to become
- * overwritten, so it may have to be reset if there is the intention
- * to reuse the vertices.
- *
- * This code provides a callback to reset the vertex id's which the
- * draw_vbuf.c code uses when it has to perform a flush.
- */
-void draw_pt_run_pipeline( struct draw_context *draw,
-                           unsigned prim,
-                           struct vertex_header *pipeline_verts,
-                           unsigned vertex_count,
-                           unsigned stride,
-                           const ushort *elts,
-                           unsigned count )
-{
-   char *verts = (char *)pipeline_verts;
-   unsigned i;
-
-   draw->pt.pipeline.verts = verts;
-   draw->pt.pipeline.vertex_stride = stride;
-   draw->pt.pipeline.vertex_count = vertex_count;
-   
-   switch (prim) {
-   case PIPE_PRIM_POINTS:
-      for (i = 0; i < count; i++) 
-         do_point( draw, 
-                   verts + stride * elts[i] );
-      break;
-   case PIPE_PRIM_LINES:
-      for (i = 0; i+1 < count; i += 2) 
-         do_line( draw, 
-                  verts + stride * elts[i+0],
-                  verts + stride * elts[i+1]);
-      break;
-   case PIPE_PRIM_TRIANGLES:
-      for (i = 0; i+2 < count; i += 3)
-         do_triangle( draw, 
-                      verts + stride * elts[i+0],
-                      verts + stride * elts[i+1],
-                      verts + stride * elts[i+2]);
-      break;
-   }
-   
-   draw->pt.pipeline.verts = NULL;
-   draw->pt.pipeline.vertex_count = 0;
-}
-