i965: Disable compaction for EOT send messages
AFAICT, there is no real way to make sure a send message with EOT is properly ignored from compact, nor can I see a way to actually encode EOT while compacting. Before the single send optimization we'd always bail because we hit the is_immediate && !is_compactable_immediate case. However, with single send, is_immediate is not true, and so we end up trying to compact the un-compactible. Without this, any compacting single send instruction will hang because the EOT isn't there. I am not sure how I didn't hit this when I originally enabled the optimization. I didn't check if some surrounding code changed. I know Neil and Matt were both looking into this. I did a quick search and didn't see any patches out there to handle this. Please ignore if this has already been sent by someone. (Direct me to it and I will review it). Reported-by: Neil Roberts <neil@linux.intel.com> Reported-by: Mark Janes <mark.a.janes@intel.com> Tested-by: Mark Janes <mark.a.janes@intel.com> Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
c0d2b83f0b
commit
b307921c3f
|
@ -849,6 +849,12 @@ set_3src_source_index(const struct brw_device_info *devinfo,
|
|||
static bool
|
||||
has_unmapped_bits(const struct brw_device_info *devinfo, brw_inst *src)
|
||||
{
|
||||
/* EOT can only be mapped on a send if the src1 is an immediate */
|
||||
if ((brw_inst_opcode(devinfo, src) == BRW_OPCODE_SENDC ||
|
||||
brw_inst_opcode(devinfo, src) == BRW_OPCODE_SEND) &&
|
||||
brw_inst_eot(devinfo, src))
|
||||
return true;
|
||||
|
||||
/* Check for instruction bits that don't map to any of the fields of the
|
||||
* compacted instruction. The instruction cannot be compacted if any of
|
||||
* them are set. They overlap with:
|
||||
|
|
Loading…
Reference in New Issue