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

    <refmeta>
        <refentrytitle>
            clEnqueueWriteImage
        </refentrytitle>

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

        <refpurpose>
            Enqueues a command to write to an image or image array object from host memory.
        </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>clEnqueueWriteImage</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>image</parameter>
                    </paramdef>
                    <paramdef>
                        <link xlink:href="enums.html#cl_bool">cl_bool</link>
                        <parameter>blocking_write</parameter>
                    </paramdef>
                    <paramdef>const
                        <link xlink:href="scalarDataTypes.html">size_t</link>
                        <parameter>*origin</parameter>
                    </paramdef>
                    <paramdef>const
                        <link xlink:href="scalarDataTypes.html">size_t</link>
                        <parameter>*region</parameter>
                    </paramdef>
                    <paramdef>
                        <link xlink:href="scalarDataTypes.html">size_t</link>
                        <parameter>input_row_pitch</parameter>
                    </paramdef>
                    <paramdef>
                        <link xlink:href="scalarDataTypes.html">size_t</link>
                        <parameter>input_slice_pitch</parameter>
                    </paramdef>
                    <paramdef>const
                        <link xlink:href="scalarDataTypes.html">void</link>
                        <parameter>* ptr</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 command-queue in which the write command will be
                        queued. <varname>command_queue</varname> and <varname>image</varname>
                        must be created with the same OpenCL context.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> image </varname> </term>
                <listitem>
                    <para>
                       Refers to a valid image or image array object.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> blocking_write </varname> </term>
                <listitem>
                    <para>
                      Indicates if the write operation is <varname>blocking</varname> or
                      <varname>non-blocking</varname>.
                    </para>

                    <para>
                      If <varname>blocking_write</varname> is <constant>CL_TRUE</constant> the
                      OpenCL implementation copies the data referred to by <varname>ptr</varname>
                      and enqueues the write command in the command-queue. The memory pointed
                      to by <varname>ptr</varname> can be reused by the application after the
                      <function>clEnqueueWriteImage</function> call returns.
                    </para>

                    <para>
                      If <varname>blocking_write</varname> is <constant>CL_FALSE</constant>
                      the OpenCL implementation will use <varname>ptr</varname> to perform a
                      nonblocking write. As the write is non-blocking the implementation can return
                      immediately. The memory pointed to by <varname>ptr</varname> cannot be reused
                      by the application after the call returns. The <varname>event</varname>
                      argument returns an event object which can be used to query the execution
                      status of the write command. When the write command has completed, the memory
                      pointed to by <varname>ptr</varname> can then be reused by the application.
                    </para>
                </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> origin </varname> </term>
                <listitem>
                    <para>
                      Defines the (<emphasis>x, y, z</emphasis>) offset in pixels in the 1D, 2D, or
                      3D image, the (<emphasis>x, y</emphasis>) offset and the image index in the
                      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>origin</varname>[2]
                      must be 0. If <varname>image</varname> is a 1D image or 1D image buffer
                      object, <varname>origin</varname>[1] and <varname>origin</varname>[2]
                      must be 0. If <varname>image</varname> is a 1D image array object,
                      <varname>origin</varname>[2] must be 0.  If <varname>image</varname>
                      is a 1D image array object, <varname>origin</varname>[1] describes the
                      image index in the 1D image array. If <varname>image</varname> is a 2D
                      image array object, <varname>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>image</varname> is a 2D image
                      object, <varname>region</varname>[2] must be 1.  If <varname>image</varname>
                      is a 1D image or 1D image buffer object,  <varname>region</varname>[1]
                      and <varname>region</varname>[2] must be 1. If image is a 1D image array
                      object, <varname>region</varname>[2] must be 1.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> input_row_pitch </varname> </term>
                <listitem>
                    <para>
                      The length of each row in bytes. This value must be greater than or
                      equal to the element size in bytes * <varname>width</varname>. If
                      <varname>row_pitch</varname> is set to 0, the appropriate row pitch
                      is calculated based on the size of each element in bytes multiplied by
                      <varname>width</varname>.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> input_slice_pitch </varname> </term>
                <listitem>
                    <para>
                      Size in bytes of the 2D slice of the 3D region of a 3D image or each
                      image of a 1D or 2D image array being written.  This must be 0 if
                      <varname>image</varname> is a 1D or 2D image.  This value must be greater
                      than or equal to <varname>row_pitch</varname> * <varname>height</varname>. If
                      <varname>slice_pitch</varname> is set to 0, the appropriate slice
                      pitch is calculated based on the <varname>row_pitch</varname> *
                      <varname>height</varname>.
                    </para>
                </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> ptr </varname> </term>
                <listitem>
                    <para>
                      The pointer to a buffer in host memory where image data is to be read from.
                    </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 write 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.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsect1>

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

     <refsect1 id="notes"><title>Notes</title>
        <para>
          Calling <function>clEnqueueWriteImage</function> to update the latest bits in a
          region of the <varname>image</varname> with the <varname>ptr</varname> argument
          value set to <varname>host_ptr</varname> + (<varname>origin</varname>[2]
          * <varname>image slice pitch</varname> + <varname>origin</varname>[1] *
          <varname>image row pitch</varname> + <varname>origin</varname>[0] * <varname>bytes
          per pixel</varname>), where <varname>host_ptr</varname> is a pointer to the memory
          region specified when the <varname>image</varname> being written is created with
          <constant>CL_MEM_USE_HOST_PTR</constant>, must meet the following requirements in
          order to avoid undefined behavior:
        </para>

        <itemizedlist mark="disc">
            <listitem>
              The host memory region being written contains the latest bits when the enqueued
              write command begins execution.
            </listitem>

            <listitem>
              The <varname>input_row_pitch</varname> and <varname>input_slice_pitch</varname>
              argument values in <function>clEnqueueWriteImage</function> must be set to the
              image row pitch and slice pitch.
            </listitem>

            <listitem>
                The image object is not mapped.
            </listitem>

            <listitem>
                The image object is not used by any command-queue until the write command has
                finished execution.
            </listitem>
        </itemizedlist>
    </refsect1>

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

    <refsect1 id="errors"><title>Errors</title>
        <para>
          <function>clEnqueueWriteImage</function> return <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> and <varname>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>image</varname> is
                not a valid image object.
            </listitem>

            <listitem>
                <errorname>CL_INVALID_VALUE</errorname> if the region being written specified by
                <varname>origin</varname> and <varname>region</varname> is out of bounds or if
                <varname>ptr</varname> is a NULL value.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if values in <varname>origin</varname>
              and <varname>region</varname> do not follow rules described in the argument
              description for <varname>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>image</varname>
              are not supported by device associated with <varname>queue</varname>.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_IMAGE_FORMAT</errorname> if image format (image channel
              order and data type) for <varname>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>image</varname>.
            </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
              the table of allowed values for <varname>param_name</varname> for
              <citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry>
              is <constant>CL_FALSE</constant>).
            </listitem>

            <listitem>
              <errorname>CL_INVALID_OPERATION</errorname> if
              <function>clEnqueueWriteImage</function> is called on <varname>image</varname>
              which has been created with <constant>CL_MEM_HOST_WRITE_ONLY</constant> or
              <constant>CL_MEM_HOST_NO_ACCESS</constant>.
            </listitem>

            <listitem>
              <errorname>CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST</errorname> if the
              write operations are blocking and the execution status of any of the events in
              <varname>event_wait_list</varname> is a negative integer value.
            </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="clEnqueueWriteImage">OpenCL Specification</olink>
        </para>
    </refsect1>

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

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

<!-- 20-Oct-2011 -->
</refentry>
