<?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">

<refentry>
    <refentryinfo>
        <keywordset>
            <keyword>cl_khr_icd</keyword>
        </keywordset>
    </refentryinfo>

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

        <refpurpose>
            Extension through which the Khronos
            OpenCL installable client driver loader (ICD Loader) 
            may expose multiple separate vendor 
            installable client drivers (Vendor ICDs) for OpenCL.
        </refpurpose>
    </refnamediv>

    <!-- ALTERNATIVE SYNTAX SYNOPSIS (NON-FUNCTION) -->

    <refsect2 id="synopsis">
        <title>
        </title>

        <informaltable frame="none">
            <tgroup cols="1" align="left" colsep="0" rowsep="0">
                <colspec colname="col1" colnum="1" />
                <tbody>
                    <row>
                        <entry>
#pragma OPENCL EXTENSION cl_khr_icd : enable
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </informaltable>
    </refsect2>

<!-- ================================ DESCRIPTION  -->

    <refsect1 xmlns:xlink="http://www.w3.org/1999/xlink" id="description"><title>Description</title>
        <para>
            This is a platform extension which defines a simple mechanism through 
            which the Khronos OpenCL installable client driver loader (ICD Loader) 
            may expose multiple separate vendor installable client drivers (Vendor ICDs) 
            for OpenCL. An application written against the ICD Loader will be able to 
            access all <type>cl_platform_ids</type> exposed by all vendor implementations with the 
            ICD Loader acting as a demultiplexor. If this extension is supported by an 
            implementation, the string <function>cl_khr_icd</function> will be present 
            in the <constant>CL_PLATFORM_EXTENSIONS</constant> string described in
            the table of allowed values for <varname>param_name</varname> for
            <citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry>.
        </para>

        <para>
          If the <function>cl_khr_icd</function> extension is supported, then the
          <citerefentry><refentrytitle>clIcdGetPlatformIDsKHR</refentrytitle></citerefentry>
          function is enabled.
        </para>

        <para>
            The official source for the ICD loader is available at the 
            Khronos website. The complete <code>_cl_icd_dispatch</code> 
            structure is defined in the header <code>icd_dispatch.h</code> 
            which is available as a part of the source code.
        </para>

        <bridgehead>Inferring Vendors from Function Call Arguments</bridgehead>

        <para>
            At every OpenCL function call, the ICD Loader infers the vendor ICD function to call from the 
            arguments to the function. An object is said to be ICD compatible if it is of the following 
            structure:
        </para>

        <para>
<literallayout><code>     struct _cl_&lt;object&gt;
     {
         struct _cl_icd_dispatch *dispatch;
         // ... remainder of internal data
     };</code></literallayout>
        </para>

        <para>
            <code>&lt;object&gt;</code> is one of <code>platform_id</code>, 
            <code>device_id</code>, <code>context</code>, 
            <code>command_queue</code>, <code>mem</code>, 
            <code>program</code>, <code>kernel</code>, 
            <code>event</code>, or <code>sampler</code>.
        </para>

        <para>
            The structure <code>_cl_icd_dispatch</code> is a function 
            pointer dispatch table which is used to direct 
            calls to a particular vendor implementation. All objects 
            created from ICD compatible objects
            must be ICD compatible.
        </para>

        <para>
            A link to source code which defines the entries 
            in the function table structure 
            <code>_cl_icd_dispatch</code> is available in the 
            Sample Code section of the OpenCL specification. The order of 
            the functions in <code>_cl_icd_dispatch</code> is 
            determined by the ICD Loader's source. The ICD
            Loader's source's <code>_cl_icd_dispatch</code> 
            table is to be appended to only.
        </para>

        <para>
            Functions which do not have an argument from which the vendor implementation may be 
            inferred are ignored, with the exception of 
            <function>clGetExtensionFunctionAddress</function> 
            which is described below. <!-- [sic] spec rev. 19 refers to non-existent clGetExtensionFunctionAddress-->
        </para>

<bridgehead>ICD Data</bridgehead>

        <para>
            A Vendor ICD is defined by two pieces of data:
        </para>

        <itemizedlist>
           <listitem>
                The Vendor ICD library specifies a library which contains the OpenCL entry points for 
                the vendor's OpenCL implementation. The vendor ICD's library file name should include 
                the vendor name, or a vendor-specific implementation identifier.
           </listitem>

           <listitem>
                The Vendor ICD extension suffix is a short string which specifies the default suffix for 
                extensions implemented only by that vendor. See Additions to Chapter 9 for details on 
                the mechanism through which this is accomplished. The vendor suffix string is optional.
           </listitem>
        </itemizedlist>

