~~NOTOC~~
====== clSetKernelArg ======
Die Funktion setzt Parameter für den Kernel.
===== Signatur =====
cl_int clSetKernelArg ( cl_kernel kernel,
cl_uint arg_index,
size_t arg_size,
const void *arg_value)
===== Parameter =====
**kernel:** Das Kernel-Objekt für das ein Argument gesetzt werden soll.
**arg_index:** Index des Arguments. Indizes starten von 0 bis n-1 mit n der Gesamtanzahl Argumente, die für den Kernel definiert wurden.
**arg_size:** Die Größe / Länge des Argument-Wertes.
**arg_value:** Zeiger auf die Daetn, die als Argument fpür den Kernel benutzt werden sollen. Die Argumentdaten werden kopiert, so kann der Zeiger wiederbenutzt werden, nachdem //clSetKernelArg// zurückgekehrt ist. Wenn das Argument ein Speicherobjekt sein soll, dann ist //arg_value// ein Zeiger auf das Buffer-Objekt.
===== Rückgabewert =====
Zurückgegeben wird einer der folgenden Fehlercodes:
^ Wert ^ Beschreibung ^
| CL_SUCCESS | Die Funktion wird erfolgreich ausgeführt |
| CL_INVALID_KERNEL | //kernel// ist kein gültiges Kernel-Objekt |
| CL_INVALID_ARG_INDEX | //arg_index// ist kein gültiger Argument-Index |
| CL_INVALID_MEM_OBJECT | Argument soll Speicherobjekt sein, //arg_value// ist aber kein gültiges Speicherobjekt |
| CL_INVALID_SAMPLER | Argument soll vom Typ sampler_t sein, //arg_value// ist aber kein gültiges Sampler-Objekt |
| CL_INVALID_ARG_SIZE | //arg_size// stimmt nicht mit der Größe des Parameters überein; wenn das Argument ein Speicherobjekt ist, dann ist //arg_size// nicht sizeof(cl_mem) oder //arg_size// ist 0 aber das Argument ist durch ''__local''-Qualifier definiert. |
| CL_INVALID_ARG_VALUE | |
| CL_OUT_OF_RESOURCES | Es ist ein Fehler beim Reservieren von Speicher aufgetreten, der für die OpenCL-Implementation auf dem Gerät gebraucht wird. |
| CL_OUT_OF_HOST_MEMORY | Es ist ein Fehler beim Reservieren von Speicher aufgetreten, der für die OpenCL-Implementation auf dem Hostprozressor gebraucht wird. |
===== Beispiel =====
// source_str="__kernel void mfunc(int *a, int *b, int *c) { ... }";
// kernel=clCreateKernel( ... )
// a_mem_obj=clCreateBuffer(...)
int ret=0;
ret = clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&a_mem_obj);
ret = clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&b_mem_obj);
ret = clSetKernelArg(kernel, 2, sizeof(cl_mem), (void *)&c_mem_obj);