texture-mipmap: Handle textures with width or height of 1

Calculating the mipmap width as half of the texture width leads to a
mipmap width of zero for textures with width of 1 which leads to an
early exit instead of a mipmap texture.

Fixes: 16fa2100d ("shaped-texture: Stop using MetaTextureTower and use GL mipmapping instead")
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3468>
This commit is contained in:
Sebastian Wick 2023-12-19 19:29:06 +01:00
parent 6daa21c930
commit 54c5ea9c13

View File

@ -151,8 +151,8 @@ ensure_mipmap_texture (MetaTextureMipmap *mipmap)
* then just use the original texture instead of mipmap texture, which is * then just use the original texture instead of mipmap texture, which is
* faster anyway. * faster anyway.
*/ */
width = meta_multi_texture_get_width (mipmap->base_texture) / 2; width = meta_multi_texture_get_width (mipmap->base_texture);
height = meta_multi_texture_get_height (mipmap->base_texture) / 2; height = meta_multi_texture_get_height (mipmap->base_texture);
if (!width || !height) if (!width || !height)
{ {
@ -160,6 +160,9 @@ ensure_mipmap_texture (MetaTextureMipmap *mipmap)
return; return;
} }
width = MAX (width / 2, 1);
height = MAX (height / 2, 1);
if (!mipmap->mipmap_texture || if (!mipmap->mipmap_texture ||
meta_multi_texture_get_width (mipmap->mipmap_texture) != width || meta_multi_texture_get_width (mipmap->mipmap_texture) != width ||
meta_multi_texture_get_height (mipmap->mipmap_texture) != height) meta_multi_texture_get_height (mipmap->mipmap_texture) != height)