<?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>clEnqueueCopyImage</keyword>
        </keywordset>
    </refentryinfo>

    <refmeta>
        <refentrytitle>
            clEnqueueCopyImage
        </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="clEnqueueCopyImage">
        <refname>
            clEnqueueCopyImage
        </refname>

        <refpurpose>
            Enqueues a command to copy image objects.
        </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>clEnqueueCopyImage</function>
                </funcdef>
                    <paramdef><link xlink:href="abstractDataTypes.html">cl_command_queue</link><parameter>command_queue</parameter></paramdef>
                    <paramdef><link xlink:href="abstractDataTypes.html">cl_mem</link><parameter>src_image</parameter></paramdef>
                    <paramdef><link xlink:href="abstractDataTypes.html">cl_mem</link><parameter>dst_image</parameter></paramdef>
                    <paramdef>const <link xlink:href="scalarDataTypes.html">size_t</link><parameter>*src_origin</parameter></paramdef>
                    <paramdef>const <link xlink:href="scalarDataTypes.html">size_t</link><parameter>*dst_origin</parameter></paramdef>
                    <paramdef>const <link xlink:href="scalarDataTypes.html">size_t</link><parameter>*region</parameter></paramdef>
                    <paramdef><link xlink:href="scalarDataTypes.html">cl_uint</link><parameter>num_events_in_wait_list</parameter></paramdef>
                    <paramdef>const <link xlink:href="abstractDataTypes.html">cl_event</link><parameter>*event_wait_list</parameter></paramdef>
                    <paramdef><link xlink:href="abstractDataTypes.html">cl_event</link><parameter>*event</parameter></paramdef>
               </funcprototype>
        </funcsynopsis>
    </refsynopsisdiv>

<!-- ================================ PARAMETERS -->

    <refsect1 id="parameters">
        <title>Parameters</title>
        <variablelist>

            <varlistentry>
                <term> <varname> command_queue </varname> </term>
                <listitem>
                    <para>
                      Refers to the host command-queue in which the copy command will be queued. The
                      OpenCL context associated with <varname>command_queue</varname>,
                      <varname>src_image</varname> and <varname>dst_image</varname> must be
                      the same.
                    </para>
               </listitem>
            </varlistentry>

             <varlistentry>
                <term>
                    <varname>
                        src_image,
                    </varname>
                    <varname>
                        dst_image,
                    </varname>
                </term>

                <listitem>
                    <para>
                        Can be 1D, 2D, 3D image or a 1D, 2D image array objects.
                        It is possible to copy subregions between any 
                        combinations of source and destination types, 
                        provided that the dimensions of the subregions are 
                        the same e.g., one can copy a rectangular region 
                        from a 2D image to a slice of a 3D image.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> src_origin </varname> </term>
                <listitem>
                    <para>
                      Defines the (x, y, z) offset in pixels in the 1D, 2D or 3D image, the (x,
                      y) offset and the image index in the 2D image array or the (x) offset and
                      the image index in the 1D image array.  If <varname>image</varname>
                      is a 2D image object, <varname>src_origin</varname>[2] must
                      be 0.  If <varname>src_image</varname> is a 1D image object,
                      <varname>src_origin</varname>[1] and <varname>src_origin</varname>[2]
                      must be 0.  If <varname>src_image</varname> is a 1D image array object,
                      <varname>src_origin</varname>[2] must be 0.  If <varname>src_image</varname>
                      is a 1D image array object, <varname>src_origin</varname>[1] describes
                      the image index in the 1D image array. If <varname>src_image</varname>
                      is a 2D image array object, <varname>src_origin</varname>[2] describes
                      the image index in the 2D image array.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> dst_origin </varname> </term>
                <listitem>
                    <para>
                      Defines the (x, y, z) offset in pixels in the 1D, 2D or 3D image, the (x,
                      y) offset and the image index in the 2D image array or the (x) offset and
                      the image index in the 1D image array.  If <varname>dst_image</varname>
                      is a 2D image object, <varname>dst_origin</varname>[2] must be 0.
                      If <varname>dst_image</varname> is a 1D image or 1D image buffer object,
                      <varname>dst_origin</varname>[1] and <varname>dst_origin</varname>[2]
                      must be 0.  If <varname>dst_image</varname> is a 1D image array object,
                      <varname>dst_origin</varname>[2] must be 0.  If <varname>dst_image</varname>
                      is a 1D image array object, <varname>dst_origin</varname>[1] describes
                      the image index in the 1D image array. If <varname>dst_image</varname>
                      is a 2D image array object, <varname>dst_origin</varname>[2] describes
                      the image index in the 2D image array.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> region </varname> </term>
                <listitem>
                    <para>
                      Defines the <emphasis>(width, height, depth)</emphasis> in pixels of
                      the 1D, 2D or 3D rectangle, the <emphasis>(width, height)</emphasis> in
                      pixels of the 2D rectangle and the number of images of a 2D image array
                      or the <emphasis>(width)</emphasis> in pixels of the 1D rectangle and the
                      number of images of a 1D image array.  If <varname>src_image</varname>
                      or <varname>dst_image</varname> is a 2D image object,
                      <varname>region</varname>[2] must be 1. If <varname>src_image</varname>
                      or <varname>dst_image</varname> is a 1D image or 1D image buffer object,
                      <varname>region</varname>[1] and <varname>region</varname>[2] must be 1.
                      If <varname>src_image</varname> or <varname>dst_image</varname> is a 1D
                      image array object, <varname>region</varname>[2] must be 1. 
                      The values in <varname>region</varname> cannot be 0.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term>
                    <varname>
                        event_wait_list
                    ,</varname>
                    <varname>
                        num_events_in_wait_list
                    </varname>
                </term>

                <listitem>
                    <para>
                      Specify events that need to complete before this particular
                      command can be executed. If <varname>event_wait_list</varname>
                      is NULL, then this particular command does not wait on any
                      event to complete. If <varname>event_wait_list</varname> is
                      NULL, <varname>num_events_in_wait_list</varname> must be 0. If
                      <varname>event_wait_list</varname> is not NULL, the list of events
                      pointed to by <varname>event_wait_list</varname> must be valid
                      and <varname>num_events_in_wait_list</varname> must be greater
                      than 0. The events specified in <varname>event_wait_list</varname>
                      act as synchronization points. The context associated with events in
                      <varname>event_wait_list</varname> and <varname>command_queue</varname> must
                      be the same.  The memory associated with <varname>event_wait_list</varname>
                      can be reused or freed after the function returns.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> event </varname> </term>
                <listitem>
                    <para>
                      Returns an event object that identifies this particular copy command
                      and can be used to query or queue a wait for this particular
                      command to complete. <varname>event</varname> can be NULL in
                      which case it will not be possible for the application to query the
                      status of this command or queue a wait for this command to complete.
                      <citerefentry><refentrytitle>clEnqueueBarrierWithWaitList</refentrytitle></citerefentry>
                      can be used instead.  If the <varname>event_wait_list</varname>
                      and the <varname>event</varname> arguments are not NULL, the
                      <varname>event</varname> argument should not refer to an element of the
                      <varname>event_wait_list</varname> array.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsect1>

<!-- ================================ NOTES  -->

    <refsect1 id="notes"><title>Notes</title>
        <para>
          It is currently a requirement that the <varname>src_image</varname>
          and <varname>dst_image</varname> image memory objects for
          <function>clEnqueueCopyImage</function> must have the exact same image format
          (i.e. the <citerefentry><refentrytitle>cl_image_format</refentrytitle></citerefentry>
          descriptor specified when <varname>src_image</varname> and <varname>dst_image</varname>
          are created must match).
        </para>

        <para>
            If the mipmap extensions are enabled with 
            <citerefentry><refentrytitle>cl_khr_mipmap_image</refentrytitle></citerefentry>, 
            calls to <function>clEnqueueCopyImage</function>, 
            <citerefentry><refentrytitle>clEnqueueCopyImageToBuffer</refentrytitle></citerefentry>, and 
            <citerefentry><refentrytitle>clEnqueueCopyBufferToImage</refentrytitle></citerefentry> 
            can also be used to copy 
            from and to a specific mip-level of a mip-mapped image. 
            If <varname>src_image</varname> argument is a 1D image, 
            <varname>src_origin</varname>[1] specifies the mip-level 
            to use. If <varname>src_image</varname> argument is a 
            1D image array, <varname>src_origin</varname>[2] specifies 
            the mip-level to use. If <varname>src_image</varname> 
            argument is a 2D image, <varname>src_origin</varname>[3] 
            specifies the mip-level to use. 
            If <varname>src_image</varname> argument is a 2D image 
            array or a 3D image, <varname>src_origin</varname>[3] 
            specifies the mip-level to use. If <varname>dst_image</varname> 
            argument is a 1D image, 
            <varname>dst_origin</varname>[1] specifies the mip-level 
            to use. If <varname>dst_image</varname> argument 
            is a 1D image array, <varname>dst_origin</varname>[2] 
            specifies the mip-level to use. If 
            <varname>dst_image</varname> argument is a 2D image, 
            <varname>dst_origin</varname>[3] specifies the 
            mip-level to use. If <varname>dst_image</varname> 
            argument is a 2D image array or a 3D image, 
            <varname>dst_origin</varname>[3] specifies the 
            mip-level to use. 
        </para>

        <para>
            If the mip level specified is not a valid value, 
            these functions return the error 
            <constant>CL_INVALID_MIP_LEVEL</constant>.

        </para>

    </refsect1>

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

     <refsect1 id="errors"><title>Errors</title>
        <para>
          <function>clEnqueueCopyImage</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_COMMAND_QUEUE</errorname> if <varname>command_queue</varname>
              is not a valid host command-queue.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_CONTEXT</errorname> if the context associated
              with <varname>command_queue</varname>, <varname>src_image</varname> and
              <varname>dst_image</varname> are not the same or if the context associated with
              <varname>command_queue</varname> and events in <varname>event_wait_list</varname>
              are not the same.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_MEM_OBJECT</errorname> if <varname>src_image</varname>
              and <varname>dst_image</varname> are not valid image objects.
            </listitem>

            <listitem>
              <errorname>CL_IMAGE_FORMAT_MISMATCH</errorname> if <varname>src_image</varname>
              and <varname>dst_image</varname> do not use the same image format.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if the 2D or 3D rectangular region
              specified by <varname>src_origin</varname> and <varname>src_origin</varname> +
              <varname>region</varname> refers to a region outside <varname>src_image</varname>,
              or if the 2D or 3D rectangular region specified by <varname>dst_origin</varname>
              and <varname>dst_origin</varname> + <varname>region</varname> refers to a region
              outside <varname>dst_image</varname>.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if values in <varname>src_origin</varname>,
              <varname>dst_origin</varname> and <varname>region</varname> do not follow
              rules described in the argument description for <varname>src_origin</varname>,
              <varname>dst_origin</varname> and <varname>region</varname>.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_EVENT_WAIT_LIST</errorname>
              if <varname>event_wait_list</varname> is NULL and
              <varname>num_events_in_wait_list</varname> &gt; 0,
              or <varname>event_wait_list</varname> is not NULL and
              <varname>num_events_in_wait_list</varname> is 0, or if event objects in
              <varname>event_wait_list</varname> are not valid events.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_IMAGE_SIZE</errorname> if image dimensions (image width,
              height, specified or compute row and/or slice pitch) for <varname>src_image</varname>
              or <varname>dst_image</varname> are not supported by device associated with
              <varname>queue</varname>.
            </listitem>

            <listitem>
              <errorname>CL_IMAGE_FORMAT_NOT_SUPPORTED</errorname> if image format (image channel order
              and data type) for <varname>src_image</varname> or <varname>dst_image</varname>
              are not supported by device associated with <varname>queue</varname>.
            </listitem>

            <listitem>
              <errorname>CL_MEM_OBJECT_ALLOCATION_FAILURE</errorname> if there is a failure
              to allocate memory for data store associated with <varname>src_image</varname>
              or <varname>dst_image</varname>.
            </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>

            <listitem>
              <errorname>CL_INVALID_OPERATION</errorname> if the device
              associated with <varname>command_queue</varname> does
              not support images (i.e. <constant>CL_DEVICE_IMAGE_SUPPORT</constant> specified
              in the table <!-- table 4.3 --> of OpenCL Device Queries for
              <citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry>
              is <constant>CL_FALSE</constant>).
            </listitem>

            <listitem>
              <errorname>CL_MEM_COPY_OVERLAP</errorname> if <varname>src_image</varname>
              and <varname>dst_image</varname> are the same image object and the source and
              destination regions overlap.
            </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>
                            Example goes here - it will be set in "code" type with white space preserved.
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </informaltable>
    </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="clEnqueueCopyImage">OpenCL Specification</olink>
        </para>
    </refsect1>

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

    <refsect1 id="seealso"><title>Also see</title>
        <para>
            <citerefentry><refentrytitle>clEnqueueReadImage</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clEnqueueWriteImage</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>cl_khr_mipmap_image</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>

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

