On 14 June 2012 09:02, Roland Scheidegger <[email protected]> wrote:
> Am 14.06.2012 15:07, schrieb Paul Berry: > > On 14 June 2012 05:10, Jose Fonseca <[email protected] > > <mailto:[email protected]>> wrote: > > > > lp_build_utrunc() doesn't exists yet. For now, please use > > lp_build_itrunc() and add a /* FIXME: implement and use > > lp_build_utrunc() */ comment. It's not perfect, but it's no worse > > what's there now. > > > > Jose > > > > > > Ok, will do. Thank you. > btw I'm wondering how you'd actually do that in some semi-efficient manner? > llvm has LLVMBuildFPToUI but x86 has no such conversion instructions > they are all signed. I guess multiply by 0.5, convert to signed int, > cast to unsigned and multiply by 2 isn't really the solution :-). > Playing around with gcc, it looks like it generally achieves float->unsigned conversions by first converting to a 64-bit integer (using the "fistpq" instruction on x86, or "cvttss2siq" on x86-64), then truncating the upper 32 bits. > > > > > > > > > > ----- Original Message ----- > > > --- > > > src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c | 12 > > > ++++++++++++ > > > 1 files changed, 12 insertions(+), 0 deletions(-) > > > > > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c > > > b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c > > > index e0a5180..e48a0fd 100644 > > > --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c > > > +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c > > > @@ -984,6 +984,17 @@ f2i_emit_cpu( > > > > > emit_data->args[0]); > > > } > > > > > > +/* TGSI_OPCODE_F2U (CPU Only) */ > > > +static void > > > +f2u_emit_cpu( > > > + const struct lp_build_tgsi_action * action, > > > + struct lp_build_tgsi_context * bld_base, > > > + struct lp_build_emit_data * emit_data) > > > +{ > > > + emit_data->output[emit_data->chan] = > > > lp_build_utrunc(&bld_base->base, > > > + > > > > > emit_data->args[0]); > > > +} > > > + > > > /* TGSI_OPCODE_FLR (CPU Only) */ > > > > > > static void > > > @@ -1561,6 +1572,7 @@ lp_set_default_actions_cpu( > > > bld_base->op_actions[TGSI_OPCODE_EX2].emit = ex2_emit_cpu; > > > bld_base->op_actions[TGSI_OPCODE_EXP].emit = exp_emit_cpu; > > > bld_base->op_actions[TGSI_OPCODE_F2I].emit = f2i_emit_cpu; > > > + bld_base->op_actions[TGSI_OPCODE_F2U].emit = f2u_emit_cpu; > > > bld_base->op_actions[TGSI_OPCODE_FLR].emit = flr_emit_cpu; > > > > > > bld_base->op_actions[TGSI_OPCODE_I2F].emit = i2f_emit_cpu; > > > -- > > > 1.7.7.6 > > > > > > _______________________________________________ > > > mesa-dev mailing list > > > [email protected] <mailto: > [email protected]> > > > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > > > > > > > > > > > > > _______________________________________________ > > mesa-dev mailing list > > [email protected] > > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > > _______________________________________________ > mesa-dev mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
