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

    <refmeta>
        <refentrytitle>       
            clEnqueueCopyBufferToImage
        </refentrytitle>

        <refmiscinfo>
            <copyright>
                <year>2007-2010</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="clEnqueueCopyBufferToImage">
        <refname>      
            clEnqueueCopyBufferToImage
        </refname> 

        <refpurpose>          
            Enqueues a command to copy a buffer object to an image object. 
        </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>clEnqueueCopyBufferToImage</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_buffer</parameter></paramdef>
                    <paramdef><link xlink:href="abstractDataTypes.html">cl_mem</link> <parameter>dst_image</parameter></paramdef>
                    <paramdef><link xlink:href="scalarDataTypes.html">size_t</link><parameter>src_offset</parameter></paramdef>
                    <paramdef>const <link xlink:href="scalarDataTypes.html">size_t</link><parameter>dst_origin</parameter>[3]</paramdef>
                    <paramdef>const <link xlink:href="scalarDataTypes.html">size_t</link><parameter>region</parameter>[3]</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> 
                        A valid command-queue. The OpenCL context associated with
<varname>command_queue</varname>, <varname>src_buffer</varname>, and <varname>dst_image</varname> must be the same.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term>
                    <varname>
                        src_buffer
                    </varname>
                </term>
                <listitem>
                    <para>
                        A valid buffer object.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term>
                    <varname>
                        dst_image
                    </varname>
                </term>
                <listitem>
                    <para>
                        A valid image object.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term>
                    <varname>
                        src_offset
                    </varname>
                </term>
                <listitem>
                    <para>
                        The offset where to begin copying data from <varname>src_buffer</varname>.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term>
                    <varname>
                        dst_origin
                    </varname>
                </term>
                <listitem>
                    <para>
                        The (<emphasis>x, y, z</emphasis>) offset in pixels where to begin copying data to <varname>dst_image</varname>. If <varname>dst_image</varname> is a 2D image object, the <emphasis>z</emphasis> value given by <varname>dst_origin</varname>[2] must be 0.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term>
                    <varname>
                        region                    
                    </varname>
                </term>
                <listitem>
                    <para> 
                        Defines the (<varname>width</varname>, <varname>height</varname>, <varname>depth</varname>) in pixels of the 2D or 3D rectangle to copy. If <varname>dst_image</varname> is a 2D image object, the <varname>depth</varname> value given by <varname>region</varname>[2] must be 1.
                    </para>
                    <para>
                    The size in bytes of the region to be copied from <varname>src_buffer</varname> referred to as <varname>src_cb</varname> is computed as <varname>width</varname> * <varname>height</varname> * <varname>depth</varname> * <varname>bytes</varname>/<varname>image element</varname> if <varname>dst_image</varname> is a 3D image object and is computed as <varname>width</varname> * <varname>height</varname> * <varname>bytes</varname>/<varname>image element</varname> if <varname>dst_image</varname> is a 2D image object.
                    </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.
                    </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>clEnqueueBarrier</refentrytitle></citerefentry> can be used instead.           
                    </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>

        </para>

    </refsect1>--> 
    

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


    <refsect1 id="errors"><title>Errors</title>
        <para>
            <function>clEnqueueCopyBufferToImage</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 command-queue.
            </listitem>
            
            <listitem>          
                <errorname>CL_INVALID_CONTEXT</errorname> if the context associated with <varname>command_queue</varname>, <varname>src_buffer</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_buffer</varname> is not a valid buffer object and <varname>dst_image</varname> is not a valid image object.
            </listitem>
            
            
            <listitem>
                <errorname>CL_INVALID_VALUE</errorname> 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_origin</varname>, or if the region specified 
                by <varname>src_offset</varname> and <varname>src_offset</varname> + <varname>src_cb</varname> refers to a region outside
                <varname>src_buffer</varname>.
            </listitem>
            
            <listitem>
                <errorname>CL_INVALID_VALUE</errorname> if <varname>dst_image</varname> is a 2D image object and <varname>dst_origin</varname>[2] is not equal to 0
                or <varname>region</varname>[2] is not equal to 1.
            </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> greater than 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_MISALIGNED_SUB_BUFFER_OFFSET</errorname> if <varname>src_buffer</varname> is a sub-buffer object and <varname>offset</varname> 
                specified when the sub-buffer object is created is not aligned to CL_DEVICE_MEM_BASE_ADDR_ALIGN value for device associated with
                <varname>queue</varname>.
            </listitem>
            <listitem>
                <errorname>CL_INVALID_IMAGE_SIZE</errorname> if image dimensions (image width, height, specified or
                compute row and/or slice pitch) for <varname>dst_image</varname> are not supported by device associated with <varname>queue</varname>.
            </listitem>
            <listitem>
                <errorname>CL_INVALID_OPERATION</errorname> if the device associated with <varname>command_queue</varname> does not support images 
                (i.e. CL_DEVICE_IMAGE_SUPPORT specified in the table of OpenCL Device Queries 
                for <citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry> is CL_FALSE).
            </listitem>
            <listitem>
                <errorname>CL_MEM_OBJECT_ALLOCATION_FAILURE</errorname> if there is a failure to allocate memory for
                data store associated with <varname>src_buffer</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>
            
        </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="clEnqueueCopyBufferToImage">OpenCL Specification</olink>
        </para>
    </refsect1>     


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

    <refsect1 id="seealso"><title>Also see</title>
        <para>
            <citerefentry><refentrytitle>clEnqueueReadBuffer</refentrytitle></citerefentry>, 
            <citerefentry><refentrytitle>clEnqueueWriteBuffer</refentrytitle></citerefentry>, 
            <citerefentry><refentrytitle>clCreateBuffer</refentrytitle></citerefentry>, 
            <citerefentry><refentrytitle>clEnqueueCopyBuffer</refentrytitle></citerefentry>, 
            <citerefentry><refentrytitle>clEnqueueCopyImageToBuffer</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>

</refentry>

