st/mesa: set pipe_image_view layers correctly for 3D textures

Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
Nicolai Hähnle 2016-02-10 11:19:55 -05:00 committed by Ilia Mirkin
parent f1b0bda6bc
commit ef27190a34

View file

@ -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;
}
}
}
}