i965/vs: When asked to make a dst_reg for a src.xxxx, just write to src.x.
We have several places in our pull constant handling where we make a temporary src_reg for an int, and then turn it into a dst. In doing so, we were writing to the dst.xyzw, so we never register coalesced it with a later mov from dst.x to real_dst.x. These extra channels written would be removed if we had channel-wise DCE in the backend, but we don't. Fix it for now by just not writing these extra channels that won't get used. Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
007a88ed24
commit
3badbf7f7f
1 changed files with 8 additions and 1 deletions
|
|
@ -200,7 +200,14 @@ dst_reg::dst_reg(src_reg reg)
|
|||
this->reg = reg.reg;
|
||||
this->reg_offset = reg.reg_offset;
|
||||
this->type = reg.type;
|
||||
this->writemask = WRITEMASK_XYZW;
|
||||
/* How should we do writemasking when converting from a src_reg? It seems
|
||||
* pretty obvious that for src.xxxx the caller wants to write to src.x, but
|
||||
* what about for src.wx? Just special-case src.xxxx for now.
|
||||
*/
|
||||
if (reg.swizzle == BRW_SWIZZLE_XXXX)
|
||||
this->writemask = WRITEMASK_X;
|
||||
else
|
||||
this->writemask = WRITEMASK_XYZW;
|
||||
this->reladdr = reg.reladdr;
|
||||
this->fixed_hw_reg = reg.fixed_hw_reg;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue