mesa/gallium: Signal _NEW_TRANSFORM from glClipControl.
authorMathias Fröhlich <Mathias.Froehlich@gmx.net>
Sat, 25 Oct 2014 08:17:04 +0000 (10:17 +0200)
committerMathias Fröhlich <Mathias.Froehlich@gmx.net>
Thu, 30 Oct 2014 06:52:00 +0000 (07:52 +0100)
This removes the need for the gallium rasterizer state
to listen to viewport changes.
Thanks to Marek Olšák <maraeo@gmail.com>.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Mathias Froehlich <Mathias.Froehlich@web.de>
src/mesa/main/viewport.c
src/mesa/state_tracker/st_atom_rasterizer.c

index d6a9e290a4a297487799e1a8b04e260735f6404d..0adce9c786cff988410fd31ab53ee181a491f3e8 100644 (file)
@@ -459,15 +459,14 @@ _mesa_ClipControl(GLenum origin, GLenum depth)
        ctx->Transform.ClipDepthMode == depth)
       return;
 
-   FLUSH_VERTICES(ctx, 0);
+   /* Affects transform state and the viewport transform */
+   FLUSH_VERTICES(ctx, _NEW_TRANSFORM | _NEW_VIEWPORT);
 
    if (ctx->Transform.ClipOrigin != origin) {
       ctx->Transform.ClipOrigin = origin;
 
       /* Affects the winding order of the front face. */
       ctx->NewState |= _NEW_POLYGON;
-      /* Affects the y component of the viewport transform. */
-      ctx->NewState |= _NEW_VIEWPORT;
 
       if (ctx->Driver.FrontFace)
          ctx->Driver.FrontFace(ctx, ctx->Polygon.FrontFace);
@@ -476,9 +475,6 @@ _mesa_ClipControl(GLenum origin, GLenum depth)
    if (ctx->Transform.ClipDepthMode != depth) {
       ctx->Transform.ClipDepthMode = depth;
 
-      /* Affects the z part of the viewpoint transform. */
-      ctx->NewState |= _NEW_VIEWPORT;
-
       if (ctx->Driver.DepthRange)
          ctx->Driver.DepthRange(ctx);
    }
index 50209788bcd0210d172f1e9c499056f2e91dc9dd..606f19a18efdf669f6a228a5f5654cdf0da264e9 100644 (file)
@@ -72,7 +72,7 @@ static void update_raster_state( struct st_context *st )
    {
       raster->front_ccw = (ctx->Polygon.FrontFace == GL_CCW);
 
-      /* _NEW_VIEWPORT */
+      /* _NEW_TRANSFORM */
       if (ctx->Transform.ClipOrigin == GL_UPPER_LEFT) {
          raster->front_ccw ^= 1;
       }
@@ -246,13 +246,10 @@ static void update_raster_state( struct st_context *st )
    raster->half_pixel_center = 1;
    if (st_fb_orientation(ctx->DrawBuffer) == Y_0_TOP)
       raster->bottom_edge_rule = 1;
-   /* _NEW_VIEWPORT */
+   /* _NEW_TRANSFORM */
    if (ctx->Transform.ClipOrigin == GL_UPPER_LEFT)
       raster->bottom_edge_rule ^= 1;
 
-   /* _NEW_VIEWPORT */
-   raster->clip_halfz = (ctx->Transform.ClipDepthMode == GL_ZERO_TO_ONE);
-
    /* ST_NEW_RASTERIZER */
    raster->rasterizer_discard = ctx->RasterDiscard;
 
@@ -267,6 +264,7 @@ static void update_raster_state( struct st_context *st )
    /* _NEW_TRANSFORM */
    raster->depth_clip = !ctx->Transform.DepthClamp;
    raster->clip_plane_enable = ctx->Transform.ClipPlanesEnabled;
+   raster->clip_halfz = (ctx->Transform.ClipDepthMode == GL_ZERO_TO_ONE);
 
    cso_set_rasterizer(st->cso_context, raster);
 }
@@ -283,8 +281,7 @@ const struct st_tracked_state st_update_rasterizer = {
        _NEW_PROGRAM |
        _NEW_SCISSOR |
        _NEW_FRAG_CLAMP |
-       _NEW_TRANSFORM |
-       _NEW_VIEWPORT),      /* mesa state dependencies*/
+       _NEW_TRANSFORM),     /* mesa state dependencies*/
       (ST_NEW_VERTEX_PROGRAM |
        ST_NEW_RASTERIZER),  /* state tracker dependencies */
    },