<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Nov 6, 2017 at 8:45 AM, Lyude Paul <span dir="ltr"><<a href="mailto:lyude@redhat.com" target="_blank">lyude@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Didn't danvet give you a RB'd here? As well:<br></blockquote><div><br></div><div>I fully expect his R-B still applies but, given that I entirely rewrote the patch, I figured I'd give him a chance to review again.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Tested-by: Lyude Paul <<a href="mailto:lyude@redhat.com">lyude@redhat.com</a>><br><div class="HOEnZb"><div class="h5"></div></div></blockquote><div><br></div><div>Thanks!</div><div><br></div><div>--Jason<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">
On Fri, 2017-11-03 at 16:17 -0700, Jason Ekstrand wrote:<br>
> We were already using PTE for all render targets in case one happened to<br>
> get scanned out.  However, this still wasn't 100% correct because there<br>
> are still possibly cases where we may want to texture from an external<br>
> buffer even though we don't know the caching mode.  This can happen, for<br>
> instance, on buffers imported from another GPU via prime.<br>
><br>
> Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=101691" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/<wbr>show_bug.cgi?id=101691</a><br>
> Cc: Kenneth Graunke <<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>><br>
> Cc: Chris Wilson <<a href="mailto:chris@chris-wilson.co.uk">chris@chris-wilson.co.uk</a>><br>
> Cc: Daniel Vetter <<a href="mailto:daniel.vetter@ffwll.ch">daniel.vetter@ffwll.ch</a>><br>
> Cc: Lyude Paul <<a href="mailto:lyude@redhat.com">lyude@redhat.com</a>><br>
> ---<br>
>  src/mesa/drivers/dri/i965/brw_<wbr>blorp.c            |  7 ++++---<br>
>  src/mesa/drivers/dri/i965/brw_<wbr>wm_surface_state.c | 20 +++++++++++++-------<br>
>  2 files changed, 17 insertions(+), 10 deletions(-)<br>
><br>
> diff --git a/src/mesa/drivers/dri/i965/<wbr>brw_blorp.c<br>
> b/src/mesa/drivers/dri/i965/<wbr>brw_blorp.c<br>
> index 5a86af8..626bf44 100644<br>
> --- a/src/mesa/drivers/dri/i965/<wbr>brw_blorp.c<br>
> +++ b/src/mesa/drivers/dri/i965/<wbr>brw_blorp.c<br>
> @@ -114,14 +114,14 @@ brw_blorp_init(struct brw_context *brw)<br>
>     brw->blorp.upload_shader = brw_blorp_upload_shader;<br>
>  }<br>
><br>
> -static uint32_t tex_mocs[] = {<br>
> +static uint32_t wb_mocs[] = {<br>
>     [7] = GEN7_MOCS_L3,<br>
>     [8] = BDW_MOCS_WB,<br>
>     [9] = SKL_MOCS_WB,<br>
>     [10] = CNL_MOCS_WB,<br>
>  };<br>
><br>
> -static uint32_t rb_mocs[] = {<br>
> +static uint32_t pte_mocs[] = {<br>
>     [7] = GEN7_MOCS_L3,<br>
>     [8] = BDW_MOCS_PTE,<br>
>     [9] = SKL_MOCS_PTE,<br>
> @@ -158,7 +158,8 @@ blorp_surf_for_miptree(struct brw_context *brw,<br>
>        .buffer = mt->bo,<br>
>        .offset = mt->offset,<br>
>        .reloc_flags = is_render_target ? EXEC_OBJECT_WRITE : 0,<br>
> -      .mocs = is_render_target ? rb_mocs[devinfo->gen] : tex_mocs[devinfo-<br>
> >gen],<br>
> +      .mocs = (is_render_target || mt->bo->external) ? pte_mocs[devinfo-<br>
> >gen] :<br>
> +                                                       wb_mocs[devinfo-<br>
> >gen],<br>
>     };<br>
><br>
>     surf->aux_usage = aux_usage;<br>
> diff --git a/src/mesa/drivers/dri/i965/<wbr>brw_wm_surface_state.c<br>
> b/src/mesa/drivers/dri/i965/<wbr>brw_wm_surface_state.c<br>
> index 27c241a..f174270 100644<br>
> --- a/src/mesa/drivers/dri/i965/<wbr>brw_wm_surface_state.c<br>
> +++ b/src/mesa/drivers/dri/i965/<wbr>brw_wm_surface_state.c<br>
> @@ -55,20 +55,25 @@<br>
>  #include "brw_defines.h"<br>
>  #include "brw_wm.h"<br>
><br>
> -uint32_t tex_mocs[] = {<br>
> +uint32_t wb_mocs[] = {<br>
>     [7] = GEN7_MOCS_L3,<br>
>     [8] = BDW_MOCS_WB,<br>
>     [9] = SKL_MOCS_WB,<br>
>     [10] = CNL_MOCS_WB,<br>
>  };<br>
><br>
> -uint32_t rb_mocs[] = {<br>
> +uint32_t pte_mocs[] = {<br>
>     [7] = GEN7_MOCS_L3,<br>
>     [8] = BDW_MOCS_PTE,<br>
>     [9] = SKL_MOCS_PTE,<br>
>     [10] = CNL_MOCS_PTE,<br>
>  };<br>
><br>
> +static inline uint32_t get_tex_mocs(struct brw_bo *bo, unsigned int gen)<br>
> +{<br>
> +     return (bo && bo->external ? pte_mocs : wb_mocs)[gen];<br>
> +}<br>
> +<br>
>  static void<br>
>  get_isl_surf(struct brw_context *brw, struct intel_mipmap_tree *mt,<br>
>               GLenum target, struct isl_view *view,<br>
> @@ -239,7 +244,7 @@ gen6_update_renderbuffer_<wbr>surface(struct brw_context<br>
> *brw,<br>
><br>
>     uint32_t offset;<br>
>     brw_emit_surface_state(brw, mt, mt->target, view, aux_usage,<br>
> -                          rb_mocs[devinfo->gen],<br>
> +                          pte_mocs[devinfo->gen],<br>
>                            &offset, surf_index,<br>
>                            RELOC_WRITE);<br>
>     return offset;<br>
> @@ -586,7 +591,7 @@ brw_update_texture_surface(<wbr>struct gl_context *ctx,<br>
>           aux_usage = ISL_AUX_USAGE_NONE;<br>
><br>
>        brw_emit_surface_state(brw, mt, mt->target, view, aux_usage,<br>
> -                             tex_mocs[devinfo->gen],<br>
> +                             get_tex_mocs(mt->bo, devinfo->gen),<br>
>                               surf_offset, surf_index,<br>
>                               0);<br>
>     }<br>
> @@ -617,7 +622,7 @@ brw_emit_buffer_surface_state(<wbr>struct brw_context *brw,<br>
>                           .size = buffer_size,<br>
>                           .format = surface_format,<br>
>                           .stride = pitch,<br>
> -                         .mocs = tex_mocs[devinfo->gen]);<br>
> +                         .mocs = get_tex_mocs(bo, devinfo->gen));<br>
>  }<br>
><br>
>  void<br>
> @@ -1107,7 +1112,7 @@ update_renderbuffer_read_<wbr>surfaces(struct brw_context<br>
> *brw)<br>
>                 aux_usage = ISL_AUX_USAGE_NONE;<br>
><br>
>              brw_emit_surface_state(brw, irb->mt, target, view, aux_usage,<br>
> -                                   tex_mocs[devinfo->gen],<br>
> +                                   get_tex_mocs(irb->mt->bo, devinfo->gen),<br>
>                                     surf_offset, surf_index,<br>
>                                     0);<br>
><br>
> @@ -1599,7 +1604,8 @@ update_image_surface(struct brw_context *brw,<br>
>                                                         view.base_array_laye<br>
> r,<br>
>                                                         view.array_len));<br>
>              brw_emit_surface_state(brw, mt, mt->target, view,<br>
> -                                   ISL_AUX_USAGE_NONE, tex_mocs[devinfo-<br>
> >gen],<br>
> +                                   ISL_AUX_USAGE_NONE,<br>
> +                                   get_tex_mocs(mt->bo, devinfo->gen),<br>
>                                     surf_offset, surf_index,<br>
>                                     access == GL_READ_ONLY ? 0 :<br>
> RELOC_WRITE);<br>
>           }<br>
</div></div></blockquote></div><br></div></div>