From 59bf765c363acccafd03cc7499046e593b88ab34 Mon Sep 17 00:00:00 2001 From: Topi Pohjolainen Date: Wed, 19 Jul 2017 16:45:44 +0300 Subject: [PATCH] i965/wm: Fix number of layers in 3D images Reviewed-by: Jason Ekstrand Reviewed-by: Kenneth Graunke Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c index ab6b9cdd290..bc069491161 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -1632,6 +1632,17 @@ update_buffer_image_param(struct brw_context *brw, param->stride[0] = _mesa_get_format_bytes(u->_ActualFormat); } +static unsigned +get_image_num_layers(const struct intel_mipmap_tree *mt, GLenum target, + unsigned level) +{ + if (target == GL_TEXTURE_CUBE_MAP) + return 6; + + return target == GL_TEXTURE_3D ? + minify(mt->logical_depth0, level) : mt->logical_depth0; +} + static void update_image_surface(struct brw_context *brw, struct gl_image_unit *u, @@ -1660,9 +1671,8 @@ update_image_surface(struct brw_context *brw, } else { struct intel_texture_object *intel_obj = intel_texture_object(obj); struct intel_mipmap_tree *mt = intel_obj->mt; - const unsigned num_layers = (!u->Layered ? 1 : - obj->Target == GL_TEXTURE_CUBE_MAP ? 6 : - mt->logical_depth0); + const unsigned num_layers = u->Layered ? + get_image_num_layers(mt, obj->Target, u->Level) : 1; struct isl_view view = { .format = format, -- 2.30.2