i965/ir: Make BROADCAST emit an unmasked single-channel move.
authorFrancisco Jerez <currojerez@riseup.net>
Thu, 19 May 2016 07:10:03 +0000 (00:10 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Sat, 28 May 2016 06:29:04 +0000 (23:29 -0700)
commit81bc6de8c0f7faafd0f3b0aee944a14ba3ef0b64
tree15be42f1cedc34eb105d7d8fb7d0838c5c9a005c
parent41562eb8f33558f02ff8f53b3094a0e6d54e4c49
i965/ir: Make BROADCAST emit an unmasked single-channel move.

Alternatively we could have extended the current semantics to 32-wide
mode by changing brw_broadcast() to emit multiple indexed MOV
instructions in the generator copying the selected value to all
destination registers, but it seemed rather silly to waste EU cycles
unnecessarily copying the exact same value 32 times in the GRF.

The vstride change in the Align16 path is required to avoid assertions
in validate_reg() since the change causes the execution size of the
MOV and SEL instructions to be equal to the source region width.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/drivers/dri/i965/brw_defines.h
src/mesa/drivers/dri/i965/brw_eu_emit.c
src/mesa/drivers/dri/i965/brw_fs_generator.cpp
src/mesa/drivers/dri/i965/brw_vec4_generator.cpp