From 29af29b8dca1c468294205a126c49084c7dcecf2 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 11 Jul 2013 06:39:05 +0800 Subject: [PATCH] ilo: correctly initialize undefined registers in fs Initialize all 4 channels of undefined registers (that is, TEMPs that are used before being assigned) in FS. --- src/gallium/drivers/ilo/shader/toy_tgsi.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/ilo/shader/toy_tgsi.c b/src/gallium/drivers/ilo/shader/toy_tgsi.c index ad6161d5894..bf61cbbf537 100644 --- a/src/gallium/drivers/ilo/shader/toy_tgsi.c +++ b/src/gallium/drivers/ilo/shader/toy_tgsi.c @@ -2136,11 +2136,21 @@ ra_get_src(struct toy_tgsi *tgsi, struct toy_dst dst = tdst_from(src); dst.writemask = TOY_WRITEMASK_XYZW; - /* - * Always initialize registers. Otherwise, if the random value - * ends up in a VUE, FS may fail to interpolate correctly. - */ - tc_MOV(tgsi->tc, dst, tsrc_type(tsrc_imm_d(0), type)); + /* always initialize registers before use */ + if (tgsi->aos) { + tc_MOV(tgsi->tc, dst, tsrc_type(tsrc_imm_d(0), type)); + } + else { + struct toy_dst tdst[4]; + int i; + + tdst_transpose(dst, tdst); + + for (i = 0; i < 4; i++) { + tc_MOV(tgsi->tc, tdst[i], + tsrc_type(tsrc_imm_d(0), type)); + } + } } break; default: -- 2.30.2