[Mesa-dev] [PATCH 1/6] mesa: add MaxNumLevels to gl_texture_image, remove MaxLog2

Brian Paul brianp at vmware.com
Mon Nov 12 08:22:55 PST 2012


On 11/11/2012 09:39 AM, Marek Olšák wrote:
> MaxLog2 led to bugs, because it didn't work well with 1D and 3D textures.
>
> NOTE: This is a candidate for the stable branches.
> ---
>   src/mesa/drivers/dri/nouveau/nouveau_texture.c   |    2 +-
>   src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c |    6 ++--
>   src/mesa/main/mtypes.h                           |    3 +-
>   src/mesa/main/teximage.c                         |   41 +++++++++++++++++++++-
>   src/mesa/main/teximage.h                         |    3 ++
>   5 files changed, 49 insertions(+), 6 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
> index 37f7577..288b510 100644
> --- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
> +++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
> @@ -369,7 +369,7 @@ get_last_level(struct gl_texture_object *t)
>   	    t->Sampler.MinFilter == GL_LINEAR || !base)
>   		return t->BaseLevel;
>   	else
> -		return MIN2(t->BaseLevel + base->MaxLog2, t->MaxLevel);
> +		return MIN2(t->BaseLevel + base->MaxNumLevels - 1, t->MaxLevel);
>   }
>
>   static void
> diff --git a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
> index 668ef9f..b0c49ba 100644
> --- a/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
> @@ -270,7 +270,7 @@ static void calculate_min_max_lod(struct gl_sampler_object *samp, struct gl_text
>   			minLod = MIN2(minLod, tObj->MaxLevel);
>   			maxLod = tObj->BaseLevel + (GLint)(samp->MaxLod + 0.5);
>   			maxLod = MIN2(maxLod, tObj->MaxLevel);
> -			maxLod = MIN2(maxLod, tObj->Image[0][minLod]->MaxLog2 + minLod);
> +			maxLod = MIN2(maxLod, tObj->Image[0][minLod]->MaxNumLevels - 1 + minLod);
>   			maxLod = MAX2(maxLod, minLod); /* need at least one level */
>   		}
>   		break;
> @@ -329,7 +329,7 @@ static GLboolean radeon_miptree_matches_texture(radeon_mipmap_tree *mt, struct g
>
>   	mtBaseLevel =&mt->levels[texObj->BaseLevel - mt->baseLevel];
>   	firstImage = texObj->Image[0][texObj->BaseLevel];
> -	numLevels = MIN2(texObj->_MaxLevel - texObj->BaseLevel + 1, firstImage->MaxLog2 + 1);
> +	numLevels = MIN2(texObj->_MaxLevel - texObj->BaseLevel + 1, firstImage->MaxNumLevels);
>
>   	if (radeon_is_debug_enabled(RADEON_TEXTURE,RADEON_TRACE)) {
>   		fprintf(stderr, "Checking if miptree %p matches texObj %p\n", mt, texObj);
> @@ -378,7 +378,7 @@ void radeon_try_alloc_miptree(radeonContextPtr rmesa, radeonTexObj *t)
>   	}
>
>
> -	numLevels = MIN2(texObj->MaxLevel - texObj->BaseLevel + 1, texImg->MaxLog2 + 1);
> +	numLevels = MIN2(texObj->MaxLevel - texObj->BaseLevel + 1, texImg->MaxNumLevels);
>
>   	t->mt = radeon_miptree_create(rmesa, t->base.Target,
>   		texImg->TexFormat, texObj->BaseLevel,
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index b99e710..da327aa 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -1203,7 +1203,8 @@ struct gl_texture_image
>      GLuint WidthLog2;		/**<  = log2(Width2) */
>      GLuint HeightLog2;		/**<  = log2(Height2) */
>      GLuint DepthLog2;		/**<  = log2(Depth2) */
> -   GLuint MaxLog2;		/**<  = MAX(WidthLog2, HeightLog2) */
> +   GLuint MaxNumLevels;		/**<  = maximum possible number of mipmaps,
> +                                       computed from the dimensions */

Minor nit: the comment should probably read "Maximum possible number 
of mipmap levels computed from the dimensions".

"Mipmap" refers the collection of images, not an individual image.


Otherwise, for the series:
Reviewed-by: Brian Paul <brianp at vmware.com>


More information about the mesa-dev mailing list