diff options
author | Francisco Jerez <[email protected]> | 2018-02-12 14:18:15 -0800 |
---|---|---|
committer | Francisco Jerez <[email protected]> | 2018-02-24 15:28:36 -0800 |
commit | ba79a90fb52e1e81fbfb38113e85a56b13497c50 (patch) | |
tree | 856b9cd6e20c61dc6cf8defc58b4f1af752ff6b4 /src/compiler/glsl/ast.h | |
parent | bdbc2ffa4219b39e47a27decbc603d445286d92d (diff) |
glsl: Switch ast_type_qualifier to a 128-bit bitset.
This should end the drought of bits in the ast_type_qualifier object.
The bitset_t type works pretty much as a drop-in replacement for the
current uint64_t bitset.
The only catch is that the bitset_t type as defined in the previous
commit doesn't have a trivial constructor (because it has a
user-defined constructor), so it cannot be used as union member
without providing a user-defined constructor for the union (which
causes it in turn to be non-trivially constructible). This annoyance
could be easily addressed in C++11 by declaring the default
constructor of bitset_t to be the implicitly defined one -- IMO one
more reason to drop support for GCC 4.2-4.3.
The other minor change was required because glsl_parser_extras.cpp was
hard-coding the type of bitset temporaries as uint64_t, which (unlike
would have been the case if the uint64_t had been replaced with
e.g. an __int128) would otherwise have caused a build failure, because
the boolean conversion operator of bitset_t is marked explicit (if
C++11 is available), so the bitset won't be silently truncated down to
1 bit in order to use it to initialize the uint64_t temporaries
(yikes).
Reviewed-by: Plamena Manolova <[email protected]>
Diffstat (limited to 'src/compiler/glsl/ast.h')
-rw-r--r-- | src/compiler/glsl/ast.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/compiler/glsl/ast.h b/src/compiler/glsl/ast.h index eee22482812..2a38a4b1f73 100644 --- a/src/compiler/glsl/ast.h +++ b/src/compiler/glsl/ast.h @@ -28,6 +28,7 @@ #include "list.h" #include "glsl_parser_extras.h" #include "compiler/glsl_types.h" +#include "util/bitset.h" struct _mesa_glsl_parse_state; @@ -473,8 +474,11 @@ enum { struct ast_type_qualifier { DECLARE_RALLOC_CXX_OPERATORS(ast_type_qualifier); + DECLARE_BITSET_T(bitset_t, 128); + + union flags { + flags() : i(0) {} - union { struct { unsigned invariant:1; unsigned precise:1; @@ -636,7 +640,7 @@ struct ast_type_qualifier { q; /** \brief Set of flags, accessed as a bitmask. */ - uint64_t i; + bitset_t i; } flags; /** Precision of the type (highp/medium/lowp). */ |