Jerome Glisse wrote:
> On 9/21/06, Brian Paul <[EMAIL PROTECTED]> wrote:
>
>> Jerome Glisse wrote:
>> > Hi,
>> >
>> > Roland pointed me to this yesterday (src/mesa/main/glheader.h):
>> > /*
>> > * Either define MESA_BIG_ENDIAN or MESA_LITTLE_ENDIAN.
>> > * Do not use them unless absolutely necessary!
>> > * Try to use a runtime test instead.
>> > * For now, only used by some DRI hardware drivers for color/texel
>> packing.
>> > */
>> >
>> > So i am wondering what is best from a driver point of view,
>> > use this macro or use a runtime test ? Maybe this comment
>> > isn't revealent anymore. Any insight on this are welcome.
>>
>> I'd prefer to use a run-time test since it's a little more robust (one
>> less preprocessor symbol to worry about). Though in some places we
>> really do need a compile-time symbol.
>>
>> Here's the code used in core Mesa:
>>
>> const GLuint ui = 1;
>> const GLubyte littleEndian = *((const GLubyte *) &ui);
>>
>> I should probably put that into a reusable inline function in
>> imports.h ...
>>
>> -Brian
>>
>
> Would be nice to have a reusable function (i am a bit lazy :))
Done.
Interestingly, these two variations produce different code (gcc -O2):
static INLINE GLboolean
_mesa_little_endian(void)
{
static const GLuint ui = 1; // NOTE: static
return *((const GLubyte *) &ui);
}
static INLINE GLboolean
_mesa_little_endian(void)
{
const GLuint ui = 1;
return *((const GLubyte *) &ui);
}
If you have code such as:
if (_mesa_little_endian())
foo();
else
bar();
The version without 'static' is evaluated at compile time and the
branch code is optimized away. With 'static' the compiler still
generates the conditional code.
-Brian
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev