From: Kenneth Graunke Date: Wed, 18 May 2016 19:14:02 +0000 (-0700) Subject: nir: Don't use ffma in nir_lower_wpos_ytransform(). X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=12ab7fc6ac1ca785afb1126607bb95ea26473e06;p=mesa.git nir: Don't use ffma in nir_lower_wpos_ytransform(). 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(). Signed-off-by: Kenneth Graunke --- diff --git a/src/compiler/nir/nir_lower_wpos_ytransform.c b/src/compiler/nir/nir_lower_wpos_ytransform.c index 36e25b933ae..ccf0fd351a7 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,