Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> On 03/26/2018 03:49 PM, Rob Clark wrote: > The VECN() macro was taking advantage of a GCC specific feature that is > not available on lesser compilers, mostly for the purposes of avoiding a > macro that encoded a return statement. > > But as suggested by Ian, we could just have the macro produce the entire > method body and avoid the need for this. So let's do that instead. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105740 > Fixes: f407edf3407396379e16b0be74b8d3b85d2ad7f0 > Cc: Emil Velikov <emil.veli...@collabora.com> > Cc: Timothy Arceri <tarc...@itsqueeze.com> > Cc: Roland Scheidegger <srol...@vmware.com> > Cc: Ian Romanick <i...@freedesktop.org> > Signed-off-by: Rob Clark <robdcl...@gmail.com> > --- > src/compiler/glsl_types.cpp | 107 > ++++++++++---------------------------------- > 1 file changed, 24 insertions(+), 83 deletions(-) > > diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp > index e92e03421f4..f18e131cf18 100644 > --- a/src/compiler/glsl_types.cpp > +++ b/src/compiler/glsl_types.cpp > @@ -509,89 +509,30 @@ glsl_type::vec(unsigned components, const glsl_type > *const ts[]) > return ts[n - 1]; > } > > -#define VECN(components, sname, vname) ({ \ > - static const glsl_type *const ts[] = { \ > - sname ## _type, vname ## 2_type, \ > - vname ## 3_type, vname ## 4_type, \ > - vname ## 8_type, vname ## 16_type, \ > - }; \ > - glsl_type::vec(components, ts); \ > - }) > - > -const glsl_type * > -glsl_type::vec(unsigned components) > -{ > - return VECN(components, float, vec); > -} > - > -const glsl_type * > -glsl_type::f16vec(unsigned components) > -{ > - return VECN(components, float16_t, f16vec); > -} > - > -const glsl_type * > -glsl_type::dvec(unsigned components) > -{ > - return VECN(components, double, dvec); > -} > - > -const glsl_type * > -glsl_type::ivec(unsigned components) > -{ > - return VECN(components, int, ivec); > -} > - > -const glsl_type * > -glsl_type::uvec(unsigned components) > -{ > - return VECN(components, uint, uvec); > -} > - > -const glsl_type * > -glsl_type::bvec(unsigned components) > -{ > - return VECN(components, bool, bvec); > -} > - > -const glsl_type * > -glsl_type::i64vec(unsigned components) > -{ > - return VECN(components, int64_t, i64vec); > -} > - > - > -const glsl_type * > -glsl_type::u64vec(unsigned components) > -{ > - return VECN(components, uint64_t, u64vec); > -} > - > -const glsl_type * > -glsl_type::i16vec(unsigned components) > -{ > - return VECN(components, int16_t, i16vec); > -} > - > - > -const glsl_type * > -glsl_type::u16vec(unsigned components) > -{ > - return VECN(components, uint16_t, u16vec); > -} > - > -const glsl_type * > -glsl_type::i8vec(unsigned components) > -{ > - return VECN(components, int8_t, i8vec); > -} > - > - > -const glsl_type * > -glsl_type::u8vec(unsigned components) > -{ > - return VECN(components, uint8_t, u8vec); > -} > +#define VECN(components, sname, vname) \ > +const glsl_type * \ > +glsl_type:: vname (unsigned components) \ > +{ \ > + static const glsl_type *const ts[] = { \ > + sname ## _type, vname ## 2_type, \ > + vname ## 3_type, vname ## 4_type, \ > + vname ## 8_type, vname ## 16_type, \ > + }; \ > + return glsl_type::vec(components, ts); \ > +} > + > +VECN(components, float, vec) > +VECN(components, float16_t, f16vec) > +VECN(components, double, dvec) > +VECN(components, int, ivec) > +VECN(components, uint, uvec) > +VECN(components, bool, bvec) > +VECN(components, int64_t, i64vec) > +VECN(components, uint64_t, u64vec) > +VECN(components, int16_t, i16vec) > +VECN(components, uint16_t, u16vec) > +VECN(components, int8_t, i8vec) > +VECN(components, uint8_t, u8vec) > > const glsl_type * > glsl_type::get_instance(unsigned base_type, unsigned rows, unsigned columns) >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev