Rework of shader constant buffers.
[mesa.git] / src / mesa / pipe / softpipe / sp_quad_stipple.c
index 532ffc61b0cba4b43e975ded2492904c4c25f179..cb127095d700c1786a23e204cd56e94b7f6cf7ce 100644 (file)
@@ -3,12 +3,11 @@
  * quad polygon stipple stage
  */
 
-#include "glheader.h"
-#include "imports.h"
 #include "sp_context.h"
 #include "sp_headers.h"
 #include "sp_quad.h"
 #include "pipe/p_defines.h"
+#include "pipe/p_util.h"
 
 
 /**
@@ -19,35 +18,16 @@ stipple_quad(struct quad_stage *qs, struct quad_header *quad)
 {
    if (quad->prim == PRIM_TRI) {
       struct softpipe_context *softpipe = qs->softpipe;
-      const GLint col0 = quad->x0 % 32;
-      const GLint row0 = quad->y0 % 32;
-      const GLuint stipple0 = softpipe->poly_stipple.stipple[row0];
-      const GLuint stipple1 = softpipe->poly_stipple.stipple[row0 + 1];
+      const int col0 = quad->x0 % 32;
+      const int row0 = quad->y0 % 32;
+      const unsigned stipple0 = softpipe->poly_stipple.stipple[row0];
+      const unsigned stipple1 = softpipe->poly_stipple.stipple[row0 + 1];
 
-      /* XXX this should be acheivable without conditionals */
-#if 1
-      GLbitfield mask = 0x0;
-
-      if ((1 << col0) & stipple0)
-         mask |= MASK_BOTTOM_LEFT;
-
-      if ((2 << col0) & stipple0)      /* note: col0 <= 30 */
-         mask |= MASK_BOTTOM_RIGHT;
-
-      if ((1 << col0) & stipple1)
-         mask |= MASK_TOP_LEFT;
-
-      if ((2 << col0) & stipple1)
-         mask |= MASK_TOP_RIGHT;
-
-      quad->mask &= mask;
-#else
       /* XXX there may be a better way to lay out the stored stipple
        * values to further simplify this computation.
        */
       quad->mask &= (((stipple0 >> col0) & 0x3) | 
                      (((stipple1 >> col0) & 0x3) << 2));
-#endif
 
       if (quad->mask)
          qs->next->run(qs->next, quad);
@@ -55,12 +35,20 @@ stipple_quad(struct quad_stage *qs, struct quad_header *quad)
 }
 
 
+static void stipple_begin(struct quad_stage *qs)
+{
+   if (qs->next)
+      qs->next->begin(qs->next);
+}
+
+
 struct quad_stage *
 sp_quad_polygon_stipple_stage( struct softpipe_context *softpipe )
 {
    struct quad_stage *stage = CALLOC_STRUCT(quad_stage);
 
    stage->softpipe = softpipe;
+   stage->begin = stipple_begin;
    stage->run = stipple_quad;
 
    return stage;