<?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 ver. 2.1 rev. 10 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/vendor/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/vendor/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>

 <!-- 26-Oct-2015, Ext rev. 10 -->
</refentry>

