diff options
author | Topi Pohjolainen <[email protected]> | 2017-04-30 12:55:46 +0300 |
---|---|---|
committer | Topi Pohjolainen <[email protected]> | 2017-06-19 22:41:45 +0300 |
commit | de158c1e435eb9160b8a29624a4a4807e1627811 (patch) | |
tree | d297641fa42e3bb03e796a6c9aa9edd1fdb8f306 | |
parent | bb9c4113dceb79ee6ce5cdf84810086b3ab1d9fa (diff) |
i965/tex: Prepare image update for isl based miptrees
Reviewed-by: Nanley Chery <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Signed-off-by: Topi Pohjolainen <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_tex_image.c | 19 |
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: |