Mesa (master): nir: fix a bug with constant folding non-per-component instructions

Connor Abbott cwabbott0 at kemper.freedesktop.org
Tue Jan 27 02:30:14 UTC 2015


Module: Mesa
Branch: master
Commit: f1a9252defb77f3986305c6a1fc9592093b5a4e5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f1a9252defb77f3986305c6a1fc9592093b5a4e5

Author: Connor Abbott <cwabbott0 at gmail.com>
Date:   Sun Jan 25 11:47:53 2015 -0500

nir: fix a bug with constant folding non-per-component instructions

Before, we were only copying the first N channels, where N is the size
of the SSA destination, which is fine for per-component instructions,
but non-per-component instructions like fdot3 can have more source
components than destination components. Fix this using the helper
function introduced in the last patch.

v2: use new helper name

Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>
Signed-off-by: Connor Abbott <cwabbott0 at gmail.com>

---

 src/glsl/nir/nir_opt_constant_folding.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/glsl/nir/nir_opt_constant_folding.c b/src/glsl/nir/nir_opt_constant_folding.c
index f727453..85c09fc 100644
--- a/src/glsl/nir/nir_opt_constant_folding.c
+++ b/src/glsl/nir/nir_opt_constant_folding.c
@@ -56,7 +56,8 @@ constant_fold_alu_instr(nir_alu_instr *instr, void *mem_ctx)
          return false;
       nir_load_const_instr* load_const = nir_instr_as_load_const(src_instr);
 
-      for (unsigned j = 0; j < instr->dest.dest.ssa.num_components; j++) {
+      for (unsigned j = 0; j < nir_ssa_alu_instr_src_components(instr, i);
+           j++) {
          src[i].u[j] = load_const->value.u[instr->src[i].swizzle[j]];
       }
 




More information about the mesa-commit mailing list