Browse Source

starpu_opencl_set_kernel_args() does not take the number of arguments to set as a parameter any more.

Cyril Roelandt 13 years ago
parent
commit
bbce5565d0

+ 8 - 3
include/starpu_opencl.h

@@ -75,19 +75,24 @@ int starpu_opencl_collect_stats(cl_event event);
  * 
  * 
  * 	size of the argument,  pointer to the argument
  * 	size of the argument,  pointer to the argument
  *
  *
+ * 0 must be passed to this function after the kernel arguments.
+ *
  * In case of failure, returns the id of the argument that could not be set,
  * In case of failure, returns the id of the argument that could not be set,
- * and sets "error" to the error returned. Otherwise, returns "nargs".
+ * and sets "error" to the error returned. Otherwise, returns the number of 
+ * arguments that were set.
  *
  *
  * Example :
  * Example :
  * int n;
  * int n;
  * cl_int err;
  * cl_int err;
  * cl_kernel kernel;
  * cl_kernel kernel;
  * n = starpu_opencl_set_kernel_args(&err, 2, &kernel,
  * n = starpu_opencl_set_kernel_args(&err, 2, &kernel,
- *				     sizeof(foo), &foo, sizeof(bar), &bar);
+ *				     sizeof(foo), &foo,
+ *                                   sizeof(bar), &bar,
+ *                                   0);
  * if (n != 2)
  * if (n != 2)
  * 	fprintf(stderr, "Error : %d\n", err);
  * 	fprintf(stderr, "Error : %d\n", err);
  */
  */
-int starpu_opencl_set_kernel_args(cl_int *error, int nargs, cl_kernel *kernel, ...);
+int starpu_opencl_set_kernel_args(cl_int *error, cl_kernel *kernel, ...);
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }

+ 5 - 2
src/drivers/opencl/driver_opencl_utils.c

@@ -467,16 +467,19 @@ void starpu_opencl_display_error(const char *func, const char *file, int line, c
 
 
 }
 }
 
 
-int starpu_opencl_set_kernel_args(cl_int *error, int nargs, cl_kernel *kernel, ...)
+int starpu_opencl_set_kernel_args(cl_int *error, cl_kernel *kernel, ...)
 {
 {
 	int i;
 	int i;
 	va_list ap;
 	va_list ap;
 
 
 	va_start(ap, kernel);
 	va_start(ap, kernel);
 
 
-	for (i = 0; i < nargs; i++)
+	for (i = 0; ; i++)
 	{
 	{
 		int size = va_arg(ap, int);
 		int size = va_arg(ap, int);
+		if (size == 0)
+			break;
+
 		cl_mem *ptr = va_arg(ap, cl_mem *);
 		cl_mem *ptr = va_arg(ap, cl_mem *);
 		int err = clSetKernelArg(*kernel, i, size, ptr);
 		int err = clSetKernelArg(*kernel, i, size, ptr);
 		if (err != CL_SUCCESS)
 		if (err != CL_SUCCESS)

+ 3 - 2
tests/datawizard/interfaces/vector/test_vector_opencl.c

@@ -58,11 +58,12 @@ test_vector_opencl_func(void *buffers[], void *args)
 		STARPU_OPENCL_REPORT_ERROR(err);
 		STARPU_OPENCL_REPORT_ERROR(err);
 
 
 	int nargs;
 	int nargs;
-	nargs = starpu_opencl_set_kernel_args(&err, 4, &kernel,
+	nargs = starpu_opencl_set_kernel_args(&err, &kernel,
 					      sizeof(val), &val,
 					      sizeof(val), &val,
 					      sizeof(n), &n,
 					      sizeof(n), &n,
 					      sizeof(fail), &fail,
 					      sizeof(fail), &fail,
-					      sizeof(factor), &factor);
+					      sizeof(factor), &factor,
+					      0);
 
 
 	if (nargs != 4)
 	if (nargs != 4)
 	{
 	{