[Beignet] [PATCH 06/11] Runtime: Apply base object to cl_mem.
junyan.he at inbox.com
junyan.he at inbox.com
Tue Jul 19 11:25:52 UTC 2016
From: Junyan He <junyan.he at intel.com>
Signed-off-by: Junyan He <junyan.he at intel.com>
---
src/cl_mem.c | 19 +++++++++----------
src/cl_mem.h | 9 +++++----
src/cl_utils.h | 2 +-
3 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/src/cl_mem.c b/src/cl_mem.c
index e6eda66..b42573e 100644
--- a/src/cl_mem.c
+++ b/src/cl_mem.c
@@ -111,7 +111,7 @@ cl_get_mem_object_info(cl_mem mem,
*((cl_uint *)param_value) = mem->map_ref;
break;
case CL_MEM_REFERENCE_COUNT:
- *((cl_uint *)param_value) = mem->ref_n;
+ *((cl_uint *)param_value) = CL_OBJECT_GET_REF(mem);
break;
case CL_MEM_CONTEXT:
*((cl_context *)param_value) = mem->ctx;
@@ -262,10 +262,9 @@ cl_mem_allocate(enum cl_mem_type type,
TRY_ALLOC (buffer, CALLOC(struct _cl_mem_buffer));
mem = &buffer->base;
}
+
+ CL_OBJECT_INIT_BASE(mem, CL_OBJECT_MEM_MAGIC);
mem->type = type;
- SET_ICD(mem->dispatch)
- mem->ref_n = 1;
- mem->magic = CL_MAGIC_MEM_HEADER;
mem->flags = flags;
mem->is_userptr = 0;
mem->offset = 0;
@@ -389,7 +388,7 @@ is_valid_mem(cl_mem mem, cl_mem buffers)
cl_mem tmp = buffers;
while(tmp){
if(mem == tmp){
- if (UNLIKELY(mem->magic != CL_MAGIC_MEM_HEADER))
+ if (UNLIKELY(!CL_OBJECT_IS_MEM(mem)))
return CL_INVALID_MEM_OBJECT;
return CL_SUCCESS;
}
@@ -557,10 +556,9 @@ cl_mem_new_sub_buffer(cl_mem buffer,
/* Now create the sub buffer and link it to the buffer. */
TRY_ALLOC (sub_buf, CALLOC(struct _cl_mem_buffer));
mem = &sub_buf->base;
+
+ CL_OBJECT_INIT_BASE(mem, CL_OBJECT_MEM_MAGIC);
mem->type = CL_MEM_SUBBUFFER_TYPE;
- SET_ICD(mem->dispatch)
- mem->ref_n = 1;
- mem->magic = CL_MAGIC_MEM_HEADER;
mem->flags = flags;
mem->offset = buffer->offset;
mem->is_userptr = buffer->is_userptr;
@@ -1176,7 +1174,7 @@ cl_mem_delete(cl_mem mem)
cl_int i;
if (UNLIKELY(mem == NULL))
return;
- if (atomic_dec(&mem->ref_n) > 1)
+ if (CL_OBJECT_DEC_REF(mem) > 1)
return;
#ifdef HAS_EGL
if (UNLIKELY(IS_GL_IMAGE(mem))) {
@@ -1266,6 +1264,7 @@ cl_mem_delete(cl_mem mem)
(mem->type != CL_MEM_SUBBUFFER_TYPE))
cl_free(mem->host_ptr);
+ CL_OBJECT_DESTROY_BASE(mem);
cl_free(mem);
}
@@ -1273,7 +1272,7 @@ LOCAL void
cl_mem_add_ref(cl_mem mem)
{
assert(mem);
- atomic_inc(&mem->ref_n);
+ CL_OBJECT_INC_REF(mem);
}
#define LOCAL_SZ_0 16
diff --git a/src/cl_mem.h b/src/cl_mem.h
index c8f256d..39dbab1 100644
--- a/src/cl_mem.h
+++ b/src/cl_mem.h
@@ -23,7 +23,7 @@
#include "cl_internals.h"
#include "cl_driver_type.h"
#include "CL/cl.h"
-#include "cl_khr_icd.h"
+#include "cl_base_object.h"
#include <assert.h>
#include <pthread.h>
@@ -78,11 +78,9 @@ enum cl_mem_type {
#define IS_GL_IMAGE(mem) (mem->type == CL_MEM_GL_IMAGE_TYPE)
typedef struct _cl_mem {
- DEFINE_ICD(dispatch)
- uint64_t magic; /* To identify it as a memory object */
+ _cl_base_object base;
cl_mem prev, next; /* We chain the memory buffers together */
enum cl_mem_type type;
- volatile int ref_n; /* This object is reference counted */
cl_buffer bo; /* Data in GPU memory */
size_t size; /* original request size, not alignment size, used in constant buffer */
cl_context ctx; /* Context it belongs to */
@@ -100,6 +98,9 @@ typedef struct _cl_mem {
void* cmrt_mem;
} _cl_mem;
+#define CL_OBJECT_MEM_MAGIC 0x381a27b9ee6504dfLL
+#define CL_OBJECT_IS_MEM(obj) (((cl_base_object)obj)->magic == CL_OBJECT_MEM_MAGIC)
+
struct _cl_mem_image {
_cl_mem base;
cl_image_format fmt; /* only for images */
diff --git a/src/cl_utils.h b/src/cl_utils.h
index e118ef1..c7742cb 100644
--- a/src/cl_utils.h
+++ b/src/cl_utils.h
@@ -148,7 +148,7 @@ do { \
err = CL_INVALID_MEM_OBJECT; \
goto error; \
} \
- if (UNLIKELY(MEM->magic != CL_MAGIC_MEM_HEADER)) { \
+ if (UNLIKELY(!CL_OBJECT_IS_MEM(MEM))) { \
err = CL_INVALID_MEM_OBJECT; \
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