mesa: don't update fixed-func programs on irrelevant _NEW_POINT 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/attrib.c
src/mesa/main/enable.c
src/mesa/main/points.c
src/mesa/main/state.c
src/mesa/main/texenv.c

index 2063956..2661af3 100644 (file)
@@ -1049,7 +1049,7 @@ _mesa_PopAttrib(void)
       }
       if (ctx->Extensions.ARB_point_sprite) {
          if (ctx->Point.CoordReplace != attr->Point.CoordReplace) {
-            ctx->NewState |= _NEW_POINT;
+            ctx->NewState |= _NEW_POINT | _NEW_FF_VERT_PROGRAM;
             ctx->Point.CoordReplace = attr->Point.CoordReplace;
 
             if (ctx->Driver.TexEnv) {
index 7806b21..ae1744b 100644 (file)
@@ -1089,7 +1089,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
             goto invalid_enum_error;
          if (ctx->Point.PointSprite == state)
             return;
-         FLUSH_VERTICES(ctx, _NEW_POINT, GL_POINT_BIT | GL_ENABLE_BIT);
+         FLUSH_VERTICES(ctx, _NEW_POINT | _NEW_FF_VERT_PROGRAM |
+                        _NEW_FF_FRAG_PROGRAM, GL_POINT_BIT | GL_ENABLE_BIT);
          ctx->Point.PointSprite = state;
          break;
 
index 124f3ca..1b0be65 100644 (file)
@@ -130,7 +130,7 @@ _mesa_PointParameterfv( GLenum pname, const GLfloat *params)
       case GL_DISTANCE_ATTENUATION_EXT:
          if (TEST_EQ_3V(ctx->Point.Params, params))
             return;
-         FLUSH_VERTICES(ctx, _NEW_POINT, GL_POINT_BIT);
+         FLUSH_VERTICES(ctx, _NEW_POINT | _NEW_FF_VERT_PROGRAM, GL_POINT_BIT);
          COPY_3V(ctx->Point.Params, params);
          ctx->Point._Attenuated = (ctx->Point.Params[0] != 1.0F ||
                                    ctx->Point.Params[1] != 0.0F ||
index 0967366..8230805 100644 (file)
@@ -488,12 +488,12 @@ _mesa_update_state_locked( struct gl_context *ctx )
 
       if (ctx->FragmentProgram._UsesTexEnvProgram) {
          prog_flags |= _NEW_BUFFERS | _NEW_TEXTURE_OBJECT | _NEW_FOG |
-                       _NEW_FF_FRAG_PROGRAM | _NEW_POINT | _NEW_RENDERMODE |
+                       _NEW_FF_FRAG_PROGRAM | _NEW_RENDERMODE |
                        _NEW_COLOR | _NEW_TEXTURE_STATE;
       }
 
       if (ctx->VertexProgram._UsesTnlProgram)
-         prog_flags |= _NEW_FF_VERT_PROGRAM | _NEW_POINT | _NEW_FOG;
+         prog_flags |= _NEW_FF_VERT_PROGRAM | _NEW_FOG;
 
       if (new_state & prog_flags) {
          /* When we generate programs from fixed-function vertex/fragment state
index 24e47b0..9f7125d 100644 (file)
@@ -490,12 +490,14 @@ _mesa_texenvfv_indexed( struct gl_context* ctx, GLuint texunit, GLenum target,
          if (iparam0 == GL_TRUE) {
             if (ctx->Point.CoordReplace & (1u << texunit))
                return;
-            FLUSH_VERTICES(ctx, _NEW_POINT, GL_POINT_BIT);
+            FLUSH_VERTICES(ctx, _NEW_POINT | _NEW_FF_VERT_PROGRAM,
+                           GL_POINT_BIT);
             ctx->Point.CoordReplace |= (1u << texunit);
          } else if (iparam0 == GL_FALSE) {
             if (~(ctx->Point.CoordReplace) & (1u << texunit))
                return;
-            FLUSH_VERTICES(ctx, _NEW_POINT, GL_POINT_BIT);
+            FLUSH_VERTICES(ctx, _NEW_POINT | _NEW_FF_VERT_PROGRAM,
+                           GL_POINT_BIT);
             ctx->Point.CoordReplace &= ~(1u << texunit);
          } else {
             _mesa_error( ctx, GL_INVALID_VALUE, "glTexEnv(param=0x%x)", iparam0);