summaryrefslogtreecommitdiffstats
path: root/src/glsl
diff options
context:
space:
mode:
authorConnor Abbott <[email protected]>2015-01-25 11:47:53 -0500
committerConnor Abbott <[email protected]>2015-01-26 21:26:36 -0500
commitf1a9252defb77f3986305c6a1fc9592093b5a4e5 (patch)
treed171e242c454cb15ee0c77013c6806309babae54 /src/glsl
parent816f0515a2ca2dbacada24f7f79d65daf5c0fcf5 (diff)
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 <[email protected]> Signed-off-by: Connor Abbott <[email protected]>
Diffstat (limited to 'src/glsl')
-rw-r--r--src/glsl/nir/nir_opt_constant_folding.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/glsl/nir/nir_opt_constant_folding.c b/src/glsl/nir/nir_opt_constant_folding.c
index f727453b321..85c09fc4800 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]];
}