Am 11.07.2013 18:18, schrieb Zack Rusin: > GLSL spec says that rsq is undefined for src<=0, but the D3D10 > spec says it needs to be a NaN, so lets stop taking an absolute > value of the source which completely breaks that behavior. > > Signed-off-by: Zack Rusin <[email protected]> > --- > src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c > b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c > index 1feaa19..8c26918 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c > @@ -633,8 +633,6 @@ rsq_emit( > struct lp_build_tgsi_context * bld_base, > struct lp_build_emit_data * emit_data) > { > - emit_data->args[0] = lp_build_emit_llvm_unary(bld_base, TGSI_OPCODE_ABS, > - emit_data->args[0]); > if (bld_base->rsq_action.emit) { > bld_base->rsq_action.emit(&bld_base->rsq_action, bld_base, emit_data); > } else { >
I have some faint recollection this breaks something if you do that. Also the tgsi instruction is clearly defined to behave that way, I suspect it comes from some older definition (most likely ARB_vertex_program, which states "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." So I think if you want to fix that you'd need to adjust docs too, plus mesa_to_tgsi code to add the abs value, and it looks like d3d9 needs the abs too. Not sure what the right fix is, another opcode seems kind of overkill but might be easiest. Roland _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
