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