
    <para>
      General information about sharing memory objects with DX9 follows.
    </para>

    <!-- section 9.9-->
    <para>
        The goal of this extension is to allow applications to use media surfaces as OpenCL memory
        objects. This allows efficient sharing of data between OpenCL and selected adapter APIs (only
        DX9 for now). If this extension is supported, an OpenCL image object can be created from a
        media surface and the OpenCL API can be used to execute kernels that read and/or write
        memory objects that are media surfaces. Note that OpenCL memory objects may be created
        from the adapter media surface if and only if the OpenCL context has been created from that
        adapter.
    </para>

    <para>
        If this extension is supported by an implementation, the string "cl_khr_dx9_media_sharing"
        will be present in the <constant>CL_PLATFORM_EXTENSIONS</constant>
        (see <citerefentry><refentrytitle>clGetPlatformInfo</refentrytitle></citerefentry>)
        or <constant>CL_DEVICE_EXTENSIONS</constant> 
        (see <citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry>).
    </para>

    <para>
        As currently proposed the interfaces for this extension would be provided in
        <code>cl_dx9_media_sharing.h</code>.
    </para>

    <!-- 9.9.7.5 -->
    <bridgehead>Surface formats for Media Surface Sharing</bridgehead>

    <para>
      <!-- ext. spec 9.9.7.5 Surface formats for Media Surface Sharing --> 
      This section includes the D3D surface formats
      that are supported when the adapter type is one of the Direct 3D lineage. Using a D3D
      surface format not listed here is an error.  To extend the use of this extension to support
      media adapters beyond DirectX9 tables similar to the ones in this section will need to be
      defined for the surface formats supported by the new media adapter.  All implementations
      that support this extension are required to support the NV12 surface format, the other
      surface formats supported are the same surface formats that the adapter you are sharing
      with supports as long as they are listed in the tables below (Tables 9.10.3 and 9.10.4).
    </para>

    <!-- Table 9.10.3 -->
    <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>FOUR CC code</entry>
                    <entry>CL image format (channel order, channel data type)</entry>
                </row>
            </thead>

            <tbody>
                <row>
                    <entry>FOURCC('N', 'V', '1', '2'), Plane 0</entry>
                    <entry><constant>CL_R, CL_UNORM_INT8</constant></entry>
                </row>

                <row>
                    <entry>FOURCC('N', 'V', '1', '2'), Plane 1</entry>
                    <entry><constant>CL_RG, CL_UNORM_INT8</constant></entry>
                </row>

                <row>
                    <entry>FOURCC('Y', 'V', '1', '2'), Plane 0</entry>
                    <entry><constant>CL_R, CL_UNORM_INT8</constant></entry>
                </row>

                <row>
                    <entry>FOURCC('Y', 'V', '1', '2'), Plane 1</entry>
                    <entry><constant>CL_R, CL_UNORM_INT8</constant></entry>
                </row>

                <row>
                    <entry>FOURCC('Y', 'V', '1', '2'), Plane 2</entry>
                    <entry><constant>CL_R, CL_UNORM_INT8</constant></entry>
                </row>

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

    <para>
      In the table above, NV12 Plane 0 corresponds to the luminance (Y) channel and Plane 1
      corresponds to the UV channels. The YV12 Plane 0 corresponds to the Y channel, Plane
      1 to the U channel and Plane 2 to the V channel. Note that the YUV formats map to
      <constant>CL_R</constant> and <constant>CL_RG</constant> but do not perform any YUV to
      RGB conversion and vice-versa.
    </para>

    <!-- Table 9.10.4 -->
    <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>D3D format</entry>
            <entry>CL image format (channel order, channel data type)</entry>
          </row>
        </thead>

        <tbody>
          <row>
            <entry>D3DFMT_R32F</entry>
            <entry><constant>CL_R, CL_FLOAT</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_R16F</entry>
            <entry><constant>CL_R, CL_HALF_FLOAT</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_L16</entry>
            <entry><constant>CL_R, CL_UNORM_INT16</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_A8</entry>
            <entry><constant>CL_A, CL_UNORM_INT8</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_L8</entry>
            <entry><constant>CL_R, CL_UNORM_INT8</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_G32R32F</entry>
            <entry><constant>CL_RG, CL_FLOAT</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_G16R16F</entry>
            <entry><constant>CL_RG, CL_HALF_FLOAT</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_G16R16</entry>
            <entry><constant>CL_RG, CL_UNORM_INT16</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_A8L8</entry>
            <entry><constant>CL_RG, CL_UNORM_INT8</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_A32B32G32R32F</entry>
            <entry><constant>CL_RGBA, CL_FLOAT</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_A16B16G16R16F</entry>
            <entry><constant>CL_RGBA, CL_HALF_FLOAT</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_A16B16G16R16</entry>
            <entry><constant>CL_RGBA, CL_UNORM_INT16</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_A8B8G8R8</entry>
            <entry><constant>CL_RGBA, CL_UNORM_INT8</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_X8B8G8R8</entry>
            <entry><constant>CL_RGBA, CL_UNORM_INT8</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_A8R8G8B8</entry>
            <entry><constant>CL_BGRA, CL_UNORM_INT8</constant></entry>
          </row>

          <row>
            <entry>D3DFMT_X8R8G8B8</entry>
            <entry><constant>CL_BGRA, CL_UNORM_INT8</constant></entry>
          </row>
        </tbody>
      </tgroup>
    </informaltable>

    <para>
      Note that D3D9 format names seem to imply that the order of the color channels are switched
      relative to OpenCL but this is not the case. For example, layout of channels for each pixel
      for <constant>D3DFMT_A32FB32FG32FR32F</constant> is the same as 
      <constant>CL_RGBA</constant>, <constant>CL_FLOAT</constant>.
    </para>

    <para>
      Properties of media surface objects may be queried using
      <citerefentry><refentrytitle>clGetMemObjectInfo</refentrytitle></citerefentry>
      and <citerefentry><refentrytitle>clGetImageInfo</refentrytitle></citerefentry> with
      <varname>param_name</varname> <constant>CL_MEM_DX9_MEDIA_ADAPTER_TYPE_KHR</constant>,
      <constant>CL_MEM_DX9_MEDIA_SURFACE_INFO_KHR</constant> and
      <constant>CL_IMAGE_DX9_MEDIA_SURFACE_PLANE_KHR</constant>.
    </para>

 <!-- 26-Oct-2015, Ext rev. 10 -->

