i965: Always hand the absolute value to RSQ.
gen6 builtin RSQ apparently clamps negative values to 0 instead of returning the RSQ of the absolute value like ARB_fragment_program desires and pre-gen6 apparently does. Fixes: glean/fp1-RSQ test 2 (reciprocal square root of negative value) glean/vp1-RSQ test 2 (reciprocal square root of negative value)
This commit is contained in:
@@ -1958,7 +1958,7 @@ void brw_vs_emit(struct brw_vs_compile *c )
|
||||
emit_math1(c, BRW_MATH_FUNCTION_INV, dst, args[0], BRW_MATH_PRECISION_FULL);
|
||||
break;
|
||||
case OPCODE_RSQ:
|
||||
emit_math1(c, BRW_MATH_FUNCTION_RSQ, dst, args[0], BRW_MATH_PRECISION_FULL);
|
||||
emit_math1(c, BRW_MATH_FUNCTION_RSQ, dst, brw_abs(args[0]), BRW_MATH_PRECISION_FULL);
|
||||
break;
|
||||
|
||||
case OPCODE_SEQ:
|
||||
|
||||
@@ -1131,6 +1131,11 @@ void brw_wm_pass_fp( struct brw_wm_compile *c )
|
||||
precalc_lit(c, inst);
|
||||
break;
|
||||
|
||||
case OPCODE_RSQ:
|
||||
out = emit_scalar_insn(c, inst);
|
||||
out->SrcReg[0].Abs = GL_TRUE;
|
||||
break;
|
||||
|
||||
case OPCODE_TEX:
|
||||
precalc_tex(c, inst);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user