<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>