i965/wm: Fix number of layers in 3D images
authorTopi Pohjolainen <topi.pohjolainen@intel.com>
Wed, 19 Jul 2017 13:45:44 +0000 (16:45 +0300)
committerTopi Pohjolainen <topi.pohjolainen@intel.com>
Thu, 20 Jul 2017 08:32:21 +0000 (11:32 +0300)
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/mesa/drivers/dri/i965/brw_wm_surface_state.c

index ab6b9cdd29001abbb26de006b6edf070d12ce348..bc0694911617adf3a3fb9e2ff48b2a446bfa89e2 100644 (file)
@@ -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,