clover: Add clCreateProgramWithBuiltInKernels.
authorEdB <edb+mesa@sigluy.net>
Sun, 27 Jul 2014 21:07:38 +0000 (23:07 +0200)
committerFrancisco Jerez <currojerez@riseup.net>
Mon, 28 Jul 2014 12:45:29 +0000 (14:45 +0200)
[ Francisco Jerez: Check for devices not associated with the specified
  context.  Style fix. ]

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
src/gallium/state_trackers/clover/api/dispatch.cpp
src/gallium/state_trackers/clover/api/program.cpp

index 488e65491bfad7ceb0186a2a34d19e4e59fbd725..43b5537106a708756d951adeccc02e5089d0d0b0 100644 (file)
@@ -121,7 +121,7 @@ namespace clover {
       clRetainDevice,
       clReleaseDevice,
       clCreateImage,
-      NULL, // clCreateProgramWithBuiltInKernels
+      clCreateProgramWithBuiltInKernels,
       NULL, // clCompileProgram
       NULL, // clLinkProgram
       NULL, // clUnloadPlatformCompiler
index a14baa30e06d947c7e1e471eb69140504ca0a303..293a61fdfa8d01e3ed7b14f78e7ef4d0600d25f0 100644 (file)
@@ -106,6 +106,28 @@ clCreateProgramWithBinary(cl_context d_ctx, cl_uint n,
    return NULL;
 }
 
+CLOVER_API cl_program
+clCreateProgramWithBuiltInKernels(cl_context d_ctx, cl_uint n,
+                                  const cl_device_id *d_devs,
+                                  const char *kernel_names,
+                                  cl_int *r_errcode) try {
+   auto &ctx = obj(d_ctx);
+   auto devs = objs(d_devs, n);
+
+   if (any_of([&](const device &dev) {
+            return !count(dev, ctx.devices());
+         }, devs))
+      throw error(CL_INVALID_DEVICE);
+
+   // No currently supported built-in kernels.
+   throw error(CL_INVALID_VALUE);
+
+} catch (error &e) {
+   ret_error(r_errcode, e);
+   return NULL;
+}
+
+
 CLOVER_API cl_int
 clRetainProgram(cl_program d_prog) try {
    obj(d_prog).retain();