[Beignet] [PATCH 02/11] Runtime: Apply CL base object to program.

junyan.he at inbox.com junyan.he at inbox.com
Tue Jul 19 11:25:48 UTC 2016


From: Junyan He <junyan.he at intel.com>

Signed-off-by: Junyan He <junyan.he at intel.com>
---
 src/cl_api.c     |    2 +-
 src/cl_program.c |   16 +++++++---------
 src/cl_program.h |    8 +++++---
 src/cl_utils.h   |    2 +-
 4 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/cl_api.c b/src/cl_api.c
index d0d4dc5..4715e40 100644
--- a/src/cl_api.c
+++ b/src/cl_api.c
@@ -1066,7 +1066,7 @@ clGetProgramInfo(cl_program       program,
   CHECK_PROGRAM (program);
 
   if (param_name == CL_PROGRAM_REFERENCE_COUNT) {
-    cl_uint ref = program->ref_n;
+    cl_uint ref = CL_OBJECT_GET_REF(program);
     FILL_GETINFO_RET (cl_uint, 1, (&ref), CL_SUCCESS);
   } else if (param_name == CL_PROGRAM_CONTEXT) {
     cl_context context = program->ctx;
diff --git a/src/cl_program.c b/src/cl_program.c
index 644856c..7f404bf 100644
--- a/src/cl_program.c
+++ b/src/cl_program.c
@@ -66,7 +66,7 @@ cl_program_delete(cl_program p)
     return;
 
   /* We are not done with it yet */
-  if ((ref = atomic_dec(&p->ref_n)) > 1) return;
+  if ((ref = CL_OBJECT_DEC_REF(p)) > 1) return;
 
   /* Destroy the sources and binary if still allocated */
   cl_program_release_sources(p);
@@ -120,7 +120,7 @@ cl_program_delete(cl_program p)
       interp_program_delete(p->opaque);
   }
 
-  p->magic = CL_MAGIC_DEAD_HEADER; /* For safety */
+  CL_OBJECT_DESTROY_BASE(p);
   cl_free(p);
 }
 
@@ -132,11 +132,9 @@ cl_program_new(cl_context ctx)
 
   /* Allocate the structure */
   TRY_ALLOC_NO_ERR (p, CALLOC(struct _cl_program));
-  SET_ICD(p->dispatch)
-  p->build_status = CL_BUILD_NONE;
-  p->ref_n = 1;
-  p->magic = CL_MAGIC_PROGRAM_HEADER;
+  CL_OBJECT_INIT_BASE(p, CL_OBJECT_PROGRAM_MAGIC);
   p->ctx = ctx;
+  p->build_status = CL_BUILD_NONE;
   p->cmrt_program = NULL;
   p->build_log = calloc(BUILD_LOG_MAX_SIZE, sizeof(char));
   if (p->build_log)
@@ -155,7 +153,7 @@ LOCAL void
 cl_program_add_ref(cl_program p)
 {
   assert(p);
-  atomic_inc(&p->ref_n);
+  CL_OBJECT_INC_REF(p);
 }
 
 static cl_int
@@ -541,7 +539,7 @@ cl_program_build(cl_program p, const char *options)
   int i = 0;
   int copyed = 0;
 
-  if (p->ref_n > 1) {
+  if (CL_OBJECT_GET_REF(p) > 1) {
     err = CL_INVALID_OPERATION;
     goto error;
   }
@@ -768,7 +766,7 @@ cl_program_compile(cl_program            p,
   cl_int err = CL_SUCCESS;
   int i = 0;
 
-  if (p->ref_n > 1) {
+  if (CL_OBJECT_GET_REF(p) > 1) {
     err = CL_INVALID_OPERATION;
     goto error;
   }
diff --git a/src/cl_program.h b/src/cl_program.h
index b69e00c..85f8df3 100644
--- a/src/cl_program.h
+++ b/src/cl_program.h
@@ -22,6 +22,7 @@
 
 #include "cl_internals.h"
 #include "cl_gbe_loader.h"
+#include "cl_base_object.h"
 #include "CL/cl.h"
 
 #include <stdint.h>
@@ -49,9 +50,7 @@ typedef enum _BINARY_HEADER_INDEX {
 
 /* This maps an OCL file containing some kernels */
 struct _cl_program {
-  DEFINE_ICD(dispatch)
-  uint64_t magic;         /* To identify it as a program */
-  volatile int ref_n;     /* We reference count this object */
+  _cl_base_object base;
   gbe_program opaque;     /* (Opaque) program as ouput by the compiler */
   cl_kernel *ker;         /* All kernels included by the OCL file */
   cl_program prev, next;  /* We chain the programs together */
@@ -75,6 +74,9 @@ struct _cl_program {
   void* cmrt_program;      /* real type: CmProgram* */
 };
 
+#define CL_OBJECT_PROGRAM_MAGIC 0x34562ab12789cdefLL
+#define CL_OBJECT_IS_PROGRAM(obj) (((cl_base_object)obj)->magic == CL_OBJECT_PROGRAM_MAGIC)
+
 /* Create a empty program */
 extern cl_program cl_program_new(cl_context);
 
diff --git a/src/cl_utils.h b/src/cl_utils.h
index 2926611..d671090 100644
--- a/src/cl_utils.h
+++ b/src/cl_utils.h
@@ -263,7 +263,7 @@ do {                                                        \
     err = CL_INVALID_PROGRAM;                               \
     goto error;                                             \
   }                                                         \
-  if (UNLIKELY(PROGRAM->magic != CL_MAGIC_PROGRAM_HEADER)) {\
+  if (UNLIKELY(!CL_OBJECT_IS_PROGRAM(PROGRAM))) {          \
     err = CL_INVALID_PROGRAM;                               \
     goto error;                                             \
   }                                                         \
-- 
1.7.9.5

____________________________________________________________
FREE ONLINE PHOTOSHARING - Share your photos online with your friends and family!
Visit http://www.inbox.com/photosharing to find out more!




More information about the Beignet mailing list