Mesa (master): pan/bi: Lower FP32 transcendentals where required

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Feb 8 14:06:19 UTC 2021


Module: Mesa
Branch: master
Commit: c4f26d12f9c761d539022e4f1662b02e39efa6f6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c4f26d12f9c761d539022e4f1662b02e39efa6f6

Author: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Date:   Fri Jan 15 16:39:58 2021 -0500

pan/bi: Lower FP32 transcendentals where required

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Acked-by: Boris Brezillon <boris.brezillon at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8894>

---

 src/panfrost/bifrost/bifrost_compile.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c
index 85d075ee479..b300b7d32ca 100644
--- a/src/panfrost/bifrost/bifrost_compile.c
+++ b/src/panfrost/bifrost/bifrost_compile.c
@@ -1196,9 +1196,13 @@ bi_emit_alu(bi_builder *b, nir_alu_instr *instr)
                 break;
 
         case nir_op_fexp2: {
-                /* TODO G71 */
                 assert(sz == 32); /* should've been lowered */
 
+                if (b->shader->quirks & BIFROST_NO_FP32_TRANSCENDENTALS) {
+                        bi_lower_fexp2_32(b, dst, s0);
+                        break;
+                }
+
                 /* multiply by 1.0 * 2*24 */
                 bi_index scale = bi_fma_rscale_f32(b, s0, bi_imm_f32(1.0f),
                                 bi_zero(), bi_imm_u32(24), BI_ROUND_NONE,
@@ -1209,8 +1213,13 @@ bi_emit_alu(bi_builder *b, nir_alu_instr *instr)
         }
 
         case nir_op_flog2: {
-                /* TODO G71 */
                 assert(sz == 32); /* should've been lowered */
+
+                if (b->shader->quirks & BIFROST_NO_FP32_TRANSCENDENTALS) {
+                        bi_lower_flog2_32(b, dst, s0);
+                        break;
+                }
+
                 bi_index frexp = bi_frexpe_f32(b, s0, true, false);
                 bi_index frexpi = bi_s32_to_f32(b, frexp, BI_ROUND_RTZ);
                 bi_index add = bi_fadd_lscale_f32(b, bi_imm_f32(-1.0f), s0);
@@ -1494,11 +1503,17 @@ bi_emit_alu(bi_builder *b, nir_alu_instr *instr)
                 break;
 
         case nir_op_frsq:
-                bi_frsq_to(b, sz, dst, s0);
+                if (sz == 32 && b->shader->quirks & BIFROST_NO_FP32_TRANSCENDENTALS)
+                        bi_lower_frsq_32(b, dst, s0);
+                else
+                        bi_frsq_to(b, sz, dst, s0);
                 break;
 
         case nir_op_frcp:
-                bi_frcp_to(b, sz, dst, s0);
+                if (sz == 32 && b->shader->quirks & BIFROST_NO_FP32_TRANSCENDENTALS)
+                        bi_lower_frcp_32(b, dst, s0);
+                else
+                        bi_frcp_to(b, sz, dst, s0);
                 break;
 
         default:



More information about the mesa-commit mailing list