mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
gallivm: add a log function that handles edge cases
Same as log2_safe, which means that it can handle infs, 0s and nans. Signed-off-by: Zack Rusin <zackr@vmware.com> Reviewed-by: Jose Fonseca <jfonseca@vmware.com> Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
parent
018c69ac56
commit
f7c06785d0
2 changed files with 21 additions and 0 deletions
|
|
@ -3080,6 +3080,7 @@ lp_build_exp(struct lp_build_context *bld,
|
|||
|
||||
/**
|
||||
* Generate log(x)
|
||||
* Behavior is undefined with infs, 0s and nans
|
||||
*/
|
||||
LLVMValueRef
|
||||
lp_build_log(struct lp_build_context *bld,
|
||||
|
|
@ -3094,6 +3095,22 @@ lp_build_log(struct lp_build_context *bld,
|
|||
return lp_build_mul(bld, log2, lp_build_log2(bld, x));
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate log(x) that handles edge cases (infs, 0s and nans)
|
||||
*/
|
||||
LLVMValueRef
|
||||
lp_build_log_safe(struct lp_build_context *bld,
|
||||
LLVMValueRef x)
|
||||
{
|
||||
/* log(2) */
|
||||
LLVMValueRef log2 = lp_build_const_vec(bld->gallivm, bld->type,
|
||||
0.69314718055994529);
|
||||
|
||||
assert(lp_check_value(bld->type, x));
|
||||
|
||||
return lp_build_mul(bld, log2, lp_build_log2_safe(bld, x));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generate polynomial.
|
||||
|
|
|
|||
|
|
@ -291,6 +291,10 @@ LLVMValueRef
|
|||
lp_build_log(struct lp_build_context *bld,
|
||||
LLVMValueRef a);
|
||||
|
||||
LLVMValueRef
|
||||
lp_build_log_safe(struct lp_build_context *bld,
|
||||
LLVMValueRef a);
|
||||
|
||||
LLVMValueRef
|
||||
lp_build_exp2(struct lp_build_context *bld,
|
||||
LLVMValueRef a);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue