From: Michel Dänzer Date: Wed, 5 Aug 2015 09:17:14 +0000 (+0900) Subject: glsl: Initialize patch member of glsl_struct_field X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f7ac4ef4eeea737115d0b574fed7ecae46426072;p=mesa.git glsl: Initialize patch member of glsl_struct_field There is apparently a subtle difference in C++ between F f; and F f(); The former will use the default constructor. If there is no default constructor specified, the compiler provides one that simply invokes the default constructor for each field. For built-in basic types, the default constructor does nothing. The later will, according to http://stackoverflow.com/questions/2417065/does-the-default-constructor-initialize-built-in-types) perform value-initialization of the type. For built-in types this means initializing to zero. The per_vertex_accumulator constructor is: per_vertex_accumulator::per_vertex_accumulator() : fields(), num_fields(0) { } This is the second form of constructor, so the glsl_struct_field objects were previously zero initialized. With the addition of an empty default constructor in commit 7ac946e5, per_vertex_accumulator::fields receive no initialization. Fixes a bunch of random (mostly tessellation related) piglit failures since commit 7ac946e5 ("glsl: Add constuctors for the common cases of glsl_struct_field"). Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91544 Reviewed-by: Ian Romanick --- diff --git a/src/glsl/builtin_variables.cpp b/src/glsl/builtin_variables.cpp index 0ff3a3f7062..53d3500b1f4 100644 --- a/src/glsl/builtin_variables.cpp +++ b/src/glsl/builtin_variables.cpp @@ -322,6 +322,7 @@ per_vertex_accumulator::add_field(int slot, const glsl_type *type, this->fields[this->num_fields].interpolation = INTERP_QUALIFIER_NONE; this->fields[this->num_fields].centroid = 0; this->fields[this->num_fields].sample = 0; + this->fields[this->num_fields].patch = 0; this->num_fields++; } @@ -1159,6 +1160,7 @@ builtin_variable_generator::generate_varyings() var->data.interpolation = fields[i].interpolation; var->data.centroid = fields[i].centroid; var->data.sample = fields[i].sample; + var->data.patch = fields[i].patch; var->init_interface_type(per_vertex_out_type); } }