From de158c1e435eb9160b8a29624a4a4807e1627811 Mon Sep 17 00:00:00 2001 From: Topi Pohjolainen Date: Sun, 30 Apr 2017 12:55:46 +0300 Subject: i965/tex: Prepare image update for isl based miptrees Reviewed-by: Nanley Chery Reviewed-by: Jason Ekstrand Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/intel_tex_image.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c b/src/mesa/drivers/dri/i965/intel_tex_image.c index ea166f019fb..b1fe8dd584e 100644 --- a/src/mesa/drivers/dri/i965/intel_tex_image.c +++ b/src/mesa/drivers/dri/i965/intel_tex_image.c @@ -56,11 +56,24 @@ intel_miptree_create_for_teximage(struct brw_context *brw, { GLuint lastLevel; int width, height, depth; + unsigned old_width = 0, old_height = 0, old_depth = 0; const struct intel_mipmap_tree *old_mt = intelObj->mt; const unsigned level = intelImage->base.Base.Level; intel_get_image_dims(&intelImage->base.Base, &width, &height, &depth); + if (old_mt && old_mt->surf.size > 0) { + old_width = old_mt->surf.logical_level0_px.width; + old_height = old_mt->surf.logical_level0_px.height; + old_depth = old_mt->surf.dim == ISL_SURF_DIM_3D ? + old_mt->surf.logical_level0_px.depth : + old_mt->surf.logical_level0_px.array_len; + } else if (old_mt) { + old_width = old_mt->logical_width0; + old_height = old_mt->logical_height0; + old_depth = old_mt->logical_depth0; + } + DBG("%s\n", __func__); /* Figure out image dimensions at start level. */ @@ -72,19 +85,19 @@ intel_miptree_create_for_teximage(struct brw_context *brw, assert(level == 0); break; case GL_TEXTURE_3D: - depth = old_mt ? get_base_dim(old_mt->logical_depth0, depth, level) : + depth = old_mt ? get_base_dim(old_depth, depth, level) : 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 = old_mt ? get_base_dim(old_mt->logical_height0, height, level) : + height = old_mt ? get_base_dim(old_height, height, level) : height << level; /* Fall through */ case GL_TEXTURE_1D: case GL_TEXTURE_1D_ARRAY: - width = old_mt ? get_base_dim(old_mt->logical_width0, width, level) : + width = old_mt ? get_base_dim(old_width, width, level) : width << level; break; default: -- cgit v1.2.3