[Mesa-dev] [PATCH] i965: Delete pending CCS and HiZ ops in intel_miptree_make_shareable()

Chad Versace chadversary at chromium.org
Thu Jan 19 21:34:01 UTC 2017


+jason, juan

Juan, here is the patch I mentioned earlier. It seems I had already sent
it to the list.

It fixes the bug not by inserting additional checks before trying to
execute hiz ops, because that's just a workaround for the real issue.
The real issue is that intel_miptree_make_shareable() didn't fully
disable HiZ.

Please give some reviewed-by's and tested-by's.

On Wed 04 Jan 2017, Chad Versace wrote:
> Fixes crash in piglit
> `egl_khr_gl_renderbuffer_image-clear-shared-image GL_DEPTH_COMPONENT24`
> on Skylake.
> 
> The crash happened because blorp attempted to execute a pending hiz
> clear after the hiz buffer was deleted. Deleting the pending hiz ops
> when the hiz buffer gets deleted fixes the crash.
> 
> For good measure, this patch also deletes all pending CCS/MCS ops when
> the CCS/MCS buffer gets deleted. I'm now aware of any bugs
> caused by the dangling ops, but deleting them is clearly the right thing
> to do.
> 
> Cc: Ben Widawsky <ben at bwidawsk.net>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99265
> ---
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> index 31fb71e196..f2c94b7a04 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> @@ -2337,12 +2337,28 @@ intel_miptree_make_shareable(struct brw_context *brw,
>        drm_intel_bo_unreference(mt->mcs_buf->bo);
>        free(mt->mcs_buf);
>        mt->mcs_buf = NULL;
> +
> +      /* Any pending MCS/CCS operations are no longer needed. Trying to
> +       * execute any will likely crash due to the missing aux buffer. So let's
> +       * delete all pending ops.
> +       */
> +      exec_list_make_empty(&mt->color_resolve_map);
>     }
>  
>     if (mt->hiz_buf) {
>        intel_miptree_all_slices_resolve_depth(brw, mt);
>        intel_miptree_hiz_buffer_free(mt->hiz_buf);
>        mt->hiz_buf = NULL;
> +
> +      for (uint32_t l = mt->first_level; l <= mt->last_level; ++l) {
> +         mt->level[l].has_hiz = false;
> +      }
> +
> +      /* Any pending HiZ operations are no longer needed. Trying to execute
> +       * any will likely crash due to the missing aux buffer. So let's delete
> +       * all pending ops.
> +       */
> +      exec_list_make_empty(&mt->hiz_map);
>     }
>  
>     mt->aux_disable = INTEL_AUX_DISABLE_ALL;
> -- 
> 2.11.0
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list