LGTM. -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Homer Hsing Sent: Wednesday, November 13, 2013 4:49 PM To: [email protected] Subject: [Beignet] [PATCH] fix builtin function "round"
previously using round to even, the result was wrong. Signed-off-by: Homer Hsing <[email protected]> --- backend/src/ocl_stdlib.tmpl.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/backend/src/ocl_stdlib.tmpl.h b/backend/src/ocl_stdlib.tmpl.h index 202f7f5..038cf1c 100644 --- a/backend/src/ocl_stdlib.tmpl.h +++ b/backend/src/ocl_stdlib.tmpl.h @@ -1542,7 +1542,12 @@ INLINE_OVERLOADABLE float __gen_ocl_internal_atan2pi(float y, float x) { } INLINE_OVERLOADABLE float __gen_ocl_internal_fabs(float x) { return __gen_ocl_fabs(x); } INLINE_OVERLOADABLE float __gen_ocl_internal_trunc(float x) { return __gen_ocl_rndz(x); } -INLINE_OVERLOADABLE float __gen_ocl_internal_round(float x) { return __gen_ocl_rnde(x); } +INLINE_OVERLOADABLE float __gen_ocl_internal_round(float x) { + float y = __gen_ocl_rndz(x); + if (__gen_ocl_fabs(x - y) >= 0.5f) + y += __gen_ocl_internal_copysign(1.f, x); + return y; +} INLINE_OVERLOADABLE float __gen_ocl_internal_floor(float x) { return __gen_ocl_rndd(x); } INLINE_OVERLOADABLE float __gen_ocl_internal_ceil(float x) { return __gen_ocl_rndu(x); } INLINE_OVERLOADABLE float __gen_ocl_internal_log(float x) { return native_log(x); } -- 1.8.3.2 _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
