From: Karol Herbst Date: Mon, 12 Mar 2018 10:04:38 +0000 (+0100) Subject: clover: add trivial clCreateCommandQueueWithProperties implementation X-Git-Tag: upstream/20.1.8~3709 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=333c9d5bb054d5ac5518e830b535e8a4f3f80187;p=platform%2Fupstream%2Fmesa.git clover: add trivial clCreateCommandQueueWithProperties implementation It's not adding 2.0 features, but it's enough to run the 2.0 CTS on top of clover and probably most CL applications using it. We just fail if we hit unknown properties and that's probably good enough until we implement the other bits properly. Signed-off-by: Karol Herbst Acked-by: Alyssa Rosenzweig Reviewed-by: Pierre Moreau Reviewed-by: Francisco Jerez Tested-by: Marge Bot Part-of: --- diff --git a/src/gallium/state_trackers/clover/api/dispatch.cpp b/src/gallium/state_trackers/clover/api/dispatch.cpp index 5671fe3..a2d270e 100644 --- a/src/gallium/state_trackers/clover/api/dispatch.cpp +++ b/src/gallium/state_trackers/clover/api/dispatch.cpp @@ -147,7 +147,7 @@ namespace clover { NULL, // clEnqueueAcquireEGLObjectsKHR NULL, // clEnqueueReleaseEGLObjectsKHR NULL, // clCreateEventFromEGLSyncKHR - NULL, // clCreateCommandQueueWithProperties + clCreateCommandQueueWithProperties, NULL, // clCreatePipe NULL, // clGetPipeInfo NULL, // clSVMAlloc diff --git a/src/gallium/state_trackers/clover/api/queue.cpp b/src/gallium/state_trackers/clover/api/queue.cpp index 06a2863..65b271b 100644 --- a/src/gallium/state_trackers/clover/api/queue.cpp +++ b/src/gallium/state_trackers/clover/api/queue.cpp @@ -112,3 +112,24 @@ clFlush(cl_command_queue d_q) try { } catch (error &e) { return e.get(); } + +CLOVER_API cl_command_queue +clCreateCommandQueueWithProperties(cl_context context, cl_device_id device, + const cl_queue_properties *properties, + cl_int *errcode_ret) try { + cl_command_queue_properties props = 0; + if (properties) { + for (auto idx = 0; properties[idx]; idx += 2) { + if (properties[idx] == CL_QUEUE_PROPERTIES) + props |= properties[idx + 1]; + else + throw error(CL_INVALID_VALUE); + } + } + + return clCreateCommandQueue(context, device, props, errcode_ret); + +} catch (error &e) { + ret_error(errcode_ret, e); + return NULL; +}