i965/fs: Determine partial writes based on the destination width

Now that we track both halves of a 16-wide vgrf, we no longer need to worry
about force_sechalf or force_uncompressed.  The only real issue is if the
destination is too small.

Signed-off-by: Jason Ekstrand <jason.ekstrand@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Jason Ekstrand 2014-08-29 17:18:42 -07:00
parent 27d7ef094a
commit fbc0a798ee
2 changed files with 3 additions and 5 deletions

View file

@ -821,8 +821,8 @@ bool
fs_inst::is_partial_write() const
{
return ((this->predicate && this->opcode != BRW_OPCODE_SEL) ||
this->force_uncompressed ||
this->force_sechalf || !this->dst.is_contiguous());
(this->dst.width * type_sz(this->dst.type)) < 32 ||
!this->dst.is_contiguous());
}
int

View file

@ -787,11 +787,9 @@ fs_visitor::spill_reg(int spill_reg)
* inst->regs_written(), then we need to unspill the destination
* since we write back out all of the regs_written().
*/
if (inst->predicate || inst->force_uncompressed ||
inst->force_sechalf || inst->dst.subreg_offset) {
if (inst->is_partial_write())
emit_unspill(block, inst, spill_src, subset_spill_offset,
inst->regs_written);
}
emit_spill(block, inst, spill_src, subset_spill_offset,
inst->regs_written);