[Mesa-dev] [PATCH 11/21] glsl: Store ir_variable::ir_type in 8 bits instead of 32

Fredrik Höglund fredrik at kde.org
Wed May 28 15:49:00 PDT 2014


On Wednesday 28 May 2014, Matt Turner wrote:
> On Tue, May 27, 2014 at 7:49 PM, Ian Romanick <idr at freedesktop.org> wrote:
> > From: Ian Romanick <ian.d.romanick at intel.com>
> >
> > No change in the peak ir_variable memory usage in a trimmed apitrace of
> > dota2 on 64-bit.
> >
> > No change in the peak ir_variable memory usage in a trimmed apitrace of
> > dota2 on 32-bit.
> >
> > Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> > ---
> >  src/glsl/ir.h | 5 +++--
> >  1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/glsl/ir.h b/src/glsl/ir.h
> > index 7faee74..bc02f6e 100644
> > --- a/src/glsl/ir.h
> > +++ b/src/glsl/ir.h
> > @@ -92,12 +92,13 @@ enum ir_node_type {
> >   */
> >  class ir_instruction : public exec_node {
> >  private:
> > -   enum ir_node_type ir_type;
> > +   uint8_t ir_type;
> >
> >  public:
> >     inline enum ir_node_type get_ir_type() const
> >     {
> > -      return this->ir_type;
> > +      STATIC_ASSERT(ir_type_max < 256);
> > +      return (enum ir_node_type) this->ir_type;
> >     }
> >
> >     /**
> > --
> > 1.8.1.4
> 
> Instead of doing this, you can mark the enum type with the PACKED
> attribute. I did this in a similar change in i965 already. See
> http://lists.freedesktop.org/archives/mesa-dev/2014-February/054643.html
> 
> This way we still get enum type checking and warnings out of switch
> statements and such.

C++11 lets you specify the underlying type of an enum by declaring
it as:

   enum ir_node_type : uint8_t { ... };

If it's declared as 'enum class' it also becomes scoped and strongly
typed, which may or may not be an advantage depending on how it's
used.

I don't know if the compiler can depend on C++11 though.

Fredrik



More information about the mesa-dev mailing list