From: Kenneth Graunke Date: Thu, 4 Jun 2015 08:24:07 +0000 (-0700) Subject: prog_to_nir: Make RSQ properly take the absolute value of its argument. X-Git-Tag: android-x86-6.0-r1~9711 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=15a12795c6f3edef0e1cbab39b6da3d5b8f64fc3;p=android-x86%2Fexternal-mesa.git prog_to_nir: Make RSQ properly take the absolute value of its argument. I just botched this when writing the original code. From the ARB_vertex_program specification: "The RSQ instruction approximates the reciprocal of the square root of the absolute value of the scalar operand and replicates it to all four components of the result vector." Fixes a Glean vertProg1 subtest: RSQ test 2 (reciprocal square root of negative value) Cc: mesa-stable@lists.freedesktop.org Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90547 Signed-off-by: Kenneth Graunke Reviewed-by: Francisco Jerez --- diff --git a/src/mesa/program/prog_to_nir.c b/src/mesa/program/prog_to_nir.c index e986e511514..d3e3f15c959 100644 --- a/src/mesa/program/prog_to_nir.c +++ b/src/mesa/program/prog_to_nir.c @@ -764,7 +764,8 @@ ptn_emit_instruction(struct ptn_compile *c, struct prog_instruction *prog_inst) switch (op) { case OPCODE_RSQ: - ptn_move_dest(b, dest, nir_frsq(b, ptn_channel(b, src[0], X))); + ptn_move_dest(b, dest, + nir_frsq(b, nir_fabs(b, ptn_channel(b, src[0], X)))); break; case OPCODE_RCP: