[Mesa-dev] [PATCH 05/22] i965/fs: consider execsize can be duplicated in lower_simd_with

Francisco Jerez currojerez at riseup.net
Mon Jan 9 23:41:39 UTC 2017


Samuel Iglesias Gonsálvez <siglesias at igalia.com> writes:

> From: "Juan A. Suarez Romero" <jasuarez at igalia.com>
>
> In IVB/VLV, for instructions dealing with DF, execsize will be
> duplicated in the final code.
>
> So take this in account when checking if instructions should be split.
> ---
>  src/mesa/drivers/dri/i965/brw_fs.cpp | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index 78f2124..cfce364 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -4551,8 +4551,15 @@ static unsigned
>  get_fpu_lowered_simd_width(const struct gen_device_info *devinfo,
>                             const fs_inst *inst)
>  {
> +   /* Note that in IVB/VLV for instructions that handles DF, we will duplicate
> +    * the exec_size. So take this value for calculus purposes.
> +    */
> +   unsigned exec_size = inst->exec_size;
> +   if (devinfo->gen == 7 && !devinfo->is_haswell && inst->exec_data_size() == 8)
> +      exec_size *= 2;
> +

NAK.  This won't have any useful effect because the max_width value
doesn't actually have any influence in the regioning restriction
calculations below, it's only used to accumulate the intermediate
execution size limits derived from each hardware restriction.  I don't
think you need to change any of the restrictions below for the result to
be correct in presence of exec size doubling.

>     /* Maximum execution size representable in the instruction controls. */
> -   unsigned max_width = MIN2(32, inst->exec_size);
> +   unsigned max_width = MIN2(32, exec_size);
>  
>     /* According to the PRMs:
>      *  "A. In Direct Addressing mode, a source cannot span more than 2
> @@ -4656,6 +4663,10 @@ get_fpu_lowered_simd_width(const struct gen_device_info *devinfo,
>           max_width = MIN2(max_width, channels_per_grf);
>     }
>  
> +   /* If we have duplicated exec_size, then readjust max_width if required. */
> +   if (exec_size != inst->exec_size && max_width == exec_size)
> +      max_width = inst->exec_size;
> +
>     /* Only power-of-two execution sizes are representable in the instruction
>      * control fields.
>      */
> -- 
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170109/adb76ce9/attachment.sig>


More information about the mesa-dev mailing list