i965: Be a bit more conservative about certain resolves

There are several places where we were resolving the entire miptree
when we really only needed to resolve a single slice.  Let's avoid the
unneeded resolving.

Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Chad Versace <chadversary@chromium.org>
This commit is contained in:
Jason Ekstrand
2017-05-31 10:06:31 -07:00
parent 3b65f9499c
commit 0607ca42da
4 changed files with 12 additions and 8 deletions
@@ -256,7 +256,8 @@ do_blit_bitmap( struct gl_context *ctx,
/* The blitter has no idea about fast color clears, so we need to resolve
* the miptree before we do anything.
*/
intel_miptree_all_slices_resolve_color(brw, irb->mt, 0);
intel_miptree_resolve_color(brw, irb->mt, irb->mt_level, 1,
irb->mt_layer, 1, 0);
/* Chop it all into chunks that can be digested by hardware: */
for (py = 0; py < height; py += DY) {
+2 -1
View File
@@ -147,7 +147,8 @@ intel_readpixels_tiled_memcpy(struct gl_context * ctx,
/* Since we are going to read raw data to the miptree, we need to resolve
* any pending fast color clears before we start.
*/
intel_miptree_all_slices_resolve_color(brw, irb->mt, 0);
intel_miptree_resolve_color(brw, irb->mt, irb->mt_level, 1,
irb->mt_layer, 1, 0);
bo = irb->mt->bo;
+4 -3
View File
@@ -533,10 +533,13 @@ intel_gettexsubimage_tiled_memcpy(struct gl_context *ctx,
if (brw->gen < 5 && brw->has_swizzling)
return false;
int level = texImage->Level + texImage->TexObject->MinLevel;
/* Since we are going to write raw data to the miptree, we need to resolve
* any pending fast color clears before we start.
*/
intel_miptree_all_slices_resolve_color(brw, image->mt, 0);
assert(image->mt->logical_depth0 == 1);
intel_miptree_resolve_color(brw, image->mt, level, 1, 0, 1, 0);
bo = image->mt->bo;
@@ -561,8 +564,6 @@ intel_gettexsubimage_tiled_memcpy(struct gl_context *ctx,
packing->Alignment, packing->RowLength, packing->SkipPixels,
packing->SkipRows);
int level = texImage->Level + texImage->TexObject->MinLevel;
/* Adjust x and y offset based on miplevel */
xoffset += image->mt->level[level].level_x;
yoffset += image->mt->level[level].level_y;
@@ -145,10 +145,13 @@ intel_texsubimage_tiled_memcpy(struct gl_context * ctx,
if (brw->gen < 5 && brw->has_swizzling)
return false;
int level = texImage->Level + texImage->TexObject->MinLevel;
/* Since we are going to write raw data to the miptree, we need to resolve
* any pending fast color clears before we start.
*/
intel_miptree_all_slices_resolve_color(brw, image->mt, 0);
assert(image->mt->logical_depth0 == 1);
intel_miptree_resolve_color(brw, image->mt, level, 1, 0, 1, 0);
bo = image->mt->bo;
@@ -177,8 +180,6 @@ intel_texsubimage_tiled_memcpy(struct gl_context * ctx,
packing->Alignment, packing->RowLength, packing->SkipPixels,
packing->SkipRows, for_glTexImage);
int level = texImage->Level + texImage->TexObject->MinLevel;
/* Adjust x and y offset based on miplevel */
xoffset += image->mt->level[level].level_x;
yoffset += image->mt->level[level].level_y;