[Mesa-dev] [PATCH 07/12] nir: Don't use ffma in nir_lower_wpos_ytransform().

Rob Clark robdclark at gmail.com
Thu May 19 16:57:44 UTC 2016


On Wed, May 18, 2016 at 6:00 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> ffma is an explicitly fused multiply add with higher precision.
> The optimizer will take care of promoting mul/add to fma when
> it's beneficial to do so.
>
> This fixes failures on Gen4-5 when using this pass, as those platforms
> don't actually implement fma().

hmm, we can't rely on the opt-algebraic pass to do this?

BR,
-R

> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/compiler/nir/nir_lower_wpos_ytransform.c | 20 ++++++++------------
>  1 file changed, 8 insertions(+), 12 deletions(-)
>
> diff --git a/src/compiler/nir/nir_lower_wpos_ytransform.c b/src/compiler/nir/nir_lower_wpos_ytransform.c
> index 36e25b9..ccf0fd3 100644
> --- a/src/compiler/nir/nir_lower_wpos_ytransform.c
> +++ b/src/compiler/nir/nir_lower_wpos_ytransform.c
> @@ -123,19 +123,15 @@ emit_wpos_adjustment(lower_wpos_ytransform_state *state,
>      * inversion/identity, or the other way around if we're drawing to an FBO.
>      */
>     if (invert) {
> -      /* MAD wpos_temp.y, wpos_input, wpostrans.xxxx, wpostrans.yyyy
> -       */
> -      wpos_temp_y = nir_ffma(b,
> -                             nir_channel(b, wpos_temp, 1),
> -                             nir_channel(b, wpostrans, 0),
> -                             nir_channel(b, wpostrans, 1));
> +      /* wpos_temp.y = wpos_input * wpostrans.xxxx + wpostrans.yyyy */
> +      wpos_temp_y = nir_fadd(b, nir_fmul(b, nir_channel(b, wpos_temp, 1),
> +                                            nir_channel(b, wpostrans, 0)),
> +                                nir_channel(b, wpostrans, 1));
>     } else {
> -      /* MAD wpos_temp.y, wpos_input, wpostrans.zzzz, wpostrans.wwww
> -       */
> -      wpos_temp_y = nir_ffma(b,
> -                             nir_channel(b, wpos_temp, 1),
> -                             nir_channel(b, wpostrans, 2),
> -                             nir_channel(b, wpostrans, 3));
> +      /* wpos_temp.y = wpos_input * wpostrans.zzzz + wpostrans.wwww */
> +      wpos_temp_y = nir_fadd(b, nir_fmul(b, nir_channel(b, wpos_temp, 1),
> +                                            nir_channel(b, wpostrans, 2)),
> +                                nir_channel(b, wpostrans, 3));
>     }
>
>     wpos_temp = nir_vec4(b,
> --
> 2.8.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list