Mesa (master): mesa/st: NumLayers is only valid for array textures

Ilia Mirkin imirkin at kemper.freedesktop.org
Fri Sep 26 02:18:13 UTC 2014


Module: Mesa
Branch: master
Commit: 9d2e298dd4159651323cac54dbc43527e7fd6d16
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9d2e298dd4159651323cac54dbc43527e7fd6d16

Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date:   Wed Sep 24 00:58:07 2014 -0400

mesa/st: NumLayers is only valid for array textures

For 3d textures, NumLayers is set to 1, which is not what we want. This
fixes the newly added gl-layer-render-storage test (which constructs
immutable 3d textures). Fixes regression introduced in d82bd7eb060.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=84145
Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
Tested-by: Michel Dänzer <michel.daenzer at amd.com>
Acked-by: Chris Forbes <chrisf at ijw.co.nz>

---

 src/mesa/state_tracker/st_atom_texture.c |    2 +-
 src/mesa/state_tracker/st_cb_fbo.c       |    3 ++-
 src/mesa/state_tracker/st_texture.c      |    3 ++-
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c
index ed9a444..19072ae 100644
--- a/src/mesa/state_tracker/st_atom_texture.c
+++ b/src/mesa/state_tracker/st_atom_texture.c
@@ -223,7 +223,7 @@ static unsigned last_level(struct st_texture_object *stObj)
 
 static unsigned last_layer(struct st_texture_object *stObj)
 {
-   if (stObj->base.Immutable)
+   if (stObj->base.Immutable && stObj->pt->array_size > 1)
       return MIN2(stObj->base.MinLayer + stObj->base.NumLayers - 1,
                   stObj->pt->array_size - 1);
    return stObj->pt->array_size - 1;
diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index 470ab27..7b6a444 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -451,7 +451,8 @@ st_update_renderbuffer_surface(struct st_context *st,
    }
 
    /* Adjust for texture views */
-   if (strb->is_rtt) {
+   if (strb->is_rtt && resource->array_size > 1 &&
+       strb->Base.TexImage->TexObject->Immutable) {
       struct gl_texture_object *tex = strb->Base.TexImage->TexObject;
       first_layer += tex->MinLayer;
       if (!strb->rtt_layered)
diff --git a/src/mesa/state_tracker/st_texture.c b/src/mesa/state_tracker/st_texture.c
index c84aa45..2cd95ec 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -263,7 +263,8 @@ st_texture_image_map(struct st_context *st, struct st_texture_image *stImage,
    if (stObj->base.Immutable) {
       level += stObj->base.MinLevel;
       z += stObj->base.MinLayer;
-      d = MIN2(d, stObj->base.NumLayers);
+      if (stObj->pt->array_size > 1)
+         d = MIN2(d, stObj->base.NumLayers);
    }
 
    z += stImage->base.Face;




More information about the mesa-commit mailing list