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

    <para>
      <!-- ext. spec p. 66, section 9.9.1 --> The goal of this extension is to provide
      interoperability between OpenCL and Direct3D 10. This is designed to function
      analogously to the OpenGL interoperability. If this extension is supported
      by an implementation, the string "cl_khr_d3d10_sharing" will be present in the
      <constant>CL_PLATFORM_EXTENSIONS</constant> or <constant>CL_DEVICE_EXTENSIONS</constant>
      string described in the table of allowed values for <varname>param_name</varname> for
      <citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry>.
    </para>

    <para>
      <!-- ext. spec p. 66, section 9.9.1 --> As currently proposed, the interfaces for this
      extension would be provided in cl_d3d10.h.
    </para>

    <para>
      <!-- ext. spec p. 70, section 9.9.7 --> This section discusses OpenCL functions that allow
      applications to use Direct3D 10 resources as OpenCL memory objects. This allows efficient
      sharing of data between OpenCL and Direct3D 10. The OpenCL API may be used to execute
      kernels that read and/or write memory objects that are also Direct3D 10 resources. An
      OpenCL image object may be created from a Direct3D 10 texture resource. An OpenCL buffer
      object may be created from a Direct3D 10 buffer resource. OpenCL memory objects may be
      created from Direct3D 10 objects if and only if the OpenCL context has been created from
      a Direct3D 10 device.
    </para>

    <bridgehead>Lifetime of Shared Objects</bridgehead>

    <para>
      <!-- ext. spec p. 72, section 9.9.7.2 --> An OpenCL memory object created from a Direct3D
      10 resource remains valid as long as the corresponding Direct3D 10 resource has not been
      deleted. If the Direct3D 10 resource is deleted through the Direct3D 10 API, subsequent
      use of the OpenCL memory object will result in undefined behavior, including but not
      limited to possible OpenCL errors, data corruption, and program termination.
    </para>

    <para>
      <!-- ext. spec p. 72, section 9.9.7.2 --> The successful creation of a
      cl_context against a Direct3D 10 device specified via the context create parameter
      <constant>CL_CONTEXT_D3D10_DEVICE_KHR</constant> will increment the internal Direct3D
      reference count on the specified Direct3D 10 device. The internal Direct3D reference
      count on that Direct3D 10 device will be decremented when the OpenCL reference count on
      the returned OpenCL context drops to zero.
    </para>

    <para>
      <!-- ext. spec p. 72, section 9.9.7.2 --> The OpenCL context and corresponding command-queues
      are dependent on the existence of the Direct3D 10 device from which the OpenCL context
      was created. If the Direct3D 10 device is deleted through the Direct3D 10 API, subsequent
      use of the OpenCL context will result in undefined behavior, including but not limited
      to possible OpenCL errors, data corruption, and program termination.
    </para>

<!-- 19-Oct-2011 -->

