From dbbbe24d7656d6562dd62f389cf0bbc363cd65fc Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Wed, 18 Apr 2018 08:47:53 +0200 Subject: [PATCH] compiler/spirv: implement 16-bit asin v2: - use nir_fmul_imm and nir_fadd_imm helpers (Jason) v3: - missed one case where we need to replace nir_imm_float with nir_imm_floatN_t (Jason) Reviewed-by: Jason Ekstrand --- src/compiler/spirv/vtn_glsl450.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/compiler/spirv/vtn_glsl450.c b/src/compiler/spirv/vtn_glsl450.c index b54aeb9..1e3811f 100644 --- a/src/compiler/spirv/vtn_glsl450.c +++ b/src/compiler/spirv/vtn_glsl450.c @@ -202,17 +202,22 @@ build_log(nir_builder *b, nir_ssa_def *x) static nir_ssa_def * build_asin(nir_builder *b, nir_ssa_def *x, float p0, float p1) { + nir_ssa_def *one = nir_imm_floatN_t(b, 1.0f, x->bit_size); nir_ssa_def *abs_x = nir_fabs(b, x); + + nir_ssa_def *p0_plus_xp1 = nir_fadd_imm(b, nir_fmul_imm(b, abs_x, p1), p0); + + nir_ssa_def *expr_tail = + nir_fadd_imm(b, nir_fmul(b, abs_x, + nir_fadd_imm(b, nir_fmul(b, abs_x, + p0_plus_xp1), + M_PI_4f - 1.0f)), + M_PI_2f); + return nir_fmul(b, nir_fsign(b, x), - nir_fsub(b, nir_imm_float(b, M_PI_2f), - nir_fmul(b, nir_fsqrt(b, nir_fsub(b, nir_imm_float(b, 1.0f), abs_x)), - nir_fadd(b, nir_imm_float(b, M_PI_2f), - nir_fmul(b, abs_x, - nir_fadd(b, nir_imm_float(b, M_PI_4f - 1.0f), - nir_fmul(b, abs_x, - nir_fadd(b, nir_imm_float(b, p0), - nir_fmul(b, abs_x, - nir_imm_float(b, p1)))))))))); + nir_fsub(b, nir_imm_floatN_t(b, M_PI_2f, x->bit_size), + nir_fmul(b, nir_fsqrt(b, nir_fsub(b, one, abs_x)), + expr_tail))); } /** -- 2.7.4