[Mesa-dev] [RFC PATCH 5/5] i965: Skip execution size adjustment for instructions of width 4

Jason Ekstrand jason at jlekstrand.net
Wed Dec 9 08:10:35 PST 2015


On Dec 9, 2015 4:16 AM, "Iago Toral Quiroga" <itoral at igalia.com> wrote:
>
> This code in brw_set_dest adjusts the execution size of any instruction
> with a dst.width < 8. However, we don't want to do this with instructions
> operating on doubles, since these will have a width of 4, but still
> need an execution size of 8 (for SIMD8). Unfortunately, we can't just
check
> the size of the operands involved to detect if we are doing an operation
on
> doubles, because we can have instructions that do operations on double
> operands interpreted as UD, operating on any of its 2 32-bit components.
>
> Previous commits have made it so we never emit instructions with a
horizontal
> width of 4 that don't have the correct execution size set for gen7/gen8,
so
> we can skip it in this case, avoiding the conflicts with fp64
requirements.
>
> Expanding the same fix to other hardware generations requires many more
> changes but since we are not targetting fp64 support on them
> wer don't really care for now.
> ---
>  src/mesa/drivers/dri/i965/brw_eu_emit.c | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c
b/src/mesa/drivers/dri/i965/brw_eu_emit.c
> index 78f2c8c..50a8771 100644
> --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
> +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
> @@ -202,8 +202,20 @@ brw_set_dest(struct brw_codegen *p, brw_inst *inst,
struct brw_reg dest)
>     /* Generators should set a default exec_size of either 8 (SIMD4x2 or
SIMD8)
>      * or 16 (SIMD16), as that's normally correct.  However, when dealing
with
>      * small registers, we automatically reduce it to match the register
size.
> +    *
> +    * In platforms that support fp64 we can emit instructions with a
width of
> +    * 4 that need two SIMD8 registers and an exec_size of 8 or 16. In
these
> +    * cases we need to make sure that these instructions have their exec
sizes
> +    * set properly when they are emitted and we can't rely on this code
to fix
> +    * it.
>      */
> -   if (dest.width < BRW_EXECUTE_8)
> +   bool fix_exec_size;
> +   if (devinfo->gen == 7 || devinfo->gen == 8)

If we're doing to take this approach, we definitely want to make it gen > 6
or something so we include future gens.  Really gen > 4 is probably doable
since the only real problem is the legacy clipping code.

> +      fix_exec_size = dest.width < BRW_EXECUTE_4;
> +   else
> +      fix_exec_size = dest.width < BRW_EXECUTE_8;
> +
> +   if (fix_exec_size)
>        brw_inst_set_exec_size(devinfo, inst, dest.width);
>  }
>
> --
> 2.1.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20151209/5fe8acce/attachment-0001.html>


More information about the mesa-dev mailing list