[Mesa-dev] [PATCH 1/5] i965: Query and store GPU properties from kernel
Ben Widawsky
ben at bwidawsk.net
Wed Mar 9 18:04:36 UTC 2016
On Mon, Mar 07, 2016 at 10:16:41PM -0800, Matt Turner wrote:
> On Mon, Mar 7, 2016 at 5:39 PM, Ben Widawsky
> <benjamin.widawsky at intel.com> wrote:
> > Certain products are not uniquely identifiable based on device id alone. The
> > kernel exports an interface to help deal with this. This patch merely introduces
> > the consumer of the interface and makes sure nothing breaks.
> >
> > It is also possible to use these values for programming GPGPU mode, and I plan
> > to do that as well.
> >
> > The interface was introduced in libdrm 2.4.60, which is already required, so it
> > should all be fine.
> >
> > Signed-off-by: Ben Widawsky <benjamin.widawsky at intel.com>
> > ---
> > src/mesa/drivers/dri/i965/intel_screen.c | 21 +++++++++++++++++++++
> > src/mesa/drivers/dri/i965/intel_screen.h | 12 +++++++++++-
> > 2 files changed, 32 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
> > index ee7c1d7..343b497 100644
> > --- a/src/mesa/drivers/dri/i965/intel_screen.c
> > +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> > @@ -1082,6 +1082,7 @@ static bool
> > intel_init_bufmgr(struct intel_screen *intelScreen)
> > {
> > __DRIscreen *spriv = intelScreen->driScrnPriv;
> > + bool devid_override = getenv("INTEL_DEVID_OVERRIDE") != NULL;
> >
> > intelScreen->no_hw = getenv("INTEL_NO_HW") != NULL;
> >
> > @@ -1099,6 +1100,26 @@ intel_init_bufmgr(struct intel_screen *intelScreen)
> > return false;
> > }
> >
> > + intelScreen->subslice_total = -1;
> > + intelScreen->eu_total = -1;
> > +
> > + /* Everything below this is for real hardware only */
> > + if (intelScreen->no_hw || devid_override)
> > + return true;
> > +
> > + intel_get_param(spriv, I915_PARAM_SUBSLICE_TOTAL,
> > + &intelScreen->subslice_total);
> > + intel_get_param(spriv, I915_PARAM_EU_TOTAL, &intelScreen->eu_total);
> > +
> > + /* Without this information, we cannot get the right Braswell brandstrings,
> > + * and we have to use conservative numbers for GPGPU on many platforms, but
> > + * otherwise, things will just work.
> > + */
> > + if (intelScreen->subslice_total == -1 ||
> > + intelScreen->eu_total == -1)
>
> I think this condition will fit on one line.
>
> > + _mesa_warning(NULL,
> > + "Kernel 4.1 required to properly query GPU properties.\n");
> > +
> > return true;
> > }
> >
> > diff --git a/src/mesa/drivers/dri/i965/intel_screen.h b/src/mesa/drivers/dri/i965/intel_screen.h
> > index 3a5f22c..695ed50 100644
> > --- a/src/mesa/drivers/dri/i965/intel_screen.h
> > +++ b/src/mesa/drivers/dri/i965/intel_screen.h
> > @@ -81,7 +81,17 @@ struct intel_screen
> > * I915_PARAM_CMD_PARSER_VERSION parameter
> > */
> > int cmd_parser_version;
> > - };
> > +
> > + /**
> > + * Best effort attempt to get system information. Needed for GPGPU, and brand
> > + * strings (sigh)
>
> The comment doesn't really describe the fields. Maybe
>
> /**
> * Number of subslices reported by the I915_PARAM_SUBSLICE_TOTAL parameter
> */
> int subslice_total;
>
> /**
> * Number of EUs reported by the I915_PARAM_EU_TOTAL parameter
> */
> int eu_total;
>
> (Might have to linewrap the comments, not sure)
>
> > + * I915_PARAM_SUBSLICE_TOTAL, and I915_PARAM_EU_TOTAL
> > + */
> > + struct {
>
> Do these need to be together in a struct?
>
I like the idea of using the anonymous struct to logically group them - though
looking back now, I think it'd be cool to put all the params we get from the
kernel in a struct (easy debug to just dump struct contents in gdb). Anyway, I
don't feel strongly.
> > + int subslice_total;
> > + int eu_total;
> > + };
> > +};
I took all of your suggestions. Thanks.
--
Ben Widawsky, Intel Open Source Technology Center
More information about the mesa-dev
mailing list