diff options
author | Kenneth Graunke <[email protected]> | 2016-05-18 12:14:02 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2016-05-20 14:29:04 -0700 |
commit | 12ab7fc6ac1ca785afb1126607bb95ea26473e06 (patch) | |
tree | 26c52e1641052fda7e8b23a94596afa068da62b6 /src/compiler | |
parent | b8b1b1c34cfa7f3c68872b5726eaf554474ea464 (diff) |
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 <[email protected]>
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/nir/nir_lower_wpos_ytransform.c | 20 |
1 files 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 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, |