On 17/02/16(Wed) 00:43, Jonathan Gray wrote: > Due to the way Mesa can be built there are two headers that setup endian > tests. > > src/mesa/main/compiler.h and src/gallium/include/pipe/p_config.h > > The former relies on indirect inclusion as was recently pointed out > on the Mesa list. > > The compiler.h version is used in the following places, it turns out > endian.h is always included before compiler.h where it matters except > for shaderimage.c. > > CPU_TO_LE32 not used > > src/mesa/drivers/dri/r200/radeon_queryobj.c: query->Base.Result += > LE32_TO_CPU(result[i]); > src/mesa/drivers/dri/r200/radeon_queryobj.c: > radeon_print(RADEON_STATE, RADEON_TRACE, "result[%d] = %d\n", i, > LE32_TO_CPU(result[i])); > src/mesa/drivers/dri/radeon/radeon_queryobj.c: query->Base.Result += > LE32_TO_CPU(result[i]); > src/mesa/drivers/dri/radeon/radeon_queryobj.c: > radeon_print(RADEON_STATE, RADEON_TRACE, "result[%d] = %d\n", i, > LE32_TO_CPU(result[i])); > > src/mesa/drivers/dri/r200/r200_state_init.c:#ifdef MESA_BIG_ENDIAN > src/mesa/drivers/dri/r200/r200_tcl.c:#ifdef MESA_BIG_ENDIAN > src/mesa/drivers/dri/radeon/radeon_state_init.c:#ifdef MESA_BIG_ENDIAN > src/mesa/drivers/dri/radeon/radeon_tcl.c:#ifdef MESA_BIG_ENDIAN > src/mesa/main/shaderimage.c:#ifdef MESA_BIG_ENDIAN > src/gallium/auxiliary/util/u_format_rgb9e5.h:#if defined(MESA_BIG_ENDIAN) || > defined(PIPE_ARCH_BIG_ENDIAN) > src/gallium/auxiliary/util/u_format_rgb9e5.h:#if defined(MESA_BIG_ENDIAN) || > defined(PIPE_ARCH_BIG_ENDIAN) > > src/mesa/drivers/dri/r200/r200_swtcl.c:#if MESA_LITTLE_ENDIAN > src/mesa/drivers/dri/r200/r200_swtcl.c:#if MESA_LITTLE_ENDIAN > src/mesa/drivers/dri/radeon/radeon_swtcl.c:#if MESA_LITTLE_ENDIAN > src/mesa/drivers/dri/radeon/radeon_swtcl.c:#if MESA_LITTLE_ENDIAN > > This should be handled better in future Mesa releases but for now I'd > like to commit the following. Looking for testers.
I don't have any machine with a r100 or r200. You might want a test from somebody using a MacMini G4 or iBook G4, but I can confirm that there's no regression with the Gallium r300 driver on my G5. ok mpi@ > Index: lib/mesa/src/mesa/main/compiler.h > =================================================================== > RCS file: /cvs/xenocara/lib/mesa/src/mesa/main/compiler.h,v > retrieving revision 1.1.1.1 > diff -u -p -r1.1.1.1 compiler.h > --- lib/mesa/src/mesa/main/compiler.h 22 Nov 2015 02:39:08 -0000 1.1.1.1 > +++ lib/mesa/src/mesa/main/compiler.h 16 Feb 2016 11:42:18 -0000 > @@ -66,28 +66,16 @@ extern "C" { > * Try to use a runtime test instead. > * For now, only used by some DRI hardware drivers for color/texel packing. > */ > -#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && BYTE_ORDER == BIG_ENDIAN > -#if defined(__linux__) > -#include <byteswap.h> > -#define CPU_TO_LE32( x ) bswap_32( x ) > -#elif defined(__APPLE__) > -#include <CoreFoundation/CFByteOrder.h> > -#define CPU_TO_LE32( x ) CFSwapInt32HostToLittle( x ) > -#elif defined(__OpenBSD__) > -#include <sys/types.h> > +#ifdef __OpenBSD__ > +#include <endian.h> > #define CPU_TO_LE32( x ) htole32( x ) > -#else /*__linux__ */ > -#include <sys/endian.h> > -#define CPU_TO_LE32( x ) bswap32( x ) > -#endif /*__linux__*/ > +#define LE32_TO_CPU( x ) letoh32( x ) > +#if BYTE_ORDER == BIG_ENDIAN > #define MESA_BIG_ENDIAN 1 > #else > -#define CPU_TO_LE32( x ) ( x ) > #define MESA_LITTLE_ENDIAN 1 > #endif > -#define LE32_TO_CPU( x ) CPU_TO_LE32( x ) > - > - > +#endif /* __OpenBSD__ */ > > #define IEEE_ONE 0x3f800000 > >