From 333c9d5bb054d5ac5518e830b535e8a4f3f80187 Mon Sep 17 00:00:00 2001 From: Karol Herbst Date: Mon, 12 Mar 2018 11:04:38 +0100 Subject: [PATCH] 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: --- .../state_trackers/clover/api/dispatch.cpp | 2 +- .../state_trackers/clover/api/queue.cpp | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/gallium/state_trackers/clover/api/dispatch.cpp b/src/gallium/state_trackers/clover/api/dispatch.cpp index 5671fe39814..a2d270ea05b 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 06a28638002..65b271b216f 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; +} -- 2.30.2