[Mesa-dev] [PATCH 1/2] i965: Change intel_disable_rb_aux_buffer into get_drawbuffer_index().

Jason Ekstrand jason at jlekstrand.net
Fri Oct 6 18:05:53 UTC 2017


On Fri, Oct 6, 2017 at 10:57 AM, Nanley Chery <nanleychery at gmail.com> wrote:

> On Thu, Oct 05, 2017 at 10:02:39PM -0700, Kenneth Graunke wrote:
> > The bulk of the work in intel_disable_rb_aux_buffer() is finding the
> > drawbuffer index for the given BO.  After that, disabling the auxiliary
> > buffers is an easy one liner.
> >
> > This lets us ask whether a texture is also bound as a renderbuffer
> > before making any decisions.  We'll use this in the next patch.
> >
> > Cc: nanleychery at gmail.com
> > Cc: jason at jlekstrand.net
> > ---
> >  src/mesa/drivers/dri/i965/brw_draw.c | 18 ++++++++++--------
> >  1 file changed, 10 insertions(+), 8 deletions(-)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_draw.c
> b/src/mesa/drivers/dri/i965/brw_draw.c
> > index c7ed7284501..cab3758d7b5 100644
> > --- a/src/mesa/drivers/dri/i965/brw_draw.c
> > +++ b/src/mesa/drivers/dri/i965/brw_draw.c
> > @@ -336,22 +336,21 @@ brw_merge_inputs(struct brw_context *brw,
> >     }
> >  }
> >
> > -static bool
> > -intel_disable_rb_aux_buffer(struct brw_context *brw, const struct
> brw_bo *bo)
> > +static int
> > +get_drawbuffer_index(struct brw_context *brw, const struct brw_bo *bo)
>
> We can now make brw point to a const struct.
>
> >  {
> >     const struct gl_framebuffer *fb = brw->ctx.DrawBuffer;
> > -   bool found = false;
> >
> >     for (unsigned i = 0; i < fb->_NumColorDrawBuffers; i++) {
> >        const struct intel_renderbuffer *irb =
> >           intel_renderbuffer(fb->_ColorDrawBuffers[i]);
> >
> >        if (irb && irb->mt->bo == bo) {
> > -         found = brw->draw_aux_buffer_disabled[i] = true;
> > +         return i;
> >        }
> >     }
> >
> > -   return found;
> > +   return -1;
> >  }
> >
> >  /**
> > @@ -382,13 +381,14 @@ brw_predraw_resolve_inputs(struct brw_context
> *brw)
> >        struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, i);
> >        enum isl_format view_format =
> >           translate_tex_format(brw, tex_obj->_Format,
> sampler->sRGBDecode);
> > +      int drawbuf_idx = get_drawbuffer_index(brw, tex_obj->mt->bo);
> >
> >        bool aux_supported;
> >        intel_miptree_prepare_texture(brw, tex_obj->mt, view_format,
> >                                      &aux_supported);
> >
> > -      if (!aux_supported && devinfo->gen >= 9 &&
> > -          intel_disable_rb_aux_buffer(brw, tex_obj->mt->bo)) {
> > +      if (!aux_supported && devinfo->gen >= 9 && drawbuf_idx != -1) {
> > +         brw->draw_aux_buffer_disabled[i] = true;
>
> Don't we want to index this array with drawbuf_idx? Maybe I don't
> understand how the texunit and drawbuffer arrays are related.. I'll do
> some reading.
>

Good catch.  You are 100% right.


> >           perf_debug("Sampling renderbuffer with non-compressible format
> - "
> >                      "turning off compression\n");
> >        }
> > @@ -413,9 +413,11 @@ brw_predraw_resolve_inputs(struct brw_context *brw)
> >
> >              if (tex_obj && tex_obj->mt) {
> >                 intel_miptree_prepare_image(brw, tex_obj->mt);
> > +               int drawbuf_idx = get_drawbuffer_index(brw,
> tex_obj->mt->bo);
> >
> >                 if (tex_obj->mt->aux_usage == ISL_AUX_USAGE_CCS_E &&
> > -                   intel_disable_rb_aux_buffer(brw, tex_obj->mt->bo)) {
> > +                   drawbuf_idx != -1) {
> > +                  brw->draw_aux_buffer_disabled[i] = true;
>
> You're using the index of the shader stage here.
>
> >                    perf_debug("Using renderbuffer as shader image -
> turning "
> >                               "off lossless compression\n");
> >                 }
> > --
> > 2.14.2
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20171006/12e3e9e0/attachment.html>


More information about the mesa-dev mailing list