summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKarol Herbst <[email protected]>2018-04-22 03:29:07 +0200
committerKarol Herbst <[email protected]>2018-04-26 11:16:15 +0200
commit227b1af866112236e6788396731f2c6b4a050525 (patch)
treed09b88bfb92a09d4071a866d21ed4e424e7b7346 /src
parent14943add4440e9e79f93e039b788d287eeec2463 (diff)
nir/opt_constant_folding: fix folding of 8 and 16 bit ints
Signed-off-by: Karol Herbst <[email protected]> Reviewed-by: Jose Maria Casanova Crespo <[email protected]> Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/compiler/nir/nir_opt_constant_folding.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/compiler/nir/nir_opt_constant_folding.c b/src/compiler/nir/nir_opt_constant_folding.c
index d6be807b3dc..a848b145874 100644
--- a/src/compiler/nir/nir_opt_constant_folding.c
+++ b/src/compiler/nir/nir_opt_constant_folding.c
@@ -76,10 +76,20 @@ constant_fold_alu_instr(nir_alu_instr *instr, void *mem_ctx)
for (unsigned j = 0; j < nir_ssa_alu_instr_src_components(instr, i);
j++) {
- if (load_const->def.bit_size == 64)
+ switch(load_const->def.bit_size) {
+ case 64:
src[i].u64[j] = load_const->value.u64[instr->src[i].swizzle[j]];
- else
+ break;
+ case 32:
src[i].u32[j] = load_const->value.u32[instr->src[i].swizzle[j]];
+ break;
+ case 16:
+ src[i].u16[j] = load_const->value.u16[instr->src[i].swizzle[j]];
+ break;
+ case 8:
+ src[i].u8[j] = load_const->value.u8[instr->src[i].swizzle[j]];
+ break;
+ }
}
/* We shouldn't have any source modifiers in the optimization loop. */