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

<refentry>
    <refentryinfo>
        <keywordset>
            <keyword>clCreateContextFromType</keyword>
        </keywordset>
    </refentryinfo>

    <refmeta>
        <refentrytitle>
            clCreateContextFromType
        </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="clCreateContextFromType">
        <refname>
            clCreateContextFromType
        </refname>

        <refpurpose>
            Create an OpenCL context from a device type that identifies the specific device(s) to use.
        </refpurpose>
    </refnamediv>

    <refsynopsisdiv xmlns:xlink="http://www.w3.org/1999/xlink"><title></title>
        <funcsynopsis>
            <funcprototype>
                <funcdef>

                    <link xlink:href="abstractDataTypes.html">cl_context</link>

                    <function>
                        clCreateContextFromType
                    </function>
                </funcdef>

                <paramdef>const <type><link xlink:href="enums.html#cl_context_properties">cl_context_properties</link></type>
                    <parameter>*properties</parameter></paramdef>
                <paramdef><link xlink:href="enums.html#cl_device_type">cl_device_type</link>
                    <parameter>device_type</parameter></paramdef>
                <paramdef><link xlink:href="scalarDataTypes.html">void (</link> CL_CALLBACK <parameter>*pfn_notify)</parameter>
                        <funcparams><literallayout>const <link xlink:href="scalarDataTypes.html">char</link> *errinfo,
                        const <link xlink:href="scalarDataTypes.html">void</link> *private_info, <link xlink:href="otherDataTypes.html">size_t</link> cb,
                        <link xlink:href="scalarDataTypes.html">void</link> *user_data</literallayout></funcparams></paramdef>
                <paramdef><link xlink:href="scalarDataTypes.html">void</link>
                    <parameter>*user_data</parameter></paramdef>
                <paramdef><link xlink:href="scalarDataTypes.html">cl_int</link>
                    <parameter>*errcode_ret</parameter></paramdef>

            </funcprototype>
        </funcsynopsis>
    </refsynopsisdiv>

<!-- ================================ PARAMETERS -->

    <refsect1 xmlns:xlink="http://www.w3.org/1999/xlink" id="parameters">
        <title>Parameters</title>
        <variablelist>

<!-- ================================ PARAMETER TABLE (OPTIONAL) -->

        <varlistentry>
            <term>properties</term>
            <listitem>

                <para>
                  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. <varname>properties</varname> can also be NULL in which case the
                  platform that is selected is implementation-defined.
                </para>

                <para>
                  If the
                  <citerefentry><refentrytitle>cl_khr_gl_sharing</refentrytitle></citerefentry>
                  extension is supported, <varname>properties</varname>
                  points to an attribute list whose format and valid contents
                  are identical to the <varname>properties</varname> argument of
                  <citerefentry><refentrytitle>clCreateContext</refentrytitle></citerefentry>.
                </para>

                <para>
                  If the
                  <citerefentry><refentrytitle>cl_khr_dx9_media_sharing</refentrytitle></citerefentry>
                  extension is supported, <varname>properties</varname>
                  points to an attribute list whose format and valid contents
                  are identical to the <varname>properties</varname> argument of
                  <citerefentry><refentrytitle>clCreateContext</refentrytitle></citerefentry>.
                </para>

                <para>
                  If the
                  <citerefentry><refentrytitle>cl_khr_d3d10_sharing</refentrytitle></citerefentry>
                  extension is supported, <varname>properties</varname>
                    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 
                    <varname>properties</varname>, then its default 
                    value (listed in table 4.5) is used 
                    (it is said to be specified implicitly). If 
                    <varname>properties</varname> is NULL or 
                    empty (points to a list whose first 
                    value is zero), all attributes take on 
                    their default values."
                </para>

                <para>
                  If the
                  <citerefentry><refentrytitle>cl_khr_d3d11_sharing</refentrytitle></citerefentry>
                  extension is supported, <varname>properties</varname>
                    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 
                    <varname>properties</varname>, then its 
                    default value (listed in table 4.5) is used 
                    (it is said to be specified implicitly). 
                    If <varname>properties</varname> is NULL 
                    or empty (points to a list whose first 
                    value is zero), all attributes take 
                    on their default values."
                </para>

                &cl_context_properties_Inc;

            </listitem>
        </varlistentry>

<!-- ================================ END PARAMETER TABLE  -->

<!-- ================================ PARAMETER TABLE (OPTIONAL) -->

        <varlistentry>
            <term>device_type</term>
            <listitem>
                <para>
                    A bit-field that identifies the type of device and is described in the table below.
                </para>

                &cl_device_type_Inc;

            </listitem>
        </varlistentry>

<!-- ================================ END PARAMETER TABLE  -->

        <varlistentry>
            <term><varname>pfn_notify</varname></term>
            <!-- copy the description from clCreateContext -->
            <listitem>
                <para>
                  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 <varname>pfn_notify</varname> is NULL, no callback function is registered.
                  The parameters to this callback function are:
                </para>

                <para><varname>errinfo</varname> is a pointer to an error string.</para>

                <para>
                  <varname>private_info</varname> and <varname>cb</varname> 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.
                </para>

                <para><varname>user_data</varname> is a pointer to user supplied data.</para>

                <para>
                  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 <varname>pfn_notify</varname> callback. Where these
                  notifications go is implementation-defined.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>user_data</varname></term>
            <listitem>
                <para>
                  Passed as the <varname>user_data</varname> argument when
                  <varname>pfn_notify</varname> is called. <varname>user_data</varname> can be NULL.
                </para>
            </listitem>
        </varlistentry>

            <varlistentry>
                <term>
                    <varname> <!-- parameter name -->
                        errcode_ret
                    </varname>
                </term>

                <listitem>
                    <para> <!-- parameter description -->
                       Return an appropriate error code. If <varname>errcode_ret</varname> 
                       is NULL, no error code is returned.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </refsect1>

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

    <refsect1 id="description"><title>Description</title>
        <para>
          Only devices that are returned by
          <citerefentry><refentrytitle>clGetDeviceIDs</refentrytitle></citerefentry> for
          <varname>device_type</varname> are used to create the context. The context does not
          reference any sub-devices that may have been created from these devices.
        </para>
    </refsect1>

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

    <refsect1 id="notes"><title>Notes</title>
        <para>
          <function>clCreateContextFromType</function> may return all or a subset of the actual
          physical devices present in the platform and that match <varname>device_type</varname>.
        </para>

        <para>
          <function>clCreateContextFromType</function> and
          <citerefentry><refentrytitle>clCreateContext</refentrytitle></citerefentry> 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.
        </para>
    </refsect1>

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

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

        <itemizedlist mark="disc">
            <listitem>
              <errorname>CL_INVALID_PLATFORM</errorname> if <varname>properties</varname>
              is NULL and no platform could be selected or if platform value specified
              in <varname>properties</varname> is not a valid platform.  If the
              <citerefentry><refentrytitle>cl_khr_gl_sharing</refentrytitle></citerefentry>
              extension is supported, this error is replaced (or not) by
              <constant>CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR</constant> and possibly
              <constant>CL_INVALID_OPERATION</constant> (see below and section 9.5.4 of the
              spec for clarification). <!-- ext. spec p. 40 says: "Replace the first error
              in the list for clCreateContextFromType with the same two new errors described
              above for clCreateContext." However, pp. ~67 and ~84 say the same thing except to "add"
              those two new errors, not "replace." It's not clear what those "two new errors"
              for clCreateContext are. The first "new" error value mentioned for clCreateContext
              is CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR on p. ~39 (mentioned again several times
              on pp. ~40-42 for different error conditions (are those different "errors"? Do they
              all apply to clCreateContextFromType?) The second "new" error value is mentioned
              but not named on p. ~41 as "Specifying this property when creating a context with
              OpenCL / OpenGL sharing will return an appropriate error." The third new error
              mentioned for clCreateContext is CL_INVALID_OPERATION on p. ~42. The description
              we've supplied above is a guess at interpreting this convoluted indirection. -->
            </listitem>

            <listitem>
              <errorname>CL_INVALID_PROPERTY</errorname> if context property name in
              <varname>properties</varname> 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.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_VALUE</errorname> if <varname>pfn_notify</varname> is NULL
              but <varname>user_data</varname> is not NULL.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_DEVICE_TYPE</errorname> if <varname>device_type</varname>
              is not a valid value.
            </listitem>

            <listitem>
              <errorname>CL_DEVICE_NOT_AVAILABLE</errorname> if no devices that
              match <varname>device_type</varname> and property values specified in
              <varname>properties</varname> are currently available.
            </listitem>

            <listitem>
              <errorname>CL_DEVICE_NOT_FOUND</errorname> if no devices that match
              <varname>device_type</varname> and property values specified in
              <varname>properties</varname> were found.
            </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>

            <listitem>
              <errorname>CL_INVALID_D3D10_DEVICE_KHR</errorname> if the Direct3D
              10 device specified for interoperability is not compatible with
              the devices against which the context is to be created (if the
              <citerefentry><refentrytitle>cl_khr_d3d10_sharing</refentrytitle></citerefentry>
              extension is enabled).
            </listitem>

            <listitem>
              <errorname>CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR</errorname> when an invalid OpenGL
              context or share group object handle is specified in <varname>properties</varname>
              if the <citerefentry><refentrytitle>cl_khr_gl_sharing</refentrytitle></citerefentry>
              extension is enabled.
            </listitem>

            <listitem>
              <errorname>CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR</errorname>: 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
              <citerefentry><refentrytitle>cl_khr_gl_sharing</refentrytitle></citerefentry>
              extension is enabled).
            </listitem>

            <listitem>
                <para>
                  <errorname>CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR</errorname> if the
                  <citerefentry><refentrytitle>cl_khr_gl_sharing</refentrytitle></citerefentry>
                  extension is enabled and if a context was specified by any of the following
                  means:
                </para>

                <itemizedlist mark="disc">
                    <listitem>
                      Context specified for an EGL-based OpenGL ES or OpenGL implementation
                      by setting the attributes <constant>CL_GL_CONTEXT_KHR</constant> and
                      <constant>CL_EGL_DISPLAY_KHR</constant>.
                    </listitem>

                    <listitem>
                      Context was specified for a GLX-based OpenGL implementation by
                      setting the attributes <constant>CL_GL_CONTEXT_KHR</constant> and
                      <constant>CL_GLX_DISPLAY_KHR</constant>.
                    </listitem>

                    <listitem>
                      Context was specified for a WGL-based OpenGL implementation by
                      setting the attributes <constant>CL_GL_CONTEXT_KHR</constant> and
                      <constant>CL_WGL_HDC_KHR</constant>.
                    </listitem>
                </itemizedlist>

            and any of the following conditions hold:

                <itemizedlist mark="disc">
                    <listitem>
                      The specified display and context attributes do not identify a valid
                      OpenGL or OpenGL ES context.
                    </listitem>

                    <listitem>
                       The specified context does not support buffer and renderbuffer objects.
                    </listitem>

                    <listitem>
                      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).
                    </listitem>
                </itemizedlist>
            </listitem>

            <listitem>
              <errorname>CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR</errorname>
              if a share group was specified for a CGL-based OpenGL implementation by
              setting the attribute <constant>CL_CGL_SHAREGROUP_KHR</constant>, and the
              specified share group does not identify a valid CGL share group object (only if
              the <citerefentry><refentrytitle>cl_khr_gl_sharing</refentrytitle></citerefentry>
              extension is enabled).
            </listitem>

            <listitem>
              <errorname>CL_INVALID_DX9_MEDIA_ADAPTER_KHR</errorname> if the
              media adapter specified for interoperability is not compatible with
              the devices against which the context is to be created (only if the
              <citerefentry><refentrytitle>cl_khr_dx9_media_sharing</refentrytitle></citerefentry>
              extension is supported).
            </listitem>

            <listitem>
              <errorname>CL_INVALID_ADAPTER_KHR</errorname> if
              any of the values of the properties <constant>CL_CONTEXT_ADAPTER_D3D9_KHR</constant>,
              <constant>CL_CONTEXT_ADAPTER_D3D9EX_KHR</constant> or
              <constant>CL_CONTEXT_ADAPTER_DXVA_KHR</constant> 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
              <citerefentry><refentrytitle>cl_khr_dx9_media_sharing</refentrytitle></citerefentry>
              extension is supported).
            </listitem>

            <listitem>
              <errorname>CL_INVALID_OPERATION</errorname> if interoperability is
              specified by setting <constant>CL_CONTEXT_ADAPTER_D3D9_KHR</constant>,
              <constant>CL_CONTEXT_ADAPTER_D3D9EX_KHR</constant> or
              <constant>CL_CONTEXT_ADAPTER_DXVA_KHR</constant> to a non-NULL value, and
              interoperability with another graphics API is also specified. (only if the
              <citerefentry><refentrytitle>cl_khr_dx9_media_sharing</refentrytitle></citerefentry>
              extension is supported).
            </listitem>

            <listitem>
              <errorname>CL_INVALID_OPERATION</errorname> if Direct3D 10 interoperability is
              specified by setting <constant>CL_INVALID_D3D10_DEVICE_KHR</constant> to a non-NULL
              value, and interoperability with another graphics API is also specified (if the
              <citerefentry><refentrytitle>cl_khr_d3d10_sharing</refentrytitle></citerefentry>
              extension is enabled).
            </listitem>

            <listitem>
              <errorname>CL_INVALID_D3D11_DEVICE_KHR</errorname> 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
              <citerefentry><refentrytitle>cl_khr_d3d11_sharing</refentrytitle></citerefentry>
              extension is supported).
            </listitem>

            <listitem>
              <errorname>CL_INVALID_OPERATION</errorname>
              if Direct3D 11 interoperability is specified by setting
              <constant>CL_INVALID_D3D11_DEVICE_KHR</constant> to a non-NULL value, and
              interoperability with another graphics API is also specified. (only if the
              <citerefentry><refentrytitle>cl_khr_d3d11_sharing</refentrytitle></citerefentry>
              extension is supported).
            </listitem>

            <listitem>
              <errorname>CL_INVALID_D3D11_DEVICE_KHR</errorname> if the value of the property
              <constant>CL_CONTEXT_D3D11_DEVICE_KHR</constant> is non-NULL and does not specify
              a valid Direct3D 11 device with which the <varname>cl_device_ids</varname>
              against which this context  is to be created may interoperate. (only if the
              <citerefentry><refentrytitle>cl_khr_d3d11_sharing</refentrytitle></citerefentry>
              extension is supported).
            </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="clCreateContextFromType">OpenCL Specification</olink>
        </para>
    </refsect1>

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

    <refsect1 id="seealso"><title>Also see</title>
        <para>
            <citerefentry><refentrytitle>clCreateContext</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clGetContextInfo</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clReleaseContext</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clRetainContext</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clGetContextInfo</refentrytitle></citerefentry>,
            <citerefentry href="classDiagram"><refentrytitle>Cardinality Diagram</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-2015, API rev. 19; Ext rev. 10 -->
</refentry>

