[Mesa-dev] [PATCH] i965/gen7: Use WE_all mode when enabling channel masks for URB write.

Kenneth Graunke kenneth at whitecape.org
Sat Mar 23 10:29:52 PDT 2013

On 03/23/2013 09:17 AM, Paul Berry wrote:
> Gen7 adds mask bits to the message header for a URB write which allow
> the write to apply only to certain channels.  We don't use this
> functionality, so to ensure that the entire write always occurs, we
> emit an OR instruction to set the mask bits.
> With the advent of geometry shaders, URB writes won't just happen at
> the end of a thread; they will happen in mid-thread too.  Thus, we can
> no longer rely on channel 0 being enabled, so we need to emit the OR
> instruction in WE_all mode to ensure that it is executed.
> ---
>   src/mesa/drivers/dri/i965/brw_eu_emit.c | 1 +
>   1 file changed, 1 insertion(+)
> diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
> index 992e784..2355626 100644
> --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
> +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
> @@ -2184,6 +2184,7 @@ void brw_urb_WRITE(struct brw_compile *p,
>         /* Enable Channel Masks in the URB_WRITE_HWORD message header */
>         brw_push_insn_state(p);
>         brw_set_access_mode(p, BRW_ALIGN_1);
> +      brw_set_mask_control(p, BRW_MASK_DISABLE);
>         brw_OR(p, retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, msg_reg_nr, 5),
>   		       BRW_REGISTER_TYPE_UD),
>   	        retype(brw_vec1_grf(0, 5), BRW_REGISTER_TYPE_UD),

Oh, yeah, that's a good idea.  Honestly, it should've been MASK_DISABLE 
to begin with, I just didn't know what I was doing when I wrote that 
code, and it happened to work out.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

I've always wondered what we -would- use that for.

More information about the mesa-dev mailing list