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:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user