mesa: don't update fixed-func programs on irrelevant _NEW_FOG changes
authorMarek Olšák <marek.olsak@amd.com>
Wed, 3 Feb 2021 18:13:51 +0000 (13:13 -0500)
committerMarge Bot <eric+marge@anholt.net>
Fri, 26 Feb 2021 23:38:02 +0000 (23:38 +0000)
Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com>
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8850>

src/mesa/main/enable.c
src/mesa/main/fog.c
src/mesa/main/state.c

index ae1744b..730718d 100644 (file)
@@ -538,7 +538,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
             goto invalid_enum_error;
          if (ctx->Fog.Enabled == state)
             return;
-         FLUSH_VERTICES(ctx, _NEW_FOG, GL_FOG_BIT | GL_ENABLE_BIT);
+         FLUSH_VERTICES(ctx, _NEW_FOG | _NEW_FF_FRAG_PROGRAM,
+                        GL_FOG_BIT | GL_ENABLE_BIT);
          ctx->Fog.Enabled = state;
          ctx->Fog._PackedEnabledMode = state ? ctx->Fog._PackedMode : FOG_NONE;
          break;
@@ -1007,7 +1008,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
             goto invalid_enum_error;
          if (ctx->Fog.ColorSumEnabled == state)
             return;
-         FLUSH_VERTICES(ctx, _NEW_FOG, GL_FOG_BIT | GL_ENABLE_BIT);
+         FLUSH_VERTICES(ctx, _NEW_FOG | _NEW_FF_FRAG_PROGRAM,
+                        GL_FOG_BIT | GL_ENABLE_BIT);
          ctx->Fog.ColorSumEnabled = state;
          break;
 
index a9a354b..a2f9246 100644 (file)
@@ -106,8 +106,10 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
            return;
         FLUSH_VERTICES(ctx, _NEW_FOG, GL_FOG_BIT);
         ctx->Fog.Mode = m;
-        ctx->Fog._PackedEnabledMode = ctx->Fog.Enabled ?
-                                      ctx->Fog._PackedMode : FOG_NONE;
+         if (ctx->Fog.Enabled) {
+            ctx->Fog._PackedEnabledMode = ctx->Fog._PackedMode;
+            ctx->NewState |= _NEW_FF_FRAG_PROGRAM;
+         }
         break;
       case GL_FOG_DENSITY:
         if (*params<0.0F) {
@@ -161,7 +163,7 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
         }
         if (ctx->Fog.FogCoordinateSource == p)
            return;
-        FLUSH_VERTICES(ctx, _NEW_FOG, GL_FOG_BIT);
+        FLUSH_VERTICES(ctx, _NEW_FOG | _NEW_FF_VERT_PROGRAM, GL_FOG_BIT);
         ctx->Fog.FogCoordinateSource = p;
         break;
       }
@@ -174,7 +176,7 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
         }
         if (ctx->Fog.FogDistanceMode == p)
            return;
-        FLUSH_VERTICES(ctx, _NEW_FOG, GL_FOG_BIT);
+        FLUSH_VERTICES(ctx, _NEW_FOG | _NEW_FF_VERT_PROGRAM, GL_FOG_BIT);
         ctx->Fog.FogDistanceMode = p;
         break;
       }
index 8230805..4b2b3ae 100644 (file)
@@ -487,13 +487,13 @@ _mesa_update_state_locked( struct gl_context *ctx )
       GLbitfield prog_flags = _NEW_PROGRAM;
 
       if (ctx->FragmentProgram._UsesTexEnvProgram) {
-         prog_flags |= _NEW_BUFFERS | _NEW_TEXTURE_OBJECT | _NEW_FOG |
+         prog_flags |= _NEW_BUFFERS | _NEW_TEXTURE_OBJECT |
                        _NEW_FF_FRAG_PROGRAM | _NEW_RENDERMODE |
                        _NEW_COLOR | _NEW_TEXTURE_STATE;
       }
 
       if (ctx->VertexProgram._UsesTnlProgram)
-         prog_flags |= _NEW_FF_VERT_PROGRAM | _NEW_FOG;
+         prog_flags |= _NEW_FF_VERT_PROGRAM;
 
       if (new_state & prog_flags) {
          /* When we generate programs from fixed-function vertex/fragment state