On 2015-07-01 11:51:37, Connor Abbott wrote: > From: Jordan Justen <jordan.l.jus...@intel.com> > > If a source register in the push constant registers uses more than on
Doh. I have to point out my own typo. :) on=>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) > > Reviewed-by: Connor Abbott <connor.w.abb...@intel.com> > Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com> > --- > src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp > b/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp > index 8e5621d..620fc23 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp > @@ -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); > + } > } > } > > -- > 2.4.3 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev