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

<refentry>
    <refentryinfo>
        <keywordset><keyword>clEnqueueAcquireD3D11ObjectsKHR</keyword></keywordset>
    </refentryinfo>

    <refmeta>
        <refentrytitle>clEnqueueAcquireD3D11ObjectsKHR</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="clEnqueueAcquireD3D11ObjectsKHR">
        <refname>clEnqueueAcquireD3D11ObjectsKHR</refname>
        <refpurpose>Acquire OpenCL memory objects that have been created from Direct3D 11 resources</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>clEnqueueAcquireD3D11ObjectsKHR</function></funcdef>
                <paramdef><link xlink:href="abstractDataTypes.html">cl_command_queue</link>
                    <parameter>command_queue</parameter></paramdef>
                <paramdef><link xlink:href="scalarDataTypes.html">cl_uint</link>
                    <parameter>num_objects</parameter></paramdef>
                <paramdef>const <link xlink:href="abstractDataTypes.html">cl_mem</link><parameter>*mem_objects</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>
                    A valid command-queue.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>num_objects</varname></term>
            <listitem>
                <para>
                    The number of memory objects to be acquired in <varname>mem_objects</varname>.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>mem_objects</varname></term>
            <listitem>
                <para>
                     A pointer to a list of OpenCL memory objects that were created from
                     Direct3D 11 resources.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>num_events_in_wait_list</varname>, <varname>event_wait_list</varname></term>
            <listitem>
                <para>
                  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.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>event</varname></term>
            <listitem>
                <para>
                  Returns an event object that identifies this particular 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> </variablelist>
    </refsect1>

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

    <refsect1 id="notes"><title>Notes</title>
        <para>
          The Direct3D 11 objects are acquired by the OpenCL context associated with
          <varname>command-queue</varname> and can therefore be used by all command-queues
          associated with the OpenCL context.
        </para>

        <para>
          OpenCL memory objects created from Direct3D 11 resources must be acquired before
          they can be used by any OpenCL commands queued to a command-queue. If an OpenCL
          memory object created from a Direct3D 11 resource is used while it is not currently
          acquired by OpenCL, the call attempting to use that OpenCL memory object will return
          <constant>CL_D3D11_RESOURCE_NOT_ACQUIRED_KHR</constant>.
        </para>

        <para>
          If <constant>CL_CONTEXT_INTEROP_USER_SYNC</constant> is not
          specified as <constant>CL_TRUE</constant> during context creation,
          <function>clEnqueueAcquireD3D11ObjectsKHR</function> provides the synchronization
          guarantee that any Direct3D 11 calls involving the interop device(s) used in the
          OpenCL context made before <function>clEnqueueAcquireD3D11ObjectsKHR</function>
          is called will complete executing before <varname>event</varname> reports
          completion and before the execution of any subsequent OpenCL work issued
          in <varname>command_queue</varname> begins. If the context was created with
          properties specifying <constant>CL_CONTEXT_INTEROP_USER_SYNC</constant> as
          <constant>CL_TRUE</constant>, the user is responsible for guaranteeing that any
          Direct3D 11 calls involving the interop device(s) used in the OpenCL context made
          before <function>clEnqueueAcquireD3D11ObjectsKHR</function> is called have completed
          before calling <function>clEnqueueAcquireD3D11ObjectsKHR</function>.
        </para>

        &sharingD3D11Inc;

        &accessMappedInc;

    </refsect1>

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

    <refsect1 id="errors"><title>Errors</title>
        <para>
          Returns <errorname>CL_SUCCESS</errorname> returns <errorname>CL_SUCCESS</errorname>
          if the function is executed successfully. If <varname>num_objects</varname> is 0 and
          <varname>mem_objects</varname> is NULL then the function does nothing and returns
          <errorname>CL_SUCCESS</errorname>. Otherwise it returns one of the following errors:
        </para>

        <itemizedlist mark="disc">
            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if <varname>num_objects</varname>
              is zero and <varname>mem_objects</varname> is not a NULL value or if
              <varname>num_objects</varname> &gt; 0 and <varname>mem_objects</varname> is NULL.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_MEM_OBJECT</errorname> if memory objects in
              <varname>mem_objects</varname> are not valid OpenCL memory objects or if memory
              objects in <varname>mem_objects</varname> have not been created from Direct3D
              11 resources.
            </listitem>

            <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 context associated with
              <varname>command_queue</varname> was not created from a Direct3D 11 context.
            </listitem>

            <listitem>
              <!-- ext. spec p. 110, section 9.11.7.6 -->
              <errorname>CL_D3D11_RESOURCE_ALREADY_ACQUIRED_KHR</errorname> if memory
              objects in <varname>mem_objects</varname> have previously been acquired using
              <function>clEnqueueAcquireD3D11ObjectsKHR</function> but have not been released using
              <citerefentry><refentrytitle>clEnqueueReleaseD3D11ObjectsKHR</refentrytitle></citerefentry>.
            </listitem>

            <listitem>
              <!-- ext. spec p. 99, section 9.11.4 -->
              <errorname>CL_D3D11_RESOURCE_ALREADY_ACQUIRED_KHR</errorname> when any of
              <varname>mem_objects</varname>are currently acquired by OpenCL.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_EVENT_WAIT_LIST</errorname>
              if <varname>event_wait_list</varname> is NULL and
              <varname>num_event_in_wait_list</varname> &gt; 0,
              or <varname>event_wait_list</varname> is  not NULL and
              <varname>num_event_in_wait_list</varname> is 0, or if event objects in
              <varname>event_wait_list</varname> are not valid events.
            </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="clEnqueueAcquireD3D11ObjectsKHR">OpenCL Specification</olink>
        </para>
    </refsect1>

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

    <refsect1 id="seealso"><title>Also see</title>
        <para>
            <citerefentry><refentrytitle>cl_khr_d3d11_sharing</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clGetDeviceIDsFromD3D11KHR</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clCreateFromD3D11BufferKHR</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clCreateFromD3D11Texture2DKHR</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clCreateFromD3D11Texture3DKHR</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clEnqueueReleaseD3D11ObjectsKHR</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>

