intel/fs: Mark 64-bit values as being contiguous

This isn't often a problem , when we're in a compute shader, we must
push the thread local ID so we decrement the amount of available push
space by 1 and it's no longer even and 64-bit data can, in theory, span
it.  By marking those uniforms contiguous, we ensure that they never get
split in half between push and pull constants.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Cc: mesa-stable@lists.freedesktop.org
(cherry picked from commit 25f7453c9e)
This commit is contained in:
Jason Ekstrand 2017-10-02 20:25:11 -07:00 committed by Emil Velikov
parent e759beb906
commit 844b437034

View file

@ -1966,7 +1966,7 @@ fs_visitor::assign_constant_locations()
/* For each uniform slot, a value of true indicates that the given slot and
* the next slot must remain contiguous. This is used to keep us from
* splitting arrays apart.
* splitting arrays and 64-bit values apart.
*/
bool contiguous[uniforms];
memset(contiguous, 0, sizeof(contiguous));
@ -2003,6 +2003,9 @@ fs_visitor::assign_constant_locations()
if (constant_nr >= 0 && constant_nr < (int) uniforms) {
int regs_read = inst->components_read(i) *
type_sz(inst->src[i].type) / 4;
assert(regs_read <= 2);
if (regs_read == 2)
contiguous[constant_nr] = true;
for (int j = 0; j < regs_read; j++) {
is_live[constant_nr + j] = true;
bitsize_access[constant_nr + j] =