blob: 71f188743d94f0f0434bab269269ba97c8cb09e3 [file] [log] [blame]
<?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>cl_khr_icd</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1" />
<meta name="keywords" content="cl_khr_icd" />
</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="cl_khr_icd"></a>
<h1>cl_khr_icd</h1>
<p>
Extension through which the Khronos
OpenCL installable client driver loader (ICD Loader)
may expose multiple separate vendor
installable client drivers (Vendor ICDs) for OpenCL.
</p>
</div>
<div class="refsect2">
<a id="synopsis"></a>
<h3>
</h3>
<div class="informaltable">
<table class="informaltable" border="0">
<colgroup>
<col align="left" class="col1" />
</colgroup>
<tbody>
<tr>
<td align="left">
#pragma OPENCL EXTENSION cl_khr_icd : enable
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="refsect1">
<a id="description"></a>
<h2>Description</h2>
<p>
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 <span class="type">cl_platform_ids</span> exposed by all vendor implementations with the
ICD Loader acting as a demultiplexor. If this extension is supported by an
implementation, the string <code class="function">cl_khr_icd</code> will be present
in the <code class="constant">CL_PLATFORM_EXTENSIONS</code> string described in
the table of allowed values for <code class="varname">param_name</code> for
<a class="citerefentry" href="clGetDeviceInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceInfo</span></span></a>.
</p>
<p>
If the <code class="function">cl_khr_icd</code> extension is supported, then the
<a class="citerefentry" href="clIcdGetPlatformIDsKHR.html"><span class="citerefentry"><span class="refentrytitle">clIcdGetPlatformIDsKHR</span></span></a>
function is enabled.
</p>
<p>
The official source for the ICD loader is available at the
Khronos website. The complete <code class="code">_cl_icd_dispatch</code>
structure is defined in the header <code class="code">icd_dispatch.h</code>
which is available as a part of the source code.
</p>
<h4><a id="id-1.5.5"></a>Inferring Vendors from Function Call Arguments</h4>
<p>
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:
</p>
<p>
</p>
<div class="literallayout">
<p>
<code class="code">     struct _cl_&lt;object&gt;<br />
     {<br />
         struct _cl_icd_dispatch *dispatch;<br />
         // ... remainder of internal data<br />
     };</code>
</p>
</div>
<p>
</p>
<p>
<code class="code">&lt;object&gt;</code> is one of <code class="code">platform_id</code>,
<code class="code">device_id</code>, <code class="code">context</code>,
<code class="code">command_queue</code>, <code class="code">mem</code>,
<code class="code">program</code>, <code class="code">kernel</code>,
<code class="code">event</code>, or <code class="code">sampler</code>.
</p>
<p>
The structure <code class="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.
</p>
<p>
A link to source code which defines the entries
in the function table structure
<code class="code">_cl_icd_dispatch</code> is available in the
Sample Code section of the OpenCL specification. The order of
the functions in <code class="code">_cl_icd_dispatch</code> is
determined by the ICD Loader's source. The ICD
Loader's source's <code class="code">_cl_icd_dispatch</code>
table is to be appended to only.
</p>
<p>
Functions which do not have an argument from which the vendor implementation may be
inferred are ignored, with the exception of
<code class="function">clGetExtensionFunctionAddress</code>.
which is described below.
</p>
<h4><a id="id-1.5.12"></a>ICD Data</h4>
<p>
A Vendor ICD is defined by two pieces of data:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; ">
<li class="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.
</li>
<li class="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.
</li>
</ul>
</div>
<h4><a id="id-1.5.15"></a>ICD Loader Vendor Enumeration on Windows</h4>
<p>
To enumerate Vendor ICDs on Windows, the ICD
Loader scans the values in the registry key
<code class="code">HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors</code>.
For each value in
this key which has <span class="type">DWORD</span> data set to 0, the
ICD Loader opens the dynamic link library
specified by the name of the value using
<span class="type">LoadLibraryA</span>.
</p>
<p>
For example, if the registry contains the following value
</p>
<p>
</p>
<div class="literallayout">
<p>     [HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors]<br />
     "c:\\vendor a\\vndra_ocl.dll"=dword:00000000</p>
</div>
<p>
</p>
<p>
then the ICD will open the library "<code class="code">c:\vendor a\vndra_ocl.dll</code>".
</p>
<h4><a id="id-1.5.20"></a>ICD Loader Vendor Enumeration on Linux</h4>
<p>
To enumerate vendor ICDs on Linux, the ICD
Loader scans the files in the path
<code class="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 class="code">dlopen()</code>.
Note that the library specified may be an
absolute path or just a file name.
</p>
<p>
For example, if the following file exists
<code class="code">/etc/OpenCL/vendors/VendorA.icd</code> and
contains the text <code class="code">libVendorAOpenCL.so</code>
then the ICD Loader will load the library
"<code class="code">libVendorAOpenCL.so</code>".
</p>
<h4><a id="id-1.5.23"></a>ICD Loader Vendor Enumeration on Android</h4>
<p>
To enumerate vendor ICDs on Android, the ICD
Loader scans the files in the path
<code class="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 class="code">dlopen()</code>. Note that the
library specified may be an absolute path or just a file
name.
</p>
<p>
For example, if the following file exists
<code class="code">/system/vendor/Khronos/OpenCL/vendors/VendorA.icd</code>
and contains the text
<code class="code">libVendorAOpenCL.so</code> then the ICD Loader
will load the library
"<code class="code">libVendorAOpenCL.so</code>".
</p>
<h4><a id="id-1.5.26"></a>Adding a Vendor Library</h4>
<p>
Upon successfully loading a Vendor ICD's library, the ICD Loader queries the following
functions from the library:
<a class="citerefentry" href="clIcdGetPlatformIDsKHR.html"><span class="citerefentry"><span class="refentrytitle">clIcdGetPlatformIDsKHR</span></span></a>,
<a class="citerefentry" href="clGetPlatformInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetPlatformInfo</span></span></a>, and
<code class="function">clGetExtensionFunctionAddress</code>.
If any of these functions are not present then the ICD Loader
will close and ignore the library.
</p>
<p>
Next the ICD Loader queries available
ICD-enabled platforms in the library using
<a class="citerefentry" href="clIcdGetPlatformIDsKHR.html"><span class="citerefentry"><span class="refentrytitle">clIcdGetPlatformIDsKHR</span></span></a>.
For each of these platforms, the ICD Loader queries the platform's
extension string to verify that <code class="function">cl_khr_icd</code>
is supported, then queries the platform's Vendor ICD
extension suffix using
<a class="citerefentry" href="clGetPlatformInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetPlatformInfo</span></span></a>
with the value <code class="constant">CL_PLATFORM_ICD_SUFFIX_KHR</code>.
</p>
<p>
If any of these steps fail, the ICD Loader will
ignore the Vendor ICD and continue on to the
next.
</p>
</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-extensions.pdf#namedest=cl_khr_icd" target="OpenCL Spec">OpenCL Specification</a>
</p>
</div>
<div class="refsect1">
<a id="seealso"></a>
<h2>Also see</h2>
<p>
<a class="citerefentry" href="EXTENSION.html"><span class="citerefentry"><span class="refentrytitle">EXTENSION</span></span></a>,
<a class="citerefentry" href="clIcdGetPlatformIDsKHR.html"><span class="citerefentry"><span class="refentrytitle">clIcdGetPlatformIDsKHR</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>