mesa: call Driver.TexParameter in glPopAttrib to fix r100, r200, old nouveau
authorMarek Olšák <marek.olsak@amd.com>
Sat, 12 Dec 2020 05:47:10 +0000 (00:47 -0500)
committerMarge Bot <eric+marge@anholt.net>
Fri, 18 Dec 2020 04:53:44 +0000 (04:53 +0000)
The glPopAttrib optimizations incorrectly removed it.

Use GL_ALL_ATTRIB_BITS to mean "all texture parameters have changed" to
make it more efficient.

Fixes: d0e18550e26 - mesa: optimize saving/restoring bound textures for glPush/PopAttrib

Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8046>

src/mesa/drivers/dri/nouveau/nouveau_state.c
src/mesa/drivers/dri/r200/r200_tex.c
src/mesa/drivers/dri/radeon/radeon_tex.c
src/mesa/main/attrib.c
src/mesa/state_tracker/st_cb_texture.c

index a05c8be..4659892 100644 (file)
@@ -413,6 +413,7 @@ nouveau_tex_parameter(struct gl_context *ctx,
        case GL_TEXTURE_MIN_FILTER:
        case GL_TEXTURE_BASE_LEVEL:
        case GL_TEXTURE_MAX_LEVEL:
+       case GL_ALL_ATTRIB_BITS: /* meaning is all pnames, internal */
                nouveau_texture_reallocate(ctx, t);
                context_dirty_i(ctx, TEX_OBJ, ctx->Texture.CurrentUnit);
                break;
index 92c82e6..7ea04bd 100644 (file)
@@ -387,6 +387,7 @@ static void r200TexParameter(struct gl_context *ctx,
               _mesa_enum_to_string( pname ) );
 
    switch ( pname ) {
+   case GL_ALL_ATTRIB_BITS: /* meaning is all pnames, internal */
    case GL_TEXTURE_MIN_FILTER:
    case GL_TEXTURE_MAG_FILTER:
    case GL_TEXTURE_MAX_ANISOTROPY_EXT:
index bb8d833..4b00347 100644 (file)
@@ -337,6 +337,7 @@ static void radeonTexParameter( struct gl_context *ctx,
               _mesa_enum_to_string( pname ) );
 
    switch ( pname ) {
+   case GL_ALL_ATTRIB_BITS: /* meaning is all pnames, internal */
    case GL_TEXTURE_BASE_LEVEL:
    case GL_TEXTURE_MAX_LEVEL:
    case GL_TEXTURE_MIN_LOD:
index 07285c5..2a3466e 100644 (file)
@@ -604,6 +604,10 @@ pop_texture_group(struct gl_context *ctx, struct gl_texture_attrib_node *texstat
          memcpy(&texObj->Sampler.Attrib, &savedObj->Sampler.Attrib,
                 sizeof(savedObj->Sampler.Attrib));
          memcpy(&texObj->Attrib, &savedObj->Attrib, sizeof(savedObj->Attrib));
+
+         /* GL_ALL_ATTRIB_BITS means all pnames. (internal) */
+         if (texObj->Name != 0 && ctx->Driver.TexParameter)
+            ctx->Driver.TexParameter(ctx, texObj, GL_ALL_ATTRIB_BITS);
       }
    }
 
index dba638e..0f344a8 100644 (file)
@@ -3262,6 +3262,7 @@ st_TexParameter(struct gl_context *ctx,
    struct st_texture_object *stObj = st_texture_object(texObj);
 
    switch (pname) {
+   case GL_ALL_ATTRIB_BITS: /* meaning is all pnames, internal */
    case GL_TEXTURE_BASE_LEVEL:
    case GL_TEXTURE_MAX_LEVEL:
    case GL_DEPTH_TEXTURE_MODE: