[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