On 11/05/16 05:56, Francisco Jerez wrote: > Samuel Iglesias Gonsálvez <sigles...@igalia.com> writes: > >> From: Connor Abbott <connor.w.abb...@intel.com> >> >> v2 (Iago) >> - Fixup accessibility in backend_reg >> >> Signed-off-by: Iago Toral Quiroga <ito...@igalia.com> > > I've just noticed (while running valgrind) that this patch causes > serious breakage in the back-end. The reason is that the extra bits > required to make room for the df field of the union don't get > initialized in all codepaths, so backend_reg comparisons done using > memcmp() can basically return random results now. Can you please look > into this? Some ways to fix it would be to make sure we zero-initialize > the whole brw_reg in all cases (or at least the union padding), or stop > using memcmp() to compare registers -- I guess the latter might be > somewhat less intrusive and increase the likelihood that we can get this > sorted out timely. >
Attached is a patch for it, I initialized all union bits to zero before setting them in brw_reg(). Can you test it? If it is not fixed, Would you mind sending me an example to run it with valgrind here? I am thinking that maybe we want to change backend_reg::equals() if this doesn't work. Sam >> --- >> src/mesa/drivers/dri/i965/brw_reg.h | 9 +++++++++ >> src/mesa/drivers/dri/i965/brw_shader.h | 1 + >> 2 files changed, 10 insertions(+) >> >> diff --git a/src/mesa/drivers/dri/i965/brw_reg.h >> b/src/mesa/drivers/dri/i965/brw_reg.h >> index b84c709..6d51623 100644 >> --- a/src/mesa/drivers/dri/i965/brw_reg.h >> +++ b/src/mesa/drivers/dri/i965/brw_reg.h >> @@ -254,6 +254,7 @@ struct brw_reg { >> unsigned pad1:1; >> }; >> >> + double df; >> float f; >> int d; >> unsigned ud; >> @@ -544,6 +545,14 @@ brw_imm_reg(enum brw_reg_type type) >> >> /** Construct float immediate register */ >> static inline struct brw_reg >> +brw_imm_df(double df) >> +{ >> + struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_DF); >> + imm.df = df; >> + return imm; >> +} >> + >> +static inline struct brw_reg >> brw_imm_f(float f) >> { >> struct brw_reg imm = brw_imm_reg(BRW_REGISTER_TYPE_F); >> diff --git a/src/mesa/drivers/dri/i965/brw_shader.h >> b/src/mesa/drivers/dri/i965/brw_shader.h >> index fc228f6..f6f6167 100644 >> --- a/src/mesa/drivers/dri/i965/brw_shader.h >> +++ b/src/mesa/drivers/dri/i965/brw_shader.h >> @@ -90,6 +90,7 @@ struct backend_reg : private brw_reg >> using brw_reg::width; >> using brw_reg::hstride; >> >> + using brw_reg::df; >> using brw_reg::f; >> using brw_reg::d; >> using brw_reg::ud; >> -- >> 2.5.0 >> >> _______________________________________________ >> mesa-dev mailing list >> mesa-dev@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>From 35254624d63b77aa2024bc2b08612e28cae4bb98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20Iglesias=20Gons=C3=A1lvez?= <sigles...@igalia.com> Date: Wed, 11 May 2016 07:44:10 +0200 Subject: [PATCH] i965: initialize struct brw_reg's union bits to zero. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extra bits required to make room for the df field of the union don't get initialized in all codepaths, so backend_reg comparisons done using memcmp() can basically return random results. Initialize them to zero before setting the rest of union's fields. Signed-off-by: Samuel Iglesias Gonsálvez <sigles...@igalia.com> Reported-by: Francisco Jerez <curroje...@riseup.net> --- src/mesa/drivers/dri/i965/brw_reg.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_reg.h b/src/mesa/drivers/dri/i965/brw_reg.h index 6d51623..3b76d7d 100644 --- a/src/mesa/drivers/dri/i965/brw_reg.h +++ b/src/mesa/drivers/dri/i965/brw_reg.h @@ -338,6 +338,9 @@ brw_reg(enum brw_reg_file file, reg.subnr = subnr * type_sz(type); reg.nr = nr; + /* Initialize all union's bits to zero before setting them. */ + reg.df = 0; + /* Could do better: If the reg is r5.3<0;1,0>, we probably want to * set swizzle and writemask to W, as the lower bits of subnr will * be lost when converted to align16. This is probably too much to -- 2.5.0
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev