util: Gather some common macros
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 23 Jul 2014 21:58:52 +0000 (14:58 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 4 Aug 2014 18:07:10 +0000 (11:07 -0700)
This gathers macros that have been included across components into util so
that the include chain can be more vertical.  In particular, this makes
util stand on its own without any dependence whatsoever on the rest of
mesa.

Signed-off-by: "Jason Ekstrand" <jason.ekstrand@intel.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
23 files changed:
src/gallium/Automake.inc
src/gallium/drivers/r300/Makefile.am
src/gallium/drivers/r300/Makefile.sources
src/gallium/drivers/r300/compiler/radeon_pair_regalloc.c
src/gallium/drivers/r300/ralloc.c [deleted symlink]
src/gallium/state_trackers/dri/SConscript
src/gallium/state_trackers/glx/xlib/SConscript
src/gallium/targets/libgl-xlib/SConscript
src/gallium/targets/pipe-loader/Makefile.am
src/glsl/builtin_types.cpp
src/loader/Makefile.am
src/mesa/drivers/dri/common/SConscript
src/mesa/drivers/osmesa/Makefile.am
src/mesa/drivers/osmesa/SConscript
src/mesa/drivers/x11/SConscript
src/mesa/main/compiler.h
src/mesa/main/macros.h
src/util/Makefile.am
src/util/SConscript
src/util/hash_table.c
src/util/hash_table.h
src/util/macros.h [new file with mode: 0644]
src/util/ralloc.h

index 73d65a4d10fecc57c6aba563c46ce5cc798ff335..22ee166e3bad41e231ac9530fc256308f6d01348 100644 (file)
@@ -1,5 +1,6 @@
 GALLIUM_CFLAGS = \
        -I$(top_srcdir)/include \
+       -I$(top_srcdir)/src \
        -I$(top_srcdir)/src/gallium/include \
        -I$(top_srcdir)/src/gallium/auxiliary \
        $(DEFINES)
index 2c5951b8f6d20de4978bc96d3fbddfc160a7c070..ae6e8d2e4667da48528c5b68cc67bc07d2462acf 100644 (file)
@@ -4,7 +4,7 @@ include Makefile.sources
 include $(top_srcdir)/src/gallium/Automake.inc
 
 AM_CFLAGS = \
-       -I$(top_srcdir)/src/util \
+       -I$(top_srcdir)/src \
        -I$(top_srcdir)/src/mesa/program \
        -I$(top_srcdir)/src/mesa \
        -I$(top_srcdir)/src/glsl \
index 0e9ab52c2b1425ec6e30220b124366b58d548f47..f987cf8540fe995c297832079ee91035121dafff 100644 (file)
@@ -67,5 +67,4 @@ COMPILER_TESTS_SOURCES := \
        compiler/tests/unit_test.c
 
 HELPER_SOURCES := \
-       ralloc.c \
        register_allocate.c
index 1970a346d1d296e3221791500da7403d0be35a95..7b02e53a482b99bfca48b8f2827ebd9f227c79e3 100644 (file)
@@ -33,7 +33,7 @@
 #include "main/glheader.h"
 #include "program/register_allocate.h"
 #include "util/u_memory.h"
-#include "ralloc.h"
+#include "util/ralloc.h"
 
 #include "r300_fragprog_swizzle.h"
 #include "radeon_compiler.h"
diff --git a/src/gallium/drivers/r300/ralloc.c b/src/gallium/drivers/r300/ralloc.c
deleted file mode 120000 (symlink)
index 7ad6def..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../../../util/ralloc.c
\ No newline at end of file
index 89b035229bc7b7fd5cfa7e9274da81ae9a715c1f..159ca80328f045511a293d304460d24c1518fc55 100644 (file)
@@ -11,6 +11,7 @@ env.PkgUseModules(['DRM'])
 #env.Append(CPPDEFINES = [('__NOT_HAVE_DRM_H', '1')])
 
 env.Append(CPPPATH = [
+    '#/src',
     '#/src/mapi',
     '#/src/mesa',
     '#/src/gallium/state_trackers/dri/common',
index 88e81b85582539cfe01da83b7a8f5a1c85d284a3..08329895e8791cb1cd0c4d44219935de902d5322 100644 (file)
@@ -6,6 +6,7 @@ Import('*')
 env = env.Clone()
 
 env.Append(CPPPATH = [
+    '#/src',
     '#/src/mapi',
     '#/src/mesa',
     '#/src/mesa/main',
index 22cf1077b19eae0945809d64ff5d8bdbecef05ee..cc39b17eaf5dbe2364a115023329e51318227a2c 100644 (file)
@@ -29,6 +29,7 @@ env.Prepend(LIBS = [
     ws_xlib,
     mesautil,
     glapi,
+    mesautil,
     mesa,
     glsl,
     gallium,
index 500dfce193252d73048177524f02ba7983aba6ab..a4e0407f5aae2f2f5a61a054a8d341a91ae80517 100644 (file)
@@ -96,6 +96,7 @@ nodist_EXTRA_pipe_r300_la_SOURCES = dummy.cpp
 pipe_r300_la_LIBADD = \
        $(PIPE_LIBS) \
        $(top_builddir)/src/gallium/winsys/radeon/drm/libradeonwinsys.la \
+        $(top_builddir)/src/util/libmesautil.la \
        $(top_builddir)/src/gallium/drivers/r300/libr300-helper.la \
        $(top_builddir)/src/gallium/drivers/r300/libr300.la \
        $(LIBDRM_LIBS) \
index 0a0fa8cd35e81c215ac3938ae14f972f3fb2bfc9..404a8038a43e6920615e4f962cd1af0d0a27e18b 100644 (file)
@@ -36,6 +36,7 @@
 
 #include "glsl_types.h"
 #include "glsl_parser_extras.h"
+#include "util/macros.h"
 
 /**
  * Declarations of type flyweights (glsl_type::_foo_type) and
@@ -48,7 +49,7 @@
 
 #define STRUCT_TYPE(NAME)                                       \
    const glsl_type glsl_type::_struct_##NAME##_type =           \
-      glsl_type(NAME##_fields, Elements(NAME##_fields), #NAME); \
+      glsl_type(NAME##_fields, ARRAY_SIZE(NAME##_fields), #NAME); \
    const glsl_type *const glsl_type::struct_##NAME##_type =     \
       &glsl_type::_struct_##NAME##_type;
 
@@ -265,7 +266,7 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state)
 {
    struct glsl_symbol_table *symbols = state->symbols;
 
-   for (unsigned i = 0; i < Elements(builtin_type_versions); i++) {
+   for (unsigned i = 0; i < ARRAY_SIZE(builtin_type_versions); i++) {
       const struct builtin_type_versions *const t = &builtin_type_versions[i];
       if (state->is_version(t->min_gl, t->min_es)) {
          add_type(symbols, t->type);
@@ -276,7 +277,7 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state)
     * they're still present.  We've removed them in 1.40+ (OpenGL 3.1+).
     */
    if (!state->es_shader && state->language_version < 140) {
-      for (unsigned i = 0; i < Elements(deprecated_types); i++) {
+      for (unsigned i = 0; i < ARRAY_SIZE(deprecated_types); i++) {
          add_type(symbols, deprecated_types[i]);
       }
    }
index c02de6f59a49ca7b46555f1f61a973bda0abb9a4..16b9f8f70c2a5e8d0b54a36f321b77ae1753923e 100644 (file)
@@ -26,6 +26,7 @@ noinst_LTLIBRARIES = libloader.la
 libloader_la_CPPFLAGS = \
        $(DEFINES) \
        -I$(top_srcdir)/include \
+       -I$(top_srcdir)/src \
        $(VISIBILITY_CFLAGS) \
        $(LIBUDEV_CFLAGS)
 
index d003139bfdbb71d69b28f3cd1898208b1028798e..0bee1b41fc6f86f87e847e4838d413efd8d3e039 100644 (file)
@@ -10,6 +10,7 @@ drienv.Replace(CPPPATH = [
     xmlpool_options.dir.dir, # Dir to generated xmlpool/options.h
     '#include',
     '#include/GL/internal',
+    '#src',
     '#src/mapi',
     '#src/gallium/include',
     '#src/gallium/auxiliary',
index 415779294340898e9308d30b91bff16476ac63fe..ff9afb21312564a62681fc22096c6be30ce690bd 100644 (file)
@@ -23,6 +23,7 @@
 
 AM_CPPFLAGS = \
        -I$(top_srcdir)/include \
+       -I$(top_srcdir)/src \
        -I$(top_srcdir)/src/mapi \
        -I$(top_builddir)/src/mapi \
        -I$(top_srcdir)/src/mesa/ \
index fb2d98cadc5542e201e4fa5688130798f30bf2eb..cbff5943fbb36a88041d07d2c9d16f3bf339cc98 100644 (file)
@@ -3,6 +3,7 @@ Import('*')
 env = env.Clone()
 
 env.Prepend(CPPPATH = [
+    '#src',
     '#src/mapi',
     '#src/mesa',
     Dir('../../../mapi'), # src/mapi build path for python-generated GL API files/headers
index 320cece886cb6afd8443c6453aa77acde659391b..d29f9874f4426f2bee0a8d4cf180b932f48eea08 100644 (file)
@@ -3,6 +3,7 @@ Import('*')
 env = env.Clone()
 
 env.Append(CPPPATH = [
+    '#/src',
     '#/src/mapi',
     '#/src/mesa',
     '#/src/mesa/main',
index 79d8740e5901858234b4db289c40456fee9d5bfb..ae7d343dd362c610acdd96295cb327d24d88645b 100644 (file)
@@ -44,6 +44,8 @@
 #include <float.h>
 #include <stdarg.h>
 
+#include "util/macros.h"
+
 #include "c99_compat.h" /* inline, __func__, etc. */
 
 
@@ -130,23 +132,6 @@ extern "C" {
 #endif
 
 
-/**
- * __builtin_expect macros
- */
-#if !defined(__GNUC__)
-#  define __builtin_expect(x, y) (x)
-#endif
-
-#ifndef likely
-#  ifdef __GNUC__
-#    define likely(x)   __builtin_expect(!!(x), 1)
-#    define unlikely(x) __builtin_expect(!!(x), 0)
-#  else
-#    define likely(x)   (x)
-#    define unlikely(x) (x)
-#  endif
-#endif
-
 /* XXX: Use standard `__func__` instead */
 #ifndef __FUNCTION__
 #  define __FUNCTION__ __func__
@@ -238,65 +223,16 @@ static INLINE GLuint CPU_TO_LE32(GLuint x)
 #endif
 
 
-/**
- * Static (compile-time) assertion.
- * Basically, use COND to dimension an array.  If COND is false/zero the
- * array size will be -1 and we'll get a compilation error.
- */
-#define STATIC_ASSERT(COND) \
-   do { \
-      (void) sizeof(char [1 - 2*!(COND)]); \
-   } while (0)
-
-/**
- * Unreachable macro. Useful for suppressing "control reaches end of non-void
- * function" warnings.
- */
-#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 5
-#define unreachable(str)    \
-do {                        \
-   assert(!str);            \
-   __builtin_unreachable(); \
-} while (0)
-#elif (defined(__clang__) && defined(__has_builtin))
-# if __has_builtin(__builtin_unreachable)
-#  define unreachable(str)  \
-do {                        \
-   assert(!str);            \
-   __builtin_unreachable(); \
-} while (0)
-# endif
-#endif
-
-#ifndef unreachable
-#define unreachable(str)
-#endif
-
 /*
  * A trick to suppress uninitialized variable warning without generating any
  * code
  */
 #define uninitialized_var(x) x = x
 
-#if (__GNUC__ >= 3)
-#define PRINTFLIKE(f, a) __attribute__ ((format(__printf__, f, a)))
-#else
-#define PRINTFLIKE(f, a)
-#endif
-
 #ifndef NULL
 #define NULL 0
 #endif
 
-/* Used to optionally mark structures with misaligned elements or size as
- * packed, to trade off performance for space.
- */
-#if (__GNUC__ >= 3)
-#define PACKED __attribute__((__packed__))
-#else
-#define PACKED
-#endif
-
 
 /**
  * LONGSTRING macro
@@ -432,30 +368,6 @@ do {                                                                       \
 #define Elements(x) (sizeof(x)/sizeof(*(x)))
 #endif
 
-#ifdef __cplusplus
-/**
- * Macro function that evaluates to true if T is a trivially
- * destructible type -- that is, if its (non-virtual) destructor
- * performs no action and all member variables and base classes are
- * trivially destructible themselves.
- */
-#   if defined(__GNUC__)
-#      if ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
-#         define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
-#      endif
-#   elif (defined(__clang__) && defined(__has_feature))
-#      if __has_feature(has_trivial_destructor)
-#         define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
-#      endif
-#   endif
-#   ifndef HAS_TRIVIAL_DESTRUCTOR
-       /* It's always safe (if inefficient) to assume that a
-        * destructor is non-trivial.
-        */
-#      define HAS_TRIVIAL_DESTRUCTOR(T) (false)
-#   endif
-#endif
-
 #ifdef __cplusplus
 }
 #endif
index 5228c3a8f28e798ddab8d7cd4d095d3bf9d098b6..954df3cc8d83264cb8271691cbd218b1ba8de46b 100644 (file)
@@ -818,7 +818,9 @@ DIFFERENT_SIGNS(GLfloat x, GLfloat y)
 #define ENUM_TO_BOOLEAN(E) ((E) ? GL_TRUE : GL_FALSE)
 
 /* Compute the size of an array */
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
+#ifndef ARRAY_SIZE
+#  define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
+#endif
 
 /* Stringify */
 #define STRINGIFY(x) #x
index 0f9dcab6a59360dec050c7b7107aca1caea2624a..a2aeafc703b13dcdbabaf478550a71797f89b74b 100644 (file)
@@ -28,8 +28,6 @@ noinst_LTLIBRARIES = libmesautil.la
 libmesautil_la_CPPFLAGS = \
        $(DEFINES) \
        -I$(top_srcdir)/include \
-       -I$(top_srcdir)/src/mapi \
-       -I$(top_srcdir)/src/mesa \
        $(VISIBILITY_CFLAGS)
 
 libmesautil_la_SOURCES = $(MESA_UTIL_FILES)
index a36340deebfaef4d145c5a70c1a4ff2e7bc24c2d..8afeedaf5e9da416a12315263d4b3ae54d8a9716 100644 (file)
@@ -8,8 +8,6 @@ env = env.Clone()
 
 env.Prepend(CPPPATH = [
     '#include',
-    '#src/mapi',
-    '#src/mesa',
     '#src/util',
 ])
 
index f98a1a647ea014f7ad5ffa44da17192142e02988..1b6726c79a9adf1cf55c7c49c425f0ac51941cb6 100644 (file)
@@ -44,8 +44,8 @@
 #include <string.h>
 
 #include "hash_table.h"
-#include "main/macros.h"
 #include "ralloc.h"
+#include "macros.h"
 
 static const uint32_t deleted_key_value;
 
index 5fa58991e300460f257ca1e15de7889dd8cfe3cf..9b67f05bec694ee9e645fa411d923a23b6ced3d5 100644 (file)
 #ifndef _HASH_TABLE_H
 #define _HASH_TABLE_H
 
+#include <stdlib.h>
 #include <inttypes.h>
 #include <stdbool.h>
-
-#include "main/compiler.h"
+#include "macros.h"
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/src/util/macros.h b/src/util/macros.h
new file mode 100644 (file)
index 0000000..ee05e05
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Copyright © 2014 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef UTIL_MACROS_H
+#define UTIL_MACROS_H
+
+/* Compute the size of an array */
+#ifndef ARRAY_SIZE
+#  define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
+#endif
+
+
+/**
+ * __builtin_expect macros
+ */
+#if !defined(__GNUC__)
+#  define __builtin_expect(x, y) (x)
+#endif
+
+#ifndef likely
+#  ifdef __GNUC__
+#    define likely(x)   __builtin_expect(!!(x), 1)
+#    define unlikely(x) __builtin_expect(!!(x), 0)
+#  else
+#    define likely(x)   (x)
+#    define unlikely(x) (x)
+#  endif
+#endif
+
+
+/**
+ * Static (compile-time) assertion.
+ * Basically, use COND to dimension an array.  If COND is false/zero the
+ * array size will be -1 and we'll get a compilation error.
+ */
+#define STATIC_ASSERT(COND) \
+   do { \
+      (void) sizeof(char [1 - 2*!(COND)]); \
+   } while (0)
+
+
+/**
+ * Unreachable macro. Useful for suppressing "control reaches end of non-void
+ * function" warnings.
+ */
+#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 5
+#define unreachable(str)    \
+do {                        \
+   assert(!str);            \
+   __builtin_unreachable(); \
+} while (0)
+#elif (defined(__clang__) && defined(__has_builtin))
+# if __has_builtin(__builtin_unreachable)
+#  define unreachable(str)  \
+do {                        \
+   assert(!str);            \
+   __builtin_unreachable(); \
+} while (0)
+# endif
+#endif
+
+#ifndef unreachable
+#define unreachable(str)
+#endif
+
+
+#if (__GNUC__ >= 3)
+#define PRINTFLIKE(f, a) __attribute__ ((format(__printf__, f, a)))
+#else
+#define PRINTFLIKE(f, a)
+#endif
+
+
+/* Used to optionally mark structures with misaligned elements or size as
+ * packed, to trade off performance for space.
+ */
+#if (__GNUC__ >= 3)
+#define PACKED __attribute__((__packed__))
+#else
+#define PACKED
+#endif
+
+
+#ifdef __cplusplus
+/**
+ * Macro function that evaluates to true if T is a trivially
+ * destructible type -- that is, if its (non-virtual) destructor
+ * performs no action and all member variables and base classes are
+ * trivially destructible themselves.
+ */
+#   if defined(__GNUC__)
+#      if ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
+#         define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
+#      endif
+#   elif (defined(__clang__) && defined(__has_feature))
+#      if __has_feature(has_trivial_destructor)
+#         define HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T)
+#      endif
+#   endif
+#   ifndef HAS_TRIVIAL_DESTRUCTOR
+       /* It's always safe (if inefficient) to assume that a
+        * destructor is non-trivial.
+        */
+#      define HAS_TRIVIAL_DESTRUCTOR(T) (false)
+#   endif
+#endif
+
+#endif /* UTIL_MACROS_H */
index 1fe53573f0d00207650274950c2eb0fb23fb89fb..4b88f328665520e00aab3cf430a75bb0ed210d65 100644 (file)
@@ -53,7 +53,8 @@ extern "C" {
 #include <stddef.h>
 #include <stdarg.h>
 #include <stdbool.h>
-#include "main/compiler.h"
+
+#include "macros.h"
 
 /**
  * \def ralloc(ctx, type)