| <?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_<object><br /> |
| {<br /> |
| struct _cl_icd_dispatch *dispatch;<br /> |
| // ... remainder of internal data<br /> |
| };</code> |
| </p> |
| </div> |
| <p> |
| </p> |
| <p> |
| <code class="code"><object></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> |