Mesa (main): ac/llvm: use fmac instead of mul+sub in face culling

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Oct 19 13:11:45 UTC 2021


Module: Mesa
Branch: main
Commit: 5e8f76b713a80c144383a96835727778b04365fd
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5e8f76b713a80c144383a96835727778b04365fd

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Fri Oct 15 04:48:51 2021 -0400

ac/llvm: use fmac instead of mul+sub in face culling

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13380>

---

 src/amd/llvm/ac_llvm_cull.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/amd/llvm/ac_llvm_cull.c b/src/amd/llvm/ac_llvm_cull.c
index ad406929bb0..5e7e0320802 100644
--- a/src/amd/llvm/ac_llvm_cull.c
+++ b/src/amd/llvm/ac_llvm_cull.c
@@ -92,9 +92,9 @@ static LLVMValueRef ac_cull_face(struct ac_llvm_context *ctx, LLVMValueRef pos[3
    LLVMValueRef det_t1 = LLVMBuildFSub(builder, pos[1][1], pos[0][1], "");
    LLVMValueRef det_t2 = LLVMBuildFSub(builder, pos[0][0], pos[1][0], "");
    LLVMValueRef det_t3 = LLVMBuildFSub(builder, pos[0][1], pos[2][1], "");
-   LLVMValueRef det_p0 = LLVMBuildFMul(builder, det_t0, det_t1, "");
-   LLVMValueRef det_p1 = LLVMBuildFMul(builder, det_t2, det_t3, "");
-   LLVMValueRef det = LLVMBuildFSub(builder, det_p0, det_p1, "");
+   /* t0 * t1 - t2 * t3  =  t2 * -t3 + t0 * t1  =  fma(t2, -t3, t0 * t1) */
+   LLVMValueRef det = ac_build_fmad(ctx, det_t2, LLVMBuildFNeg(builder, det_t3, ""),
+                                    LLVMBuildFMul(builder, det_t0, det_t1, ""));
 
    /* Negative W negates the determinant. */
    det = LLVMBuildSelect(builder, w->w_reflection, LLVMBuildFNeg(builder, det, ""), det, "");



More information about the mesa-commit mailing list