Mesa (master): glsl_types: fix build break with intel/msvc compiler

Rob Clark robclark at kemper.freedesktop.org
Tue Mar 27 12:20:21 UTC 2018


Module: Mesa
Branch: master
Commit: 1e0a06000bae17e1791f55127e7527946e9b6793
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1e0a06000bae17e1791f55127e7527946e9b6793

Author: Rob Clark <robdclark at gmail.com>
Date:   Mon Mar 26 18:45:07 2018 -0400

glsl_types: fix build break with intel/msvc compiler

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.velikov at collabora.com>
Cc: Timothy Arceri <tarceri at itsqueeze.com>
Cc: Roland Scheidegger <sroland at vmware.com>
Cc: Ian Romanick <idr at freedesktop.org>
Signed-off-by: Rob Clark <robdclark at gmail.com>
Acked-by: Timothy Arceri <tarceri at itsqueeze.com>
Reviewed-by: Roland Scheidegger <sroland at vmware.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.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 b8caddb406..9d853caf72 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)




More information about the mesa-commit mailing list