<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook MathML Module V1.1b1//EN"
              "http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd">

<refentry>
    <refentryinfo>
        <keywordset>
            <keyword>clSetKernelArg</keyword>
        </keywordset>
    </refentryinfo>

    <refmeta>
        <refentrytitle>
            clSetKernelArg
        </refentrytitle>

        <refmiscinfo>
            <copyright>
                <year>2007-2013</year>
                <holder>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.</holder>
            </copyright>
        </refmiscinfo>
        <manvolnum>3</manvolnum>
    </refmeta>

<!-- ================================ SYNOPSIS -->

    <refnamediv id="clSetKernelArg">
        <refname>
            clSetKernelArg
        </refname>

        <refpurpose>
            Used to set the argument value for a specific argument of a kernel.
        </refpurpose>
    </refnamediv>

    <refsynopsisdiv xmlns:xlink="http://www.w3.org/1999/xlink"><title></title>
        <funcsynopsis>
            <funcprototype>
                <funcdef>
                    <link xlink:href="scalarDataTypes.html">cl_int</link>
 <function>clSetKernelArg</function>
                </funcdef>

                <paramdef><link xlink:href="abstractDataTypes.html">cl_kernel</link><parameter>kernel</parameter></paramdef>
                <paramdef><link xlink:href="scalarDataTypes.html">cl_uint</link><parameter>arg_index</parameter></paramdef>
                <paramdef><link xlink:href="scalarDataTypes.html">size_t</link><parameter>arg_size</parameter></paramdef>
                <paramdef>const <link xlink:href="scalarDataTypes.html">void</link><parameter>*arg_value</parameter></paramdef>
            </funcprototype>
        </funcsynopsis>
    </refsynopsisdiv>

<!-- ================================ PARAMETERS -->
<!-- For each <varlistentry />, place the parameter name in <term /><varname />, then the definition in
     <listitem /><para />. When refering to anything
     that has a page in this system, use <citerefentry /><refentrytitle /> to make it a link.
 -->

    <refsect1 id="parameters" xmlns:xlink="http://www.w3.org/1999/xlink">
        <title>Parameters</title>
        <variablelist>
            <varlistentry>
                <term>
                    <varname>kernel</varname>
                </term>
                <listitem>
                    <para>
                        A valid kernel object.
                    </para>
                </listitem>
            </varlistentry>

            <varlistentry>
                <term>
                    <varname>arg_index</varname>
                </term>

                <listitem>
                    <para>
                      The argument index. Arguments to the kernel are referred by indices that
                      go from 0 for the leftmost argument to <varname>n</varname> - 1, where
                      <varname>n</varname> is the total number of arguments declared by a kernel.
                    </para>
                </listitem>
            </varlistentry>

            <varlistentry>
                <term>
                    <varname>arg_value</varname>
                </term>

                <listitem>
                    <para>
                      A pointer to data that should be used as the argument value for argument
                      specified by <varname>arg_index</varname>. The argument data pointed to by
                      <varname>arg_value</varname> is copied and the <varname>arg_value</varname>
                      pointer can therefore be reused by the application after
                      <function>clSetKernelArg</function> returns. The argument value specified
                      is the value used by all API calls that enqueue <varname>kernel</varname>
                      (<citerefentry><refentrytitle>clEnqueueNDRangeKernel</refentrytitle></citerefentry>)
                      until the argument value is changed by a call to
                      <function>clSetKernelArg</function> for <varname>kernel</varname>.
                    </para>

                    <para>
                      If the argument is a memory object (buffer, pipe, image or image array), the
                      <varname>arg_value</varname> 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 <varname>arg_value</varname> 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 
                      <citerefentry><refentrytitle>global</refentrytitle></citerefentry>
                      or <citerefentry><refentrytitle>constant</refentrytitle></citerefentry>
                      memory in the kernel.  If the argument is declared with the 
                      <citerefentry><refentrytitle>local</refentrytitle></citerefentry>
                      qualifier, the <varname>arg_value</varname> entry must be NULL.  If the
                      argument is of type <type>sampler_t</type>, the <varname>arg_value</varname> entry
                      must be a pointer to the sampler object. If the argument is of type 
                      <type>queue_t</type>, the <varname>arg_value</varname> entry must be a 
                      pointer to the device queue object.
                    </para>

                    <para>
                      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 
                      <citerefentry><refentrytitle>constant</refentrytitle></citerefentry>
                      qualifier, the size in bytes of the memory object cannot
                      exceed <constant>CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE</constant>
                      and the number of arguments declared as pointers to 
                      <citerefentry><refentrytitle>constant</refentrytitle></citerefentry>
                      memory cannot exceed <constant>CL_DEVICE_MAX_CONSTANT_ARGS</constant>.
                    </para>

                    <para>
                      The memory object specified as argument value must be a pipe object if 
                      the argument is declared with the <code>pipe</code> qualifier.
                    </para>

                    <para>
                        The memory object specified as argument value must be a 2D image object if the argument is
                        declared to be of type <link xlink:href="abstractDataTypes.html">image2d_t</link>. 
                        The memory object specified as argument value must be a 2D 
                        image object with image channel order = 
                        <constant>CL_DEPTH</constant> if the argument is 
                        declared to be of type 
                        <link xlink:href="abstractDataTypes.html">image2d_depth_t</link>.
                        The memory object
                        specified as argument value must be a 3D image object if argument is declared to be of type
                        <link xlink:href="abstractDataTypes.html">image3d_t</link>. The memory object specified as
                        argument value must be a 1D image object if the argument is declared to be of type
                        <link xlink:href="abstractDataTypes.html">image1d_t</link>. The memory object specified as
                        argument value must be a 1D image buffer object if the argument is declared to be of type
                        <link xlink:href="abstractDataTypes.html">image1d_buffer_t</link>.
                        The memory object specified as argument value must be a 1D image array object if argument
                        is declared to be of type <link xlink:href="abstractDataTypes.html">image1d_array_t</link>.
                        The memory object specified as argument value must be a 2D image array object if argument is
                        declared to be of type <link xlink:href="abstractDataTypes.html">image2d_array_t</link>.
                        The memory object specified as argument value must be a 2D image 
                        array object with image channel order = 
                        <constant>CL_DEPTH</constant> if argument is declared to be of type 
                        <link xlink:href="abstractDataTypes.html">image2d_array_depth_t</link>.
                    </para>

                    <para>
                      For all other kernel arguments, the <varname>arg_value</varname> entry
                      must be a pointer to the actual data to be used as argument value.
                    </para>

                    <para>
                        If the 
                        <citerefentry><refentrytitle>cl_khr_gl_msaa_sharing</refentrytitle></citerefentry>
                        extension is supported,
                        if the argument is a multi-sample 2D image, the 
                        <varname>arg_value</varname> entry must be a 
                        pointer to a multisample image object. If the 
                        argument is a multi-sample 2D depth image, the 
                        <varname>arg_value</varname> entry 
                        must be a pointer to a multisample depth image 
                        object. If the argument is a multi-sample 2D 
                        image array, the <varname>arg_value</varname> 
                        entry must be a pointer to a multi-sample 
                        image array object. If the
                        argument is a multi-sample 2D depth image array, 
                        the <varname>arg_value</varname> entry must 
                        be a pointer to a 
                        multi-sample depth image array object.
                    </para>
                </listitem>
            </varlistentry>

            <varlistentry>
                <term>
                    <varname>
                       arg_size
                    </varname>
                </term>

                <listitem>
                    <para>
                      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 
                      <citerefentry><refentrytitle>local</refentrytitle></citerefentry>
                      qualifier, the size specified will be the size in bytes
                      of the buffer that must be allocated for the 
                      <citerefentry><refentrytitle>local</refentrytitle></citerefentry>
                      argument. If the argument is of type <type>sampler_t</type>,
                      the <varname>arg_size</varname> value must be equal to
                      <code>sizeof(cl_sampler)</code>. 
                        If the argument is of type <type>queue_t</type>, 
                        the <varname>arg_size</varname> value must be equal 
                        to <code>sizeof(cl_command_queue)</code>.
                        For all other arguments, the size will
                      be the size of argument type.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsect1>

<!-- ================================ NOTES  -->
<!-- Use <function /> to refer ONLY to the function that this page describes. All other functions should use
     <citerefentry /><refentrytitle /> to make it a link. Use <varname /> for parameters. Use <constant /> for
     constants (or anything to be set in monospace, non-bold type. -->

     <refsect1 id="notes"><title>Notes</title>
        <para>
          A kernel object does not update the reference count for objects such as memory, sampler
          objects specified as argument values by <function>clSetKernelArg</function>. Users may
          not rely on a kernel object to retain objects specified as argument values to the kernel.
        </para>

        <para>
          Implementations shall not allow <type>cl_kernel</type> objects to hold reference counts to
          <type>cl_kernel</type> 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 <type>cl_mem</type>
          backing store used with <constant>CL_MEM_USE_HOST_PTR</constant>.
        </para>

        <para>
          <!-- from the spec's glossary --> An OpenCL API call is considered to be
          <emphasis>thread-safe</emphasis> if the internal state as managed by OpenCL remains
          consistent when called simultaneously by multiple <emphasis>host</emphasis> threads.
          OpenCL API calls that are <emphasis>thread-safe</emphasis> allow an application to
          call these functions in multiple <emphasis>host</emphasis> threads without having to
          implement mutual exclusion across these <emphasis>host</emphasis> threads i.e. they
          are also re-entrant-safe.
        </para>

        <para>
          <!-- section A.2 --> All OpenCL API calls are thread-safe except
          <function>clSetKernelArg</function>
          and <citerefentry><refentrytitle>clSetKernelArgSVMPointer</refentrytitle></citerefentry>. 
          <function>clSetKernelArg</function>
          and <citerefentry><refentrytitle>clSetKernelArgSVMPointer</refentrytitle></citerefentry> are safe
          to call from any host thread, and safe to call re-entrantly so long as concurrent
          calls operate on different <type>cl_kernel</type> objects. 
          However, the behavior of the <type>cl_kernel</type>
          object is undefined if <function>clSetKernelArg</function> 
          or <citerefentry><refentrytitle>clSetKernelArgSVMPointer</refentrytitle></citerefentry>
          are called from multiple
          host threads on the same <type>cl_kernel</type> 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.
          (Please refer to the OpenCL glossary for the OpenCL definition of thread-safe. 
          This definition may be different from usage of the term in other contexts.)
        </para>

        <para>
          <!-- section A.2, footnote --> There is an inherent race condition in the
          design of OpenCL that occurs between setting a kernel argument and using the kernel
          with <citerefentry><refentrytitle>clEnqueueNDRangeKernel</refentrytitle></citerefentry>.
          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 <type>cl_kernel</type> objects among multiple host
          threads, applications are strongly encouraged to make additional <type>cl_kernel</type> objects
          for kernel functions for each host thread.
        </para>
    </refsect1>

<!-- ================================ ERRORS  -->

    <refsect1 id="errors"><title>Errors</title>
        <para>
          <function>clSetKernelArg</function> returns <errorname>CL_SUCCESS</errorname> if the
          function is executed successfully. Otherwise, it returns one of the following errors:
        </para>

        <itemizedlist mark="disc">
            <listitem>
                <errorname>CL_INVALID_KERNEL</errorname> if <varname>kernel</varname> 
                is not a valid kernel object.
            </listitem>

            <listitem>
                <errorname>CL_INVALID_ARG_INDEX</errorname> if <varname>arg_index</varname> 
                is not a valid argument index.
            </listitem>

            <listitem>
                <errorname>CL_INVALID_ARG_VALUE</errorname> if <varname>arg_value</varname> 
                specified is not a valid value.
            </listitem>

            <listitem>
                <errorname>CL_INVALID_MEM_OBJECT</errorname> for an argument declared to 
                be a memory object when the
                specified <varname>arg_value</varname> is not a valid memory object.
            </listitem>

            <listitem>
                <errorname>CL_INVALID_MEM_OBJECT</errorname> 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 <varname>arg_value</varname> does not follow 
                the rules described above for a depth 
                memory object or memory array object argument. (Applies if the
                <citerefentry><refentrytitle>cl_khr_gl_msaa_sharing</refentrytitle></citerefentry>
                extension is supported.)
            </listitem>

            <listitem>
              <errorname>CL_INVALID_SAMPLER</errorname> for an argument declared to be of type
              <varname>sampler_t</varname> when the specified <varname>arg_value</varname>
              is not a valid sampler object.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_DEVICE_QUEUE</errorname> for an argument declared to be of 
              type <type>queue_t</type> when the 
              specified <varname>arg_value</varname> is not a valid device queue object.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_ARG_SIZE</errorname> if <varname>arg_size</varname>
              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
              <varname>arg_size</varname> != <code>sizeof(cl_mem)</code> or if
              <varname>arg_size</varname> is zero and the argument is declared with the
              <citerefentry><refentrytitle>local</refentrytitle></citerefentry>
              qualifier or if the argument is a sampler and <varname>arg_size</varname> !=
              <code>sizeof(cl_sampler)</code>.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_ARG_VALUE</errorname> if the argument is an image declared
              with the <constant>read_only</constant> qualifier and <varname>arg_value</varname>
              refers to an image object created with <varname>cl_mem_flags</varname> of
              <constant>CL_MEM_WRITE</constant> or if the image argument is declared with
              the <constant>write_only</constant> qualifier and <varname>arg_value</varname>
              refers to an image object created with <varname>cl_mem_flags</varname> of
              <constant>CL_MEM_READ</constant>.
            </listitem>

            <listitem>
              <errorname>CL_OUT_OF_RESOURCES</errorname> if there is a failure to allocate
              resources required by the OpenCL implementation on the device.
            </listitem>

            <listitem>
              <errorname>CL_OUT_OF_HOST_MEMORY</errorname> if there is a failure to allocate
              resources required by the OpenCL implementation on the host.
            </listitem>
        </itemizedlist>
    </refsect1>

<!-- ================================ EXAMPLE  -->
<!-- DO NOT DELETE IN CASE AN EXAMPLE IS ADDED IN THE FUTURE -->
<!--    -->
    <refsect2 id="example1">
        <title>
            Example
        </title>
        <informaltable frame="none">
            <tgroup cols="1" align="left" colsep="0" rowsep="0">
                <colspec colname="col1" colnum="1" />
                <tbody>
                    <row>
                        <entry>
kernel void
image_filter (int n, int m,
          constant float *filter_weights,
          read_only image2d_t src_image,
          write_only image2d_t dst_image)
{
     ...
}
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </informaltable>

        <para>
          Argument index values for <constant>image_filter</constant> will
          be 0 for <constant>n</constant>, 1 for <constant>m</constant>, 2 for
          <constant>filter_weights</constant>, 3 for <constant>src_image</constant> and 4 for
          <constant>dst_image</constant>.
        </para>
    </refsect2>

<!-- ================================ SPECIFICATION  -->
<!-- Set the "uri" attribute in the <olink /> element to the "named destination" for the PDF page
-->
    <refsect1 id="specification"><title>Specification</title>
        <para>
            <imageobject>
                <imagedata fileref="pdficon_small1.gif" format="gif" />
            </imageobject>

            <olink uri="clSetKernelArg">OpenCL Specification</olink>
        </para>
    </refsect1>

<!-- ================================ ALSO SEE  -->

    <refsect1 id="seealso"><title>Also see</title>
        <para>
            <citerefentry><refentrytitle>clEnqueueNDRangeKernel</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clCreateKernel</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clCreateKernelsInProgram</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clReleaseKernel</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clRetainKernel</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clGetKernelInfo</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clGetKernelWorkGroupInfo</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clSetKernelArgSVMPointer</refentrytitle></citerefentry>
        </para>
    </refsect1>

<!-- ================================ COPYRIGHT  -->
<!-- Content included from copyright.inc.xsl -->

    <refsect3 id="Copyright"><title></title>
        <imageobject>
                <imagedata fileref="KhronosLogo.jpg" format="jpg" />
        </imageobject>
        <para />
    </refsect3>

<!-- 24-Dec-2013, rev. 19 -->
</refentry>

