i965: consider a 'base level' when calculating width0, height0, depth0
authorAndrii Simiklit <andrii.simiklit@globallogic.com>
Tue, 2 Oct 2018 16:16:01 +0000 (19:16 +0300)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 8 Feb 2019 05:40:50 +0000 (21:40 -0800)
I guess that when we calculating the width0, height0, depth0
to use for function 'intel_miptree_create' we need to consider
the 'base level' like it is done in the 'intel_miptree_create_for_teximage'
function.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107987
Signed-off-by: Andrii Simiklit <andrii.simiklit@globallogic.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/intel_tex_validate.c

index 72ce83c7ced23a49f67f47bdec7e7b05df0d92c1..37aa8f43ec9ae59c1b05acccb5cf9e18288decd9 100644 (file)
@@ -119,8 +119,32 @@ intel_finalize_mipmap_tree(struct brw_context *brw,
    /* May need to create a new tree:
     */
    if (!intelObj->mt) {
+      const unsigned level = firstImage->base.Base.Level;
       intel_get_image_dims(&firstImage->base.Base, &width, &height, &depth);
-
+      /* Figure out image dimensions at start level. */
+      switch(intelObj->base.Target) {
+      case GL_TEXTURE_2D_MULTISAMPLE:
+      case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
+      case GL_TEXTURE_RECTANGLE:
+      case GL_TEXTURE_EXTERNAL_OES:
+          assert(level == 0);
+          break;
+      case GL_TEXTURE_3D:
+          depth = depth << level;
+          /* Fall through */
+      case GL_TEXTURE_2D:
+      case GL_TEXTURE_2D_ARRAY:
+      case GL_TEXTURE_CUBE_MAP:
+      case GL_TEXTURE_CUBE_MAP_ARRAY:
+          height = height << level;
+          /* Fall through */
+      case GL_TEXTURE_1D:
+      case GL_TEXTURE_1D_ARRAY:
+          width = width << level;
+          break;
+      default:
+          unreachable("Unexpected target");
+      }
       perf_debug("Creating new %s %dx%dx%d %d-level miptree to handle "
                  "finalized texture miptree.\n",
                  _mesa_get_format_name(firstImage->base.Base.TexFormat),