Reorganize user-space vertex fields in draw_context into 'user' group.
authorBrian <brian.paul@tungstengraphics.com>
Fri, 9 Nov 2007 00:07:12 +0000 (17:07 -0700)
committerBrian <brian.paul@tungstengraphics.com>
Fri, 9 Nov 2007 00:07:12 +0000 (17:07 -0700)
This sub-struct collects the incoming user-provided data/pointers in one place.
Ex: draw->mapped_vbuffer becomes draw->user.vbuffer, etc.

src/mesa/pipe/draw/draw_context.c
src/mesa/pipe/draw/draw_feedback.c
src/mesa/pipe/draw/draw_prim.c
src/mesa/pipe/draw/draw_private.h
src/mesa/pipe/draw/draw_vertex_cache.c
src/mesa/pipe/draw/draw_vertex_fetch.c
src/mesa/pipe/draw/draw_vertex_shader.c
src/mesa/pipe/draw/draw_vertex_shader_llvm.c

index 0de8bed52974d1f3fb61b05f90b88af9aa703513..4f6392605ec04700a56d3c7ca962e423b97f3f29 100644 (file)
@@ -196,7 +196,7 @@ draw_set_mapped_vertex_buffer(struct draw_context *draw,
 {
    draw_flush( draw );
 
-   draw->mapped_vbuffer[attr] = buffer;
+   draw->user.vbuffer[attr] = buffer;
 }
 
 
@@ -206,7 +206,7 @@ draw_set_mapped_constant_buffer(struct draw_context *draw,
 {
    draw_flush( draw );
 
-   draw->mapped_constants = buffer;
+   draw->user.constants = buffer;
 }
 
 
@@ -217,8 +217,8 @@ draw_set_mapped_feedback_buffer(struct draw_context *draw, uint index,
    draw_flush( draw );
 
    assert(index < PIPE_MAX_FEEDBACK_ATTRIBS);
-   draw->mapped_feedback_buffer[index] = buffer;
-   draw->mapped_feedback_buffer_size[index] = size; /* in bytes */
+   draw->user.feedback_buffer[index] = buffer;
+   draw->user.feedback_buffer_size[index] = size; /* in bytes */
 }
 
 
index ee54db0ad5c1cd0121a48697a082b5f55352570b..b9906e5b4b0348fed983490ac6e76c2d93c99d29 100644 (file)
@@ -128,20 +128,20 @@ static void feedback_begin( struct draw_stage *stage )
          vertex_size += feedback->size[i];
       }
       /* compute max number of vertices we can feedback */
-      fs->max_vert_emit = stage->draw->mapped_feedback_buffer_size[0]
+      fs->max_vert_emit = stage->draw->user.feedback_buffer_size[0]
          / sizeof(float) / vertex_size;
 
-      fs->dest[0] = (float *) stage->draw->mapped_feedback_buffer[0];
+      fs->dest[0] = (float *) stage->draw->user.feedback_buffer[0];
    }
    else {
       uint i;
       uint max = ~0;
       for (i = 0; i < feedback->num_attribs; i++) {
-         uint n = stage->draw->mapped_feedback_buffer_size[i]
+         uint n = stage->draw->user.feedback_buffer_size[i]
             / sizeof(float) / feedback->size[i];
          if (n < max)
             max = n;
-         fs->dest[i] = (float *) stage->draw->mapped_feedback_buffer[i];
+         fs->dest[i] = (float *) stage->draw->user.feedback_buffer[i];
       }
       fs->max_vert_emit = max;
    }
index baae6e98c54db632a1190e1461ba47f37fd082f8..e4a65b9f243ea05c187d80492e9cb0cd189a1f63 100644 (file)
@@ -64,7 +64,7 @@ static void draw_prim_queue_flush( struct draw_context *draw )
       printf("Flushing with %d prims, %d verts\n",
              draw->pq.queue_nr, draw->vs.queue_nr);
 
-   /* Make sure all vertices are available:
+   /* Make sure all vertices are available/shaded:
     */
    if (draw->vs.queue_nr)
       draw_vertex_shader_queue_flush(draw);
