[Mesa-dev] [PATCH] i965: Don't reset aux_state on buffers without modifiers

Mark Janes mark.a.janes at intel.com
Tue Sep 19 10:28:33 UTC 2017


https://bugs.freedesktop.org/show_bug.cgi?id=102856

Tested-by: Mark Janes <mark.a.janes at intel.com>

Jason Ekstrand <jason at jlekstrand.net> writes:

> On gen7-8 where we use CCS_D, we were setting AUX_STATE_AUX_INVALID
> because that's the obvious aux state when there is no modifier.
> However, this doesn't work because that aux state isn't compatible with
> CCS_D.
>
> Cc: Chad Versace <chadversary at chromium.org>
> ---
>  src/intel/isl/isl.h                           |  4 +++-
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 17 +++++++++++++++--
>  2 files changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h
> index df275f8..c01c983 100644
> --- a/src/intel/isl/isl.h
> +++ b/src/intel/isl/isl.h
> @@ -1555,7 +1555,9 @@ isl_drm_modifier_get_info(uint64_t modifier);
>  static inline bool
>  isl_drm_modifier_has_aux(uint64_t modifier)
>  {
> -   return isl_drm_modifier_get_info(modifier)->aux_usage != ISL_AUX_USAGE_NONE;
> +   const struct isl_drm_modifier_info *mod_info =
> +      isl_drm_modifier_get_info(modifier);
> +   return mod_info && mod_info->aux_usage != ISL_AUX_USAGE_NONE;
>  }
>  
>  /** Returns the default isl_aux_state for the given modifier.
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> index 5740f03..9e3dd45 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> @@ -2829,8 +2829,21 @@ intel_miptree_finish_external(struct brw_context *brw,
>  
>     /* We just got this image in from the window system via glxBindTexImageEXT
>      * or similar and have no idea what the actual aux state is other than that
> -    * we aren't in AUX_INVALID.  Reset the aux state to the default for the
> -    * image's modifier.
> +    * we aren't in AUX_INVALID.  If the modifier has no aux then any aux
> +    * buffer we may have is provided by us and we had better have resolved it
> +    * in intel_miptree_prepare_external.
> +    *
> +    * TODO: It is possible to get here with unresolved AUX because the dri2
> +    * stamp can get updated without intel_miptree_prepare_external getting
> +    * called.  For example, glReadBuffers calls dri2InvalidateDrawable.  We
> +    * then land here on the next draw call.
> +    */
> +   if (!isl_drm_modifier_has_aux(mt->drm_modifier))
> +      return;
> +
> +   /* Otherwise, reset the aux state to the least common denominator for the
> +    * image's modifier because we don't know how it's been edited prior to our
> +    * seeing it here.
>      */
>     enum isl_aux_state default_aux_state =
>        isl_drm_modifier_get_default_aux_state(mt->drm_modifier);
> -- 
> 2.5.0.400.gff86faf
>
> _______________________________________________
> 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