diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index d0b22d4342b..c3c4d807669 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -1518,12 +1518,18 @@ intel_process_dri2_buffer(struct brw_context *brw, drawable->h, 1, buffer->pitch, - MIPTREE_LAYOUT_FOR_SCANOUT); + 0); if (!mt) { brw_bo_unreference(bo); return; } + /* We got this BO from X11. We cana't assume that we have coherent texture + * access because X may suddenly decide to use it for scan-out which would + * destroy coherency. + */ + bo->cache_coherent = false; + if (!intel_update_winsys_renderbuffer_miptree(brw, rb, mt, drawable->w, drawable->h, buffer->pitch)) { diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c index ddd835abbf8..149e632877c 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c @@ -719,9 +719,6 @@ miptree_create(struct brw_context *brw, mt->etc_format = etc_format; - if (layout_flags & MIPTREE_LAYOUT_FOR_SCANOUT) - mt->bo->cache_coherent = false; - if (!(layout_flags & MIPTREE_LAYOUT_DISABLE_AUX)) intel_miptree_choose_aux_usage(brw, mt); @@ -941,7 +938,7 @@ intel_miptree_create_for_dri_image(struct brw_context *brw, * used for scanout so we need to flag that appropriately. */ const uint32_t mt_layout_flags = - is_winsys_image ? MIPTREE_LAYOUT_FOR_SCANOUT : MIPTREE_LAYOUT_DISABLE_AUX; + is_winsys_image ? 0 : MIPTREE_LAYOUT_DISABLE_AUX; /* Disable creation of the texture's aux buffers because the driver exposes * no EGL API to manage them. That is, there is no API for resolving the aux @@ -974,6 +971,13 @@ intel_miptree_create_for_dri_image(struct brw_context *brw, } } + /* If this is a window-system image, then we can no longer assume it's + * cache-coherent because it may suddenly get scanned out which destroys + * coherency. + */ + if (is_winsys_image) + image->bo->cache_coherent = false; + if (!intel_miptree_alloc_aux(brw, mt)) { intel_miptree_release(&mt); return NULL; diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h index 534ed6c7c91..76361724419 100644 --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h @@ -356,8 +356,6 @@ enum { MIPTREE_LAYOUT_TILING_NONE = 1 << 6, MIPTREE_LAYOUT_TILING_ANY = MIPTREE_LAYOUT_TILING_Y | MIPTREE_LAYOUT_TILING_NONE, - - MIPTREE_LAYOUT_FOR_SCANOUT = 1 << 7, }; struct intel_mipmap_tree *intel_miptree_create(struct brw_context *brw,