[Mesa-dev] [PATCH 11/31] i965/blorp/genX: Add a blorp_surface_reloc helper

Jason Ekstrand jason at jlekstrand.net
Tue Aug 23 23:42:38 UTC 2016


On Tue, Aug 23, 2016 at 7:06 AM, Pohjolainen, Topi <
topi.pohjolainen at gmail.com> wrote:

> On Fri, Aug 19, 2016 at 09:55:48AM -0700, Jason Ekstrand wrote:
> > ---
> >  src/mesa/drivers/dri/i965/genX_blorp_exec.c | 38
> ++++++++++++++++-------------
> >  1 file changed, 21 insertions(+), 17 deletions(-)
> >
> > diff --git a/src/mesa/drivers/dri/i965/genX_blorp_exec.c
> b/src/mesa/drivers/dri/i965/genX_blorp_exec.c
> > index 32a7445..f226255 100644
> > --- a/src/mesa/drivers/dri/i965/genX_blorp_exec.c
> > +++ b/src/mesa/drivers/dri/i965/genX_blorp_exec.c
> > @@ -61,6 +61,23 @@ blorp_emit_reloc(struct brw_context *brw, void
> *location,
> >     }
> >  }
> >
> > +static void
> > +blorp_surface_reloc(struct brw_context *brw, uint32_t ss_offset,
> > +                    struct blorp_address address, uint32_t delta)
> > +{
> > +   drm_intel_bo_emit_reloc(brw->batch.bo, ss_offset,
> > +                           address.buffer, address.offset + delta,
> > +                           address.read_domains, address.write_domain);
> > +
> > +   uint64_t reloc_val = address.buffer->offset64 + address.offset +
> delta;
> > +   void *reloc_ptr = (void *)brw->batch.map + ss_offset;
> > +#if GEN_GEN >= 8
> > +   *(uint64_t *)reloc_ptr = reloc_val;
> > +#else
> > +   *(uint32_t *)reloc_ptr = reloc_val;
> > +#endif
> > +}
> > +
> >  static void *
> >  blorp_alloc_dynamic_state(struct blorp_context *blorp,
> >                            enum aub_state_struct_type type,
> > @@ -951,24 +968,15 @@ blorp_emit_surface_state(struct brw_context *brw,
> >
> >     const uint32_t mocs =
> >        is_render_target ? brw->blorp.mocs.rb : brw->blorp.mocs.tex;
> > -   uint64_t aux_bo_offset =
> > -      surface->aux_addr.buffer ? surface->aux_addr.buffer->offset64 :
> 0;
> >
> >     isl_surf_fill_state(&brw->isl_dev, dw, .surf = &surf, .view =
> &surface->view,
> > -                       .address = surface->addr.buffer->offset64 +
> surface->addr.offset,
> >                         .aux_surf = &surface->aux_surf, .aux_usage =
> aux_usage,
> > -                       .aux_address = aux_bo_offset +
> surface->aux_addr.offset,
>
> Should you have dropped ".address" and ".aux_address" already in the
> previous
> patch?
> Otherwise the patch makes sense.
>

No.  One of the big changes here is that the blorp_surface_reloc helper
writes the relocated value into the buffer.  Previously, we were depending
on isl to write the value for us and drm_intel_bo_emit_reloc only added the
relocation to the list.

Maybe that needs to go in the commit message?

--Jason


> >                         .mocs = mocs, .clear_color =
> surface->clear_color,
> >                         .x_offset_sa = surface->tile_x_sa,
> >                         .y_offset_sa = surface->tile_y_sa);
> >
> > -   /* Emit relocation to surface contents */
> > -   drm_intel_bo_emit_reloc(brw->batch.bo,
> > -                           surf_offset + ss_info.reloc_dw * 4,
> > -                           surface->addr.buffer,
> > -                           dw[ss_info.reloc_dw] - surface->addr.buffer->
> offset64,
> > -                           surface->addr.read_domains,
> > -                           surface->addr.write_domain);
> > +   blorp_surface_reloc(brw, surf_offset + ss_info.reloc_dw * 4,
> > +                       surface->addr, 0);
> >
> >     if (aux_usage != ISL_AUX_USAGE_NONE) {
> >        /* On gen7 and prior, the bottom 12 bits of the MCS base address
> are
> > @@ -976,12 +984,8 @@ blorp_emit_surface_state(struct brw_context *brw,
> >         * surface buffer addresses are always 4K page alinged.
> >         */
> >        assert((surface->aux_addr.offset & 0xfff) == 0);
> > -      drm_intel_bo_emit_reloc(brw->batch.bo,
> > -                              surf_offset + ss_info.aux_reloc_dw * 4,
> > -                              surface->aux_addr.buffer,
> > -                              dw[ss_info.aux_reloc_dw] & 0xfff,
> > -                              surface->aux_addr.read_domains,
> > -                              surface->aux_addr.write_domain);
> > +      blorp_surface_reloc(brw, surf_offset + ss_info.aux_reloc_dw * 4,
> > +                          surface->aux_addr, dw[ss_info.aux_reloc_dw]);
> >     }
> >
> >     return surf_offset;
> > --
> > 2.5.0.400.gff86faf
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160823/b03e7ada/attachment.html>


More information about the mesa-dev mailing list