[Mesa-dev] [PATCH 3/8] i965: Store the atoms directly in the context
Jason Ekstrand
jason at jlekstrand.net
Mon Dec 22 14:42:26 PST 2014
On Dec 22, 2014 2:49 PM, "Ian Romanick" <idr at freedesktop.org> wrote:
>
> On 12/19/2014 06:20 PM, Jason Ekstrand wrote:
> > I wrote basically this same patch when I was trying to speed up
> > basically the same test. Unfortunately, I wasn't able to get much of an
> > improvement out of it. Other than the one nit below,
> > Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com
> > <mailto:jason.ekstrand at intel.com>>
> >
> > On Fri, Dec 19, 2014 at 2:20 PM, Ian Romanick <idr at freedesktop.org
> > <mailto:idr at freedesktop.org>> wrote:
> >
> > From: Ian Romanick <ian.d.romanick at intel.com
> > <mailto:ian.d.romanick at intel.com>>
> >
> > Instead of having an extra pointer indirection in one of the hottest
> > loops in the driver.
> >
> > On Bay Trail-D using Fedora 20 compile flags (-m64 -O2
-mtune=generic
> > for 64-bit and -m32 -march=i686 -mtune=atom for 32-bit), affects
> > Gl32Batch7:
> >
> > 32-bit: Difference at 95.0% confidence 1.98515% +/- 0.20814% (n=40)
> > 64-bit: Difference at 95.0% confidence 1.5163% +/- 0.811016% (n=60)
> >
> > Signed-off-by: Ian Romanick <ian.d.romanick at intel.com
> > <mailto:ian.d.romanick at intel.com>>
> > ---
> > src/mesa/drivers/dri/i965/brw_context.h | 2 +-
> > src/mesa/drivers/dri/i965/brw_state_upload.c | 19
++++++++++++++++---
> > 2 files changed, 17 insertions(+), 4 deletions(-)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_context.h
> > b/src/mesa/drivers/dri/i965/brw_context.h
> > index 92eb022..5f5f807 100644
> > --- a/src/mesa/drivers/dri/i965/brw_context.h
> > +++ b/src/mesa/drivers/dri/i965/brw_context.h
> > @@ -1384,7 +1384,7 @@ struct brw_context
> > } perfmon;
> >
> > int num_atoms;
> > - const struct brw_tracked_state **atoms;
> > + const struct brw_tracked_state atoms[64];
> >
> >
> > Maybe a #define?
>
> Hmm... What I really wanted was to somehow use ARRAY_SIZE from the other
> arrays. Since the define would only be used in one place, I don't think
> it's that helpful.
If you really care, you could do a bunch of MAX2 of ARRAY_SIZE and it
should evaluate as a constant expression. I don't care that much.
>
> > /* If (INTEL_DEBUG & DEBUG_BATCH) */
> > struct {
> > diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c
> > b/src/mesa/drivers/dri/i965/brw_state_upload.c
> > index a579781..9a5d49a 100644
> > --- a/src/mesa/drivers/dri/i965/brw_state_upload.c
> > +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c
> > @@ -357,6 +357,11 @@ void brw_init_state( struct brw_context *brw )
> > const struct brw_tracked_state **atoms;
> > int num_atoms;
> >
> > + STATIC_ASSERT(ARRAY_SIZE(gen4_atoms) <= ARRAY_SIZE(brw->atoms));
> > + STATIC_ASSERT(ARRAY_SIZE(gen6_atoms) <= ARRAY_SIZE(brw->atoms));
> > + STATIC_ASSERT(ARRAY_SIZE(gen7_atoms) <= ARRAY_SIZE(brw->atoms));
> > + STATIC_ASSERT(ARRAY_SIZE(gen8_atoms) <= ARRAY_SIZE(brw->atoms));
> > +
> > brw_init_caches(brw);
> >
> > if (brw->gen >= 8) {
> > @@ -373,9 +378,17 @@ void brw_init_state( struct brw_context *brw )
> > num_atoms = ARRAY_SIZE(gen4_atoms);
> > }
> >
> > - brw->atoms = atoms;
> > brw->num_atoms = num_atoms;
> >
> > + /* This is to work around brw_context::atoms being declared
> > const. We want
> > + * it to be const, but it needs to be initialized somehow!
> > + */
> > + struct brw_tracked_state *context_atoms =
> > + (struct brw_tracked_state *) &brw->atoms[0];
> > +
> > + for (int i = 0; i < num_atoms; i++)
> > + context_atoms[i] = *atoms[i];
> > +
> > while (num_atoms--) {
> > assert((*atoms)->dirty.mesa | (*atoms)->dirty.brw);
> > assert((*atoms)->emit);
> > @@ -607,7 +620,7 @@ void brw_upload_state(struct brw_context *brw)
> > prev = *state;
> >
> > for (i = 0; i < brw->num_atoms; i++) {
> > - const struct brw_tracked_state *atom = brw->atoms[i];
> > + const struct brw_tracked_state *atom = &brw->atoms[i];
> > struct brw_state_flags generated;
> >
> > if (check_state(state, &atom->dirty)) {
> > @@ -627,7 +640,7 @@ void brw_upload_state(struct brw_context *brw)
> > }
> > else {
> > for (i = 0; i < brw->num_atoms; i++) {
> > - const struct brw_tracked_state *atom = brw->atoms[i];
> > + const struct brw_tracked_state *atom = &brw->atoms[i];
> >
> > if (check_state(state, &atom->dirty)) {
> > atom->emit(brw);
> > --
> > 1.8.1.4
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org <mailto:
mesa-dev at lists.freedesktop.org>
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20141222/9ebcc504/attachment.html>
More information about the mesa-dev
mailing list