index 89d292901e9ed06a4874e9ad221edf78449e12ef..03b48aa93cec94fe4eeadbd1cf15d18b49fdf6fe 100644 (file)
@@ -178,17 +178,23 @@ struct draw_context
    struct pipe_vertex_buffer feedback_buffer[PIPE_ATTRIB_MAX];
    struct pipe_vertex_element feedback_element[PIPE_ATTRIB_MAX];
 
-   /** The mapped vertex element/index buffer */
-   const void *mapped_elts;
-   unsigned eltSize;  /**< bytes per index (0, 1, 2 or 4) */
-   /** The mapped vertex arrays */
-   const void *mapped_vbuffer[PIPE_ATTRIB_MAX];
-   /** The mapped constant buffers (for vertex shader) */
-   const void *mapped_constants;
-
-   /** The mapped vertex element/index buffer */
-   void *mapped_feedback_buffer[PIPE_MAX_FEEDBACK_ATTRIBS];
-   uint mapped_feedback_buffer_size[PIPE_MAX_FEEDBACK_ATTRIBS]; /* in bytes */
+   /* user-space vertex data, buffers */
+   struct {
+      /** vertex element/index buffer (ex: glDrawElements) */
+      const void *elts;
+      /** bytes per index (0, 1, 2 or 4) */
+      unsigned eltSize;
+
+      /** vertex arrays */
+      const void *vbuffer[PIPE_ATTRIB_MAX];
+
+      /** constant buffer (for vertex shader) */
+      const void *constants;
+
+      /** The vertex feedback buffer */
+      void *feedback_buffer[PIPE_MAX_FEEDBACK_ATTRIBS];
+      uint feedback_buffer_size[PIPE_MAX_FEEDBACK_ATTRIBS]; /* in bytes */
+   } user;
 
    /* Clip derived state:
     */
@@ -216,6 +222,7 @@ struct draw_context
       struct vertex_header *vertex[VCACHE_SIZE + VCACHE_OVERFLOW];
       unsigned overflow;
 
+      /** To find space in the vertex cache: */
       struct vertex_header *(*get_vertex)( struct draw_context *draw,
                                            unsigned i );
    } vcache;
@@ -233,7 +240,6 @@ struct draw_context
    /* Prim pipeline queue:
     */
    struct {
-
       /* Need to queue up primitives until their vertices have been
        * transformed by a vs queue flush.
        */
index 6689907ddfe9580307f3f2599b0c00ceb24453ed..29993f14d2f0176cd40872cb292c030218d3e06f 100644 (file)
@@ -51,8 +51,15 @@ void draw_vertex_cache_invalidate( struct draw_context *draw )
 }
 
 
-/* Check if vertex is in cache, otherwise add it.  It won't go through
+/**
+ * Check if vertex is in cache, otherwise add it.  It won't go through
  * VS yet, not until there is a flush operation or the VS queue fills up.  
+ *
+ * Note that cache entries are basically just two pointers: the first
+ * an index into the user's vertex arrays, the second a location in
+ * the vertex shader cache for the post-transformed vertex.
+ *
+ * \return pointer to location of (post-transformed) vertex header in the cache
  */
 static struct vertex_header *get_vertex( struct draw_context *draw,
                                         unsigned i )
