Ian Romanick <i...@freedesktop.org> writes: > From: Ian Romanick <ian.d.roman...@intel.com> > > Fixes a giant pile of GCC warnings: > > builtin_types.cpp:60:1: warning: missing initializer for member > 'glsl_struct_field::stream' [-Wmissing-field-initializers] > > I had to add a default constructor because a non-default constructor > was added. Otherwise the only constructor would be the one with > parameters, and all the plases like > > glsl_struct_field foo; > > would fail to compile. > > I wanted to do this in two patches. All of the initializers of > glsl_struct_field structures had to be converted to use the > constructor because C++ apparently forces you to do one or the other: > > builtin_types.cpp:61:1: error: could not convert '{glsl_type::float_type, > "near", -1, 0, 0, 0, GLSL_MATRIX_LAYOUT_INHERITED, 0, -1}' from > '<brace-enclosed initializer list>' to 'glsl_struct_field' > > Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> > Cc: Francisco Jerez <curroje...@riseup.net> > > Perhaps there's some other C++ way that I don't know.
There is a way for an initializer list to be interpreted as a constructor call, but it's C++11 :). > --- > src/glsl/builtin_types.cpp | 74 > +++++++++++++++++++------------------- > src/glsl/glsl_types.h | 13 +++++++ > src/glsl/tests/general_ir_test.cpp | 12 ++----- > src/glsl/tests/varyings_test.cpp | 10 +----- > 4 files changed, 53 insertions(+), 56 deletions(-) > > diff --git a/src/glsl/builtin_types.cpp b/src/glsl/builtin_types.cpp > index d92e2eb..ffbc5e6 100644 > --- a/src/glsl/builtin_types.cpp > +++ b/src/glsl/builtin_types.cpp > @@ -54,64 +54,64 @@ > &glsl_type::_struct_##NAME##_type; > > static const struct glsl_struct_field gl_DepthRangeParameters_fields[] = { > - { glsl_type::float_type, "near", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "far", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "diff", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > + glsl_struct_field(glsl_type::float_type, "near"), > + glsl_struct_field(glsl_type::float_type, "far"), > + glsl_struct_field(glsl_type::float_type, "diff"), > }; > > static const struct glsl_struct_field gl_PointParameters_fields[] = { > - { glsl_type::float_type, "size", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "sizeMin", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "sizeMax", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "fadeThresholdSize", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "distanceConstantAttenuation", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "distanceLinearAttenuation", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "distanceQuadraticAttenuation", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > + glsl_struct_field(glsl_type::float_type, "size"), > + glsl_struct_field(glsl_type::float_type, "sizeMin"), > + glsl_struct_field(glsl_type::float_type, "sizeMax"), > + glsl_struct_field(glsl_type::float_type, "fadeThresholdSize"), > + glsl_struct_field(glsl_type::float_type, "distanceConstantAttenuation"), > + glsl_struct_field(glsl_type::float_type, "distanceLinearAttenuation"), > + glsl_struct_field(glsl_type::float_type, "distanceQuadraticAttenuation"), > }; > > static const struct glsl_struct_field gl_MaterialParameters_fields[] = { > - { glsl_type::vec4_type, "emission", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::vec4_type, "ambient", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::vec4_type, "diffuse", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::vec4_type, "specular", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "shininess", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > + glsl_struct_field(glsl_type::vec4_type, "emission"), > + glsl_struct_field(glsl_type::vec4_type, "ambient"), > + glsl_struct_field(glsl_type::vec4_type, "diffuse"), > + glsl_struct_field(glsl_type::vec4_type, "specular"), > + glsl_struct_field(glsl_type::float_type, "shininess"), > }; > > static const struct glsl_struct_field gl_LightSourceParameters_fields[] = { > - { glsl_type::vec4_type, "ambient", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::vec4_type, "diffuse", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::vec4_type, "specular", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::vec4_type, "position", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::vec4_type, "halfVector", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::vec3_type, "spotDirection", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "spotExponent", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "spotCutoff", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "spotCosCutoff", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "constantAttenuation", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "linearAttenuation", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "quadraticAttenuation", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > + glsl_struct_field(glsl_type::vec4_type, "ambient"), > + glsl_struct_field(glsl_type::vec4_type, "diffuse"), > + glsl_struct_field(glsl_type::vec4_type, "specular"), > + glsl_struct_field(glsl_type::vec4_type, "position"), > + glsl_struct_field(glsl_type::vec4_type, "halfVector"), > + glsl_struct_field(glsl_type::vec3_type, "spotDirection"), > + glsl_struct_field(glsl_type::float_type, "spotExponent"), > + glsl_struct_field(glsl_type::float_type, "spotCutoff"), > + glsl_struct_field(glsl_type::float_type, "spotCosCutoff"), > + glsl_struct_field(glsl_type::float_type, "constantAttenuation"), > + glsl_struct_field(glsl_type::float_type, "linearAttenuation"), > + glsl_struct_field(glsl_type::float_type, "quadraticAttenuation"), > }; > > static const struct glsl_struct_field gl_LightModelParameters_fields[] = { > - { glsl_type::vec4_type, "ambient", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > + glsl_struct_field(glsl_type::vec4_type, "ambient"), > }; > > static const struct glsl_struct_field gl_LightModelProducts_fields[] = { > - { glsl_type::vec4_type, "sceneColor", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > + glsl_struct_field(glsl_type::vec4_type, "sceneColor"), > }; > > static const struct glsl_struct_field gl_LightProducts_fields[] = { > - { glsl_type::vec4_type, "ambient", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::vec4_type, "diffuse", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::vec4_type, "specular", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > + glsl_struct_field(glsl_type::vec4_type, "ambient"), > + glsl_struct_field(glsl_type::vec4_type, "diffuse"), > + glsl_struct_field(glsl_type::vec4_type, "specular"), > }; > > static const struct glsl_struct_field gl_FogParameters_fields[] = { > - { glsl_type::vec4_type, "color", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "density", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "start", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "end", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > - { glsl_type::float_type, "scale", -1, 0, 0, 0, > GLSL_MATRIX_LAYOUT_INHERITED, 0 }, > + glsl_struct_field(glsl_type::vec4_type, "color"), > + glsl_struct_field(glsl_type::float_type, "density"), > + glsl_struct_field(glsl_type::float_type, "start"), > + glsl_struct_field(glsl_type::float_type, "end"), > + glsl_struct_field(glsl_type::float_type, "scale"), > }; > > #include "builtin_type_macros.h" > diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h > index 52672b3..e7c73da 100644 > --- a/src/glsl/glsl_types.h > +++ b/src/glsl/glsl_types.h > @@ -781,6 +781,19 @@ struct glsl_struct_field { > * streams (as in ir_variable::stream). -1 otherwise. > */ > int stream; > + > + glsl_struct_field(const struct glsl_type *_type, const char *_name) > + : type(_type), name(_name), location(-1), interpolation(0), > centroid(0), > + sample(0), matrix_layout(GLSL_MATRIX_LAYOUT_INHERITED), patch(0), > + stream(-1) > + { > + /* empty */ > + } > + > + glsl_struct_field() > + { > + /* empty */ The empty constructor does match the previous semantics, but it may be a good idea to initialize the whole struct to some sane defaults while you're at it. Either way this patch is: Reviewed-by: Francisco Jerez <curroje...@riseup.net> > + } > }; > > static inline unsigned int > diff --git a/src/glsl/tests/general_ir_test.cpp > b/src/glsl/tests/general_ir_test.cpp > index 882642d..217305b 100644 > --- a/src/glsl/tests/general_ir_test.cpp > +++ b/src/glsl/tests/general_ir_test.cpp > @@ -31,11 +31,7 @@ TEST(ir_variable_constructor, interface) > void *mem_ctx = ralloc_context(NULL); > > static const glsl_struct_field f[] = { > - { > - glsl_type::vec(4), > - "v", > - false > - } > + glsl_struct_field(glsl_type::vec(4), "v") > }; > > const glsl_type *const interface = > @@ -60,11 +56,7 @@ TEST(ir_variable_constructor, interface_array) > void *mem_ctx = ralloc_context(NULL); > > static const glsl_struct_field f[] = { > - { > - glsl_type::vec(4), > - "v", > - false > - } > + glsl_struct_field(glsl_type::vec(4), "v") > }; > > const glsl_type *const interface = > diff --git a/src/glsl/tests/varyings_test.cpp > b/src/glsl/tests/varyings_test.cpp > index 62f8c6b..0c4e0a4 100644 > --- a/src/glsl/tests/varyings_test.cpp > +++ b/src/glsl/tests/varyings_test.cpp > @@ -76,15 +76,7 @@ public: > link_varyings::link_varyings() > { > static const glsl_struct_field f[] = { > - { > - glsl_type::vec(4), > - "v", > - false, > - 0, > - 0, > - 0, > - 0 > - } > + glsl_struct_field(glsl_type::vec(4), "v") > }; > > this->simple_interface = > -- > 2.1.0
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev