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

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

        <refpurpose>
            Enqueue command to read from a 2D or 3D rectangular region from a buffer object to 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>clEnqueueReadBufferRect</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>buffer</parameter>
                    </paramdef>
                    <paramdef>
                        <link xlink:href="enums.html#cl_bool">cl_bool</link>
                        <parameter>blocking_read</parameter>
                    </paramdef>
                    <paramdef>const
                        <link xlink:href="scalarDataTypes.html">size_t</link>
                        *<parameter>buffer_origin</parameter>
                    </paramdef>
                    <paramdef>const
                        <link xlink:href="scalarDataTypes.html">size_t</link>
                        *<parameter>host_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>buffer_row_pitch</parameter>
                    </paramdef>
                    <paramdef>
                        <link xlink:href="scalarDataTypes.html">size_t</link>
                        <parameter>buffer_slice_pitch</parameter>
                    </paramdef>
                    <paramdef>
                        <link xlink:href="scalarDataTypes.html">size_t</link>
                        <parameter>host_row_pitch</parameter>
                    </paramdef>
                    <paramdef>
                        <link xlink:href="scalarDataTypes.html">size_t</link>
                        <parameter>host_slice_pitch</parameter>
                    </paramdef>
                    <paramdef>
                        <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>
                        Is is a valid host command-queue in which the read command will be
                        queued. <varname>command_queue</varname> and <varname>buffer</varname>
                        must be created with the same OpenCL context.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term><varname>buffer</varname></term>
                <listitem>
                    <para>Refers to a valid buffer object.</para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term><varname>blocking_read</varname></term>
                <listitem>
                    <para>
                        Indicates if the read operations are <varname>blocking</varname> or
                        <varname>non-blocking</varname>.
                    </para>

                    <para>
                      If <varname>blocking_read</varname> is <constant>CL_TRUE</constant> i.e.
                      the read command is blocking, <function>clEnqueueReadBufferRect</function>
                      does not return until the buffer data has been read and copied into memory
                      pointed to by <varname>ptr</varname>.
                    </para>

                    <para>
                      If <varname>blocking_read</varname> is <constant>CL_FALSE</constant>
                      i.e. the read command is non-blocking,
                      <function>clEnqueueReadBufferRect</function> queues a non-blocking read
                      command and returns. The contents of the buffer that <varname>ptr</varname>
                      points to cannot be used until the read command has completed. The
                      <varname>event</varname> argument argument returns an event object which
                      can be used to query the execution status of the read command. When the read
                      command has completed, the contents of the buffer that <varname>ptr</varname>
                      points to can be used by the application.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term><varname>buffer_origin</varname></term>
                <listitem>
                    <para>
                      The (<emphasis>x, y, z</emphasis>) offset in the memory
                      region associated with <varname>buffer</varname>. For a 2D
                      rectangle region, the <varname>z</varname> value given by
                      <varname>buffer_origin</varname>[2] should be 0. The offset
                      in bytes is computed as <varname>buffer_origin</varname>[2] *
                      <varname>buffer_slice_pitch</varname> + <varname>buffer_origin</varname>[1]
                      * <varname>buffer_row_pitch</varname> + <varname>buffer_origin</varname>[0].
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term><varname>host_origin</varname></term>
                <listitem>
                    <para>
                      The (<emphasis>x, y, z</emphasis>) offset in the memory region pointed to by
                      <varname>ptr</varname>. For a 2D rectangle region, the <varname>z</varname>
                      value given by <varname>host_origin</varname>[2] should be 0. The
                      offset in bytes is computed as <varname>host_origin</varname>[2] *
                      <varname>host_slice_pitch</varname> + <varname>host_origin</varname>[1]
                      * <varname>host_row_pitch</varname> + <varname>host_origin</varname>[0].
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term><varname>region</varname></term>
                <listitem>
                    <para>
                      The (<varname>width</varname> in bytes, <varname>height</varname> in rows, 
                      <varname>depth</varname> in slices) of the 2D or 3D rectangle 
                      being read or written. For a 2D rectangle copy, the <varname>depth</varname> 
                      value given by <varname>region</varname>[2] should be 1.
                      The values in region cannot be 0.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term><varname>buffer_row_pitch</varname></term>
                <listitem>
                    <para>
                      The length of each row in bytes to be used for the memory region associated
                      with <varname>buffer</varname>. If <varname>buffer_row_pitch</varname>
                      is 0, <varname>buffer_row_pitch</varname> is computed as
                      <varname>region</varname>[0].
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term><varname>buffer_slice_pitch</varname></term> <listitem>
                <para>
                  The length of each 2D slice in bytes to be used for the memory region associated
                  with <varname>buffer</varname>. If <varname>buffer_slice_pitch</varname> is 0,
                  <varname>buffer_slice_pitch</varname> is computed as <varname>region</varname>[1]
                  * <varname>buffer_row_pitch</varname>.
                </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term><varname>host_row_pitch</varname></term> <listitem>
                <para>
                  The length of each row in bytes to be used for the memory region pointed
                  to by <varname>ptr</varname>. If <varname>host_row_pitch</varname> is 0,
                  <varname>host_row_pitch</varname> is computed as <varname>region</varname>[0].
                </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term><varname>host_slice_pitch</varname></term>
                <listitem>
                    <para>
                      The length of each 2D slice in bytes to be used for the memory region pointed
                      to by <varname>ptr</varname>. If <varname>host_slice_pitch</varname>
                      is 0, <varname>host_slice_pitch</varname> is computed as
                      <varname>region</varname>[1] * <varname>host_row_pitch</varname>.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname>ptr </varname> </term>
                <listitem>
                    <para>
                        The pointer to buffer in host memory where data is to be read into.
                    </para>
               </listitem>
            </varlistentry>

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

                <listitem>
                    <para>
                      <varname>event_wait_list</varname>
                      and <varname>num_events_in_wait_list</varname> 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 read 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.
                      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>

            <!-- END PARAMETER TABLE  -->

        </variablelist>
    </refsect1>

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

    <refsect1 id="notes"><title>Notes</title>
        <para>
          Calling <function>clEnqueueReadBufferRect</function> to read a region of the buffer
          object with the  <varname>ptr</varname> argument value set to <varname>host_ptr</varname>
          and <varname>host_origin</varname>, <varname>buffer_origin</varname>
          values are the same, where <varname>host_ptr</varname> is a pointer to the
          memory region specified when the buffer object being read is created with
          <constant>CL_MEM_USE_HOST_PTR</constant>, must meet the same requirements given for
          <citerefentry><refentrytitle>clEnqueueReadBuffer</refentrytitle></citerefentry>:
        </para>

        <para>
          <itemizedlist>
            <listitem>
                All commands that use this buffer object or a memory object (buffer or image) created 
                from this buffer object have finished execution before the read command begins 
                execution.
            </listitem>

            <listitem>
              The buffer object or memory objects created from this buffer object are not mapped.
            </listitem>

            <listitem>
              The buffer object or memory objects created from this buffer object are not used
              by any command-queue until the read command has finished execution.
            </listitem>
          </itemizedlist>
        </para>

    </refsect1>

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

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

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if the region being read
              specified by (<varname>buffer_origin</varname>, <varname>region</varname>,
              <varname>buffer_row_pitch</varname>, <varname>buffer_slice_pitch</varname>)
              is out of bounds.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if <varname>ptr</varname> is a NULL value.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if any <varname>region</varname> array
              element is 0.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if <varname>buffer_row_pitch</varname>
              is not 0 and is less than <varname>region</varname>[0].
            </listitem>

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if <varname>host_row_pitch</varname>
              is not 0 and is less than <varname>region</varname>[0].
            </listitem>

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if <varname>buffer_slice_pitch</varname>
              is not 0 and is less than <varname>region</varname>[1] *
              <varname>buffer_row_pitch</varname> and not a multiple of
              <varname>buffer_row_pitch</varname>.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if <varname>host_slice_pitch</varname> is not
              0 and is less than <varname>region</varname>[1] * <varname>host_row_pitch</varname>
              and not a multiple of <varname>host_row_pitch</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_MISALIGNED_SUB_BUFFER_OFFSET</errorname> if
              <varname>buffer</varname> is a sub-buffer object and <varname>offset</varname>
              specified when the sub-buffer object is created is not aligned to
              <constant>CL_DEVICE_MEM_BASE_ADDR_ALIGN</constant> value for device associated
              with <varname>queue</varname>.
            </listitem>

            <listitem>
              <errorname>CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST</errorname> if the read
              and 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_MEM_OBJECT_ALLOCATION_FAILURE</errorname> if there is a failure to
              allocate memory for data store associated with <varname>buffer</varname>.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_OPERATION</errorname> if
              <function>clEnqueueReadBufferRect</function> is called on <varname>buffer</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_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="clEnqueueReadBufferRect">OpenCL Specification</olink>
        </para>
    </refsect1>

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

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

