Jonathan Gray
2016-02-16 13:43:56 UTC
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.
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
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.
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