mesa: don't flag _NEW_DEPTH for st/mesa
authorMarek Olšák <marek.olsak@amd.com>
Fri, 9 Jun 2017 22:58:04 +0000 (00:58 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 21 Jun 2017 23:51:02 +0000 (01:51 +0200)
skipping _mesa_update_state_locked

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/mesa/main/depth.c
src/mesa/main/enable.c
src/mesa/main/mtypes.h
src/mesa/state_tracker/st_context.c

index c3534407599e8b718363a7e1b70d50dcfa4315da..1ea7d1af5c069f3bc47d33c0931173056666c39d 100644 (file)
@@ -83,7 +83,8 @@ _mesa_DepthFunc( GLenum func )
       return;
    }
 
-   FLUSH_VERTICES(ctx, _NEW_DEPTH);
+   FLUSH_VERTICES(ctx, ctx->DriverFlags.NewDepth ? 0 : _NEW_DEPTH);
+   ctx->NewDriverState |= ctx->DriverFlags.NewDepth;
    ctx->Depth.Func = func;
 
    if (ctx->Driver.DepthFunc)
@@ -107,7 +108,8 @@ _mesa_DepthMask( GLboolean flag )
    if (ctx->Depth.Mask == flag)
       return;
 
-   FLUSH_VERTICES(ctx, _NEW_DEPTH);
+   FLUSH_VERTICES(ctx, ctx->DriverFlags.NewDepth ? 0 : _NEW_DEPTH);
+   ctx->NewDriverState |= ctx->DriverFlags.NewDepth;
    ctx->Depth.Mask = flag;
 
    if (ctx->Driver.DepthMask)
@@ -138,7 +140,8 @@ _mesa_DepthBoundsEXT( GLclampd zmin, GLclampd zmax )
    if (ctx->Depth.BoundsMin == zmin && ctx->Depth.BoundsMax == zmax)
       return;
 
-   FLUSH_VERTICES(ctx, _NEW_DEPTH);
+   FLUSH_VERTICES(ctx, ctx->DriverFlags.NewDepth ? 0 : _NEW_DEPTH);
+   ctx->NewDriverState |= ctx->DriverFlags.NewDepth;
    ctx->Depth.BoundsMin = (GLfloat) zmin;
    ctx->Depth.BoundsMax = (GLfloat) zmax;
 }
index 9410d5ea94e3c4ab31082069bf51823c096b6c69..5a37770d0099473b36225f656865df94a5a1a8e1 100644 (file)
@@ -365,7 +365,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
       case GL_DEPTH_TEST:
          if (ctx->Depth.Test == state)
             return;
-         FLUSH_VERTICES(ctx, _NEW_DEPTH);
+         FLUSH_VERTICES(ctx, ctx->DriverFlags.NewDepth ? 0 : _NEW_DEPTH);
+         ctx->NewDriverState |= ctx->DriverFlags.NewDepth;
          ctx->Depth.Test = state;
          break;
       case GL_DEBUG_OUTPUT:
@@ -934,7 +935,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
          CHECK_EXTENSION(EXT_depth_bounds_test, cap);
          if (ctx->Depth.BoundsTest == state)
             return;
-         FLUSH_VERTICES(ctx, _NEW_DEPTH);
+         FLUSH_VERTICES(ctx, ctx->DriverFlags.NewDepth ? 0 : _NEW_DEPTH);
+         ctx->NewDriverState |= ctx->DriverFlags.NewDepth;
          ctx->Depth.BoundsTest = state;
          break;
 
index 5fb4fc50441d1c11de04276a1100446a771a5118..e78554bd0b04f8fe34869a190f2c2233bc72def3 100644 (file)
@@ -4475,6 +4475,9 @@ struct gl_driver_flags
    /** gl_context::Scissor::ScissorArray */
    uint64_t NewScissorRect;
 
+   /** gl_context::Depth */
+   uint64_t NewDepth;
+
    /** gl_context::Stencil */
    uint64_t NewStencil;
 };
index b7bdc47bd5389d25304843c7afcf7027b3f3e0cb..dff40c676048cfc8e7bd21b42153d8e080249955 100644 (file)
@@ -193,9 +193,6 @@ st_invalidate_state(struct gl_context * ctx)
       /* These set a subset of flags set by _NEW_BUFFERS, so we only have to
        * check them when _NEW_BUFFERS isn't set.
        */
-      if (new_state & _NEW_DEPTH)
-         st->dirty |= ST_NEW_DSA;
-
       if (new_state & _NEW_PROGRAM)
          st->dirty |= ST_NEW_RASTERIZER;
 
@@ -522,6 +519,7 @@ static void st_init_driver_flags(struct st_context *st)
    f->NewFramebufferSRGB = ST_NEW_FB_STATE;
    f->NewScissorRect = ST_NEW_SCISSOR;
    f->NewScissorTest = ST_NEW_SCISSOR | ST_NEW_RASTERIZER;
+   f->NewDepth = ST_NEW_DSA;
    f->NewStencil = ST_NEW_DSA;
 }