summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri
diff options
context:
space:
mode:
authorTopi Pohjolainen <topi.pohjolainen@intel.com>2017-04-30 12:55:46 +0300
committerTopi Pohjolainen <topi.pohjolainen@intel.com>2017-06-19 22:41:45 +0300
commitde158c1e435eb9160b8a29624a4a4807e1627811 (patch)
treed297641fa42e3bb03e796a6c9aa9edd1fdb8f306 /src/mesa/drivers/dri
parentbb9c4113dceb79ee6ce5cdf84810086b3ab1d9fa (diff)
i965/tex: Prepare image update for isl based miptrees
Reviewed-by: Nanley Chery <nanley.g.chery@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r--src/mesa/drivers/dri/i965/intel_tex_image.c19
1 files changed, 16 insertions, 3 deletions
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: