From e495d88453076a4fe552502d66d6a3869ab70e4a Mon Sep 17 00:00:00 2001 From: Lauri Kasanen Date: Fri, 3 May 2013 16:55:49 +0300 Subject: r600g: Correctly initialize the shader key, v2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Assigning a struct only copies the members - any padding is left as is. Thus this code: struct foo_t foo; foo = bar; leaves the padding of foo intact, ie uninitialized random garbage. This patch fixes constant shader recompiles by initializing the struct to zero. For completeness, memcpy is used to copy the key to the shader struct. NOTE: This is a candidate for the stable branches. Signed-off-by: Lauri Kasanen Reviewed-by: Marek Olšák Signed-off-by: Andreas Boll --- src/gallium/drivers/r600/r600_state_common.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/gallium/drivers') diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c index 87a2e2e55e7..fbac57688be 100644 --- a/src/gallium/drivers/r600/r600_state_common.c +++ b/src/gallium/drivers/r600/r600_state_common.c @@ -715,6 +715,7 @@ static int r600_shader_select(struct pipe_context *ctx, struct r600_pipe_shader * shader = NULL; int r; + memset(&key, 0, sizeof(key)); key = r600_shader_selector_key(ctx, sel); /* Check if we don't need to change anything. @@ -762,7 +763,7 @@ static int r600_shader_select(struct pipe_context *ctx, key = r600_shader_selector_key(ctx, sel); } - shader->key = key; + memcpy(&shader->key, &key, sizeof(key)); sel->num_shaders++; } -- cgit v1.2.3