<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd">
<!-- saved from url=(0013)about:internet -->
<?xml-stylesheet type="text/xsl" href="mathml.xsl"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:pref="http://www.w3.org/2002/Math/preference" xmlns:xlink="http://www.w3.org/1999/xlink" pref:renderer="mathplayer-dl">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style xmlns="" type="text/css">
    /* This style sets a margin around the entire page */
        html, body {
            margin: 10px;
        }

        p {
            font: normal 16px verdana, sans-serif;
            margin: 0;
            padding-bottom:12px;
        }

        h1 {
            font: bold 25px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h2 {
            font: bold 19px verdana, sans-serif;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h3 {
            font: bold 19px verdana, sans-serif !important;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        li {
            font: normal 16px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 18px;
            padding-top: 0;
            padding-bottom: 0;
        }

        .pdparam {
            font: italic 16px verdana, sans-serif;
        }

                .term {
                        font: italic 16px verdana, sans-serif;
                        font-weight: normal;
                }

                .type {
                        font: normal 16px verdana, sans-serif !important;
                }

                .parameter {
                        font-style: italic;
                        }

        a:link, a:visited {
            color: blue;
            text-decoration: none;
            font: normal 16px;
        }

        a:hover {
            background-color: #FFFF99;
            font: normal 16px;
        }

        div.funcsynopsis {
            text-align: left;
            background-color: #e6e6e6;
            font: normal 16px verdana, sans-serif;
                        padding-top: 10px;
                        padding-bottom: 10px;
        }

        div.funcsynopsis table {
            border-collapse: separate;
            font: normal 16px verdana, sans-serif;
        }

        div.funcsynopsis td {
            background-color: #e6e6e6;
            border: 0 solid #000;
            padding: 1px;
            font: normal 16px verdana, sans-serif;
        }

        div.refsect1 {
            font-family: verdana, sans-serif;
            font-size: 16px;
        }

        code.constant {
            font: normal 16px courier new, monospace !important;
        }

                span.errorname {
            font: normal 16px verdana, sans-serif !important;
        }

        code.function {
            font: bold 16px verdana, sans-serif !important;
        }

        b.fsfunc {
            font: bold 16px verdana, sans-serif !important;
        }

        code.varname {
            font: italic 16px verdana, sans-serif;
        }

        code.replaceable {
            font: italic 16px courier new, monospace;
        }

        code.funcdef {
            font: normal 16px verdana, sans-serif !important;
        }

        .citerefentry {
            font: normal 16px verdana, sans-serif !important;
        }

        .parameter {
            font-style: italic;
        }

        code.fsfunc {
            font: normal 16px verdana, sans-serif !important;
        }

        /* PARAMETER: This style controls spacing between the terms in Parameter section */
        dt {
            margin-top: 15px;
        }

        /* TABLES: These styles apply to all tables OTHER than the Synopsis and Example tables */
        div.refsect1 table {
            width: 100%;
                        margin-top: 10px;
            background-color: #FFF;
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
                        font: normal 16px verdana, sans-serif;
        }

        div.refsect1 th {
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
            font: bold 16px verdana, sans-serif;
        }

        div.refsect1 td {
            background-color: #FFF;
            padding: 5px;
            vertical-align: text-top;
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
            font: normal 16px verdana, sans-serif;
        }

                  div.refsect1 p{
            font: normal 16px verdana, sans-serif;
            margin-top: 8px;
            margin-bottom: 8px;
            padding-top: 0;
            padding-bottom: 0;
        }


        /* EXAMPLE: These styles apply only to the Example section */
        div.refsect2 {
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 table {
            margin-top: 0;
            background-color: #e6e6e6;
            width: 100%;
            border: 0 solid #000;
            padding: 2px;
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 td {
            background-color: #e6e6e6;
            font: normal 16px courier new, monospace !important;
                        white-space:pre;
        }

        /* COPYRIGHT: This style formats the text of the copyright statement at the bottom of the page */
        div.refsect3 {
            font: normal 11px verdana, sans-serif;
            margin-top: 50px;
            margin-bottom: 20px;
            padding-top: 0;
            padding-bottom: 0;
        }

</style>
    <title>clCreateContextFromType</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
    <meta name="keywords" content="clCreateContextFromType" />
  </head>
  <body>
    <div class="refentry">
      <a id="id-1"></a>
      <div class="titlepage"></div>
      <div xmlns="" class="refnamediv">
        <a xmlns="http://www.w3.org/1999/xhtml" id="clCreateContextFromType"></a>
        <h1>
            clCreateContextFromType
        </h1>
        <p>
            Create an OpenCL context from a device type that identifies the specific device(s) to use.
        </p>
      </div>
      <div class="refsynopsisdiv">
        <h2></h2>
        <div class="funcsynopsis">
          <table xmlns="" border="0" summary="Function synopsis" cellspacing="0" cellpadding="0">
            <tr valign="bottom">
              <td>
                <code xmlns="http://www.w3.org/1999/xhtml" class="funcdef">

                    <a class="link" href="abstractDataTypes.html" target="pagedisplay">cl_context</a>

                    <strong class="fsfunc">
                        clCreateContextFromType
                    </strong>
                (</code>
                <td>const <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="enums.html#cl_context_properties" target="pagedisplay">cl_context_properties</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*properties</var>, </td>
              </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="enums.html#cl_device_type" target="pagedisplay">cl_device_type</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">device_type</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">void (</a> CL_CALLBACK  <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*pfn_notify)</var>
                        <code xmlns="http://www.w3.org/1999/xhtml">(</code><div xmlns="http://www.w3.org/1999/xhtml" class="literallayout"><p>const <a class="link" href="scalarDataTypes.html" target="pagedisplay">char</a> *errinfo,<br />
                        const <a class="link" href="scalarDataTypes.html" target="pagedisplay">void</a> *private_info, <a class="link" href="otherDataTypes.html" target="_top">size_t</a> cb,<br />
                        <a class="link" href="scalarDataTypes.html" target="pagedisplay">void</a> *user_data</p></div><code xmlns="http://www.w3.org/1999/xhtml">)</code>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">void</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*user_data</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">cl_int</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*errcode_ret</var><code>)</code></td>
            </tr>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="parameters"></a>
        <h2>Parameters</h2>
        <div class="variablelist">
          <dl class="variablelist">
            <dt>
              <span class="term">properties</span>
            </dt>
            <dd>
              <p>
                  Specifies a list of context property names and their corresponding values.
                  Each property name is immediately followed by the corresponding desired
                  value.  The list of supported properties is described in the table
                  below. <code class="varname">properties</code> can also be NULL in which case the
                  platform that is selected is implementation-defined.
                </p>
              <p>
                  If the
                  <a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a>
                  extension is supported, <code class="varname">properties</code>
                  points to an attribute list whose format and valid contents
                  are identical to the <code class="varname">properties</code> argument of
                  <a class="citerefentry" href="clCreateContext.html"><span class="citerefentry"><span class="refentrytitle">clCreateContext</span></span></a>.
                </p>
              <p>
                  If the
                  <a class="citerefentry" href="cl_khr_dx9_media_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_dx9_media_sharing</span></span></a>
                  extension is supported, <code class="varname">properties</code>
                  points to an attribute list whose format and valid contents
                  are identical to the <code class="varname">properties</code> argument of
                  <a class="citerefentry" href="clCreateContext.html"><span class="citerefentry"><span class="refentrytitle">clCreateContext</span></span></a>.
                </p>
              <p>
                  If the
                  <a class="citerefentry" href="cl_khr_d3d10_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d10_sharing</span></span></a>
                  extension is supported, <code class="varname">properties</code>
                    specifies a list of context property names and their 
                    corresponding values. Each 
                    property is followed immediately by the corresponding 
                    desired value. The list is terminated with 
                    zero. If a property is not specified in 
                    <code class="varname">properties</code>, then its default 
                    value (listed in table 4.5) is used 
                    (it is said to be specified implicitly). If 
                    <code class="varname">properties</code> is NULL or 
                    empty (points to a list whose first 
                    value is zero), all attributes take on 
                    their default values."
                </p>
              <p>
                  If the
                  <a class="citerefentry" href="cl_khr_d3d11_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d11_sharing</span></span></a>
                  extension is supported, <code class="varname">properties</code>
                    specifies a list of context property names and 
                    their corresponding values. Each 
                    property is followed immediately by the 
                    corresponding desired value. The list is terminated with 
                    zero. If a property is not specified in 
                    <code class="varname">properties</code>, then its 
                    default value (listed in table 4.5) is used 
                    (it is said to be specified implicitly). 
                    If <code class="varname">properties</code> is NULL 
                    or empty (points to a list whose first 
                    value is zero), all attributes take 
                    on their default values."
                </p>
              <p>List of supported <code class="varname">properties</code> (Table 4.5)</p>
              <div class="informaltable">
                <table border="1">
                  <colgroup>
                    <col align="left" class="col1" />
                    <col align="left" class="col2" />
                    <col align="left" class="col3" />
                  </colgroup>
                  <thead>
                    <tr>
                      <th align="left">cl_context_properties enum</th>
                      <th align="left">Property value</th>
                      <th align="left">Description</th>
                    </tr>
                  </thead>
                  <tbody>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_CONTEXT_PLATFORM</code>
                      </td>
                      <td align="left">cl_platform_id</td>
                      <td align="left">Specifies the platform to use.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_CONTEXT_INTEROP_USER_SYNC</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">Specifies whether the user is responsible for synchronization
                between OpenCL and other APIs. Please refer to the specific sections
                in the OpenCL 2.0 extension specification that describe sharing with
                other APIs for restrictions on using this flag. If
                <code class="constant">CL_CONTEXT_INTEROP_USER_SYNC</code> is not specified, a
                default of <code class="constant">CL_FALSE</code> is assumed.
                OpenCL / OpenGL sharing does not support the 
                <code class="constant">CL_CONTEXT_INTEROP_USER_SYNC</code>
                property defined in table 4.5. Specifying this 
                property when creating a context with OpenCL / 
                OpenGL sharing will return an appropriate error.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_CONTEXT_D3D10_DEVICE_KHR</code>
                      </td>
                      <td align="left"><span class="type">ID3D10Device</span> *</td>
                      <td align="left">
                  Specifies the <span class="type">ID3D10Device</span> * to use for Direct3D 10
                  interoperability.  The default value is NULL (applies if the extension
                  <a class="citerefentry" href="cl_khr_d3d10_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d10_sharing</span></span></a>
                  is supported)
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_CONTEXT_ADAPTER_D3D9_KHR</code>
                      </td>
                      <td align="left"><span class="type">IDirect3DDevice9</span> *</td>
                      <td align="left">
                  Specifies an <span class="type">IDirect3DDevice9</span>
                  to use for D3D9 interop (applies if the
                  <a class="citerefentry" href="cl_khr_dx9_media_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_dx9_media_sharing</span></span></a>
                  extension is supported)
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_CONTEXT_ADAPTER_D3D9EX_KHR</code>
                      </td>
                      <td align="left"><span class="type">IDirect3DDeviceEx</span> *</td>
                      <td align="left">
                  Specifies an <span class="type">IDirect3DDevice9Ex</span>
                  to use for D3D9 interop (applies if the
                  <a class="citerefentry" href="cl_khr_dx9_media_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_dx9_media_sharing</span></span></a>
                  extension is supported)
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_CONTEXT_ADAPTER_DXVA_KHR</code>
                      </td>
                      <td align="left"><span class="type">IDXVAHD_Device</span> *</td>
                      <td align="left">
                  Specifies an <span class="type">IDXVAHD_Device</span>
                  to use for DXVA interop (applies if the
                  <a class="citerefentry" href="cl_khr_dx9_media_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_dx9_media_sharing</span></span></a>
                  extension is supported)
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_GL_CONTEXT_KHR</code>
                      </td>
                      <td align="left">0, OpenGL context handle</td>
                      <td align="left">
                  OpenGL context to associated
                  the OpenCL context with (available if the
                  <a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a>
                  extension is enabled)
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_CGL_SHAREGROUP_KHR</code>
                      </td>
                      <td align="left">0, CGL share group handle</td>
                      <td align="left">
                  CGL share group to associate
                  the OpenCL context with (available if the
                  <a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a>
                  extension is enabled)
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_EGL_DISPLAY_KHR</code>
                      </td>
                      <td align="left"> <code class="constant">EGL_NO_DISPLAY</code>, <span class="type">EGLDisplay</span> handle </td>
                      <td align="left">
                  EGLDisplay an OpenGL context was created with respect to (available if the
                  <a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a>
                  extension is enabled)
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_GLX_DISPLAY_KHR</code>
                      </td>
                      <td align="left">None, X handle</td>
                      <td align="left">
                  X Display an OpenGL context was
                  created with respect to (available if the
                  <a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a>
                  extension is enabled)
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_WGL_HDC_KHR</code>
                      </td>
                      <td align="left">0, HDC handle</td>
                      <td align="left">
                  HDC an OpenGL context was created with respect to (available if the
                  <a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a>
                  extension is enabled)
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_CONTEXT_D3D11_DEVICE_KHR</code>
                      </td>
                      <td align="left"><span class="type">ID3D11Device</span> *</td>
                      <td align="left">
                  Specifies the <span class="type">ID3D11Device</span>  * to use for Direct3D
                  11 interoperability. The default value is NULL. (Applies if the
                  <a class="citerefentry" href="cl_khr_d3d11_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d11_sharing</span></span></a>
                  extension is supported.)
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_CONTEXT_MEMORY_INITIALIZE_KHR</code>
                      </td>
                      <td align="left">
                        <span class="type">cl_context_memory-
_initialize_khr</span>
                      </td>
                      <td align="left">
                    <p>
                        Describes which memory types for the 
                        context must be initialized. This is a 
                        bit-field, where the following values are 
                        currently supported:
                    </p>

                    <p>
                        <code class="constant">CL_CONTEXT_MEMORY_INITIALIZE_LOCAL_KHR</code> - Initialize local memory 
                        to zeros.
                    </p>

                    <p>
                        <code class="constant">CL_CONTEXT_MEMORY_INITIALIZE_PRIVATE_KHR</code> - Initialize private 
                        memory to zeros.
                    </p>

                    <p>
                      (applies if the
                      <a class="citerefentry" href="cl_khr_initialize_memory.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_initialize_memory</span></span></a>
                      extension is supported)
                    </p>

                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_CONTEXT_TERMINATE_KHR</code>
                      </td>
                      <td align="left">
                        <span class="type">cl_bool</span>
                      </td>
                      <td align="left">
                    Specifies whether the context can be 
                    terminated. The default value is 
                    <code class="constant">CL_FALSE</code>.
                    (applies if the
                  <a class="citerefentry" href="cl_khr_terminate_context.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_terminate_context</span></span></a>
                  extension is supported)
                </td>
                    </tr>
                  </tbody>
                </table>
              </div>
            </dd>
            <dt>
              <span class="term">device_type</span>
            </dt>
            <dd>
              <p>
                    A bit-field that identifies the type of device and is described in the table below.
                </p>
              <div class="informaltable">
                <table border="1">
                  <colgroup>
                    <col align="left" class="col1" />
                    <col align="left" class="col2" />
                  </colgroup>
                  <thead>
                    <tr>
                      <th align="left">cl_device_type</th>
                      <th align="left">Description</th>
                    </tr>
                  </thead>
                  <tbody>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_TYPE_CPU</code>
                      </td>
                      <td align="left">
                  An OpenCL device that is the host processor. The host processor
                  runs the OpenCL implementations and is a single or multi-core CPU.
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_TYPE_GPU</code>
                      </td>
                      <td align="left">
                  An OpenCL device that is a GPU. By this we mean that the device
                  can also be used to accelerate a 3D API such as OpenGL or DirectX.
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_TYPE_ACCELERATOR</code>
                      </td>
                      <td align="left">
                  Dedicated OpenCL accelerators (for example the IBM CELL Blade). These
                  devices communicate with the host processor using a peripheral
                  interconnect such as PCIe.
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>
                      </td>
                      <td align="left">
                  Dedicated accelerators that do not support programs written in
                  OpenCL C.
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_TYPE_DEFAULT</code>
                      </td>
                      <td align="left">
                  The default OpenCL device in the system. The default device cannot
                  be a <code class="constant">CL_DEVICE_TYPE_CUSTOM</code> device.
                </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_TYPE_ALL</code>
                      </td>
                      <td align="left">
                  All OpenCL devices available in the system except
                  <code class="constant">CL_DEVICE_TYPE_CUSTOM</code> devices.
                </td>
                    </tr>
                  </tbody>
                </table>
              </div>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">pfn_notify</code>
              </span>
            </dt>
            <dd>
              <p>
                  A callback function that can be registered by the application. This callback function 
                  will be used by the OpenCL implementation to report information on errors during context 
                  creation as well as errors that occur at runtime in this context. 
                  This callback function may be called
                  asynchronously by the OpenCL implementation.  It is the application's
                  responsibility to ensure that the callback function is thread-safe.
                  If <code class="varname">pfn_notify</code> is NULL, no callback function is registered.
                  The parameters to this callback function are:
                </p>
              <p><code class="varname">errinfo</code> is a pointer to an error string.</p>
              <p>
                  <code class="varname">private_info</code> and <code class="varname">cb</code> represent a pointer
                  to binary data that is returned by the OpenCL implementation that can be used
                  to log additional information helpful in debugging the error.
                </p>
              <p><code class="varname">user_data</code> is a pointer to user supplied data.</p>
              <p>
                  There are a number of cases where error notifications need to be delivered
                  due to an error that occurs outside a context. Such notifications may not
                  be delivered through the <code class="varname">pfn_notify</code> callback. Where these
                  notifications go is implementation-defined.
                </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">user_data</code>
              </span>
            </dt>
            <dd>
              <p>
                  Passed as the <code class="varname">user_data</code> argument when
                  <code class="varname">pfn_notify</code> is called. <code class="varname">user_data</code> can be NULL.
                </p>
            </dd>
            <dt>
              <span class="term">
                    <code class="varname"> 
                        errcode_ret
                    </code>
                </span>
            </dt>
            <dd>
              <p> 
                       Return an appropriate error code. If <code class="varname">errcode_ret</code> 
                       is NULL, no error code is returned.
                    </p>
            </dd>
          </dl>
        </div>
      </div>
      <div class="refsect1">
        <a id="description"></a>
        <h2>Description</h2>
        <p>
          Only devices that are returned by
          <a class="citerefentry" href="clGetDeviceIDs.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceIDs</span></span></a> for
          <code class="varname">device_type</code> are used to create the context. The context does not
          reference any sub-devices that may have been created from these devices.
        </p>
      </div>
      <div class="refsect1">
        <a id="notes"></a>
        <h2>Notes</h2>
        <p>
          <code class="function">clCreateContextFromType</code> may return all or a subset of the actual
          physical devices present in the platform and that match <code class="varname">device_type</code>.
        </p>
        <p>
          <code class="function">clCreateContextFromType</code> and
          <a class="citerefentry" href="clCreateContext.html"><span class="citerefentry"><span class="refentrytitle">clCreateContext</span></span></a> perform an
          implicit retain. This is very helpful for 3rd party libraries, which typically get a
          context passed to them by the application. However, it is possible that the application
          may delete the context without informing the library. Allowing functions to attach to
          (i.e. retain) and release a context solves the problem of a context being used by a
          library no longer being valid.
        </p>
      </div>
      <div class="refsect1">
        <a id="errors"></a>
        <h2>Errors</h2>
        <p>
          <code class="function">clCreateContextFromType</code> returns a valid non-zero context and
          <code class="varname">errcode_ret</code> is set to <span class="errorname">CL_SUCCESS</span> if the
          context is created successfully. Otherwise, it returns a NULL value with the following
          error values returned in <code class="varname">errcode_ret</code>:
        </p>
        <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: disc; ">
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_PLATFORM</span> if <code class="varname">properties</code>
              is NULL and no platform could be selected or if platform value specified
              in <code class="varname">properties</code> is not a valid platform.  If the
              <a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a>
              extension is supported, this error is replaced (or not) by
              <code class="constant">CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR</code> and possibly
              <code class="constant">CL_INVALID_OPERATION</code> (see below and section 9.5.4 of the
              spec for clarification). </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_PROPERTY</span> if context property name in
              <code class="varname">properties</code> is not a supported property name, or if the value
              specified for a supported property name is not valid, or if the same property
              name is specified more than once.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_VALUE</span> if <code class="varname">pfn_notify</code> is NULL
              but <code class="varname">user_data</code> is not NULL.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_DEVICE_TYPE</span> if <code class="varname">device_type</code>
              is not a valid value.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_DEVICE_NOT_AVAILABLE</span> if no devices that
              match <code class="varname">device_type</code> and property values specified in
              <code class="varname">properties</code> are currently available.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_DEVICE_NOT_FOUND</span> if no devices that match
              <code class="varname">device_type</code> and property values specified in
              <code class="varname">properties</code> were found.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_OUT_OF_RESOURCES</span> if there is a failure to allocate
              resources required by the OpenCL implementation on the device.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_OUT_OF_HOST_MEMORY</span> if there is a failure to allocate
              resources required by the OpenCL implementation on the host.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_D3D10_DEVICE_KHR</span> if the Direct3D
              10 device specified for interoperability is not compatible with
              the devices against which the context is to be created (if the
              <a class="citerefentry" href="cl_khr_d3d10_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d10_sharing</span></span></a>
              extension is enabled).
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR</span> when an invalid OpenGL
              context or share group object handle is specified in <code class="varname">properties</code>
              if the <a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a>
              extension is enabled.
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR</span>: If
              no OpenGL or OpenGL ES context or share group is specified in the
              attribute list, then memory objects may not be shared, and calling
              any of the commands in section 9.7 will result in this error (if the
              <a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a>
              extension is enabled).
            </li>
            <li class="listitem" style="list-style-type: disc"><p>
                  <span class="errorname">CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR</span> if the
                  <a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a>
                  extension is enabled and if a context was specified by any of the following
                  means:
                </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc">
                      Context specified for an EGL-based OpenGL ES or OpenGL implementation
                      by setting the attributes <code class="constant">CL_GL_CONTEXT_KHR</code> and
                      <code class="constant">CL_EGL_DISPLAY_KHR</code>.
                    </li><li class="listitem" style="list-style-type: disc">
                      Context was specified for a GLX-based OpenGL implementation by
                      setting the attributes <code class="constant">CL_GL_CONTEXT_KHR</code> and
                      <code class="constant">CL_GLX_DISPLAY_KHR</code>.
                    </li><li class="listitem" style="list-style-type: disc">
                      Context was specified for a WGL-based OpenGL implementation by
                      setting the attributes <code class="constant">CL_GL_CONTEXT_KHR</code> and
                      <code class="constant">CL_WGL_HDC_KHR</code>.
                    </li></ul></div>

            and any of the following conditions hold:

                <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc">
                      The specified display and context attributes do not identify a valid
                      OpenGL or OpenGL ES context.
                    </li><li class="listitem" style="list-style-type: disc">
                       The specified context does not support buffer and renderbuffer objects.
                    </li><li class="listitem" style="list-style-type: disc">
                      The specified context is not compatible with the OpenCL context being
                      created (for example, it exists in a physically distinct address space,
                      such as another hardware device, or does not support sharing data with
                      OpenCL due to implementation restrictions).
                    </li></ul></div></li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR</span>
              if a share group was specified for a CGL-based OpenGL implementation by
              setting the attribute <code class="constant">CL_CGL_SHAREGROUP_KHR</code>, and the
              specified share group does not identify a valid CGL share group object (only if
              the <a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a>
              extension is enabled).
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_DX9_MEDIA_ADAPTER_KHR</span> if the
              media adapter specified for interoperability is not compatible with
              the devices against which the context is to be created (only if the
              <a class="citerefentry" href="cl_khr_dx9_media_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_dx9_media_sharing</span></span></a>
              extension is supported).
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_ADAPTER_KHR</span> if
              any of the values of the properties <code class="constant">CL_CONTEXT_ADAPTER_D3D9_KHR</code>,
              <code class="constant">CL_CONTEXT_ADAPTER_D3D9EX_KHR</code> or
              <code class="constant">CL_CONTEXT_ADAPTER_DXVA_KHR</code> is non-NULL and
              does not specify a valid media adapter with which the cl_device_ids
              against which this context  is to be created may interoperate. (only if the
              <a class="citerefentry" href="cl_khr_dx9_media_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_dx9_media_sharing</span></span></a>
              extension is supported).
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_OPERATION</span> if interoperability is
              specified by setting <code class="constant">CL_CONTEXT_ADAPTER_D3D9_KHR</code>,
              <code class="constant">CL_CONTEXT_ADAPTER_D3D9EX_KHR</code> or
              <code class="constant">CL_CONTEXT_ADAPTER_DXVA_KHR</code> to a non-NULL value, and
              interoperability with another graphics API is also specified. (only if the
              <a class="citerefentry" href="cl_khr_dx9_media_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_dx9_media_sharing</span></span></a>
              extension is supported).
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_OPERATION</span> if Direct3D 10 interoperability is
              specified by setting <code class="constant">CL_INVALID_D3D10_DEVICE_KHR</code> to a non-NULL
              value, and interoperability with another graphics API is also specified (if the
              <a class="citerefentry" href="cl_khr_d3d10_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d10_sharing</span></span></a>
              extension is enabled).
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_D3D11_DEVICE_KHR</span> if the Direct3D
              11 device specified for interoperability is not compatible with
              the devices against which the context is to be created (only if the
              <a class="citerefentry" href="cl_khr_d3d11_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d11_sharing</span></span></a>
              extension is supported).
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_OPERATION</span>
              if Direct3D 11 interoperability is specified by setting
              <code class="constant">CL_INVALID_D3D11_DEVICE_KHR</code> to a non-NULL value, and
              interoperability with another graphics API is also specified. (only if the
              <a class="citerefentry" href="cl_khr_d3d11_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d11_sharing</span></span></a>
              extension is supported).
            </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_D3D11_DEVICE_KHR</span> if the value of the property
              <code class="constant">CL_CONTEXT_D3D11_DEVICE_KHR</code> is non-NULL and does not specify
              a valid Direct3D 11 device with which the <code class="varname">cl_device_ids</code>
              against which this context  is to be created may interoperate. (only if the
              <a class="citerefentry" href="cl_khr_d3d11_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d11_sharing</span></span></a>
              extension is supported).
            </li>
          </ul>
        </div>
      </div>
      <div class="refsect1">
        <a id="specification"></a>
        <h2>Specification</h2>
        <p>
            <img src="pdficon_small1.gif" />

            <a href="https://www.khronos.org/registry/cl/specs/opencl-2.1.pdf#page=92" target="OpenCL Spec">OpenCL Specification</a>
        </p>
      </div>
      <div class="refsect1">
        <a id="seealso"></a>
        <h2>Also see</h2>
        <p>
            <a class="citerefentry" href="clCreateContext.html"><span class="citerefentry"><span class="refentrytitle">clCreateContext</span></span></a>,
            <a class="citerefentry" href="clGetContextInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetContextInfo</span></span></a>,
            <a class="citerefentry" href="clReleaseContext.html"><span class="citerefentry"><span class="refentrytitle">clReleaseContext</span></span></a>,
            <a class="citerefentry" href="clRetainContext.html"><span class="citerefentry"><span class="refentrytitle">clRetainContext</span></span></a>,
            <a class="citerefentry" href="clGetContextInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetContextInfo</span></span></a>,
            <a class="citerefentry" href="classDiagram.html"><span class="citerefentry"><span class="refentrytitle">Cardinality Diagram</span></span></a>
        </p>
      </div>
      <div xmlns="" class="refsect3" lang="en" xml:lang="en"><a xmlns="http://www.w3.org/1999/xhtml" id="Copyright"></a><h4 xmlns="http://www.w3.org/1999/xhtml"></h4><img xmlns="http://www.w3.org/1999/xhtml" src="KhronosLogo.jpg" /><p xmlns="http://www.w3.org/1999/xhtml"></p>Copyright © 2007-2015 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.
</div>
    </div>
  </body>
</html>
