i965/fs: Mark last used ip for all regs read in the payload
If a source register in the push constant registers uses more than one register, then we wouldn't update payload_last_use_ip for subsequent registers. Unlike most uniform data pushed into registers, the CS gl_LocalInvocationID data varies per execution channel. Therefore for SIMD16 mode, we have vec16 data in the payload. In this case we then need to mark 2 registers in payload_last_use_ip as last used by the instruction. There's a similar situation for the z and w coordinates of gl_FragCoord for fragment shaders, where it had only happened to work before because of some bogus interferences which the next commit removes. (Connor: added bit about gl_FragCoord to commit message) Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Connor Abbott <connor.w.abbott@intel.com>
This commit is contained in:
committed by
Connor Abbott
parent
9f344b908a
commit
c4a2217e79
@@ -380,7 +380,10 @@ fs_visitor::setup_payload_interference(struct ra_graph *g,
|
||||
if (node_nr >= payload_node_count)
|
||||
continue;
|
||||
|
||||
payload_last_use_ip[node_nr] = use_ip;
|
||||
for (int j = 0; j < inst->regs_read(i); j++) {
|
||||
payload_last_use_ip[node_nr + j] = use_ip;
|
||||
assert(node_nr + j < payload_node_count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user