mesa: don't forget to clear _Layer field on texture unit
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Tue, 1 Oct 2019 08:55:46 +0000 (11:55 +0300)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Tue, 1 Oct 2019 18:49:13 +0000 (21:49 +0300)
On the Android Antutu benchmark we ran into an assert in ISL where the
(base layer + num layers) > total layers. It turns out the core of
mesa forgot to clear the _Layer variable, potentially leaving an
inconsistent value.

v2: Pull setting u->_Layer out of the conditional blocks (Jason)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/main/shaderimage.c

index 1712483c41515cd7ecaa7115b81c3b081f9db100..a5e85b02afc66a0714f6a82bfa81ba9e704ce8e5 100644 (file)
@@ -593,11 +593,11 @@ set_image_binding(struct gl_image_unit *u, struct gl_texture_object *texObj,
    if (texObj && _mesa_tex_target_is_layered(texObj->Target)) {
       u->Layered = layered;
       u->Layer = layer;
-      u->_Layer = (u->Layered ? 0 : u->Layer);
    } else {
       u->Layered = GL_FALSE;
       u->Layer = 0;
    }
+   u->_Layer = (u->Layered ? 0 : u->Layer);
 
    _mesa_reference_texobj(&u->TexObj, texObj);
 }