i965: Be a bit more conservative about certain resolves
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 31 May 2017 17:06:31 +0000 (10:06 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 8 Jun 2017 05:18:53 +0000 (22:18 -0700)
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>
src/mesa/drivers/dri/i965/intel_pixel_bitmap.c
src/mesa/drivers/dri/i965/intel_pixel_read.c
src/mesa/drivers/dri/i965/intel_tex_image.c
src/mesa/drivers/dri/i965/intel_tex_subimage.c

index 4522d28a4e1dc4a8abd1e4dfee6e054cbec2e207..f79863e3493931ca350b377475e8675e2d69ed68 100644 (file)
@@ -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) {
index 7074d7db9a24548d92c0d338c04431b6a1d1d524..7892b37a077b653246b9e023ed9d7cfc303aebfb 100644 (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;
 
index 77e09e83a58c68874f98b9fd1b776a62ebcbff07..8cd1eae296bb74b0f201652e02f211eae8355610 100644 (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;
index e9c7b802b11a0839927a8d558104cfccac764e5e..caa673001fde0943cc19340c38d0ac2089ab1c4b 100644 (file)
@@ -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;