The half float conversion code initially used a global C++ constructor to initialize the tables.
That fails to work since ld does not get the symbol from the shared library, so I changed to use register a global constructor from C, using GCC- or MSVC-specific code. This is not necessarily the best option, but clearly putting a check in the functions as Corbin did is a bad idea performance-wise. So, how should this be done? Options are: 1. Revert Corbin Simpsons's commit and if anyone complains about an unsupported compiler, implement UTIL_INIT for that compiler too 2a. Write the init module in C++ and use portable global constructor syntax (but with other C++-related problems) 2b. Write an auxiliary file in C++ with a global constructor and reference it from the C init file so the static linker pulls it from the .a 3. Have all modules that need half float conversion directly or indirectly call the init functions in their init code 4. Make the build pregenerate the tables and ship them in the executables Option 1: Pros: just works, other auxiliary modules can use the same system Cons: need to write UTIL_INIT for each compiler, only GCC and MSVC (and compatible ones) are currently supported Option 2a: Pros: no compiler-specific UTIL_INIT Cons: significant code written in C++ instead of C and you must link all targets with a C++ compiler or use compiler-specific options to prevent stuff like the G++ personality causing the link to fail Option 2b: Like option 2a, but Pro: less code written in C++ Con: need an extra C++ file for every module with data to be initialized Option 3: Pros: none of the cons of the other options Cons: cumbersome to do, must not forget to call the init function or you get silent corruption. Init calls creep through the whole codebase. Option 4: Pros: no need to do anything at runtime, pages can be shared between OpenGL apps Cons: need to write a special table generator, all DRI drivers get 10KB larger, solution does not apply to all similar problems I would lean for either option 1 or option 4, perhaps option 4 considering there seems to be disagreement over option 1. Option 4 however is likely not universally applicable (not everything can necessarily be pregenerated), so I'd keep the UTIL_INIT code anyway. Which one do we pick? ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Mesa3d-dev mailing list Mesa3d-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mesa3d-dev