From: Junyan He Date: Fri, 18 Oct 2013 02:19:57 +0000 (+0800) Subject: Implement the CL api for clGetEventProfilingInfo X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7137485c0418b9f8ca4c1e4d4a158b7ff0454089;p=contrib%2Fbeignet.git Implement the CL api for clGetEventProfilingInfo Signed-off-by: Junyan He Reviewed-by: Yang Rong Reviewed-by: Zhigang Gong --- diff --git a/src/cl_api.c b/src/cl_api.c index 5de7f6b..6d48e15 100644 --- a/src/cl_api.c +++ b/src/cl_api.c @@ -398,7 +398,7 @@ clCreateCommandQueue(cl_context context, INVALID_DEVICE_IF (device != context->device); INVALID_VALUE_IF (properties & ~(CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_PROFILING_ENABLE)); - if(properties) { + if(properties & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE) {/*not supported now.*/ err = CL_INVALID_QUEUE_PROPERTIES; goto error; } @@ -1224,8 +1224,37 @@ clGetEventProfilingInfo(cl_event event, void * param_value, size_t * param_value_size_ret) { - NOT_IMPLEMENTED; - return 0; + cl_int err = CL_SUCCESS; + cl_ulong ret_val; + + CHECK_EVENT(event); + + if (!(event->queue->props & CL_QUEUE_PROFILING_ENABLE) || + event->type == CL_COMMAND_USER || + event->status != CL_COMPLETE) { + err = CL_PROFILING_INFO_NOT_AVAILABLE; + goto error; + } + + if ((param_name != CL_PROFILING_COMMAND_QUEUED && + param_name != CL_PROFILING_COMMAND_SUBMIT && + param_name != CL_PROFILING_COMMAND_START && + param_name != CL_PROFILING_COMMAND_END) || + (param_value && param_value_size < sizeof(cl_ulong))) { + err = CL_INVALID_VALUE; + goto error; + } + + err = cl_event_profiling(event, param_name, &ret_val); + + if (err == CL_SUCCESS) { + if (param_value) + *(cl_ulong*)param_value = ret_val; + if (param_value_size_ret) + *param_value_size_ret = sizeof(cl_ulong); + } +error: + return err; } cl_int