Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 35 ++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c index 9c15c1071e..4472f822ea 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c @@ -2846,8 +2846,14 @@ intel_miptree_map_gtt(struct brw_context *brw, x += image_x; y += image_y; - map->stride = mt->pitch; - map->ptr = base + y * map->stride + x * mt->cpp; + if (mt->surf.size) { + const unsigned cpp = isl_format_get_layout(mt->surf.format)->bpb / 8; + map->stride = mt->surf.row_pitch; + map->ptr = base + y * map->stride + x * cpp; + } else { + map->stride = mt->pitch; + map->ptr = base + y * map->stride + x * mt->cpp; + } } DBG("%s: %d,%d %dx%d from mt %p (%s) " @@ -3349,10 +3355,13 @@ intel_miptree_release_map(struct intel_mipmap_tree *mt, } static bool -can_blit_slice(struct intel_mipmap_tree *mt, - unsigned int level, unsigned int slice) +can_blit_slice(const struct intel_mipmap_tree *mt, + unsigned level, unsigned slice) { /* See intel_miptree_blit() for details on the 32k pitch limit. */ + if (mt->surf.size > 0 && mt->surf.row_pitch >= 32768) + return false; + if (mt->pitch >= 32768) return false; @@ -3360,27 +3369,31 @@ can_blit_slice(struct intel_mipmap_tree *mt, } static bool -use_intel_mipree_map_blit(struct brw_context *brw, - struct intel_mipmap_tree *mt, +use_intel_mipree_map_blit(const struct brw_context *brw, + const struct intel_mipmap_tree *mt, GLbitfield mode, - unsigned int level, - unsigned int slice) + unsigned level, + unsigned slice) { + const uint32_t tiling = + mt->surf.size > 0 ? isl_tiling_to_bufmgr_tiling(mt->surf.tiling) : + mt->tiling; + if (brw->has_llc && /* It's probably not worth swapping to the blit ring because of * all the overhead involved. */ !(mode & GL_MAP_WRITE_BIT) && !mt->compressed && - (mt->tiling == I915_TILING_X || + (tiling == I915_TILING_X || /* Prior to Sandybridge, the blitter can't handle Y tiling */ - (brw->gen >= 6 && mt->tiling == I915_TILING_Y) || + (brw->gen >= 6 && tiling == I915_TILING_Y) || /* Fast copy blit on skl+ supports all tiling formats. */ brw->gen >= 9) && can_blit_slice(mt, level, slice)) return true; - if (mt->tiling != I915_TILING_NONE && + if (tiling != I915_TILING_NONE && mt->bo->size >= brw->max_gtt_map_object_size) { assert(can_blit_slice(mt, level, slice)); return true; -- 2.11.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev