From: Kenneth Graunke Date: Thu, 3 Mar 2016 07:39:18 +0000 (-0800) Subject: glsl: Parameterize asin_expr() on the fit coefficients. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2795fbcae302cd8821b23821ebf8a2b256ff10d5;p=mesa.git glsl: Parameterize asin_expr() on the fit coefficients. This will allow us to share the implementation while using different polynomials for asin() and acos(). Francisco Jerez did this in the SPIR-V front-end; I'm merely porting his idea to the GLSL world. Signed-off-by: Kenneth Graunke Reviewed-by: Iago Toral Quiroga Reviewed-by: Francisco Jerez --- diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp index 0a0dcc68a05..0d289c1615c 100644 --- a/src/compiler/glsl/builtin_functions.cpp +++ b/src/compiler/glsl/builtin_functions.cpp @@ -578,7 +578,7 @@ private: ir_dereference_array *array_ref(ir_variable *var, int i); ir_swizzle *matrix_elt(ir_variable *var, int col, int row); - ir_expression *asin_expr(ir_variable *x); + ir_expression *asin_expr(ir_variable *x, float p0, float p1); void do_atan(ir_factory &body, const glsl_type *type, ir_variable *res, operand y_over_x); /** @@ -3212,7 +3212,7 @@ builtin_builder::_tan(const glsl_type *type) } ir_expression * -builtin_builder::asin_expr(ir_variable *x) +builtin_builder::asin_expr(ir_variable *x, float p0, float p1) { return mul(sign(x), sub(imm(M_PI_2f), @@ -3221,8 +3221,8 @@ builtin_builder::asin_expr(ir_variable *x) mul(abs(x), add(imm(M_PI_4f - 1.0f), mul(abs(x), - add(imm(0.086566724f), - mul(abs(x), imm(-0.03102955f)))))))))); + add(imm(p0), + mul(abs(x), imm(p1)))))))))); } ir_call * @@ -3251,7 +3251,7 @@ builtin_builder::_asin(const glsl_type *type) ir_variable *x = in_var(type, "x"); MAKE_SIG(type, always_available, 1, x); - body.emit(ret(asin_expr(x))); + body.emit(ret(asin_expr(x, 0.086566724f, -0.03102955f))); return sig; } @@ -3262,7 +3262,7 @@ builtin_builder::_acos(const glsl_type *type) ir_variable *x = in_var(type, "x"); MAKE_SIG(type, always_available, 1, x); - body.emit(ret(sub(imm(M_PI_2f), asin_expr(x)))); + body.emit(ret(sub(imm(M_PI_2f), asin_expr(x, 0.086566724f, -0.03102955f)))); return sig; }