glthread: handle ARB_vertex_attrib_binding
[mesa.git] / src / mesa / main / blend.c
index 0dc2fa171c354cdf3be5fe9da4f2e63cdc12ce87..1b84c9077f0f7d89f35f9bdd95fda32fc9d9caab 100644 (file)
@@ -1063,9 +1063,10 @@ _mesa_ClampColor(GLenum target, GLenum clamp)
    case GL_CLAMP_FRAGMENT_COLOR_ARB:
       if (ctx->API == API_OPENGL_CORE)
          goto invalid_enum;
-      FLUSH_VERTICES(ctx, _NEW_FRAG_CLAMP);
-      ctx->Color.ClampFragmentColor = clamp;
-      _mesa_update_clamp_fragment_color(ctx, ctx->DrawBuffer);
+      if (ctx->Color.ClampFragmentColor != clamp) {
+         ctx->Color.ClampFragmentColor = clamp;
+         _mesa_update_clamp_fragment_color(ctx, ctx->DrawBuffer);
+      }
       break;
    case GL_CLAMP_READ_COLOR_ARB:
       ctx->Color.ClampReadColor = clamp;
@@ -1121,6 +1122,8 @@ void
 _mesa_update_clamp_fragment_color(struct gl_context *ctx,
                                   const struct gl_framebuffer *drawFb)
 {
+   GLboolean clamp;
+
    /* Don't clamp if:
     * - there is no colorbuffer
     * - all colorbuffers are unsigned normalized, so clamping has no effect
@@ -1128,10 +1131,16 @@ _mesa_update_clamp_fragment_color(struct gl_context *ctx,
     */
    if (!drawFb || !drawFb->_HasSNormOrFloatColorBuffer ||
        drawFb->_IntegerBuffers)
-      ctx->Color._ClampFragmentColor = GL_FALSE;
+      clamp = GL_FALSE;
    else
-      ctx->Color._ClampFragmentColor =
-         _mesa_get_clamp_fragment_color(ctx, drawFb);
+      clamp = _mesa_get_clamp_fragment_color(ctx, drawFb);
+
+   if (ctx->Color._ClampFragmentColor == clamp)
+      return;
+
+   ctx->NewState |= _NEW_FRAG_CLAMP; /* for state constants */
+   ctx->NewDriverState |= ctx->DriverFlags.NewFragClamp;
+   ctx->Color._ClampFragmentColor = clamp;
 }
 
 /**