  <bridgehead>Mapping image channels to color values</bridgehead>
  
  <para>
    <!-- section 6.13.14.7 --> The following table describes the mapping
    of the number of channels of an image element to the appropriate components in the
    <type>float4</type>, <type>int4</type> or <type>uint4</type> vector data type for
    the color values returned by <function>read_image{f|i|ui}</function> or supplied
    to <function>write_image{f|i|ui}</function>. The unmapped components will be set
    to <constant>0.0</constant> for red, green and blue channels and will be set to
    <constant>1.0</constant> for the alpha channel.
  </para>

  <para>
    <informaltable frame="all">
      <tgroup cols="2" align="center" colsep="1" rowsep="1">
        <colspec colname="col1" colnum="1" />
        <colspec colname="col2" colnum="2" />

        <thead>
          <row>
            <entry>Channel Order</entry>
            <entry><type>float4</type>, <type>int4</type> or <type>uint4</type> components of channel data</entry>
          </row>
        </thead>

        <tbody>
          <row>
            <entry><constant>CL_R</constant>, <constant>CL_Rx</constant></entry>
            <entry><constant>(r, 0.0, 0.0, 1.0)</constant></entry>
          </row>

          <row>
            <entry><constant>CL_A</constant></entry>
            <entry><constant>(0.0, 0.0, 0.0, a)</constant></entry>
          </row>

          <row>
            <entry><constant>CL_RG</constant>, <constant>CL_RGx</constant></entry>
            <entry><constant>(r, g, 0.0, 1.0)</constant></entry>
          </row>

          <row>
            <entry><constant>CL_RA</constant></entry>
            <entry><constant>(r, 0.0, 0.0, a)</constant></entry>
          </row>

          <row>
            <entry>
               <constant>CL_RGB</constant>, 
               <constant>CL_RGBx</constant>, 
               <constant>CL_sRGB</constant>, 
               <constant>CL_sRGBx</constant>
            </entry>

            <entry><constant>(r, g, b, 1.0)</constant></entry>
          </row>

          <row>
            <entry><constant>CL_RGBA, CL_BGRA, CL_ARGB, CL_ABGR, CL_sRGBA, CL_sBGRA</constant></entry>
            <entry><constant>(r, g, b, a)</constant></entry>
          </row>

          <row>
            <entry><constant>CL_INTENSITY</constant></entry>
            <entry><constant>(I, I, I, I)</constant></entry>
          </row>

          <row>
            <entry><constant>CL_LUMINANCE</constant></entry>
            <entry><constant>(L, L, L, 1.0)</constant></entry>
          </row>

        </tbody>
      </tgroup>
    </informaltable>
  </para>

  <para>
      For <constant>CL_DEPTH</constant> images, a scalar value is 
      returned by <function>read_imagef</function> or supplied to
      <function>write_imagef</function>.
  </para>

  <para>
    A kernel that uses a sampler with the <constant>CL_ADDRESS_CLAMP</constant> addressing
    mode with multiple images may result in additional samplers being used internally
    by an implementation. If the same sampler is used with multiple images called via
    <function>read_image{f|i|ui}</function>, then it is possible that an implementation may
    need to allocate an additional sampler to handle the different border color values that
    may be needed depending on the image formats being used. These implementation allocated
    samplers will count against the maximum sampler values supported by the device and given by
    <constant>CL_DEVICE_MAX_SAMPLERS</constant>. Enqueuing a kernel that requires more samplers
    than the implementation can support will result in a <constant>CL_OUT_OF_RESOURCES</constant>
    error being returned.
  </para>

    <para>
        <constant>CL_SAMPLER_NORMALIZED_COORDS</constant> must be 
        <constant>CL_TRUE</constant> for built-in functions
        described in the table above that read from a mip-mapped 
        image; otherwise the behavior is
        undefined. The value specified in the <varname>lod</varname> 
        argument is clamped to the minimum of (actual
        number of mip-levels – 1) in the image or value specified for 
        <constant>CL_SAMPLER_LOD_MAX</constant>.
    </para>

<!-- 17-Dec-2013, rev. 19 -->

