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 <mattst88@gmail.com>
This commit is contained in:
Iago Toral Quiroga 2016-06-29 10:49:47 +02:00 committed by Samuel Iglesias Gonsálvez
parent 23278a75ce
commit bdf5498c6b

View file

@ -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;
}
}