[Mesa-dev] [PATCH v2 3/4] glsl: explicitly zero out padding to gl_shader_variable bitfield
Nicolai Hähnle
nhaehnle at gmail.com
Mon Jul 3 12:34:34 UTC 2017
From: Nicolai Hähnle <nicolai.haehnle at amd.com>
Otherwise, the padding bits remain undefined, which leads to valgrind
errors when storing the gl_shader_variable in the disk cache.
v2: use rzalloc instead of an explicit padding member variable
---
src/compiler/glsl/linker.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 4aa4682..b406675 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -3723,21 +3723,24 @@ build_stageref(struct gl_shader_program *shProg, const char *name,
* Create gl_shader_variable from ir_variable class.
*/
static gl_shader_variable *
create_shader_variable(struct gl_shader_program *shProg,
const ir_variable *in,
const char *name, const glsl_type *type,
const glsl_type *interface_type,
bool use_implicit_location, int location,
const glsl_type *outermost_struct_type)
{
- gl_shader_variable *out = ralloc(shProg, struct gl_shader_variable);
+ /* Allocate zero-initialized memory to ensure that bitfield padding
+ * is zero.
+ */
+ gl_shader_variable *out = rzalloc(shProg, struct gl_shader_variable);
if (!out)
return NULL;
/* Since gl_VertexID may be lowered to gl_VertexIDMESA, but applications
* expect to see gl_VertexID in the program resource list. Pretend.
*/
if (in->data.mode == ir_var_system_value &&
in->data.location == SYSTEM_VALUE_VERTEX_ID_ZERO_BASE) {
out->name = ralloc_strdup(shProg, "gl_VertexID");
} else if ((in->data.mode == ir_var_shader_out &&
--
2.9.3
More information about the mesa-dev
mailing list