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

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

        <refpurpose>
            Enqueues a command to map a region of an image object into the host address
            space and returns a pointer to this mapped region.
        </refpurpose>
    </refnamediv>

    <refsynopsisdiv xmlns:xlink="http://www.w3.org/1999/xlink"><title></title>
        <funcsynopsis>
            <funcprototype>
                <funcdef>
                    <link xlink:href="scalarDataTypes.html">void</link> * <function>clEnqueueMapImage </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_map</parameter>
                    </paramdef>
                    <paramdef>
                        <link xlink:href="enums.html#cl_map_flags">cl_map_flags</link>
                        <parameter>map_flags</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>*image_row_pitch</parameter>
                    </paramdef>
                    <paramdef>
                        <link xlink:href="scalarDataTypes.html">size_t</link>
                        <parameter>*image_slice_pitch</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>
                    <paramdef>
                        <link xlink:href="scalarDataTypes.html">cl_int</link>
                        <parameter>*errcode_ret</parameter>
                    </paramdef>
            </funcprototype>
        </funcsynopsis>
    </refsynopsisdiv>

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

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

            <varlistentry>
                <term> <varname> command_queue </varname> </term>
                <listitem>
                    <para>
                        Must be a valid command-queue.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> image </varname> </term>
                <listitem>
                    <para>
                      A valid image object. The OpenCL context associated with
                      <varname>command_queue</varname> and <varname>image</varname> must be
                      the same.
                    </para>
               </listitem>
            </varlistentry>

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

                    <para>
                      If <varname>blocking_map</varname> is <constant>CL_TRUE</constant>,
                      <function>clEnqueueMapImage</function> does not return until the specified
                      region in <varname>image</varname> is mapped into the host address space
                      and the application can access the contents of the mapped region using
                      the pointer returned by <function>clEnqueueMapImage</function>.
                    </para>

                    <para>
                      If <varname>blocking_map</varname> is <constant>CL_FALSE</constant>
                      i.e. map operation is non-blocking, the pointer to the mapped region
                      returned by <function>clEnqueueMapImage</function> cannot be used until
                      the map command has completed. The <varname>event</varname> argument
                      returns an event object which can be used to query the execution status
                      of the map command. When the map command is completed, the application
                      can access the contents of the mapped region using the pointer returned
                      by <function>clEnqueueMapImage</function>.
                    </para>
                </listitem>
            </varlistentry>

            <varlistentry>
                <term><varname>map_flags</varname></term>
                <listitem>
                    <para>
                        A bit-bield with the following supported values.
                    </para>

                    <!-- table 5.5, also applies to clEnqueueMapBuffer.xml -->
                    <informaltable frame="all"><tgroup cols="2" align="left" colsep="1" rowsep="1">
                        <colspec colname="col1" colnum="1" />
                        <colspec colname="col2" colnum="2" />
                        <thead>
                            <row>
                            <entry>cl_map_flags</entry>
                            <entry>Description</entry>
                            </row>
                        </thead>

                        <tbody>
                            <row>
                                <entry><constant>CL_MAP_READ</constant></entry>
                                <entry>
                                    <para>
                                        This flag specifies that the region being mapped in the memory object
                                        is being mapped for reading.
                                    </para>

                                    <para>
                                        The pointer returned by
                                        <citerefentry><refentrytitle>clEnqueueMapBuffer</refentrytitle></citerefentry> or
                                        <function>clEnqueueMapImage</function> is guaranteed to contain the
                                        latest bits in the region being mapped when the
                                        <citerefentry><refentrytitle>clEnqueueMapBuffer</refentrytitle></citerefentry> or
                                        <function>clEnqueueMapImage</function> command has completed
                                    </para>
                                </entry>
                            </row>

                            <row>
                                <entry><constant>CL_MAP_WRITE</constant></entry>
                                <entry>
                                    <para>
                                        This flag specifies that the region being mapped in the memory
                                        object is being mapped for writing.
                                    </para>

                                    <para>
                                        The pointer returned by
                                        <citerefentry><refentrytitle>clEnqueueMapBuffer</refentrytitle></citerefentry> or
                                        <function>clEnqueueMapImage</function> is guaranteed to contain the latest bits in
                                        the region being mapped when the
                                        <citerefentry><refentrytitle>clEnqueueMapBuffer</refentrytitle></citerefentry> or
                                        <function>clEnqueueMapImage</function> command has completed.
                                    </para>
                                </entry>
                            </row>

                            <row>
                                <entry><constant>CL_MAP_WRITE_INVALIDATE_REGION</constant></entry>
                                <entry>
                                    <para>
                                        This flag specifies that the region being mapped in the memory
                                        object is being mapped for writing.
                                    </para>

                                    <para>
                                        The contents of the region being mapped are to be discarded. This is typically the case
                                        when the region being mapped is overwritten by the host. This
                                        flag allows the implementation
                                        to no longer guarantee that the pointer returned by
                                        <citerefentry><refentrytitle>clEnqueueMapBuffer</refentrytitle></citerefentry> or
                                        <function>clEnqueueMapImage</function> contains the latest bits in the region being
                                        mapped which can be a significant performance enhancement.
                                    </para>

                                    <para>
                                        <constant>CL_MAP_READ</constant> or <constant>CL_MAP_WRITE</constant>
                                        and <constant>CL_MAP_WRITE_INVALIDATE_REGION</constant>
                                        are mutually exclusive.
                                    </para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup></informaltable>
            </listitem>
        </varlistentry>

<!-- ================================ END PARAMETER TABLE  -->

            <varlistentry>
                <term> <varname> 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>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 (width, height, depth) in pixels of the 1D, 2D or 3D rectangle,
                      the (width, height) in pixels of the 2D rectangle and the number of images of
                      a 2D image array or the (width) 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 <varname>image</varname>
                      is a 1D image array object, <varname>region</varname>[2] must be 1.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> image_row_pitch </varname> </term>
                <listitem>
                    <para>
                        Returns the scan-line pitch in bytes for the mapped region. This must be a non-NULL value.
                    </para>
               </listitem>
            </varlistentry>

            <varlistentry>
                <term> <varname> image_slice_pitch </varname> </term>
                <listitem>
                    <para>
                      Returns the size in bytes of each 2D slice of a 3D image or the size of
                      each 1D or 2D image in a 1D or 2D image array for the mapped region. For
                      a 1D and 2D image, zero is returned if this argument is not NULL. For a
                      3D image, 1D, and 2D image array, <varname>image_slice_pitch</varname>
                      must be a non-NULL value.
                    </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
                      <function>clEnqueueMapImage</function> can be executed. If
                      <varname>event_wait_list</varname> is NULL, then
                      <function>clEnqueueMapImage</function> 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.  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>

             <varlistentry>
                <term> <varname> errcode_ret </varname> </term>
                <listitem>
                    <para>
                      Returns an appropriate error code. If <varname>errcode_ret</varname>
                      is NULL, no error code is returned.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsect1>

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

    <refsect1 id="notes"><title>Notes</title>
        <para>
          The pointer returned maps a 1D, 2D or 3D region starting at <varname>origin</varname>
          and is at least <varname>region</varname>[0] pixels in size for a 1D image,
          1D image buffer or 1D image array, (<varname>image_row_pitch</varname> *
          <varname>region</varname>[1]) pixels in size for a 2D image or 2D image array, and
          (<varname>image_slice_pitch</varname> * <varname>region</varname>[2]) pixels in size
          for a 3D image. The result of a memory access outside this region is undefined.
        </para>

        <para>
            If the image object is created with <constant>CL_MEM_USE_HOST_PTR</constant>
            set in <varname>mem_flags</varname>, the following will be true:
        </para>

        <itemizedlist mark="disc">
            <listitem>
              The <varname>host_ptr</varname> specified in
              <citerefentry><refentrytitle>clCreateImage</refentrytitle></citerefentry>
              is guaranteed to contain the latest bits in the region being mapped when the
              <function>clEnqueueMapImage</function> command has completed.
            </listitem>

            <listitem>
              The pointer value returned by <function>clEnqueueMapImage</function> will be derived
              from the <varname>host_ptr</varname> specified when the image object is created.
            </listitem>
        </itemizedlist>

        <para>
          Mapped image objects are unmapped using
          <citerefentry><refentrytitle>clEnqueueUnmapMemObject</refentrytitle></citerefentry>.
        </para>

        <para>
          <!-- core spec p. 120, section 5.4.2 -->
          <citerefentry><refentrytitle>clEnqueueMapBuffer</refentrytitle></citerefentry>
          and <function>clEnqueueMapImage</function> increment the mapped count of the memory
          object. The initial mapped count value of a memory object is zero. Multiple calls to
          <citerefentry><refentrytitle>clEnqueueMapBuffer</refentrytitle></citerefentry>
          or <function>clEnqueueMapImage</function> on the same memory object
          will increment this mapped count by appropriate number of calls.
          <function>clEnqueueUnmapMemObject</function> decrements the mapped count of the
          memory object.
        </para>

        <para>
          <!-- core spec p. 120, section 5.4.2 -->
          <citerefentry><refentrytitle>clEnqueueMapBuffer</refentrytitle></citerefentry> and
          <function>clEnqueueMapImage</function> act as synchronization points for a region of
          the buffer object being mapped.
        </para>
    </refsect1>

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

    <refsect1 id="errors"><title>Errors</title>
        <para>
          <function>clEnqueueMapImage</function> will return a pointer to the mapped region
          if the function is executed successfully.  The <varname>errcode_ret</varname> is set
          to <errorname>CL_SUCCESS</errorname>.
        </para>

        <para>
          A NULL pointer is returned otherwise with one of the following error values returned
          in <varname>errcode_ret</varname>:
        </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 region being mapped given by
                (<varname>origin</varname>, <varname>origin</varname>+<varname>region</varname>)
                is out of bounds or if values specified in <varname>map_flags</varname> are not valid.
            </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_VALUE</errorname> if <varname>image_row_pitch</varname> is NULL.
            </listitem>

            <listitem>
                <errorname>CL_INVALID_VALUE</errorname> if <varname>image</varname> is a 3D image,
                1D or 2D image array object and <varname>image_slice_pitch</varname> is NULL.
            </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_MAP_FAILURE</errorname> if there is a failure to map the
              requested region into the host address space. This error cannot occur for
              image objects created with <constant>CL_MEM_USE_HOST_PTR</constant> or
              <constant>CL_MEM_ALLOC_HOST_PTR</constant>.
            </listitem>

            <listitem>
              <errorname>CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST</errorname> if the
              map operation is 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 the device
              associated with <varname>command_queue</varname> does not support
              images (i.e. <constant>CL_DEVICE_IMAGE_SUPPORT</constant>
              specified in the table of OpenCL Device Queries for
              <citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry>
              is <constant>CL_FALSE</constant>.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_OPERATION</errorname> if <varname>image</varname>
              has been created with <constant>CL_MEM_HOST_WRITE_ONLY</constant> or
              <constant>CL_MEM_HOST_NO_ACCESS</constant> and <constant>CL_MAP_READ</constant>
              is set in <varname>map_flags</varname> or if <varname>image</varname>
              has been created with <constant>CL_MEM_HOST_READ_ONLY</constant> or
              <constant>CL_MEM_HOST_NO_ACCESS</constant> and <constant>CL_MAP_WRITE</constant>
              or <constant>CL_MAP_WRITE_INVALIDATE_REGION</constant> is set in
              <varname>map_flags</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="clEnqueueMapImage">OpenCL Specification</olink>
        </para>
    </refsect1>

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

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

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

