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 <chadvers...@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@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev