<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd">
<!-- saved from url=(0013)about:internet -->
<?xml-stylesheet type="text/xsl" href="mathml.xsl"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:pref="http://www.w3.org/2002/Math/preference" xmlns:xlink="http://www.w3.org/1999/xlink" pref:renderer="mathplayer-dl">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style xmlns="" type="text/css">
    /* This style sets a margin around the entire page */
        html, body {
            margin: 10px;
        }

        p {
            font: normal 16px verdana, sans-serif;
            margin: 0;
            padding-bottom:12px;
        }

        h1 {
            font: bold 25px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h2 {
            font: bold 19px verdana, sans-serif;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h3 {
            font: bold 19px verdana, sans-serif !important;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        li {
            font: normal 16px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 18px;
            padding-top: 0;
            padding-bottom: 0;
        }

        .pdparam {
            font: italic 16px verdana, sans-serif;
        }

                .term {
                        font: italic 16px verdana, sans-serif;
                        font-weight: normal;
                }

                .type {
                        font: normal 16px verdana, sans-serif !important;
                }

                .parameter {
                        font-style: italic;
                        }

        a:link, a:visited {
            color: blue;
            text-decoration: none;
            font: normal 16px;
        }

        a:hover {
            background-color: #FFFF99;
            font: normal 16px;
        }

        div.funcsynopsis {
            text-align: left;
            background-color: #e6e6e6;
            font: normal 16px verdana, sans-serif;
                        padding-top: 10px;
                        padding-bottom: 10px;
        }

        div.funcsynopsis table {
            border-collapse: separate;
            font: normal 16px verdana, sans-serif;
        }

        div.funcsynopsis td {
            background-color: #e6e6e6;
            border: 0 solid #000;
            padding: 1px;
            font: normal 16px verdana, sans-serif;
        }

        div.refsect1 {
            font-family: verdana, sans-serif;
            font-size: 16px;
        }

        code.constant {
            font: normal 16px courier new, monospace !important;
        }

                span.errorname {
            font: normal 16px verdana, sans-serif !important;
        }

        code.function {
            font: bold 16px verdana, sans-serif !important;
        }

        b.fsfunc {
            font: bold 16px verdana, sans-serif !important;
        }

        code.varname {
            font: italic 16px verdana, sans-serif;
        }

        code.replaceable {
            font: italic 16px courier new, monospace;
        }

        code.funcdef {
            font: normal 16px verdana, sans-serif !important;
        }

        .citerefentry {
            font: normal 16px verdana, sans-serif !important;
        }

        .parameter {
            font-style: italic;
        }

        code.fsfunc {
            font: normal 16px verdana, sans-serif !important;
        }

        /* PARAMETER: This style controls spacing between the terms in Parameter section */
        dt {
            margin-top: 15px;
        }

        /* TABLES: These styles apply to all tables OTHER than the Synopsis and Example tables */
        div.refsect1 table {
            width: 100%;
                        margin-top: 10px;
            background-color: #FFF;
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
                        font: normal 16px verdana, sans-serif;
        }

        div.refsect1 th {
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
            font: bold 16px verdana, sans-serif;
        }

        div.refsect1 td {
            background-color: #FFF;
            padding: 5px;
            vertical-align: text-top;
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
            font: normal 16px verdana, sans-serif;
        }

                  div.refsect1 p{
            font: normal 16px verdana, sans-serif;
            margin-top: 8px;
            margin-bottom: 8px;
            padding-top: 0;
            padding-bottom: 0;
        }


        /* EXAMPLE: These styles apply only to the Example section */
        div.refsect2 {
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 table {
            margin-top: 0;
            background-color: #e6e6e6;
            width: 100%;
            border: 0 solid #000;
            padding: 2px;
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 td {
            background-color: #e6e6e6;
            font: normal 16px courier new, monospace !important;
                        white-space:pre;
        }

        /* COPYRIGHT: This style formats the text of the copyright statement at the bottom of the page */
        div.refsect3 {
            font: normal 11px verdana, sans-serif;
            margin-top: 50px;
            margin-bottom: 20px;
            padding-top: 0;
            padding-bottom: 0;
        }

</style>
    <title>clSetKernelArg</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
    <meta name="keywords" content="clSetKernelArg" />
  </head>
  <body>
    <div class="refentry">
      <a id="id-1"></a>
      <div class="titlepage"></div>
      <div xmlns="" class="refnamediv">
        <a xmlns="http://www.w3.org/1999/xhtml" id="clSetKernelArg"></a>
        <h1>
            clSetKernelArg
        </h1>
        <p>
            Set the argument value for a specific argument of a kernel.
        </p>
      </div>
      <div class="refsynopsisdiv">
        <h2></h2>
        <div class="funcsynopsis">
          <table xmlns="" border="0" summary="Function synopsis" cellspacing="0" cellpadding="0">
            <tr valign="bottom">
              <td>
                <code xmlns="http://www.w3.org/1999/xhtml" class="funcdef">
                    <a class="link" href="scalarDataTypes.html" target="pagedisplay">cl_int</a>
 <strong class="fsfunc">clSetKernelArg</strong>
                (</code>
                <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="abstractDataTypes.html" target="pagedisplay">cl_kernel</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">kernel</var>, </td>
              </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">cl_uint</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">arg_index</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">size_t</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">arg_size</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>const <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">void</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*arg_value</var><code>)</code></td>
            </tr>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="parameters"></a>
        <h2>Parameters</h2>
        <div class="variablelist">
          <dl class="variablelist">
            <dt>
              <span class="term">
                    <code class="varname">kernel</code>
                </span>
            </dt>
            <dd>
              <p>
                        A valid kernel object.
                    </p>
            </dd>
            <dt>
              <span class="term">
                    <code class="varname">arg_index</code>
                </span>
            </dt>
            <dd>
              <p>
                      The argument index. Arguments to the kernel are referred by indices that
                      go from 0 for the leftmost argument to <code class="varname">n</code> - 1, where
                      <code class="varname">n</code> is the total number of arguments declared by a kernel.
                    </p>
            </dd>
            <dt>
              <span class="term">
                    <code class="varname">arg_value</code>
                </span>
            </dt>
            <dd>
              <p>
                      A pointer to data that should be used as the argument value for argument
                      specified by <code class="varname">arg_index</code>. The argument data pointed to by
                      <code class="varname">arg_value</code> is copied and the <code class="varname">arg_value</code>
                      pointer can therefore be reused by the application after
                      <code class="function">clSetKernelArg</code> returns. The argument value specified
                      is the value used by all API calls that enqueue <code class="varname">kernel</code>
                      (<a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</span></span></a>)
                      until the argument value is changed by a call to
                      <code class="function">clSetKernelArg</code> for <code class="varname">kernel</code>.
                    </p>
              <p>
                      If the argument is a memory object (buffer, pipe, image or image array), the
                      <code class="varname">arg_value</code> entry will be a pointer to the appropriate
                      buffer, pipe, image or image array object. The memory object must be created
                      with the context associated with the kernel object.  If the argument
                      is a buffer object, the <code class="varname">arg_value</code> pointer can be
                      NULL or point to a NULL value in which case a NULL value will be used
                      as the value for the argument declared as a pointer to 
                      <a class="citerefentry" href="global.html"><span class="citerefentry"><span class="refentrytitle">global</span></span></a>
                      or <a class="citerefentry" href="constant.html"><span class="citerefentry"><span class="refentrytitle">constant</span></span></a>
                      memory in the kernel.  If the argument is declared with the 
                      <a class="citerefentry" href="local.html"><span class="citerefentry"><span class="refentrytitle">local</span></span></a>
                      qualifier, the <code class="varname">arg_value</code> entry must be NULL.  If the
                      argument is of type <span class="type">sampler_t</span>, the <code class="varname">arg_value</code> entry
                      must be a pointer to the sampler object. If the argument is of type 
                      <span class="type">queue_t</span>, the <code class="varname">arg_value</code> entry must be a 
                      pointer to the device queue object.
                    </p>
              <p>
                      If the argument is declared to be a pointer of a built-in scalar or vector
                      type, or a user defined structure type in the global or constant address
                      space, the memory object specified as argument value must be a buffer
                      object (or NULL). If the argument is declared with the 
                      <a class="citerefentry" href="constant.html"><span class="citerefentry"><span class="refentrytitle">constant</span></span></a>
                      qualifier, the size in bytes of the memory object cannot
                      exceed <code class="constant">CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE</code>
                      and the number of arguments declared as pointers to 
                      <a class="citerefentry" href="constant.html"><span class="citerefentry"><span class="refentrytitle">constant</span></span></a>
                      memory cannot exceed <code class="constant">CL_DEVICE_MAX_CONSTANT_ARGS</code>.
                    </p>
              <p>
                      The memory object specified as argument value must be a pipe object if 
                      the argument is declared with the <code class="code">pipe</code> qualifier.
                    </p>
              <p>
                        The memory object specified as argument value must be a 2D image object if the argument is
                        declared to be of type <a class="link" href="abstractDataTypes.html" target="pagedisplay">image2d_t</a>. 
                        The memory object specified as argument value must be a 2D 
                        image object with image channel order = 
                        <code class="constant">CL_DEPTH</code> if the argument is 
                        declared to be of type 
                        <a class="link" href="abstractDataTypes.html" target="pagedisplay">image2d_depth_t</a>.
                        The memory object
                        specified as argument value must be a 3D image object if argument is declared to be of type
                        <a class="link" href="abstractDataTypes.html" target="pagedisplay">image3d_t</a>. The memory object specified as
                        argument value must be a 1D image object if the argument is declared to be of type
                        <a class="link" href="abstractDataTypes.html" target="pagedisplay">image1d_t</a>. The memory object specified as
                        argument value must be a 1D image buffer object if the argument is declared to be of type
                        <a class="link" href="abstractDataTypes.html" target="pagedisplay">image1d_buffer_t</a>.
                        The memory object specified as argument value must be a 1D image array object if argument
                        is declared to be of type <a class="link" href="abstractDataTypes.html" target="pagedisplay">image1d_array_t</a>.
                        The memory object specified as argument value must be a 2D image array object if argument is
                        declared to be of type <a class="link" href="abstractDataTypes.html" target="pagedisplay">image2d_array_t</a>.
                        The memory object specified as argument value must be a 2D image 
                        array object with image channel order = 
                        <code class="constant">CL_DEPTH</code> if argument is declared to be of type 
                        <a class="link" href="abstractDataTypes.html" target="pagedisplay">image2d_array_depth_t</a>.
                    </p>
              <p>
                      For all other kernel arguments, the <code class="varname">arg_value</code> entry
                      must be a pointer to the actual data to be used as argument value.
                    </p>
              <p>
                        If the 
                        <a class="citerefentry" href="cl_khr_gl_msaa_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_msaa_sharing</span></span></a>
                        extension is supported,
                        if the argument is a multi-sample 2D image, the 
                        <code class="varname">arg_value</code> entry must be a 
                        pointer to a multisample image object. If the 
                        argument is a multi-sample 2D depth image, the 
                        <code class="varname">arg_value</code> entry 
                        must be a pointer to a multisample depth image 
                        object. If the argument is a multi-sample 2D 
                        image array, the <code class="varname">arg_value</code> 
                        entry must be a pointer to a multi-sample 
                        image array object. If the
                        argument is a multi-sample 2D depth image array, 
                        the <code class="varname">arg_value</code> entry must 
                        be a pointer to a 
                        multi-sample depth image array object.
                    </p>
            </dd>
            <dt>
              <span class="term">
                    <code class="varname">
                       arg_size
                    </code>
                </span>
            </dt>
            <dd>
              <p>
                      Specifies the size of the argument value. If the argument is
                      a memory object, the size is the size of the memory
                      object. For arguments declared with the 
                      <a class="citerefentry" href="local.html"><span class="citerefentry"><span class="refentrytitle">local</span></span></a>
                      qualifier, the size specified will be the size in bytes
                      of the buffer that must be allocated for the 
                      <a class="citerefentry" href="local.html"><span class="citerefentry"><span class="refentrytitle">local</span></span></a>
                      argument. If the argument is of type <span class="type">sampler_t</span>,
                      the <code class="varname">arg_size</code> value must be equal to
                      <code class="code">sizeof(cl_sampler)</code>. 
                        If the argument is of type <span class="type">queue_t</span>, 
                        the <code class="varname">arg_size</code> value must be equal 
                        to <code class="code">sizeof(cl_command_queue)</code>.
                        For all other arguments, the size will
                      be the size of argument type.
                    </p>
            </dd>
          </dl>
        </div>
      </div>
      <div class="refsect1">
        <a id="notes"></a>
        <h2>Notes</h2>
        <p>
          A kernel object does not update the reference count for objects such as memory, sampler
          objects specified as argument values by <code class="function">clSetKernelArg</code>. Users may
          not rely on a kernel object to retain objects specified as argument values to the kernel.
        </p>
        <p>
          Implementations shall not allow <span class="type">cl_kernel</span> objects to hold reference counts to
          <span class="type">cl_kernel</span> arguments, because no mechanism is provided for the user to tell the kernel
          to release that ownership right. If the kernel holds ownership rights on kernel args,
          that would make it impossible for the user to tell with certainty when he may safely
          release user allocated resources associated with OpenCL objects such as the <span class="type">cl_mem</span>
          backing store used with <code class="constant">CL_MEM_USE_HOST_PTR</code>.
        </p>
        <h4><a id="id-1.6.4"></a>Multiple Host Threads</h4>
        <p>
     An OpenCL API call is considered to be
    <span class="emphasis"><em>thread-safe</em></span> if the internal state as managed by OpenCL remains
    consistent when called simultaneously by multiple <span class="emphasis"><em>host</em></span> threads.
    OpenCL API calls that are <span class="emphasis"><em>thread-safe</em></span> allow an application to
    call these functions in multiple <span class="emphasis"><em>host</em></span> threads without having to
    implement mutual exclusion across these <span class="emphasis"><em>host</em></span> threads i.e. they
    are also re-entrant-safe.
</p>
        <p>
     
    All OpenCL API calls are thread-safe except those that modify the state of cl_kernel objects:
    <a class="citerefentry" href="clSetKernelArg.html"><span class="citerefentry"><span class="refentrytitle">clSetKernelArg</span></span></a>, 
    <a class="citerefentry" href="clSetKernelArgSVMPointer.html"><span class="citerefentry"><span class="refentrytitle">clSetKernelArgSVMPointer</span></span></a>, 
    <a class="citerefentry" href="clSetKernelExecInfo.html"><span class="citerefentry"><span class="refentrytitle">clSetKernelExecInfo</span></span></a> and 
    <a class="citerefentry" href="clCloneKernel.html"><span class="citerefentry"><span class="refentrytitle">clCloneKernel</span></span></a>.
</p>
        <p>
    <a class="citerefentry" href="clSetKernelArg.html"><span class="citerefentry"><span class="refentrytitle">clSetKernelArg</span></span></a> , 
    <a class="citerefentry" href="clSetKernelArgSVMPointer.html"><span class="citerefentry"><span class="refentrytitle">clSetKernelArgSVMPointer</span></span></a>, 
    <a class="citerefentry" href="clSetKernelExecInfo.html"><span class="citerefentry"><span class="refentrytitle">clSetKernelExecInfo</span></span></a> and 
    <a class="citerefentry" href="clCloneKernel.html"><span class="citerefentry"><span class="refentrytitle">clCloneKernel</span></span></a> 
    are safe to call from any host thread, and safe to call re-entrantly so long as concurrent calls to any
    combination of these API calls operate on different cl_kernel objects. The state of the cl_kernel
    object is undefined if 
    <a class="citerefentry" href="clSetKernelArg.html"><span class="citerefentry"><span class="refentrytitle">clSetKernelArg</span></span></a>, 
    <a class="citerefentry" href="clSetKernelArgSVMPointer.html"><span class="citerefentry"><span class="refentrytitle">clSetKernelArgSVMPointer</span></span></a>, 
    <a class="citerefentry" href="clSetKernelExecInfo.html"><span class="citerefentry"><span class="refentrytitle">clSetKernelExecInfo</span></span></a> or
    <a class="citerefentry" href="clCloneKernel.html"><span class="citerefentry"><span class="refentrytitle">clCloneKernel</span></span></a> 
    are called from multiple host threads on the same cl_kernel object at the same
    time. Please note that there are additional limitations as to which OpenCL APIs may be called
    from OpenCL callback functions -- please see section 5.11.
</p>
        <p>
    The behavior of OpenCL APIs called from an interrupt or signal handler is 
    implementation-defined.
</p>
        <p>
     There is an inherent race condition in the
    design of OpenCL that occurs between setting a kernel argument and using the kernel
    with 
    <a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</span></span></a>.
    Another host thread might change the kernel arguments between when a host thread sets the
    kernel arguments and then enqueues the kernel, causing the wrong kernel arguments
    to be enqueued. Rather than attempt to share <span class="type">cl_kernel</span> objects among multiple host
    threads, applications are strongly encouraged to make additional <span class="type">cl_kernel</span> objects
    for kernel functions for each host thread.
</p>
      </div>
      <div class="refsect1">
        <a id="errors"></a>
        <h2>Errors</h2>
        <p>
          <code class="function">clSetKernelArg</code> returns <span class="errorname">CL_SUCCESS</span> if the
          function is executed successfully. Otherwise, it returns one of the following errors:
        </p>
        <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: disc; ">
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_KERNEL</span> if <code class="varname">kernel</code> 
                is not a valid kernel object.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_ARG_INDEX</span> if <code class="varname">arg_index</code> 
                is not a valid argument index.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_ARG_VALUE</span> if <code class="varname">arg_value</code> 
                specified is not a valid value.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_MEM_OBJECT</span> for an argument declared to 
                be a memory object when the
                specified <code class="varname">arg_value</code> is not a valid memory object.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_MEM_OBJECT</span> for an argument 
                declared to be a multi-sample image, multisample image array, 
                multi-sample depth image or a multi-sample depth image array and the 
                argument value specified in <code class="varname">arg_value</code> does not follow 
                the rules described above for a depth 
                memory object or memory array object argument. (Applies if the
                <a class="citerefentry" href="cl_khr_gl_msaa_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_msaa_sharing</span></span></a>
                extension is supported.)
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_SAMPLER</span> for an argument declared to be of type
              <code class="varname">sampler_t</code> when the specified <code class="varname">arg_value</code>
              is not a valid sampler object.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_DEVICE_QUEUE</span> for an argument declared to be of 
              type <span class="type">queue_t</span> when the 
              specified <code class="varname">arg_value</code> is not a valid device queue object.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_ARG_SIZE</span> if <code class="varname">arg_size</code>
              does not match the size of the data type for an argument that
              is not a memory object or if the argument is a memory object and
              <code class="varname">arg_size</code> != <code class="code">sizeof(cl_mem)</code> or if
              <code class="varname">arg_size</code> is zero and the argument is declared with the
              <a class="citerefentry" href="local.html"><span class="citerefentry"><span class="refentrytitle">local</span></span></a>
              qualifier or if the argument is a sampler and <code class="varname">arg_size</code> !=
              <code class="code">sizeof(cl_sampler)</code>.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_ARG_VALUE</span> if the argument is an image declared
              with the <code class="constant">read_only</code> qualifier and <code class="varname">arg_value</code>
              refers to an image object created with <code class="varname">cl_mem_flags</code> of
              <code class="constant">CL_MEM_WRITE</code> or if the image argument is declared with
              the <code class="constant">write_only</code> qualifier and <code class="varname">arg_value</code>
              refers to an image object created with <code class="varname">cl_mem_flags</code> of
              <code class="constant">CL_MEM_READ</code>.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_OUT_OF_RESOURCES</span> if there is a failure to allocate
              resources required by the OpenCL implementation on the device.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_OUT_OF_HOST_MEMORY</span> if there is a failure to allocate
              resources required by the OpenCL implementation on the host.
            </li>
          </ul>
        </div>
      </div>
      <div class="refsect2">
        <a id="example1"></a>
        <h3>
            Example
        </h3>
        <div class="informaltable">
          <table border="0">
            <colgroup>
              <col align="left" class="col1" />
            </colgroup>
            <tbody>
              <tr>
                <td align="left">
kernel void
image_filter (int n, int m,
          constant float *filter_weights,
          read_only image2d_t src_image,
          write_only image2d_t dst_image)
{
     ...
}
                        </td>
              </tr>
            </tbody>
          </table>
        </div>
        <p>
          Argument index values for <code class="constant">image_filter</code> will
          be 0 for <code class="constant">n</code>, 1 for <code class="constant">m</code>, 2 for
          <code class="constant">filter_weights</code>, 3 for <code class="constant">src_image</code> and 4 for
          <code class="constant">dst_image</code>.
        </p>
      </div>
      <div class="refsect1">
        <a id="specification"></a>
        <h2>Specification</h2>
        <p>
            <img src="pdficon_small1.gif" />

            <a href="https://www.khronos.org/registry/cl/specs/opencl-2.1.pdf#page=224" target="OpenCL Spec">OpenCL Specification</a>
        </p>
      </div>
      <div class="refsect1">
        <a id="seealso"></a>
        <h2>Also see</h2>
        <p>
            <a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</span></span></a>,
            <a class="citerefentry" href="clCreateKernel.html"><span class="citerefentry"><span class="refentrytitle">clCreateKernel</span></span></a>,
            <a class="citerefentry" href="clCreateKernelsInProgram.html"><span class="citerefentry"><span class="refentrytitle">clCreateKernelsInProgram</span></span></a>,
            <a class="citerefentry" href="clReleaseKernel.html"><span class="citerefentry"><span class="refentrytitle">clReleaseKernel</span></span></a>,
            <a class="citerefentry" href="clRetainKernel.html"><span class="citerefentry"><span class="refentrytitle">clRetainKernel</span></span></a>,
            <a class="citerefentry" href="clGetKernelInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetKernelInfo</span></span></a>,
            <a class="citerefentry" href="clGetKernelWorkGroupInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetKernelWorkGroupInfo</span></span></a>,
            <a class="citerefentry" href="clSetKernelArgSVMPointer.html"><span class="citerefentry"><span class="refentrytitle">clSetKernelArgSVMPointer</span></span></a>
        </p>
      </div>
      <div xmlns="" class="refsect3" lang="en" xml:lang="en"><a xmlns="http://www.w3.org/1999/xhtml" id="Copyright"></a><h4 xmlns="http://www.w3.org/1999/xhtml"></h4><img xmlns="http://www.w3.org/1999/xhtml" src="KhronosLogo.jpg" /><p xmlns="http://www.w3.org/1999/xhtml"></p>Copyright © 2007-2015 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the condition that this copyright notice and permission notice shall be included
in all copies or substantial portions of the Materials.
</div>
    </div>
  </body>
</html>
