diff options
Diffstat (limited to 'src/mesa/drivers/dri/intel')
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 87 |
1 files changed, 28 insertions, 59 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c index 9eb81deb78a..54f73e8b47b 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c @@ -371,75 +371,44 @@ intel_miptree_copy_teximage(struct intel_context *intel, intel_miptree_get_image_offset(dst_mt, level, face, slice, &dst_x, &dst_y); - if (src_mt) { - /* Copy potentially with the blitter: - */ - intel_miptree_get_image_offset(src_mt, level, face, slice, - &src_x, &src_y); - - DBG("validate blit mt %p %d,%d/%d -> mt %p %d,%d/%d (%dx%d)\n", - src_mt, src_x, src_y, src_mt->region->pitch * src_mt->region->cpp, - dst_mt, dst_x, dst_y, dst_mt->region->pitch * dst_mt->region->cpp, - width, height); - - if (!intelEmitCopyBlit(intel, - dst_mt->region->cpp, - src_mt->region->pitch, src_mt->region->bo, - 0, src_mt->region->tiling, - dst_mt->region->pitch, dst_mt->region->bo, - 0, dst_mt->region->tiling, - src_x, src_y, - dst_x, dst_y, - width, height, - GL_COPY)) { - - fallback_debug("miptree validate blit for %s failed\n", - _mesa_get_format_name(intelImage->base.Base.TexFormat)); - dst = intel_region_map(intel, dst_mt->region, GL_MAP_WRITE_BIT); - src = intel_region_map(intel, src_mt->region, GL_MAP_READ_BIT); - - _mesa_copy_rect(dst, - dst_mt->cpp, - dst_mt->region->pitch, - dst_x, dst_y, - width, height, - src, src_mt->region->pitch, - src_x, src_y); - - intel_region_unmap(intel, dst_mt->region); - intel_region_unmap(intel, src_mt->region); - } - } else { + /* Copy potentially with the blitter: + */ + intel_miptree_get_image_offset(src_mt, level, face, slice, + &src_x, &src_y); + + DBG("validate blit mt %p %d,%d/%d -> mt %p %d,%d/%d (%dx%d)\n", + src_mt, src_x, src_y, src_mt->region->pitch * src_mt->region->cpp, + dst_mt, dst_x, dst_y, dst_mt->region->pitch * dst_mt->region->cpp, + width, height); + + if (!intelEmitCopyBlit(intel, + dst_mt->region->cpp, + src_mt->region->pitch, src_mt->region->bo, + 0, src_mt->region->tiling, + dst_mt->region->pitch, dst_mt->region->bo, + 0, dst_mt->region->tiling, + src_x, src_y, + dst_x, dst_y, + width, height, + GL_COPY)) { + + fallback_debug("miptree validate blit for %s failed\n", + _mesa_get_format_name(intelImage->base.Base.TexFormat)); dst = intel_region_map(intel, dst_mt->region, GL_MAP_WRITE_BIT); - - DBG("validate upload mt %p -> mt %p %d,%d/%d (%dx%d)\n", - src, - dst_mt, dst_x, dst_y, dst_mt->region->pitch * dst_mt->region->cpp, - width, height); - - src = intelImage->base.Data; - src += (intelImage->base.RowStride * - intelImage->base.Base.Height * - dst_mt->region->cpp * - slice); + src = intel_region_map(intel, src_mt->region, GL_MAP_READ_BIT); _mesa_copy_rect(dst, - dst_mt->region->cpp, + dst_mt->cpp, dst_mt->region->pitch, dst_x, dst_y, width, height, - src, - intelImage->base.RowStride, - 0, 0); + src, src_mt->region->pitch, + src_x, src_y); intel_region_unmap(intel, dst_mt->region); + intel_region_unmap(intel, src_mt->region); } } - if (!src_mt && intelImage->base.Data) { - _mesa_align_free(intelImage->base.Data); - intelImage->base.Data = NULL; - } - intel_miptree_reference(&intelImage->mt, dst_mt); } |