glthread: don't sync for glIsEnabled(GL_BLEND, GL_LIGHTING, GL_POLYGON_STIPPLE)
authorMarek Olšák <marek.olsak@amd.com>
Sat, 27 Aug 2022 22:01:53 +0000 (18:01 -0400)
committerMarge Bot <emma+marge@anholt.net>
Wed, 19 Oct 2022 04:23:06 +0000 (04:23 +0000)
Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18199>

src/mesa/main/glthread.h
src/mesa/main/glthread_marshal.h

index d8b7f4b..001be6a 100644 (file)
@@ -131,8 +131,11 @@ struct glthread_attrib_node {
    GLbitfield Mask;
    int ActiveTexture;
    GLenum16 MatrixMode;
+   bool Blend;
    bool CullFace;
    bool DepthTest;
+   bool Lighting;
+   bool PolygonStipple;
 };
 
 typedef enum {
@@ -234,8 +237,11 @@ struct glthread_state
    int MatrixStackDepth[M_NUM_MATRIX_STACKS];
 
    /** Enable states. */
+   bool Blend;
    bool DepthTest;
    bool CullFace;
+   bool Lighting;
+   bool PolygonStipple;
 
    GLuint CurrentDrawFramebuffer;
    GLuint CurrentReadFramebuffer;
index b033dfa..49eba08 100644 (file)
@@ -473,12 +473,21 @@ _mesa_glthread_Enable(struct gl_context *ctx, GLenum cap)
    case GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB:
       _mesa_glthread_destroy(ctx, "Enable(DEBUG_OUTPUT_SYNCHRONOUS)");
       break;
+   case GL_BLEND:
+      ctx->GLThread.Blend = true;
+      break;
    case GL_DEPTH_TEST:
       ctx->GLThread.DepthTest = true;
       break;
    case GL_CULL_FACE:
       ctx->GLThread.CullFace = true;
       break;
+   case GL_LIGHTING:
+      ctx->GLThread.Lighting = true;
+      break;
+   case GL_POLYGON_STIPPLE:
+      ctx->GLThread.PolygonStipple = true;
+      break;
    }
 }
 
@@ -493,12 +502,21 @@ _mesa_glthread_Disable(struct gl_context *ctx, GLenum cap)
    case GL_PRIMITIVE_RESTART_FIXED_INDEX:
       _mesa_glthread_set_prim_restart(ctx, cap, false);
       break;
+   case GL_BLEND:
+      ctx->GLThread.Blend = false;
+      break;
    case GL_CULL_FACE:
       ctx->GLThread.CullFace = false;
       break;
    case GL_DEPTH_TEST:
       ctx->GLThread.DepthTest = false;
       break;
+   case GL_LIGHTING:
+      ctx->GLThread.Lighting = false;
+      break;
+   case GL_POLYGON_STIPPLE:
+      ctx->GLThread.PolygonStipple = false;
+      break;
    }
 }
 
@@ -510,10 +528,16 @@ _mesa_glthread_IsEnabled(struct gl_context *ctx, GLenum cap)
       return -1;
 
    switch (cap) {
+   case GL_BLEND:
+      return ctx->GLThread.Blend;
    case GL_CULL_FACE:
       return ctx->GLThread.CullFace;
    case GL_DEPTH_TEST:
       return ctx->GLThread.DepthTest;
+   case GL_LIGHTING:
+      return ctx->GLThread.Lighting;
+   case GL_POLYGON_STIPPLE:
+      return ctx->GLThread.PolygonStipple;
    case GL_VERTEX_ARRAY:
       return !!(ctx->GLThread.CurrentVAO->UserEnabled & VERT_BIT_POS);
    case GL_NORMAL_ARRAY:
@@ -542,12 +566,20 @@ _mesa_glthread_PushAttrib(struct gl_context *ctx, GLbitfield mask)
 
    attr->Mask = mask;
 
-   if (mask & (GL_POLYGON_BIT | GL_ENABLE_BIT))
+   if (mask & GL_ENABLE_BIT)
+      attr->Blend = ctx->GLThread.Blend;
+
+   if (mask & (GL_POLYGON_BIT | GL_ENABLE_BIT)) {
       attr->CullFace = ctx->GLThread.CullFace;
+      attr->PolygonStipple = ctx->GLThread.PolygonStipple;
+   }
 
    if (mask & (GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT))
       attr->DepthTest = ctx->GLThread.DepthTest;
 
+   if (mask & (GL_LIGHTING_BIT | GL_ENABLE_BIT))
+      attr->Lighting = ctx->GLThread.Lighting;
+
    if (mask & GL_TEXTURE_BIT)
       attr->ActiveTexture = ctx->GLThread.ActiveTexture;
 
@@ -568,12 +600,20 @@ _mesa_glthread_PopAttrib(struct gl_context *ctx)
       &ctx->GLThread.AttribStack[--ctx->GLThread.AttribStackDepth];
    unsigned mask = attr->Mask;
 
-   if (mask & (GL_POLYGON_BIT | GL_ENABLE_BIT))
+   if (mask & GL_ENABLE_BIT)
+      ctx->GLThread.Blend = attr->Blend;
+
+   if (mask & (GL_POLYGON_BIT | GL_ENABLE_BIT)) {
       ctx->GLThread.CullFace = attr->CullFace;
+      ctx->GLThread.PolygonStipple = attr->PolygonStipple;
+   }
 
    if (mask & (GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT))
       ctx->GLThread.DepthTest = attr->DepthTest;
 
+   if (mask & (GL_LIGHTING_BIT | GL_ENABLE_BIT))
+      ctx->GLThread.Lighting = attr->Lighting;
+
    if (mask & GL_TEXTURE_BIT)
       ctx->GLThread.ActiveTexture = attr->ActiveTexture;