From bdf5498c6b7870c14139279e76f1e4b281bed2cd Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Wed, 29 Jun 2016 10:49:47 +0200 Subject: [PATCH] i965/vec4: fix pack_uniform_registers for doubles We need to consider the fact that dvec3/4 require two vec4 slots. Reviewed-by: Matt Turner --- src/mesa/drivers/dri/i965/brw_vec4.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp index 42fde07c4ef..bce40b83104 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp @@ -610,13 +610,20 @@ vec4_visitor::pack_uniform_registers() if (inst->src[i].file != UNIFORM) continue; + assert(type_sz(inst->src[i].type) % 4 == 0); + unsigned channel_size = type_sz(inst->src[i].type) / 4; + int reg = inst->src[i].nr; for (int c = 0; c < 4; c++) { if (!(readmask & (1 << c))) continue; - chans_used[reg] = MAX2(chans_used[reg], - BRW_GET_SWZ(inst->src[i].swizzle, c) + 1); + unsigned channel = BRW_GET_SWZ(inst->src[i].swizzle, c) + 1; + unsigned used = MAX2(chans_used[reg], channel * channel_size); + if (used <= 4) + chans_used[reg] = used; + else + chans_used[reg + 1] = used - 4; } } -- 2.30.2