gallium: rename pipe_buffer_handle to pipe_buffer, rework pipebuffer/ code
[mesa.git] / src / mesa / pipe / draw / draw_vertex.c
index 1204a944dea69da88d31952f7431ab6348436df2..2d6592150fc3ca79593391ee384980f95fb7c267 100644 (file)
  */
 
 
-#include "pipe/p_defines.h"
-#include "pipe/p_util.h"
-
 #include "pipe/draw/draw_private.h"
-#include "pipe/draw/draw_context.h"
 #include "pipe/draw/draw_vertex.h"
 
 
-static INLINE void
-emit_vertex_attr(struct vertex_info *vinfo,
-                 attrib_format format, interp_mode interp)
-{
-   const uint n = vinfo->num_attribs;
-   vinfo->interp_mode[n] = interp;
-   vinfo->format[n] = format;
-   vinfo->num_attribs++;
-}
-
-
 /**
  * Compute the size of a vertex, in dwords/floats, to update the
  * vinfo->size field.
@@ -64,97 +49,31 @@ draw_compute_vertex_size(struct vertex_info *vinfo)
 
    vinfo->size = 0;
    for (i = 0; i < vinfo->num_attribs; i++) {
-      switch (vinfo->format[i]) {
-      case FORMAT_OMIT:
+      switch (vinfo->emit[i]) {
+      case EMIT_OMIT:
          break;
-      case FORMAT_4UB:
+      case EMIT_4UB:
+         /* fall-through */
+      case EMIT_1F_PSIZE:
          /* fall-through */
-      case FORMAT_1F:
+      case EMIT_1F:
          vinfo->size += 1;
          break;
-      case FORMAT_2F:
+      case EMIT_2F:
          vinfo->size += 2;
          break;
-      case FORMAT_3F:
+      case EMIT_3F:
          vinfo->size += 3;
          break;
-      case FORMAT_4F:
-      case FORMAT_4F_VIEWPORT:
+      case EMIT_4F:
          vinfo->size += 4;
          break;
+      case EMIT_ALL:
+         /* fall-through */
       default:
          assert(0);
       }
    }
-}
-
-
-/**
- * Tell the drawing module about the layout of post-transformation vertices
- */
-void
-draw_set_vertex_attributes( struct draw_context *draw,
-                            const uint *slot_to_vf_attr,
-                            const interp_mode *interps,
-                            unsigned nr_attrs )
-{
-   struct vertex_info *vinfo = &draw->vertex_info;
-   unsigned i;
-
-#if 0
-   assert(slot_to_vf_attr[0] == TGSI_ATTRIB_POS);
-#endif
 
-   memset(vinfo, 0, sizeof(*vinfo));
-
-   /*
-    * First three attribs are always the same: header, clip pos, winpos
-    */
-   emit_vertex_attr(vinfo, FORMAT_1F, INTERP_NONE);
-   emit_vertex_attr(vinfo, FORMAT_4F, INTERP_LINEAR);
-   emit_vertex_attr(vinfo, FORMAT_4F_VIEWPORT, INTERP_LINEAR);
-
-   /*
-    * Remaining attribs (color, texcoords, etc)
-    */
-   for (i = 1; i < nr_attrs; i++) {
-      emit_vertex_attr(vinfo, FORMAT_4F, interps[i]);
-   }
-
-   draw_compute_vertex_size(vinfo);
-}
-
-
-/**
- * This function is used to tell the draw module about attributes
- * (like colors) that need to be selected based on front/back face
- * orientation.
- *
- * The logic is:
- *    if (polygon is back-facing) {
- *       vertex->attrib[front0] = vertex->attrib[back0];
- *       vertex->attrib[front1] = vertex->attrib[back1];
- *    }
- *
- * \param front0  first attrib to replace if the polygon is back-facing
- * \param back0  first attrib to copy if the polygon is back-facing
- * \param front1  second attrib to replace if the polygon is back-facing
- * \param back1  second attrib to copy if the polygon is back-facing
- *
- * Pass -1 to disable two-sided attributes.
- */
-void
-draw_set_twoside_attributes(struct draw_context *draw,
-                            uint front0, uint back0,
-                            uint front1, uint back1)
-{
-   /* XXX we could alternately pass an array of front/back attribs if there's
-    * ever need for more than two.  One could imagine a shader extension
-    * that allows arbitrary attributes to be selected based on polygon
-    * orientation...
-    */
-   draw->attrib_front0 = front0;
-   draw->attrib_back0 = back0;
-   draw->attrib_front1 = front1;
-   draw->attrib_back1 = back1;
+   assert(vinfo->size * 4 <= MAX_VERTEX_SIZE);
 }