st/mesa: use base level size as "guess" when available
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 6 Jun 2016 21:15:10 +0000 (23:15 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 10 Jun 2016 18:20:39 +0000 (20:20 +0200)
commit42624ea837e8f422f1cd04403af915bd7f218b8d
treefac2cdc59adebf7637fb2fefc46ed548899d5e84
parenta1e69930e43f2876f662042bb94b76124dbe7dfc
st/mesa: use base level size as "guess" when available

When an applications specifies mip levels _before_ setting a mipmap texture
filter, we will initially guess a single texture level. When the second level
image is created, we try to allocate the full texture -- however, we get the
base level size guess wrong if that size is odd. This leads to yet another
re-allocation of the texture later during st_finalize_texture.

Even worse, this re-allocation breaks a (reasonable) assumption made by
st_generate_mipmaps, because the re-allocation in the finalization call will
again allocate a single-level pipe texture (based on the non-mipmap texture
filter!). As a result, mipmap generation fails in interesting ways.

All of this can be avoided by just using the fact that we already know the
size of the base level.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95529
Cc: 12.0 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/state_tracker/st_cb_texture.c