@@ -104,7 +111,7 @@ static struct vertex_header *get_vertex( struct draw_context *draw,
 static struct vertex_header *get_uint_elt_vertex( struct draw_context *draw,
                                                   unsigned i )
 {
-   const unsigned *elts = (const unsigned *) draw->mapped_elts;
+   const unsigned *elts = (const unsigned *) draw->user.elts;
    return get_vertex( draw, elts[i] );
 }
 
@@ -112,7 +119,7 @@ static struct vertex_header *get_uint_elt_vertex( struct draw_context *draw,
 static struct vertex_header *get_ushort_elt_vertex( struct draw_context *draw,
                                                    unsigned i )
 {
-   const ushort *elts = (const ushort *) draw->mapped_elts;
+   const ushort *elts = (const ushort *) draw->user.elts;
    return get_vertex( draw, elts[i] );
 }
 
@@ -120,7 +127,7 @@ static struct vertex_header *get_ushort_elt_vertex( struct draw_context *draw,
 static struct vertex_header *get_ubyte_elt_vertex( struct draw_context *draw,
                                                    unsigned i )
 {
-   const ubyte *elts = (const ubyte *) draw->mapped_elts;
+   const ubyte *elts = (const ubyte *) draw->user.elts;
    return get_vertex( draw, elts[i] );
 }
 
@@ -189,7 +196,7 @@ draw_set_mapped_element_buffer( struct draw_context *draw,
    default:
       assert(0);
    }
-   draw->mapped_elts = elements;
-   draw->eltSize = eltSize;
+   draw->user.elts = elements;
+   draw->user.eltSize = eltSize;
 }
 
index 5a7e6febe9d9a56995d6536203ac8eff14293363..eca10e89fbb4cd31d7f4b02bed75b06135fd829e 100644 (file)
@@ -103,7 +103,7 @@ void draw_vertex_fetch( struct draw_context *draw,
 
          unsigned buf = draw->vertex_element[attr].vertex_buffer_index;
          const void *src
-            = (const void *) ((const ubyte *) draw->mapped_vbuffer[buf]
+            = (const void *) ((const ubyte *) draw->user.vbuffer[buf]
                               + draw->vertex_buffer[buf].buffer_offset
                               + draw->vertex_element[attr].src_offset
                               + elts[j] * draw->vertex_buffer[buf].pitch);
index 529ed288eb1f7d4df0e585fae4a55e240d2b7a12..e8801addac3401b3e6c6b835fe03786a7dd6259a 100644 (file)
@@ -93,7 +93,7 @@ run_vertex_program(struct draw_context *draw,
           == TGSI_SEMANTIC_POSITION);
 
    /* Consts does not require 16 byte alignment. */
-   machine->Consts = (float (*)[4]) draw->mapped_constants;
+   machine->Consts = (float (*)[4]) draw->user.constants;
 
    machine->Inputs = ALIGN16_ASSIGN(inputs);
    machine->Outputs = ALIGN16_ASSIGN(outputs);
@@ -179,8 +179,8 @@ run_vertex_program(struct draw_context *draw,
 
 
 /**
+ * Run the vertex shader on all vertices in the vertex queue.
  * Called by the draw module when the vertx cache needs to be flushed.
- * This involves running the vertex shader.
  */
 void draw_vertex_shader_queue_flush( struct draw_context *draw )
 {
index c42e9bbd690c75d02653cf87cdad062e6d667cc6..4f48db610fe8d0fce614d198f6a32f13a7a7c5fb 100644 (file)
@@ -83,7 +83,7 @@ void vertex_fetch(struct draw_context *draw,
 
       unsigned buf = draw->vertex_element[attr].vertex_buffer_index;
       const void *src
-         = (const void *) ((const ubyte *) draw->mapped_vbuffer[buf]
+         = (const void *) ((const ubyte *) draw->user.vbuffer[buf]
                            + draw->vertex_buffer[buf].buffer_offset
                            + draw->vertex_element[attr].src_offset
                            + elt * draw->vertex_buffer[buf].pitch);
@@ -124,7 +124,7 @@ void draw_vertex_shader_queue_flush_llvm(struct draw_context *draw)
    struct vertex_header *dests[VS_QUEUE_LENGTH];
    float                 inputs[VS_QUEUE_LENGTH][PIPE_MAX_SHADER_INPUTS][4];
    float                 outputs[VS_QUEUE_LENGTH][PIPE_MAX_SHADER_INPUTS][4];
-   float (*consts)[4]          = (float (*)[4]) draw->mapped_constants;
+   float (*consts)[4]          = (float (*)[4]) draw->user.constants;
    struct gallivm_prog  *prog  = draw->vertex_shader->llvm_prog;
    const float          *scale = draw->viewport.scale;
    const float          *trans = draw->viewport.translate;