<bridgehead>ICD Loader Vendor Enumeration on Windows</bridgehead>

        <para>
            To enumerate Vendor ICDs on Windows, the ICD 
            Loader scans the values in the registry key
            <code>HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors</code>. 
            For each value in 
            this key which has <type>DWORD</type> data set to 0, the 
            ICD Loader opens the dynamic link library 
            specified by the name of the value using 
            <type>LoadLibraryA</type>.
        </para>

        <para>
            For example, if the registry contains the following value
        </para>

        <para>
<literallayout>     [HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors]
     "c:\\vendor a\\vndra_ocl.dll"=dword:00000000</literallayout>
        </para>

        <para>
            then the ICD will open the library "<code>c:\vendor a\vndra_ocl.dll</code>".
        </para>

<bridgehead>ICD Loader Vendor Enumeration on Linux</bridgehead>

        <para>
            To enumerate vendor ICDs on Linux, the ICD 
            Loader scans the files in the path 
            <code>/etc/OpenCL/vendors</code>. For each 
            file in this path, the ICD Loader opens the 
            file as a text
            file. The expected format for the file is a 
            single line of text which specifies the Vendor ICD's 
            library. The ICD Loader will attempt to open 
            that file as a shared object using <code>dlopen()</code>. 
            Note that the library specified may be an 
            absolute path or just a file name.
        </para>

        <para>
            For example, if the following file exists 
            <code>/etc/OpenCL/vendors/VendorA.icd</code> and 
            contains the text <code>libVendorAOpenCL.so</code> 
            then the ICD Loader will load the library 
            "<code>libVendorAOpenCL.so</code>".
        </para>

<bridgehead>ICD Loader Vendor Enumeration on Android</bridgehead>

        <para>
            To enumerate vendor ICDs on Android, the ICD 
            Loader scans the files in the path 
            <code>/system/vendors/Khronos/OpenCL/vendors</code>. 
            For each file in this path, the ICD 
            Loader opens the file as a text file. The expected 
            format for the file is a single line of text which 
            specifies the Vendor ICD's library. The ICD Loader 
            will attempt to open that file as a shared 
            object using <code>dlopen()</code>. Note that the 
            library specified may be an absolute path or just a file 
            name.
        </para>

        <para>
            For example, if the following file exists
            <code>/system/vendors/Khronos/OpenCL/vendors/VendorA.icd</code> 
            and contains the text
            <code>libVendorAOpenCL.so</code> then the ICD Loader 
            will load the library 
            "<code>libVendorAOpenCL.so</code>".
        </para>

<bridgehead>Adding a Vendor Library</bridgehead>

        <para>
            <!-- [sic] spec ver. 2.0, rev. 19 refers to non-existent clGetExtensionFunctionAddress() -->
            Upon successfully loading a Vendor ICD's library, the ICD Loader queries the following 
            functions from the library: 
            <citerefentry><refentrytitle>clIcdGetPlatformIDsKHR</refentrytitle></citerefentry>, 
            <citerefentry><refentrytitle>clGetPlatformInfo</refentrytitle></citerefentry>, and 
            <function>clGetExtensionFunctionAddress</function>. 
            If any of these functions are not present then the ICD Loader 
            will close and ignore the library.
        </para>

        <para>
            Next the ICD Loader queries available
            ICD-enabled platforms in the library using 
            <citerefentry><refentrytitle>clIcdGetPlatformIDsKHR</refentrytitle></citerefentry>.
            For each of these platforms, the ICD Loader queries the platform's 
            extension string to verify that <function>cl_khr_icd</function> 
            is supported, then queries the platform's Vendor ICD 
            extension suffix using 
            <citerefentry><refentrytitle>clGetPlatformInfo</refentrytitle></citerefentry> 
            with the value <constant>CL_PLATFORM_ICD_SUFFIX_KHR</constant>.
        </para>

        <para>
            If any of these steps fail, the ICD Loader will 
            ignore the Vendor ICD and continue on to the 
            next.
        </para>

    </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="cl_khr_icd">OpenCL Specification</olink>
        </para>
    </refsect1>

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

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

<!-- 23-Dec-2013, rev. 19 -->
</refentry>

