[Beignet] [PATCH 2/2] Move clCreateCommandQueueWithProperties API to command_queue file.
junyan.he at inbox.com
junyan.he at inbox.com
Mon Dec 19 06:06:57 UTC 2016
From: Junyan He <junyan.he at intel.com>
Signed-off-by: Junyan He <junyan.he at intel.com>
---
src/cl_api.c | 79 --------------------------------------
src/cl_api_command_queue.c | 95 +++++++++++++++++++++++++++++++++++++++++++++-
src/cl_command_queue.c | 5 ++-
src/cl_command_queue.h | 14 +------
4 files changed, 99 insertions(+), 94 deletions(-)
diff --git a/src/cl_api.c b/src/cl_api.c
index 1bc181c..06872a5 100644
--- a/src/cl_api.c
+++ b/src/cl_api.c
@@ -80,85 +80,6 @@ clGetPlatformIDs(cl_uint num_entries,
return cl_get_platform_ids(num_entries, platforms, num_platforms);
}
-cl_command_queue
-clCreateCommandQueueWithProperties(cl_context context,
- cl_device_id device,
- const cl_queue_properties* properties,
- cl_int * errcode_ret)
-{
- cl_command_queue queue = NULL;
- cl_int err = CL_SUCCESS;
- cl_command_queue_properties prop = 0xFFFFFFFF;
- cl_uint queue_sz = 0xFFFFFFFF;
- CHECK_CONTEXT (context);
-
- err = cl_devices_list_include_check(context->device_num, context->devices, 1, &device);
- if (err)
- goto error;
-
- if(properties)
- {
- cl_ulong que_type;
- cl_ulong que_val;
- cl_uint i;
- for(i = 0;(que_type = properties[i++])!=0;i++)
- {
- que_val = properties[i];
- switch(que_type)
- {
- case CL_QUEUE_PROPERTIES:
- if(prop != 0xFFFFFFFF)
- err = CL_INVALID_VALUE;
- else {
- switch (que_val) {
- case 0:
- case CL_QUEUE_PROFILING_ENABLE:
- case CL_QUEUE_PROFILING_ENABLE |
- CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE:
- case CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE:
- case CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE:
- case CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE |
- CL_QUEUE_ON_DEVICE_DEFAULT:
- case CL_QUEUE_PROFILING_ENABLE |
- CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE:
- case CL_QUEUE_PROFILING_ENABLE |
- CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE |
- CL_QUEUE_ON_DEVICE_DEFAULT:
- prop = que_val;
- break;
- default:
- err = CL_INVALID_VALUE;
- break;
- }
- }
- break;
- case CL_QUEUE_SIZE:
- queue_sz = que_val;
- break;
- default:
- err = CL_INVALID_VALUE;
- break;
- }
- }
- }
- if(err) goto error;
- if(prop == 0xFFFFFFFF) prop = 0;
- if(queue_sz != 0xFFFFFFFF)
- if(!(prop & CL_QUEUE_ON_DEVICE)) {
- err = CL_INVALID_VALUE;
- goto error;
- }
- if(queue_sz == 0xFFFFFFFF) queue_sz = device->queue_on_device_preferred_size;
- INVALID_VALUE_IF (queue_sz > device->queue_on_device_max_size);
-
- queue = cl_create_command_queue(context, device, prop, &err);
- queue->size = queue_sz;
-error:
- if (errcode_ret)
- *errcode_ret = err;
- return queue;
-}
-
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 34b5789..b1aee12 100644
--- a/src/cl_api_command_queue.c
+++ b/src/cl_api_command_queue.c
@@ -20,6 +20,7 @@
#include "CL/cl.h"
#include <stdio.h>
+/* Depreciated in 2.0 later */
cl_command_queue
clCreateCommandQueue(cl_context context,
cl_device_id device,
@@ -49,7 +50,99 @@ clCreateCommandQueue(cl_context context,
break;
}
- queue = cl_create_command_queue(context, device, properties, &err);
+ queue = cl_create_command_queue(context, device, properties, 0, &err);
+ } while (0);
+
+ if (errcode_ret)
+ *errcode_ret = err;
+ return queue;
+}
+
+/* 2.0 new API for create command queue. */
+cl_command_queue
+clCreateCommandQueueWithProperties(cl_context context,
+ cl_device_id device,
+ const cl_queue_properties *properties,
+ cl_int *errcode_ret)
+{
+ cl_command_queue queue = NULL;
+ cl_int err = CL_SUCCESS;
+ cl_command_queue_properties prop = 0xFFFFFFFF;
+ cl_uint queue_sz = 0xFFFFFFFF;
+
+ 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_ulong que_type;
+ cl_ulong que_val;
+ cl_uint i;
+ for (i = 0; (que_type = properties[i++]) != 0; i++) {
+ que_val = properties[i];
+ switch (que_type) {
+ case CL_QUEUE_PROPERTIES:
+ if (prop != 0xFFFFFFFF)
+ err = CL_INVALID_VALUE;
+ else {
+ switch (que_val) {
+ case 0:
+ case CL_QUEUE_PROFILING_ENABLE:
+ case CL_QUEUE_PROFILING_ENABLE |
+ CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE:
+ case CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE:
+ case CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE:
+ case CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE |
+ CL_QUEUE_ON_DEVICE_DEFAULT:
+ case CL_QUEUE_PROFILING_ENABLE |
+ CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE:
+ case CL_QUEUE_PROFILING_ENABLE |
+ CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_ON_DEVICE |
+ CL_QUEUE_ON_DEVICE_DEFAULT:
+ prop = que_val;
+ break;
+ default:
+ err = CL_INVALID_VALUE;
+ break;
+ }
+ }
+ break;
+ case CL_QUEUE_SIZE:
+ queue_sz = que_val;
+ break;
+ default:
+ err = CL_INVALID_VALUE;
+ break;
+ }
+ }
+
+ if (err) /* break the while and return some err. */
+ break;
+ }
+
+ /* Set some paramters to default val. */
+ if (prop == 0xFFFFFFFF)
+ prop = 0;
+ if (queue_sz != 0xFFFFFFFF)
+ if (!(prop & CL_QUEUE_ON_DEVICE)) {
+ err = CL_INVALID_VALUE;
+ break;
+ }
+ if (queue_sz == 0xFFFFFFFF)
+ queue_sz = device->queue_on_device_preferred_size;
+
+ if (queue_sz > device->queue_on_device_max_size) {
+ err = CL_INVALID_VALUE;
+ break;
+ }
+
+ queue = cl_create_command_queue(context, device, prop, queue_sz, &err);
} while (0);
if (errcode_ret)
diff --git a/src/cl_command_queue.c b/src/cl_command_queue.c
index 30e918b..cab0c19 100644
--- a/src/cl_command_queue.c
+++ b/src/cl_command_queue.c
@@ -58,8 +58,8 @@ cl_command_queue_new(cl_context ctx)
}
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_create_command_queue(cl_context ctx, cl_device_id device, cl_command_queue_properties properties,
+ cl_uint queue_size, cl_int *errcode_ret)
{
cl_command_queue queue = cl_command_queue_new(ctx);
if (queue == NULL) {
@@ -68,6 +68,7 @@ cl_create_command_queue(cl_context ctx, cl_device_id device,
queue->props = properties;
queue->device = device;
+ queue->size = queue_size;
*errcode_ret = CL_SUCCESS;
return queue;
diff --git a/src/cl_command_queue.h b/src/cl_command_queue.h
index dbcca43..d9f6b0d 100644
--- a/src/cl_command_queue.h
+++ b/src/cl_command_queue.h
@@ -60,14 +60,12 @@ typedef struct _cl_command_queue {
/* 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_create_command_queue(cl_context, cl_device_id, cl_command_queue_properties, cl_int*);
-
+extern cl_command_queue cl_create_command_queue(cl_context, cl_device_id,
+ cl_command_queue_properties, cl_uint, cl_int*);
/* Destroy and deallocate the command queue */
extern void cl_command_queue_delete(cl_command_queue);
-
/* Keep one more reference on the queue */
extern void cl_command_queue_add_ref(cl_command_queue);
-
/* Map ND range kernel from OCL API */
extern cl_int cl_command_queue_ND_range(cl_command_queue queue,
cl_kernel ker,
@@ -76,28 +74,20 @@ extern cl_int cl_command_queue_ND_range(cl_command_queue queue,
const size_t *global_work_offset,
const size_t *global_work_size,
const size_t *local_work_size);
-
/* The memory object where to report the performance */
extern cl_int cl_command_queue_set_report_buffer(cl_command_queue, cl_mem);
-
/* Flush for the specified gpgpu */
extern int cl_command_queue_flush_gpgpu(cl_gpgpu);
-
/* Bind all the surfaces in the GPGPU state */
extern cl_int cl_command_queue_bind_surface(cl_command_queue, cl_kernel, cl_gpgpu, uint32_t *);
-
/* Bind all the image surfaces in the GPGPU state */
extern cl_int cl_command_queue_bind_image(cl_command_queue, cl_kernel, cl_gpgpu, uint32_t *);
-
/* Bind all exec info to bind table */
extern cl_int cl_command_queue_bind_exec_info(cl_command_queue, cl_kernel, cl_gpgpu, uint32_t);
-
/* Insert a user event to command's wait_events */
extern void cl_command_queue_insert_event(cl_command_queue, cl_event);
-
/* Remove a user event from command's wait_events */
extern void cl_command_queue_remove_event(cl_command_queue, cl_event);
-
extern void cl_command_queue_insert_barrier_event(cl_command_queue queue, cl_event event);
extern void cl_command_queue_remove_barrier_event(cl_command_queue queue, cl_event event);
extern void cl_command_queue_notify(cl_command_queue queue);
--
2.7.4
More information about the Beignet
mailing list