From: Chia-I Wu Date: Fri, 27 Sep 2013 07:23:56 +0000 (+0800) Subject: i965: make BRW_COMPRESSION_2NDHALF valid for brw_SAMPLE X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=44f0777f17df13f504602e76d7f5ba0edc642081;p=mesa.git i965: make BRW_COMPRESSION_2NDHALF valid for brw_SAMPLE SIMD8 sampler messages are allowed in SIMD16 mode, and they could not work without BRW_COMPRESSION_2NDHALF. Later PRMs (gen5 and later) do not explicitly state whether BRW_COMPRESSION_2NDHALF is allowed, but they do have examples using send with SecHalf. It should be safe to assume SecHalf is valid. Signed-off-by: Chia-I Wu Reviewed-by: Eric Anholt --- diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c index d9ba110f27f..33245d701e0 100644 --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c @@ -2197,7 +2197,22 @@ void brw_SAMPLE(struct brw_compile *p, insn = next_insn(p, BRW_OPCODE_SEND); insn->header.predicate_control = 0; /* XXX */ - insn->header.compression_control = BRW_COMPRESSION_NONE; + + /* From the 965 PRM (volume 4, part 1, section 14.2.41): + * + * "Instruction compression is not allowed for this instruction (that + * is, send). The hardware behavior is undefined if this instruction is + * set as compressed. However, compress control can be set to "SecHalf" + * to affect the EMask generation." + * + * No similar wording is found in later PRMs, but there are examples + * utilizing send with SecHalf. More importantly, SIMD8 sampler messages + * are allowed in SIMD16 mode and they could not work without SecHalf. For + * these reasons, we allow BRW_COMPRESSION_2NDHALF here. + */ + if (insn->header.compression_control != BRW_COMPRESSION_2NDHALF) + insn->header.compression_control = BRW_COMPRESSION_NONE; + if (brw->gen < 6) insn->header.destreg__conditionalmod = msg_reg_nr;