From: Junyan He <junyan...@intel.com> Signed-off-by: Junyan He <junyan...@intel.com> --- src/cl_api.c | 38 ------------------------------------ src/cl_api_command_queue.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++ src/cl_command_queue.c | 34 ++++++++++++++++++++++---------- src/cl_command_queue.h | 11 ++++------- src/cl_context.c | 26 ------------------------- src/cl_context.h | 6 ------ 6 files changed, 76 insertions(+), 87 deletions(-)
diff --git a/src/cl_api.c b/src/cl_api.c index 03388ec..34242af 100644 --- a/src/cl_api.c +++ b/src/cl_api.c @@ -143,44 +143,6 @@ clReleaseDevice(cl_device_id device) return CL_SUCCESS; } -cl_command_queue -clCreateCommandQueue(cl_context context, - cl_device_id device, - cl_command_queue_properties properties, - cl_int * errcode_ret) -{ - cl_command_queue queue = NULL; - cl_int err = CL_SUCCESS; - CHECK_CONTEXT (context); - - err = cl_devices_list_include_check(context->device_num, context->devices, 1, &device); - if (err) - goto error; - - INVALID_VALUE_IF (properties & ~(CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_PROFILING_ENABLE)); - - if(properties & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) {/*not supported now.*/ - err = CL_INVALID_QUEUE_PROPERTIES; - goto error; - } - - queue = cl_context_create_queue(context, device, properties, &err); -error: - if (errcode_ret) - *errcode_ret = err; - return queue; -} - -cl_int -clRetainCommandQueue(cl_command_queue command_queue) -{ - cl_int err = CL_SUCCESS; - CHECK_QUEUE (command_queue); - cl_command_queue_add_ref(command_queue); -error: - return err; -} - cl_mem clCreateBuffer(cl_context context, cl_mem_flags flags, diff --git a/src/cl_api_command_queue.c b/src/cl_api_command_queue.c index 0f458a3..c9403a4 100644 --- a/src/cl_api_command_queue.c +++ b/src/cl_api_command_queue.c @@ -16,9 +16,47 @@ * */ #include "cl_command_queue.h" +#include "cl_device_id.h" #include "CL/cl.h" #include <stdio.h> +cl_command_queue +clCreateCommandQueue(cl_context context, + cl_device_id device, + cl_command_queue_properties properties, + cl_int *errcode_ret) +{ + cl_command_queue queue = NULL; + cl_int err = CL_SUCCESS; + + do { + if (!CL_OBJECT_IS_CONTEXT(context)) { + err = CL_INVALID_CONTEXT; + break; + } + + err = cl_devices_list_include_check(context->device_num, context->devices, 1, &device); + if (err) + break; + + if (properties & ~(CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_PROFILING_ENABLE)) { + err = CL_INVALID_VALUE; + break; + } + + if (properties & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) { /*not supported now.*/ + err = CL_INVALID_QUEUE_PROPERTIES; + break; + } + + queue = cl_create_command_queue(context, device, properties, &err); + } while (0); + + if (errcode_ret) + *errcode_ret = err; + return queue; +} + cl_int clGetCommandQueueInfo(cl_command_queue command_queue, cl_command_queue_info param_name, @@ -75,6 +113,16 @@ clFinish(cl_command_queue command_queue) } cl_int +clRetainCommandQueue(cl_command_queue command_queue) +{ + if (!CL_OBJECT_IS_COMMAND_QUEUE(command_queue)) { + return CL_INVALID_COMMAND_QUEUE; + } + cl_command_queue_add_ref(command_queue); + return CL_SUCCESS; +} + +cl_int clReleaseCommandQueue(cl_command_queue command_queue) { if (!CL_OBJECT_IS_COMMAND_QUEUE(command_queue)) { diff --git a/src/cl_command_queue.c b/src/cl_command_queue.c index 7e7a854..d844af8 100644 --- a/src/cl_command_queue.c +++ b/src/cl_command_queue.c @@ -36,27 +36,41 @@ #include <stdio.h> #include <string.h> -LOCAL cl_command_queue +static cl_command_queue cl_command_queue_new(cl_context ctx) { cl_command_queue queue = NULL; assert(ctx); - TRY_ALLOC_NO_ERR (queue, CALLOC(struct _cl_command_queue)); + queue = cl_calloc(1, sizeof(_cl_command_queue)); + if (queue == NULL) + return NULL; + CL_OBJECT_INIT_BASE(queue, CL_OBJECT_COMMAND_QUEUE_MAGIC); - cl_command_queue_init_enqueue(queue); + if (cl_command_queue_init_enqueue(queue) != CL_SUCCESS) { + cl_free(queue); + return NULL; + } /* Append the command queue in the list */ cl_context_add_queue(ctx, queue); - queue->ctx = ctx; - queue->cmrt_event = NULL; + return queue; +} -exit: +LOCAL cl_command_queue +cl_create_command_queue(cl_context ctx, cl_device_id device, + cl_command_queue_properties properties, cl_int *errcode_ret) +{ + cl_command_queue queue = cl_command_queue_new(ctx); + if (queue == NULL) { + *errcode_ret = CL_OUT_OF_HOST_MEMORY; + } + + queue->props = properties; + queue->device = device; + + *errcode_ret = CL_SUCCESS; return queue; -error: - cl_command_queue_delete(queue); - queue = NULL; - goto exit; } LOCAL void diff --git a/src/cl_command_queue.h b/src/cl_command_queue.h index 40127d6..830c150 100644 --- a/src/cl_command_queue.h +++ b/src/cl_command_queue.h @@ -40,7 +40,7 @@ typedef struct _cl_command_queue_enqueue_worker { typedef _cl_command_queue_enqueue_worker *cl_command_queue_enqueue_worker; /* Basically, this is a (kind-of) batch buffer */ -struct _cl_command_queue { +typedef struct _cl_command_queue { _cl_base_object base; _cl_command_queue_enqueue_worker worker; cl_context ctx; /* Its parent context */ @@ -50,9 +50,7 @@ struct _cl_command_queue { cl_int barrier_events_size; /* The size of array that wait_events point to */ cl_command_queue_properties props; /* Queue properties */ cl_mem perf; /* Where to put the perf counters */ - - void* cmrt_event; /* the latest CmEvent* of the command queue */ -}; +} _cl_command_queue; #define CL_OBJECT_COMMAND_QUEUE_MAGIC 0x83650a12b79ce4efLL #define CL_OBJECT_IS_COMMAND_QUEUE(obj) ((obj && \ @@ -60,9 +58,8 @@ struct _cl_command_queue { CL_OBJECT_GET_REF(obj) >= 1)) /* Allocate and initialize a new command queue. Also insert it in the list of - * command queue in the associated context - */ -extern cl_command_queue cl_command_queue_new(cl_context); + * command queue in the associated context */ +extern cl_command_queue cl_create_command_queue(cl_context, cl_device_id, cl_command_queue_properties, cl_int*); /* Destroy and deallocate the command queue */ extern void cl_command_queue_delete(cl_command_queue); diff --git a/src/cl_context.c b/src/cl_context.c index 378f4c3..8086231 100644 --- a/src/cl_context.c +++ b/src/cl_context.c @@ -418,32 +418,6 @@ cl_context_add_ref(cl_context ctx) CL_OBJECT_INC_REF(ctx); } -LOCAL cl_command_queue -cl_context_create_queue(cl_context ctx, - cl_device_id device, - cl_command_queue_properties properties, /* XXX */ - cl_int *errcode_ret) -{ - cl_command_queue queue = NULL; - cl_int err = CL_SUCCESS; - - - - /* We create the command queue and store it in the context list of queues */ - TRY_ALLOC (queue, cl_command_queue_new(ctx)); - queue->props = properties; - queue->device = device; - -exit: - if (errcode_ret) - *errcode_ret = err; - return queue; -error: - cl_command_queue_delete(queue); - queue = NULL; - goto exit; -} - cl_buffer_mgr cl_context_get_bufmgr(cl_context ctx) { diff --git a/src/cl_context.h b/src/cl_context.h index 4e7c2e8..d829991 100644 --- a/src/cl_context.h +++ b/src/cl_context.h @@ -158,12 +158,6 @@ extern void cl_context_add_ref(cl_context); extern cl_int cl_context_properties_process(const cl_context_properties *prop, struct _cl_context_prop *cl_props, cl_uint * prop_len); -/* Create the command queue from the given context and device */ -extern cl_command_queue cl_context_create_queue(cl_context, - cl_device_id, - cl_command_queue_properties, - cl_int*); - /* Enqueue a ND Range kernel */ extern cl_int cl_context_ND_kernel(cl_context, cl_command_queue, -- 2.7.4 _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet