On 25/06/2019 16:22, Roland Scheidegger wrote:
> Looks good to me, albeit it's potentially minimally slower, so I'm
> wondering if the higher precision is actually useful?

It gets you an extra bit, and is necessary if you want to reach 0.5 ULP 
(otherwise it never gets there.)

Anyway, it's still disabled.  This change is mostly for reference in 
case we once want to enable this code path.  We could still use, in 
situations where we don't get or don't care for inf.  Like perspective 
correct interpolation.

> I guess though the last two steps could use lp_build_fmuladd?

Good point.  I've updated to only use fmuladd.  It might be faster and 
converge even more quickly:


@@ -2724,12 +2724,12 @@ lp_build_rcp_refine(struct lp_build_context *bld,
                      LLVMValueRef rcp_a)
  {
     LLVMBuilderRef builder = bld->gallivm->builder;
-   LLVMValueRef two = lp_build_const_vec(bld->gallivm, bld->type, 2.0);
+   LLVMValueRef neg_a;
     LLVMValueRef res;

-   res = LLVMBuildFMul(builder, a, rcp_a, "");
-   res = LLVMBuildFSub(builder, two, res, "");
-   res = LLVMBuildFMul(builder, rcp_a, res, "");
+   neg_a = LLVMBuildFNeg(builder, a, "");
+   res = lp_build_fmuladd(builder, neg_a, rcp_a, bld->one);
+   res = lp_build_fmuladd(builder, res, rcp_a, rcp_a);

     return res;
  }


Jose
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to