On Thu, 2010-04-01 at 04:33 -0700, Micha?? Kr??l wrote:
> Module: Mesa
> Branch: master
> Commit: 3ff175d6de89ad92d167362355501f99d06f0f97
> URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3ff175d6de89ad92d167362355501f99d06f0f97
>
> Author: Luca Barbieri <lu...@lu...>
> Date: Wed Mar 24 18:12:45 2010 +0100
>
> gallium/util: add fast half float conversion functions
>
> This adds a fast half float conversion facility to Gallium.
>
> Mesa already contains such a facility, but using a much worse algorithm.
>
> This one is an implementation of
> www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf
> and uses a branch-less algorithm with some lookup tables small enough
> to fit in the L1 cache.
>
> Ideally, Mesa should start using these functions too, but I'm not sure
> how to arrange that with the current build system.
>
> A new "u_gctors.cpp" is added that defines a global C++ constructor
> allowing to initialize to conversion lookup tables at library init.
>
> ---
>
> src/gallium/auxiliary/Makefile | 4 +
> src/gallium/auxiliary/util/u_gctors.cpp | 17 ++++
> src/gallium/auxiliary/util/u_half.c | 123 +++++++++++++++++++++++++++++++
> src/gallium/auxiliary/util/u_half.h | 55 ++++++++++++++
> 4 files changed, 199 insertions(+), 0 deletions(-)
[..]
> diff --git a/src/gallium/auxiliary/util/u_gctors.cpp b/src/gallium/auxiliary/util/u_gctors.cpp
> new file mode 100644
> index 0000000..9ea9819
> --- /dev/null
> +++ b/src/gallium/auxiliary/util/u_gctors.cpp
> @@ -0,0 +1,17 @@
> +/* this file uses the C++ global constructor mechanism to automatically
> + initialize global data
> +
> + __attribute__((constructor)) allows to do this in C, but is GCC-only
> +*/
> +
> +extern "C" void util_half_init_tables(void);
> +
> +struct util_gctor_t
> +{
> + util_gctor_t()
> + {
> + util_half_init_tables();
> + }
> +};
> +
> +static struct util_gctor_t util_gctor;
This constructor scheme is not working for me. I think that's because
there isn't any symbol here that's used elsewhere, hence the linker is
not linking this file.
> diff --git a/src/gallium/auxiliary/util/u_half.c b/src/gallium/auxiliary/util/u_half.c
> new file mode 100644
> index 0000000..8865acb
> --- /dev/null
> +++ b/src/gallium/auxiliary/util/u_half.c
> @@ -0,0 +1,123 @@
> +#include "util/u_half.h"
> +
> +/* see www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf
> + * "Fast Half Float Conversions" by Jeroen van der Zijp, Nov 2008
> + */
> +
> +/* Note that using a 64K * 4 table is a terrible idea since it will not fit
> + * in the L1 cache and will massively pollute the L2 cache as well
> + *
> + * These should instead fit in the L1 cache.
> + *
> + * TODO: we could use a denormal bias table instead of the mantissa/offset
> + * tables: this would reduce the L1 cache usage from 8704 to 2304 bytes
> + * but would involve more computation
> + *
> + * Note however that if denormals are never encountered, the L1 cache usage
> + * is only about 4608 bytes anyway.
> + */
Please put copyright headers. *Especially* when basing your work from
external references, as it gives the impression that this code was
copied, and not your own creation.
Jose
|