[Beignet] [PATCH 2/8] Avoid extension names as preprocessor tokens

Zhigang Gong zhigang.gong at linux.intel.com
Wed Apr 17 00:51:53 PDT 2013


From: Simon Richter <Simon.Richter at hogyros.de>

The Khronos Group headers define constants with the names of extensions if
the header defines the extension API. When the preprocessor sees one of
these names, it performs macro substitution, leading to compilation errors.

Signed-off-by: Zhigang Gong <zhigang.gong at linux.intel.com>
---
 src/cl_extensions.c |  8 ++++----
 src/cl_extensions.h | 57 +++++++++++++++++++++++++++--------------------------
 src/cl_mem_gl.c     |  6 +-----
 3 files changed, 34 insertions(+), 37 deletions(-)

diff --git a/src/cl_extensions.c b/src/cl_extensions.c
index 1c87681..7d1031f 100644
--- a/src/cl_extensions.c
+++ b/src/cl_extensions.c
@@ -15,7 +15,7 @@ static struct cl_extensions intel_extensions =
 {
   {
 #define DECL_EXT(name) \
-  {(struct cl_extension_base){.ext_id = name##_ext_id, .ext_name = #name, .ext_enabled = 0}},
+  {(struct cl_extension_base){.ext_id = cl_##name##_ext_id, .ext_name = "cl_" #name, .ext_enabled = 0}},
   DECL_ALL_EXTENSIONS
   },
 #undef DECL_EXT
@@ -27,7 +27,7 @@ void check_basic_extension(cl_extensions_t *extensions)
   int id;
   for(id = BASE_EXT_START_ID; id <= BASE_EXT_END_ID; id++)
     //It seems we only support this mandatory extension.
-    if (id == EXT_ID(cl_khr_byte_addressable_store))
+    if (id == EXT_ID(khr_byte_addressable_store))
       extensions->extensions[id].base.ext_enabled = 1;
 }
 
@@ -48,9 +48,9 @@ static struct cl_gl_ext_deps egl_funcs;
       && egl_funcs.eglDestroyImageKHR_func != NULL) {
       /* For now, we only support cl_khr_gl_sharing. */
     for(id = GL_EXT_START_ID; id <= GL_EXT_END_ID; id++)
-      if (id == EXT_ID(cl_khr_gl_sharing)) {
+      if (id == EXT_ID(khr_gl_sharing)) {
         extensions->extensions[id].base.ext_enabled = 1;
-        extensions->extensions[id].EXT_STRUCT_NAME(cl_khr_gl_sharing).gl_ext_deps = &egl_funcs;
+        extensions->extensions[id].EXT_STRUCT_NAME(khr_gl_sharing).gl_ext_deps = &egl_funcs;
       }
   }
 #endif
diff --git a/src/cl_extensions.h b/src/cl_extensions.h
index 39cbff2..5a49cd6 100644
--- a/src/cl_extensions.h
+++ b/src/cl_extensions.h
@@ -2,36 +2,37 @@
  * names must be returned by all device that
  * support OpenCL C 1.2. */
 #define DECL_BASE_EXTENSIONS \
-  DECL_EXT(cl_khr_global_int32_base_atomics) \
-  DECL_EXT(cl_khr_global_int32_extended_atomics) \
-  DECL_EXT(cl_khr_local_int32_base_atomics) \
-  DECL_EXT(cl_khr_local_int32_extended_atomics) \
-  DECL_EXT(cl_khr_byte_addressable_store) \
-  DECL_EXT(cl_khr_fp64)
+  DECL_EXT(khr_global_int32_base_atomics) \
+  DECL_EXT(khr_global_int32_extended_atomics) \
+  DECL_EXT(khr_local_int32_base_atomics) \
+  DECL_EXT(khr_local_int32_extended_atomics) \
+  DECL_EXT(khr_byte_addressable_store) \
+  DECL_EXT(khr_fp64)
 
 /* The OPT1 extensions are those optional extensions
  * which don't have external dependecies*/
 #define DECL_OPT1_EXTENSIONS \
-  DECL_EXT(cl_khr_int64_base_atomics)\
-  DECL_EXT(cl_khr_int64_extended_atomics)\
-  DECL_EXT(cl_khr_3d_image_writes)\
-  DECL_EXT(cl_khr_fp16)\
-  DECL_EXT(cl_khr_image2d_from_buffer)\
-  DECL_EXT(cl_khr_initialize_memory)\
-  DECL_EXT(cl_khr_context_abort)\
-  DECL_EXT(cl_khr_depth_images)\
-  DECL_EXT(cl_khr_spir)
+  DECL_EXT(khr_int64_base_atomics)\
+  DECL_EXT(khr_int64_extended_atomics)\
+  DECL_EXT(khr_3d_image_writes)\
+  DECL_EXT(khr_fp16)\
+  DECL_EXT(khr_image2d_from_buffer)\
+  DECL_EXT(khr_initialize_memory)\
+  DECL_EXT(khr_context_abort)\
+  DECL_EXT(khr_depth_images)\
+  DECL_EXT(khr_spir) \
+  DECL_EXT(khr_icd)
 
 #define DECL_GL_EXTENSIONS \
-  DECL_EXT(cl_khr_gl_sharing)\
-  DECL_EXT(cl_khr_gl_event)\
-  DECL_EXT(cl_khr_gl_depth_images)\
-  DECL_EXT(cl_khr_gl_msaa_sharing)
+  DECL_EXT(khr_gl_sharing)\
+  DECL_EXT(khr_gl_event)\
+  DECL_EXT(khr_gl_depth_images)\
+  DECL_EXT(khr_gl_msaa_sharing)
 
 #define DECL_D3D_EXTENSIONS \
-  DECL_EXT(cl_khr_d3d10_sharing)\
-  DECL_EXT(cl_khr_dx9_media_sharing)\
-  DECL_EXT(cl_khr_d3d11_sharing)\
+  DECL_EXT(khr_d3d10_sharing)\
+  DECL_EXT(khr_dx9_media_sharing)\
+  DECL_EXT(khr_d3d11_sharing)\
 
 #define DECL_ALL_EXTENSIONS \
   DECL_BASE_EXTENSIONS \
@@ -39,8 +40,8 @@
   DECL_GL_EXTENSIONS \
   DECL_D3D_EXTENSIONS
 
-#define EXT_ID(name) name ## _ext_id
-#define EXT_STRUCT_NAME(name) name ##ext
+#define EXT_ID(name) cl_ ## name ## _ext_id
+#define EXT_STRUCT_NAME(name) cl_ ## name ## ext
 /*Declare enum ids */
 typedef enum {
 #define DECL_EXT(name) EXT_ID(name),
@@ -49,10 +50,10 @@ DECL_ALL_EXTENSIONS
 cl_khr_extension_id_max
 }cl_extension_enum;
 
-#define BASE_EXT_START_ID EXT_ID(cl_khr_global_int32_base_atomics)
-#define BASE_EXT_END_ID EXT_ID(cl_khr_fp64)
-#define GL_EXT_START_ID EXT_ID(cl_khr_gl_sharing)
-#define GL_EXT_END_ID EXT_ID(cl_khr_gl_msaa_sharing)
+#define BASE_EXT_START_ID EXT_ID(khr_global_int32_base_atomics)
+#define BASE_EXT_END_ID EXT_ID(khr_fp64)
+#define GL_EXT_START_ID EXT_ID(khr_gl_sharing)
+#define GL_EXT_END_ID EXT_ID(khr_gl_msaa_sharing)
 
 #define IS_BASE_EXTENSION(id)  (id >= BASE_EXT_START_ID && id <= BASE_EXT_END_ID)
 #define IS_GL_EXTENSION(id)    (id >= GL_EXT_START_ID && id <= GL_EXT_END_ID)
diff --git a/src/cl_mem_gl.c b/src/cl_mem_gl.c
index 44a97ef..3dfac00 100644
--- a/src/cl_mem_gl.c
+++ b/src/cl_mem_gl.c
@@ -139,11 +139,7 @@ EGLImageKHR cl_create_textured_egl_image(cl_context ctx,
   EGLint egl_attribs[] = { EGL_GL_TEXTURE_LEVEL_KHR, miplevel, EGL_NONE};
 
   assert(ctx->props.gl_type == CL_GL_EGL_DISPLAY);
-/* cl.h defined cl_khr_gl_sharing to 1. we have to undefine it here.*/
-#ifdef cl_khr_gl_sharing
-#undef cl_khr_gl_sharing
-#endif
-  egl_funcs =  CL_EXTENSION_GET_FUNCS(ctx, cl_khr_gl_sharing, gl_ext_deps);
+  egl_funcs =  CL_EXTENSION_GET_FUNCS(ctx, khr_gl_sharing, gl_ext_deps);
   assert(egl_funcs != NULL);
   egl_display = (EGLDisplay)ctx->props.egl_display;
   egl_context = (EGLDisplay)ctx->props.gl_context;
-- 
1.7.11.7



More information about the Beignet mailing list