st/mesa: directly compute level=0 texture size in st_finalize_texture
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Tue, 7 Jun 2016 20:40:49 +0000 (22:40 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 8 Jun 2016 17:12:07 +0000 (19:12 +0200)
commitbd5c41fe5fdfbef80959b5738b0372b81bef1f2f
tree6228128cac3a2a1154db3839348dc3da0ebfb1a3
parent8c3ecde0e18977f49b804226d7c28483e025cbcd
st/mesa: directly compute level=0 texture size in st_finalize_texture

The width0/height0/depth0 on stObj may not have been set at this point.
Observed in a trace that set up levels 2..9 of a 2d texture, and set the base
level to 2, with height 1. This made the guess logic always bail.

Originally investigated by Ilia Mirkin, this patch gets rid of the somewhat
redundant storage of width0/height0/depth0 and makes sure we always compute
pipe texture sizes that are compatible with the base level image of the
GL texture.

Fixes the gl-1.2-texture-base-level piglit test provided by Brian Paul.

v2:
- try to re-use an existing pipe texture when possible
- handle a corner case where the base level is not level 0 and it is of
  size 1x1x1

v3:
- ptHeight = ptWidth in cube map 1x1 case (suggested by Brian)

Cc: "12.0" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/state_tracker/st_cb_eglimage.c
src/mesa/state_tracker/st_cb_texture.c
src/mesa/state_tracker/st_manager.c
src/mesa/state_tracker/st_texture.h
src/mesa/state_tracker/st_vdpau.c