From ef27190a34ab06ffe14fb6bdc0e366b564fa5ead Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolai=20H=C3=A4hnle?= Date: Wed, 10 Feb 2016 11:19:55 -0500 Subject: [PATCH] st/mesa: set pipe_image_view layers correctly for 3D textures Reviewed-by: Ilia Mirkin --- src/mesa/state_tracker/st_atom_image.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_image.c b/src/mesa/state_tracker/st_atom_image.c index ff36537..4b48bc3 100644 --- a/src/mesa/state_tracker/st_atom_image.c +++ b/src/mesa/state_tracker/st_atom_image.c @@ -84,13 +84,23 @@ st_bind_images(struct st_context *st, struct gl_shader *shader, img->u.buf.last_element = f + (n - 1); } else { img->u.tex.level = u->Level + stObj->base.MinLevel; - img->u.tex.first_layer = u->_Layer + stObj->base.MinLayer; - img->u.tex.last_layer = u->_Layer + stObj->base.MinLayer; - if (u->Layered && img->resource->array_size > 1) { - if (stObj->base.Immutable) - img->u.tex.last_layer += stObj->base.NumLayers - 1; - else - img->u.tex.last_layer += img->resource->array_size - 1; + if (stObj->pt->target == PIPE_TEXTURE_3D) { + if (u->Layered) { + img->u.tex.first_layer = 0; + img->u.tex.last_layer = u_minify(stObj->pt->depth0, img->u.tex.level) - 1; + } else { + img->u.tex.first_layer = u->_Layer; + img->u.tex.last_layer = u->_Layer; + } + } else { + img->u.tex.first_layer = u->_Layer + stObj->base.MinLayer; + img->u.tex.last_layer = u->_Layer + stObj->base.MinLayer; + if (u->Layered && img->resource->array_size > 1) { + if (stObj->base.Immutable) + img->u.tex.last_layer += stObj->base.NumLayers - 1; + else + img->u.tex.last_layer += img->resource->array_size - 1; + } } } } -- 2.7.4