diff options
author | Rob Clark <[email protected]> | 2018-03-26 18:45:07 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2018-03-27 08:17:11 -0400 |
commit | 1e0a06000bae17e1791f55127e7527946e9b6793 (patch) | |
tree | 0d2c46ba0e38f64e7bffa4083a1f94cc6d4b79b5 /src/compiler | |
parent | 41cf30b8bc55fdf36adac3311002dc32b6715949 (diff) |
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 <[email protected]>
Cc: Timothy Arceri <[email protected]>
Cc: Roland Scheidegger <[email protected]>
Cc: Ian Romanick <[email protected]>
Signed-off-by: Rob Clark <[email protected]>
Acked-by: Timothy Arceri <[email protected]>
Reviewed-by: Roland Scheidegger <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/glsl_types.cpp | 107 |
1 files changed, 24 insertions, 83 deletions
diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp index b8caddb4066..9d853caf721 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) |