<?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" [
<!ENTITY sharingDX9Inc SYSTEM "sharingDX9Inc.xml">
]>

<refentry>
    <refentryinfo>
        <keywordset><keyword>clCreateFromDX9MediaSurfaceKHR</keyword></keywordset>
    </refentryinfo>
    <refmeta>
        <refentrytitle>clCreateFromDX9MediaSurfaceKHR</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="clCreateFromDX9MediaSurfaceKHR">
      <refname>clCreateFromDX9MediaSurfaceKHR</refname>
      <refpurpose>Creates an OpenCL image object from a media surface.</refpurpose>
    </refnamediv>

    <refsynopsisdiv xmlns:xlink="http://www.w3.org/1999/xlink"><title></title>
        <funcsynopsis>
            <funcprototype>
                <funcdef>
                    <link xlink:href="abstractDataTypes.html">cl_mem</link>
                    <function>clCreateFromDX9MediaSurfaceKHR</function>
                </funcdef>
                <paramdef><link xlink:href="abstractDataTypes.html">cl_context</link><parameter>context</parameter></paramdef>
                <paramdef><link xlink:href="enums.html#cl_mem_flags">cl_mem_flags</link><parameter>flags</parameter></paramdef>
                <paramdef>cl_dx9_media_adapter_type_khr<parameter>adapter_type</parameter></paramdef>
                <paramdef><link xlink:href="scalarDataTypes.html">void</link><parameter>*surface_info</parameter></paramdef>
                <paramdef><link xlink:href="scalarDataTypes.html">cl_uint</link><parameter>plane</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>context</varname></term>
            <listitem>
                <para>
                    A valid OpenCL context created from a media adapter.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>flags</varname></term>
            <listitem>
                <para>
                  A bit-field that is used to specify usage information. Refer
                  to the table of allowed values for <varname>flags</varname> for
                  <citerefentry><refentrytitle>clCreateBuffer</refentrytitle></citerefentry>.  Only
                  <constant>CL_MEM_READ_ONLY</constant>, <constant>CL_MEM_WRITE_ONLY</constant>,
                  and <constant>CL_MEM_READ_WRITE</constant> values specified
                  in the table of allowed values for <varname>flags</varname> for
                  <citerefentry><refentrytitle>clCreateBuffer</refentrytitle></citerefentry>
                  can be used.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>adapter_type</varname></term>
            <listitem>
                <para>
                  A value from enumeration of supported adapters described in the
                  table of <varname>cl_dx9_media_adapter_type_khr</varname> values for
                  <citerefentry><refentrytitle>clGetDeviceIDsFromDX9MediaAdapterKHR</refentrytitle></citerefentry>.
                  The type of <varname>surface_info</varname> is determined by the adapter
                  type.  The implementation does not need to support all adapter types. This
                  approach provides flexibility to support additional adapter types in the
                  future. Supported adapter types are <constant>CL_ADAPTER_D3D9_KHR</constant>,
                  <constant>CL_ADAPTER_D3D9EX_KHR</constant>, and
                  <constant>CL_ADAPTER_DXVA_KHR</constant>.
                </para>

                <para>
                  If <varname>adapter_type</varname> is <constant>CL_ADAPTER_D3D9_KHR</constant>,
                  <constant>CL_ADAPTER_D3D9EX_KHR</constant>, or
                  <constant>CL_ADAPTER_DXVA_KHR</constant>, the <varname>surface_info</varname>
                  points to the following structure:
                </para>

                <para> <code><literallayout>
typedef struct _cl_dx9_surface_info_khr
{
    IDirect3DSurface9 *resource; 
    HANDLE shared_handle;
} cl_dx9_surface_info_khr;
                    </literallayout></code>
                </para>

                <para>
                  For D3D9 surfaces, we need both the handle to the resource and the resource
                  itself to have a sufficient amount of information to eliminate a copy of the
                  surface for sharing in cases where this is possible. Elimination of the copy
                  is driver dependent. <varname>shared_handle</varname> may be NULL and this
                  may result in sub-optimal performance.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>surface_info</varname></term>
            <listitem>
                <para>
                  A pointer to one of the structures defined in the <varname>adapter_type</varname>
                  description above passed in as a <type>void</type> *.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>plane</varname></term>
            <listitem>
                <para>
                  The plane of resource to share for planar surface formats.  For planar formats,
                  we use the plane parameter to obtain a handle to thie specific plane (Y, U or
                  V for example).  For nonplanar formats used by media, <varname>plane</varname>
                  must be 0.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>errcode_ret</varname></term>
            <listitem>
                <para>
                  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 width and height of the returned OpenCL 2D image object are determined by the
          width and height of the plane of resource. The channel type and order of the returned
          image object is determined by the format and plane of resource and are described in
          tables 9.10.3 and 9.10.4.
        </para>

        <para>
          This call will increment the internal media surface count on
          <varname>resource</varname>. The internal media surface reference count on
          <varname>resource</varname> will be decremented when the OpenCL reference count on
          the returned OpenCL memory object drops to zero.
        </para>

        &sharingDX9Inc;

    </refsect1>

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

    <refsect1 id="errors"><title>Errors</title>
        <para>
          Returns a valid non-zero 2D image object and
          <varname>errcode_ret</varname> is set to <errorname>CL_SUCCESS</errorname> if the 2D
          image object is created successfully.  Otherwise, it returns a NULL value with one
          of the following error values returned in <varname>errcode_ret</varname>:
        </para>

        <itemizedlist mark="disc">
            <listitem>
              <errorname>CL_INVALID_CONTEXT</errorname> if <varname>context</varname> is not
              a valid context.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if values specified in
              <varname>flags</varname> are not valid or if 
              <varname>plane</varname> is not a valid plane of
              <varname>resource</varname> specified in <varname>surface_info</varname>.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_DX9_MEDIA_SURFACE_KHR</errorname> if
              <varname>resource</varname> specified in <varname>surface_info</varname> is not
              a valid resource or is not associated with <varname>adapter_type</varname> (e.g.,
              <varname>adapter_type</varname> is set to <constant>CL_ADAPTER_D3D9_KHR</constant>
              and <varname>resource</varname> is not a Direct3D 9 surface created in
              <constant>D3DPOOL_DEFAULT</constant>).
            </listitem>

            <listitem>
              <errorname>CL_INVALID_DX9_MEDIA_SURFACE_KHR</errorname> if
              <varname>shared_handle</varname> specified in <varname>surface_info</varname>
              is not NULL or a valid handle value.
            </listitem>

            <listitem>
                <errorname>CL_INVALID_DX9_MEDIA_SURFACE_KHR</errorname> if
                <varname>adapter_type</varname> is set to a media
                adapter and the <varname>surface_info</varname> does 
                not reference a media surface of the required type, or if
                <varname>adapter_type</varname> is set to a media 
                adapter type and <varname>surface_info</varname> 
                does not contain a valid reference to
                a media surface on that adapter, by 
                <citerefentry><refentrytitle>clGetMemObjectInfo</refentrytitle></citerefentry> 
                when <varname>param_name</varname> is a surface or
                handle when the image was not created from an 
                appropriate media surface, and from
                <citerefentry><refentrytitle>clGetImageInfo</refentrytitle></citerefentry> 
                when <varname>param_name</varname> is 
                <constant>CL_IMAGE_DX9_MEDIA_PLANE_KHR</constant> and image was
                not created from an appropriate media surface.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_IMAGE_FORMAT_DESCRIPTOR</errorname> if the texture format
              of <varname>resource</varname> is not listed in tables 9.10.3 and 9.10.4.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_OPERATION</errorname> if there are no devices in
              <varname>context</varname> that support <varname>adapter_type</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="clCreateFromDX9MediaSurfaceKHR">OpenCL Specification</olink>
        </para>
    </refsect1>

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

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

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

