Finishing up rename of the setup state to the rasterizer state.
authorZack Rusin <zack@tungstengraphics.com>
Tue, 18 Sep 2007 14:02:16 +0000 (10:02 -0400)
committerZack Rusin <zack@tungstengraphics.com>
Tue, 18 Sep 2007 14:02:16 +0000 (10:02 -0400)
14 files changed:
src/mesa/pipe/draw/draw_context.c
src/mesa/pipe/draw/draw_context.h
src/mesa/pipe/draw/draw_private.h
src/mesa/pipe/i915simple/i915_context.c
src/mesa/pipe/i915simple/i915_state.c
src/mesa/pipe/softpipe/Makefile
src/mesa/pipe/softpipe/sp_context.c
src/mesa/pipe/softpipe/sp_state_rasterizer.c [new file with mode: 0644]
src/mesa/pipe/softpipe/sp_state_setup.c [deleted file]
src/mesa/sources
src/mesa/state_tracker/st_atom_rasterizer.c [new file with mode: 0644]
src/mesa/state_tracker/st_atom_setup.c [deleted file]
src/mesa/state_tracker/st_cb_feedback.c
src/mesa/state_tracker/st_draw.c

index f3236ad59e12f03f5273e845560eb5df1fc41f99..9acbc53742b357d1e3e70afcbb6c55651324855c 100644 (file)
@@ -89,7 +89,7 @@ void draw_destroy( struct draw_context *draw )
  */
 static void validate_pipeline( struct draw_context *draw )
 {
-   struct draw_stage *next = draw->pipeline.setup;
+   struct draw_stage *next = draw->pipeline.rasterize;
 
    /*
     * NOTE: we build up the pipeline in end-to-start order.
@@ -157,11 +157,11 @@ void draw_set_feedback_state( struct draw_context *draw,
 
 
 /**
- * Register new primitive setup/rendering state.
+ * Register new primitive rasterization/rendering state.
  * This causes the drawing pipeline to be rebuilt.
  */
-void draw_set_setup_state( struct draw_context *draw,
-                           const struct pipe_rasterizer_state *raster )
+void draw_set_rasterizer_state( struct draw_context *draw,
+                                const struct pipe_rasterizer_state *raster )
 {
    draw->rasterizer = raster;
    validate_pipeline( draw );
@@ -172,10 +172,10 @@ void draw_set_setup_state( struct draw_context *draw,
  * Plug in the primitive rendering/rasterization stage.
  * This is provided by the device driver.
  */
-void draw_set_setup_stage( struct draw_context *draw,
-                           struct draw_stage *stage )
+void draw_set_rasterize_stage( struct draw_context *draw,
+                               struct draw_stage *stage )
 {
-   draw->pipeline.setup = stage;
+   draw->pipeline.rasterize = stage;
 }
 
 
index 2714252fc5dae3ad0cbfe3571b3c703fca96cbc4..4eb59aab010ce1e80c5c777ed7e8df47ded460aa 100644 (file)
@@ -86,11 +86,11 @@ void draw_set_clip_state( struct draw_context *pipe,
 void draw_set_feedback_state( struct draw_context *draw,
                               const struct pipe_feedback_state * );
 
-void draw_set_setup_state( struct draw_context *draw,
-                           const struct pipe_rasterizer_state *raster );
+void draw_set_rasterizer_state( struct draw_context *draw,
+                                const struct pipe_rasterizer_state *raster );
 
-void draw_set_setup_stage( struct draw_context *draw,
-                           struct draw_stage *stage );
+void draw_set_rasterize_stage( struct draw_context *draw,
+                               struct draw_stage *stage );
 
 unsigned draw_prim_info( unsigned prim, unsigned *first, unsigned *incr );
 
index fb0aaff40d77e648b29dd76218ae3dcdfaa00e67..bd8c11eb94054150ba8ec5b1f387bfb5d37d5783 100644 (file)
@@ -133,7 +133,7 @@ struct draw_context
       struct draw_stage *twoside;
       struct draw_stage *offset;
       struct draw_stage *unfilled;
-      struct draw_stage *setup;  /* aka render/rasterize */
+      struct draw_stage *rasterize;
    } pipeline;
 
    /* pipe state that we need: */
index 6e48b3bd03b6090aed3ad9bef3a1ecb7e9ebc787..36372898ce6b67a931246fb1a3d2ec4c455cf118 100644 (file)
@@ -285,7 +285,7 @@ struct pipe_context *i915_create( struct pipe_winsys *pipe_winsys,
     */
    i915->draw = draw_create();
    assert(i915->draw);
-   draw_set_setup_stage(i915->draw, i915_draw_render_stage(i915));
+   draw_set_rasterize_stage(i915->draw, i915_draw_render_stage(i915));
 
    i915_init_region_functions(i915);
    i915_init_surface_functions(i915);
index 00764902bc3d0cd65058b63eb96478f2f1d1526d..1dfa10ab28ea0d0124ccdad3a581f5b63a4182cc 100644 (file)
@@ -308,7 +308,7 @@ static void i915_bind_rasterizer_state( struct pipe_context *pipe,
    i915->rasterizer = setup;
 
    /* pass-through to draw module */
-   draw_set_setup_state(i915->draw, setup);
+   draw_set_rasterizer_state(i915->draw, setup);
 
    i915->dirty |= I915_NEW_RASTERIZER;
 }
index 401df1cfb76fb3a5d6752c73259f6c1b493bf6e7..0335f56b99ece06b83ef9f9da98053a85e1c0c71 100644 (file)
@@ -29,7 +29,7 @@ DRIVER_SOURCES = \
        sp_state_feedback.c \
        sp_state_fs.c \
        sp_state_sampler.c \
-       sp_state_setup.c \
+       sp_state_rasterizer.c \
        sp_state_surface.c \
        sp_state_vertex.c \
        sp_tex_layout.c \
index 7753ce40d7573a69482468252c376b5c5999cae3..cf5fc2227edd84bb8808a6cbd0e19ec7b38591b0 100644 (file)
@@ -318,7 +318,7 @@ struct pipe_context *softpipe_create( struct pipe_winsys *pipe_winsys,
     */
    softpipe->draw = draw_create();
    assert(softpipe->draw);
-   draw_set_setup_stage(softpipe->draw, sp_draw_render_stage(softpipe));
+   draw_set_rasterize_stage(softpipe->draw, sp_draw_render_stage(softpipe));
 
    sp_init_region_functions(softpipe);
    sp_init_surface_functions(softpipe);
diff --git a/src/mesa/pipe/softpipe/sp_state_rasterizer.c b/src/mesa/pipe/softpipe/sp_state_rasterizer.c
new file mode 100644 (file)
index 0000000..d832adb
--- /dev/null
@@ -0,0 +1,65 @@
+/**************************************************************************
+ * 
+ * Copyright 2003 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.
+ * 
+ **************************************************************************/
+
+#include "pipe/p_defines.h"
+#include "sp_context.h"
+#include "sp_state.h"
+#include "pipe/draw/draw_context.h"
+
+
+
+const struct pipe_rasterizer_state *
+softpipe_create_rasterizer_state(struct pipe_context *pipe,
+                              const struct pipe_rasterizer_state *setup)
+{
+   struct pipe_rasterizer_state *raster =
+      malloc(sizeof(struct pipe_rasterizer_state));
+   memcpy(raster, setup, sizeof(struct pipe_rasterizer_state));
+
+   return raster;
+}
+
+void softpipe_bind_rasterizer_state(struct pipe_context *pipe,
+                                 const struct pipe_rasterizer_state *setup)
+{
+   struct softpipe_context *softpipe = softpipe_context(pipe);
+
+   /* pass-through to draw module */
+   draw_set_rasterizer_state(softpipe->draw, setup);
+
+   softpipe->rasterizer = setup;
+
+   softpipe->dirty |= SP_NEW_RASTERIZER;
+}
+
+void softpipe_delete_rasterizer_state(struct pipe_context *pipe,
+                                   const struct pipe_rasterizer_state *rasterizer)
+{
+   free((struct pipe_rasterizer_state*)rasterizer);
+}
+
+
diff --git a/src/mesa/pipe/softpipe/sp_state_setup.c b/src/mesa/pipe/softpipe/sp_state_setup.c
deleted file mode 100644 (file)
index 6788396..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/**************************************************************************
- * 
- * Copyright 2003 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.
- * 
- **************************************************************************/
-
-#include "pipe/p_defines.h"
-#include "sp_context.h"
-#include "sp_state.h"
-#include "pipe/draw/draw_context.h"
-
-
-
-const struct pipe_rasterizer_state *
-softpipe_create_rasterizer_state(struct pipe_context *pipe,
-                              const struct pipe_rasterizer_state *setup)
-{
-   struct pipe_rasterizer_state *raster =
-      malloc(sizeof(struct pipe_rasterizer_state));
-   memcpy(raster, setup, sizeof(struct pipe_rasterizer_state));
-
-   return raster;
-}
-
-void softpipe_bind_rasterizer_state(struct pipe_context *pipe,
-                                 const struct pipe_rasterizer_state *setup)
-{
-   struct softpipe_context *softpipe = softpipe_context(pipe);
-
-   /* pass-through to draw module */
-   draw_set_setup_state(softpipe->draw, setup);
-
-   softpipe->rasterizer = setup;
-
-   softpipe->dirty |= SP_NEW_RASTERIZER;
-}
-
-void softpipe_delete_rasterizer_state(struct pipe_context *pipe,
-                                   const struct pipe_rasterizer_state *rasterizer)
-{
-   free((struct pipe_rasterizer_state*)rasterizer);
-}
-
-
index 017a0167bdfbad0cfa029ea60fc6781b9dfa6e41..0d4fdc15f490e9c87e1097f9eaa86dd1f1ef9741 100644 (file)
@@ -203,7 +203,7 @@ STATETRACKER_SOURCES = \
        state_tracker/st_atom_fs.c \
        state_tracker/st_atom_sampler.c \
        state_tracker/st_atom_scissor.c \
-       state_tracker/st_atom_setup.c \
+       state_tracker/st_atom_rasterizer.c \
        state_tracker/st_atom_stipple.c \
        state_tracker/st_atom_texture.c \
        state_tracker/st_atom_viewport.c \
diff --git a/src/mesa/state_tracker/st_atom_rasterizer.c b/src/mesa/state_tracker/st_atom_rasterizer.c
new file mode 100644 (file)
index 0000000..cab8ad5
--- /dev/null
@@ -0,0 +1,224 @@
+/**************************************************************************
+ * 
+ * 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 "st_context.h"
+#include "st_cache.h"
+#include "pipe/p_context.h"
+#include "pipe/p_defines.h"
+#include "st_atom.h"
+
+static GLuint translate_fill( GLenum mode )
+{
+   switch (mode) {
+   case GL_POINT:
+      return PIPE_POLYGON_MODE_POINT;
+   case GL_LINE:
+      return PIPE_POLYGON_MODE_LINE;
+   case GL_FILL:
+      return PIPE_POLYGON_MODE_FILL;
+   default:
+      assert(0);
+      return 0;
+   }
+}
+
+static GLboolean get_offset_flag( GLuint fill_mode, 
+                                 const struct gl_polygon_attrib *p )
+{
+   switch (fill_mode) {
+   case PIPE_POLYGON_MODE_POINT:
+      return p->OffsetPoint;
+   case PIPE_POLYGON_MODE_LINE:
+      return p->OffsetLine;
+   case PIPE_POLYGON_MODE_FILL:
+      return p->OffsetFill;
+   default:
+      assert(0);
+      return 0;
+   }
+}
+
+
+static void update_raster_state( struct st_context *st )
+{
+   GLcontext *ctx = st->ctx;
+   struct pipe_rasterizer_state raster;
+   const struct pipe_rasterizer_state *cached;
+
+   memset(&raster, 0, sizeof(raster));
+   
+   /* _NEW_POLYGON, _NEW_BUFFERS
+    */
+   {
+      if (ctx->Polygon.FrontFace == GL_CCW)
+         raster.front_winding = PIPE_WINDING_CCW;
+      else
+         raster.front_winding = PIPE_WINDING_CW;
+
+      /* XXX
+       * I think the intention here is that user-created framebuffer objects
+       * use Y=0=TOP layout instead of OpenGL's normal Y=0=bottom layout.
+       * Flipping Y changes CW to CCW and vice-versa.
+       * But this is an implementation/driver-specific artifact - remove...
+       */
+      if (ctx->DrawBuffer && ctx->DrawBuffer->Name != 0)
+         raster.front_winding ^= PIPE_WINDING_BOTH;
+   }
+
+   /* _NEW_LIGHT
+    */
+   if (ctx->Light.ShadeModel == GL_FLAT)
+      raster.flatshade = 1;
+
+   /* _NEW_LIGHT | _NEW_PROGRAM
+    *
+    * Back-face colors can come from traditional lighting (when
+    * GL_LIGHT_MODEL_TWO_SIDE is set) or from vertex programs (when
+    * GL_VERTEX_PROGRAM_TWO_SIDE is set).  Note the logic here.
+    */
+   if (ctx->VertexProgram._Enabled) {
+      raster.light_twoside = ctx->VertexProgram.TwoSideEnabled;
+   }
+   else if (ctx->Light.Enabled && ctx->Light.Model.TwoSide) {
+      raster.light_twoside = 1;
+   }
+
+   /* _NEW_POLYGON
+    */
+   if (ctx->Polygon.CullFlag) {
+      if (ctx->Polygon.CullFaceMode == GL_FRONT_AND_BACK) {
+        raster.cull_mode = PIPE_WINDING_BOTH;
+      }
+      else if (ctx->Polygon.CullFaceMode == GL_FRONT) {
+        raster.cull_mode = raster.front_winding;
+      }
+      else {
+        raster.cull_mode = raster.front_winding ^ PIPE_WINDING_BOTH;
+      }
+   }
+
+   /* _NEW_POLYGON
+    */
+   {
+      GLuint fill_front = translate_fill( ctx->Polygon.FrontMode );
+      GLuint fill_back = translate_fill( ctx->Polygon.BackMode );
+      
+      if (raster.front_winding == PIPE_WINDING_CW) {
+        raster.fill_cw = fill_front;
+        raster.fill_ccw = fill_back;
+      }
+      else {
+        raster.fill_cw = fill_back;
+        raster.fill_ccw = fill_front;
+      }
+
+      /* Simplify when culling is active:
+       */
+      if (raster.cull_mode & PIPE_WINDING_CW) {
+        raster.fill_cw = raster.fill_ccw;
+      }
+      
+      if (raster.cull_mode & PIPE_WINDING_CCW) {
+        raster.fill_ccw = raster.fill_cw;
+      }
+   }
+
+   /* _NEW_POLYGON 
+    */
+   if (ctx->Polygon.OffsetUnits != 0.0 ||
+       ctx->Polygon.OffsetFactor != 0.0) {
+      raster.offset_cw = get_offset_flag( raster.fill_cw, &ctx->Polygon );
+      raster.offset_ccw = get_offset_flag( raster.fill_ccw, &ctx->Polygon );
+      raster.offset_units = ctx->Polygon.OffsetUnits;
+      raster.offset_scale = ctx->Polygon.OffsetFactor;
+   }
+
+   if (ctx->Polygon.SmoothFlag)
+      raster.poly_smooth = 1;
+
+   if (ctx->Polygon.StippleFlag)
+      raster.poly_stipple_enable = 1;
+
+
+   /* _NEW_BUFFERS, _NEW_POLYGON
+    */
+   if (raster.fill_cw != PIPE_POLYGON_MODE_FILL ||
+       raster.fill_ccw != PIPE_POLYGON_MODE_FILL)
+   {
+      GLfloat mrd = (ctx->DrawBuffer ? 
+                    ctx->DrawBuffer->_MRD : 
+                    1.0);
+
+      raster.offset_units = ctx->Polygon.OffsetFactor * mrd;
+      raster.offset_scale = (ctx->Polygon.OffsetUnits * mrd *
+                           st->polygon_offset_scale);
+   }
+      
+   /* _NEW_POINT
+    */
+   raster.point_size = ctx->Point.Size;
+   raster.point_smooth = ctx->Point.SmoothFlag;
+
+   /* _NEW_LINE
+    */
+   raster.line_width = ctx->Line.Width;
+   raster.line_smooth = ctx->Line.SmoothFlag;
+   raster.line_stipple_enable = ctx->Line.StippleFlag;
+   raster.line_stipple_pattern = ctx->Line.StipplePattern;
+   /* GL stipple factor is in [1,256], remap to [0, 255] here */
+   raster.line_stipple_factor = ctx->Line.StippleFactor - 1;
+
+   /* _NEW_MULTISAMPLE */
+   if (ctx->Multisample.Enabled)
+      raster.multisample = 1;
+
+   /* _NEW_SCISSOR */
+   if (ctx->Scissor.Enabled)
+      raster.scissor = 1;
+
+   cached = st_cached_rasterizer_state(st, &raster);
+   if (st->state.rasterizer != cached) {
+      st->state.rasterizer = cached;
+      st->pipe->bind_rasterizer_state( st->pipe, cached );
+   }
+}
+
+const struct st_tracked_state st_update_rasterizer = {
+   .name = "st_update_rasterizer",
+   .dirty = {
+      .mesa = (_NEW_LIGHT | _NEW_POLYGON | _NEW_LINE | _NEW_SCISSOR |
+               _NEW_POINT | _NEW_BUFFERS | _NEW_MULTISAMPLE),
+      .st  = 0,
+   },
+   .update = update_raster_state
+};
diff --git a/src/mesa/state_tracker/st_atom_setup.c b/src/mesa/state_tracker/st_atom_setup.c
deleted file mode 100644 (file)
index cab8ad5..0000000
+++ /dev/null
@@ -1,224 +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 "st_context.h"
-#include "st_cache.h"
-#include "pipe/p_context.h"
-#include "pipe/p_defines.h"
-#include "st_atom.h"
-
-static GLuint translate_fill( GLenum mode )
-{
-   switch (mode) {
-   case GL_POINT:
-      return PIPE_POLYGON_MODE_POINT;
-   case GL_LINE:
-      return PIPE_POLYGON_MODE_LINE;
-   case GL_FILL:
-      return PIPE_POLYGON_MODE_FILL;
-   default:
-      assert(0);
-      return 0;
-   }
-}
-
-static GLboolean get_offset_flag( GLuint fill_mode, 
-                                 const struct gl_polygon_attrib *p )
-{
-   switch (fill_mode) {
-   case PIPE_POLYGON_MODE_POINT:
-      return p->OffsetPoint;
-   case PIPE_POLYGON_MODE_LINE:
-      return p->OffsetLine;
-   case PIPE_POLYGON_MODE_FILL:
-      return p->OffsetFill;
-   default:
-      assert(0);
-      return 0;
-   }
-}
-
-
-static void update_raster_state( struct st_context *st )
-{
-   GLcontext *ctx = st->ctx;
-   struct pipe_rasterizer_state raster;
-   const struct pipe_rasterizer_state *cached;
-
-   memset(&raster, 0, sizeof(raster));
-   
-   /* _NEW_POLYGON, _NEW_BUFFERS
-    */
-   {
-      if (ctx->Polygon.FrontFace == GL_CCW)
-         raster.front_winding = PIPE_WINDING_CCW;
-      else
-         raster.front_winding = PIPE_WINDING_CW;
-
-      /* XXX
-       * I think the intention here is that user-created framebuffer objects
-       * use Y=0=TOP layout instead of OpenGL's normal Y=0=bottom layout.
-       * Flipping Y changes CW to CCW and vice-versa.
-       * But this is an implementation/driver-specific artifact - remove...
-       */
-      if (ctx->DrawBuffer && ctx->DrawBuffer->Name != 0)
-         raster.front_winding ^= PIPE_WINDING_BOTH;
-   }
-
-   /* _NEW_LIGHT
-    */
-   if (ctx->Light.ShadeModel == GL_FLAT)
-      raster.flatshade = 1;
-
-   /* _NEW_LIGHT | _NEW_PROGRAM
-    *
-    * Back-face colors can come from traditional lighting (when
-    * GL_LIGHT_MODEL_TWO_SIDE is set) or from vertex programs (when
-    * GL_VERTEX_PROGRAM_TWO_SIDE is set).  Note the logic here.
-    */
-   if (ctx->VertexProgram._Enabled) {
-      raster.light_twoside = ctx->VertexProgram.TwoSideEnabled;
-   }
-   else if (ctx->Light.Enabled && ctx->Light.Model.TwoSide) {
-      raster.light_twoside = 1;
-   }
-
-   /* _NEW_POLYGON
-    */
-   if (ctx->Polygon.CullFlag) {
-      if (ctx->Polygon.CullFaceMode == GL_FRONT_AND_BACK) {
-        raster.cull_mode = PIPE_WINDING_BOTH;
-      }
-      else if (ctx->Polygon.CullFaceMode == GL_FRONT) {
-        raster.cull_mode = raster.front_winding;
-      }
-      else {
-        raster.cull_mode = raster.front_winding ^ PIPE_WINDING_BOTH;
-      }
-   }
-
-   /* _NEW_POLYGON
-    */
-   {
-      GLuint fill_front = translate_fill( ctx->Polygon.FrontMode );
-      GLuint fill_back = translate_fill( ctx->Polygon.BackMode );
-      
-      if (raster.front_winding == PIPE_WINDING_CW) {
-        raster.fill_cw = fill_front;
-        raster.fill_ccw = fill_back;
-      }
-      else {
-        raster.fill_cw = fill_back;
-        raster.fill_ccw = fill_front;
-      }
-
-      /* Simplify when culling is active:
-       */
-      if (raster.cull_mode & PIPE_WINDING_CW) {
-        raster.fill_cw = raster.fill_ccw;
-      }
-      
-      if (raster.cull_mode & PIPE_WINDING_CCW) {
-        raster.fill_ccw = raster.fill_cw;
-      }
-   }
-
-   /* _NEW_POLYGON 
-    */
-   if (ctx->Polygon.OffsetUnits != 0.0 ||
-       ctx->Polygon.OffsetFactor != 0.0) {
-      raster.offset_cw = get_offset_flag( raster.fill_cw, &ctx->Polygon );
-      raster.offset_ccw = get_offset_flag( raster.fill_ccw, &ctx->Polygon );
-      raster.offset_units = ctx->Polygon.OffsetUnits;
-      raster.offset_scale = ctx->Polygon.OffsetFactor;
-   }
-
-   if (ctx->Polygon.SmoothFlag)
-      raster.poly_smooth = 1;
-
-   if (ctx->Polygon.StippleFlag)
-      raster.poly_stipple_enable = 1;
-
-
-   /* _NEW_BUFFERS, _NEW_POLYGON
-    */
-   if (raster.fill_cw != PIPE_POLYGON_MODE_FILL ||
-       raster.fill_ccw != PIPE_POLYGON_MODE_FILL)
-   {
-      GLfloat mrd = (ctx->DrawBuffer ? 
-                    ctx->DrawBuffer->_MRD : 
-                    1.0);
-
-      raster.offset_units = ctx->Polygon.OffsetFactor * mrd;
-      raster.offset_scale = (ctx->Polygon.OffsetUnits * mrd *
-                           st->polygon_offset_scale);
-   }
-      
-   /* _NEW_POINT
-    */
-   raster.point_size = ctx->Point.Size;
-   raster.point_smooth = ctx->Point.SmoothFlag;
-
-   /* _NEW_LINE
-    */
-   raster.line_width = ctx->Line.Width;
-   raster.line_smooth = ctx->Line.SmoothFlag;
-   raster.line_stipple_enable = ctx->Line.StippleFlag;
-   raster.line_stipple_pattern = ctx->Line.StipplePattern;
-   /* GL stipple factor is in [1,256], remap to [0, 255] here */
-   raster.line_stipple_factor = ctx->Line.StippleFactor - 1;
-
-   /* _NEW_MULTISAMPLE */
-   if (ctx->Multisample.Enabled)
-      raster.multisample = 1;
-
-   /* _NEW_SCISSOR */
-   if (ctx->Scissor.Enabled)
-      raster.scissor = 1;
-
-   cached = st_cached_rasterizer_state(st, &raster);
-   if (st->state.rasterizer != cached) {
-      st->state.rasterizer = cached;
-      st->pipe->bind_rasterizer_state( st->pipe, cached );
-   }
-}
-
-const struct st_tracked_state st_update_rasterizer = {
-   .name = "st_update_rasterizer",
-   .dirty = {
-      .mesa = (_NEW_LIGHT | _NEW_POLYGON | _NEW_LINE | _NEW_SCISSOR |
-               _NEW_POINT | _NEW_BUFFERS | _NEW_MULTISAMPLE),
-      .st  = 0,
-   },
-   .update = update_raster_state
-};
index b97b2bb0271605a91294205cca60b16c76620c23..8e8084fe5988a5813b9e3eed0e5249bef65569be 100644 (file)
@@ -285,14 +285,14 @@ st_RenderMode(GLcontext *ctx, GLenum newMode )
    else if (newMode == GL_SELECT) {
       if (!st->selection_stage)
          st->selection_stage = draw_glselect_stage(ctx, draw);
-      draw_set_setup_stage(draw, st->selection_stage);
+      draw_set_rasterize_stage(draw, st->selection_stage);
       /* Plug in new vbo draw function */
       vbo->draw_prims = st_feedback_draw_vbo;
    }
    else {
       if (!st->feedback_stage)
          st->feedback_stage = draw_glfeedback_stage(ctx, draw);
-      draw_set_setup_stage(draw, st->feedback_stage);
+      draw_set_rasterize_stage(draw, st->feedback_stage);
       /* Plug in new vbo draw function */
       vbo->draw_prims = st_feedback_draw_vbo;
    }
index 1ea7799021b8ff713038a9b6c325e09e6bf7245b..f68e449f079d9c7a8062213daacad8897f0ab252 100644 (file)
@@ -394,7 +394,7 @@ st_feedback_draw_vbo(GLcontext *ctx,
    assert(draw);
    draw_set_viewport_state(draw, &st->state.viewport);
    draw_set_clip_state(draw, &st->state.clip);
-   draw_set_setup_state(draw, st->state.rasterizer);
+   draw_set_rasterizer_state(draw, st->state.rasterizer);
    draw_set_vertex_shader(draw, &st->state.vs);
    /* XXX need to set vertex info too */