From 2b7d5c32178d93695a8a7a9bf6509933ab7c1002 Mon Sep 17 00:00:00 2001 From: Andrii Simiklit Date: Tue, 2 Oct 2018 19:16:01 +0300 Subject: [PATCH] i965: consider a 'base level' when calculating width0, height0, depth0 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 Reviewed-by: Kenneth Graunke --- .../drivers/dri/i965/intel_tex_validate.c | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/intel_tex_validate.c b/src/mesa/drivers/dri/i965/intel_tex_validate.c index 72ce83c7ced..37aa8f43ec9 100644 --- a/src/mesa/drivers/dri/i965/intel_tex_validate.c +++ b/src/mesa/drivers/dri/i965/intel_tex_validate.c @@ -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), -- 2.30.2