<?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>clGetDeviceInfo</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.78.1" />
    <meta name="keywords" content="clGetDeviceInfo" />
  </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="clGetDeviceInfo"></a>
        <h1>clGetDeviceInfo</h1>
        <p>Get information about an OpenCL device.</p>
      </div>
      <div class="refsynopsisdiv">
        <h2></h2>
        <div class="funcsynopsis">
          <table xmlns="" border="0" summary="Function synopsis" cellspacing="0" cellpadding="0">
            <tr valign="bottom">
              <td>
                <code xmlns="http://www.w3.org/1999/xhtml" class="funcdef">
                    <a class="link" href="scalarDataTypes.html" target="pagedisplay">cl_int</a>
                    <strong class="fsfunc">clGetDeviceInfo</strong>
                (</code>
                <td>
                    <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="abstractDataTypes.html" target="pagedisplay">cl_device_id</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">device</var>
                , </td>
              </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>
                    <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="enums.html#cl_device_info" target="pagedisplay">cl_device_info</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">param_name</var>
                , </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>
                    <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">size_t</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">param_value_size</var>
                , </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>
                    <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">void</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*param_value</var>
                , </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td>
                    <a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="pagedisplay">size_t</a>
                     <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*param_value_size_ret</var>
                <code>)</code></td>
            </tr>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="parameters"></a>
        <h2>Parameters</h2>
        <div class="variablelist">
          <dl class="variablelist">
            <dt>
              <span class="term">
                <code class="varname">device</code>
              </span>
            </dt>
            <dd>
              <p>
                  May be a device returned by
                  <a class="citerefentry" href="clGetDeviceIDs.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceIDs</span></span></a>
                  or a sub-device created by
                  <a class="citerefentry" href="clCreateSubDevices.html"><span class="citerefentry"><span class="refentrytitle">clCreateSubDevices</span></span></a>.
                  If <code class="varname">device</code> is a sub-device, the specific information for
                  the sub-device will be returned. The information that can be queried using
                  <code class="function">clGetDeviceInfo</code> is specified in the table below (Table 4.3).
                </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">param_value</code>
              </span>
            </dt>
            <dd>
              <p>
                  A pointer to memory location where appropriate values for a given
                  <code class="varname">param_name</code> as specified in the table below will be
                  returned. If <code class="varname">param_value</code> is NULL, it is ignored.
                </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">param_value_size</code>
              </span>
            </dt>
            <dd>
              <p>
                  Specifies the size in bytes of memory pointed to by
                  <code class="varname">param_value</code>.  This size in bytes must be ≥ size of
                  return type specified in the table below.
                </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">param_value_size_ret</code>
              </span>
            </dt>
            <dd>
              <p>
                  Returns the actual size in bytes of data being queried by
                  <code class="varname">param_value</code>. If <code class="varname">param_value_size_ret</code>
                  is NULL, it is ignored.
                </p>
            </dd>
            <dt>
              <span class="term">
                <code class="varname">param_name</code>
              </span>
            </dt>
            <dd>
              <p>
                  An enumeration constant that identifies the device information being queried. It
                  can be one of the values as specified in the table below.
                </p>
            </dd>
            <dt>
              <span class="term"></span>
            </dt>
            <dd>
              <p>
                Table 4.3:
            </p>
              <div class="informaltable">
                <table border="1">
                  <colgroup>
                    <col align="left" class="col1" />
                    <col align="left" class="col2" />
                  </colgroup>
                  <thead>
                    <tr>
                      <th align="left">cl_device_info</th>
                      <th align="left">Return Type</th>
                      <th align="left">Description</th>
                    </tr>
                  </thead>
                  <tbody>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_ADDRESS_BITS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                       The default compute device address space 
                       size of the global address space specified 
                       as an unsigned integer value in bits.
                       Currently supported values are 32 or 64 bits.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_AVAILABLE</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_TRUE</code> if the device is available and
                      <code class="constant">CL_FALSE</code> otherwise. A device is 
                        considered to be available if the device can 
                        be expected to successfully execute 
                        commands enqueued to the device
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_BUILT_IN_KERNELS</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      A semi-colon separated list of built-in kernels supported by the device.
                      An empty string is returned if no built-in kernels are supported by
                      the device.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_COMPILER_AVAILABLE</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_FALSE</code> if the implementation does
                      not have a compiler available to compile the program source.
                      Is <code class="constant">CL_TRUE</code> if the compiler is available. This can
                      be <code class="constant">CL_FALSE</code> for the embedded platform profile only.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_DOUBLE_FP_CONFIG</code>
                      </td>
                      <td align="left">
                        <p>cl_device_-</p>
                        <p>fp_config</p>
                      </td>
                      <td align="left">
                      Describes double precision floating-point capability of the
                      OpenCL device.  This is a bit-field that describes one or more of the following values:
                      <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_DENORM</code> - denorms are supported.</li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_INF_NAN</code> - INF and NaNs are supported.</li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_ROUND_TO_NEAREST</code> - round to nearest even rounding mode supported.</li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_ROUND_TO_ZERO</code> - round to zero rounding mode supported.</li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_ROUND_TO_INF</code> -
                            round to positive and negative infinity rounding modes supported.</li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_FMA</code> - IEEE754-2008 fused multiply-add is supported. </li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_FP_SOFT_FLOAT</code> -  Basic floating-point operations (such as
                            addition, subtraction, multiplication) are implemented in software.</li></ul></div>

                      <p>
                        Double precision is an optional feature so the mandated minimum double
                        precision floating-point capability is 0.
                      </p>

                      <p>
                        If double precision is supported by the device, then the minimum double
                        precision floating-point capability must be: <code class="constant">CL_FP_FMA</code>
                        |  <code class="constant">CL_FP_ROUND_TO_NEAREST</code> |
                        <code class="constant">CL_FP_INF_NAN</code> | <code class="constant">CL_FP_DENORM</code>.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_ENDIAN_LITTLE</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_TRUE</code> if the OpenCL device is a little endian
                      device and <code class="constant">CL_FALSE</code> otherwise.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_ERROR_
CORRECTION_SUPPORT</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_TRUE</code> if the device implements error correction
                      for all accesses to compute device memory (global and constant).
                      Is <code class="constant">CL_FALSE</code> if the device does not implement such
                      error correction.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_EXECUTION_CAPABILITIES</code>
                      </td>
                      <td align="left"> <p>cl_device_-</p><p>exec_capabilities</p> </td>
                      <td align="left">
                      Describes the execution capabilities of the device. This is
                      a bit-field that describes one or more of the following values:
                      <p><code class="constant">CL_EXEC_KERNEL</code> - The OpenCL device can execute
                      OpenCL kernels.</p> <p><code class="constant">CL_EXEC_NATIVE_KERNEL</code>
                      - The OpenCL device can execute native kernels.</p> <p>The mandated
                      minimum capability is <code class="constant">CL_EXEC_KERNEL</code>.</p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_EXTENSIONS</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      Returns a space separated list of extension names (the extension names themselves do
                      not contain any spaces) supported by the device. The list of extension names returned
                      can be vendor supported extension names and one or more of  the following Khronos
                      approved extension names:

                      <p>
                        </p><div class="literallayout"><p><br />
<a class="citerefentry" href="cl_khr_int64_base_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_base_atomics</span></span></a><br />
<a class="citerefentry" href="cl_khr_int64_extended_atomics.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_int64_extended_atomics</span></span></a><br />
<a class="citerefentry" href="cl_khr_fp16.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp16</span></span></a><br />
<a class="citerefentry" href="cl_khr_gl_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_sharing</span></span></a><br />
<a class="citerefentry" href="cl_khr_gl_event.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_event</span></span></a><br />
<a class="citerefentry" href="cl_khr_d3d10_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d10_sharing</span></span></a><br />
<a class="citerefentry" href="cl_khr_dx9_media_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_dx9_media_sharing</span></span></a><br />
<a class="citerefentry" href="cl_khr_d3d11_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_d3d11_sharing</span></span></a><br />
<a class="citerefentry" href="cl_khr_gl_depth_images.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_depth_images</span></span></a><br />
<a class="citerefentry" href="cl_khr_gl_msaa_sharing.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_gl_msaa_sharing</span></span></a><br />
<a class="citerefentry" href="cl_khr_initialize_memory.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_initialize_memory</span></span></a><br />
cl_khr_context_abort<br />
<a class="citerefentry" href="cl_khr_spir.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_spir</span></span></a><br />
<a class="citerefentry" href="cl_khr_srgb_image_writes.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_srgb_image_writes</span></span></a><br />
                        </p></div><p>
                      </p>

                      <p>
                          The following approved Khronos extension names 
                          must be returned by all device that support OpenCL C 2.0:</p>
                      <p>
                        </p><div class="literallayout"><p><br />
cl_khr_byte_addressable_store<br />
<a class="citerefentry" href="cl_khr_fp64.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp64</span></span></a> (for backward compatibility if double precision is supported)<br />
<a class="citerefentry" href="cl_khr_3d_image_writes.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_3d_image_writes</span></span></a><br />
cl_khr_image2d_from_buffer<br />
cl_khr_depth_images<br />
                        </p></div><p>
                      </p>

                      <p>
                       Please refer to the OpenCL 2.0 Extension Specification for a detailed description of these extensions.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_GLOBAL_MEM_CACHE_SIZE</code>
                      </td>
                      <td align="left">cl_ulong</td>
                      <td align="left">Size of global memory cache in bytes.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_GLOBAL_MEM_CACHE_TYPE</code>
                      </td>
                      <td align="left"> <p>cl_device_mem-</p><p>_cache_type</p> </td>
                      <td align="left">
                      Type of global memory cache supported. Valid values are:
                      <code class="constant">CL_NONE</code>, <code class="constant">CL_READ_ONLY_CACHE</code>,
                      and <code class="constant">CL_READ_WRITE_CACHE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_GLOBAL_
MEM_CACHELINE_SIZE</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">Size of global memory cache line in bytes.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_GLOBAL_MEM_SIZE</code>
                      </td>
                      <td align="left">cl_ulong</td>
                      <td align="left">Size of global device memory in bytes.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_GLOBAL_VARIABLE_
PREFERRED_TOTAL_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                       Maximum preferred total size, in bytes, of 
                       all program variables in the global address 
                       space. This is a performance hint. An 
                       implementation may place such variables 
                       in storage with optimized device access. 
                       This query returns the capacity of such 
                       storage. The minimum value is 0.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE2D_MAX_HEIGHT</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max height of 2D image in pixels. The minimum value is 16384 if
                      <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE2D_MAX_WIDTH</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max width of 2D image or 1D image not created from a buffer object in pixels.
                      The minimum value is 16384 if <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE3D_MAX_DEPTH</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max depth of 3D image in pixels. The minimum value is 2048 if
                      <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE3D_MAX_HEIGHT</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max height of 3D image in pixels. The minimum value is 2048 if
                      <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE3D_MAX_WIDTH</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max width of 3D image in pixels. The minimum value is 2048 if
                      <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE_BASE_
ADDRESS_ALIGNMENT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      This query should be used when a 2D
                        image is created from a buffer which was 
                        created using <code class="constant">CL_MEM_USE_HOST_PTR</code>. 
                        The value returned must be a power of 2.
                        This query specifies the minimum 
                        alignment in pixels of the <code class="varname">host_ptr</code>
                        specified to <a class="citerefentry" href="clCreateBuffer.html"><span class="citerefentry"><span class="refentrytitle">clCreateBuffer</span></span></a>.
                        If the device does not support images, this 
                        value must be 0.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE_MAX_ARRAY_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max number of images in a 1D or 2D image array.  The minimum value is 2048 if
                      <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE_MAX_BUFFER_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max number of pixels for a 1D image created from a buffer object.
                      The minimum value is 65536 if <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE_PITCH_ALIGNMENT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The row pitch alignment size in pixels for 
                        2D images created from a buffer. The 
                        value returned must be a power of 2.
                        If the device does not support images, this 
                        value must be 0.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_TRUE</code> if images are supported by the OpenCL
                      device and <code class="constant">CL_FALSE</code> otherwise.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_LINKER_AVAILABLE</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_FALSE</code> if the implementation does not
                      have a linker available.  Is <code class="constant">CL_TRUE</code> if the
                      linker is available. This can be <code class="constant">CL_FALSE</code> for the embedded
                      platform profile only. This must be <code class="constant">CL_TRUE</code> if
                      <code class="constant">CL_DEVICE_COMPILER_AVAILABLE</code> is <code class="constant">CL_TRUE</code>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_LOCAL_MEM_SIZE</code>
                      </td>
                      <td align="left">cl_ulong</td>
                      <td align="left">
                      Size of local memory region in bytes. The minimum value is 32 KB for
                      devices that are not of type <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_LOCAL_MEM_TYPE</code>
                      </td>
                      <td align="left"> <p>cl_device_-</p><p>local_mem_type</p></td>
                      <td align="left">
                      Type of local memory supported. This can be set to
                      <code class="constant">CL_LOCAL</code> implying dedicated local memory storage
                      such as SRAM, or <code class="constant">CL_GLOBAL</code>.  For custom devices,
                      <code class="constant">CL_NONE</code> can also be returned indicating no local
                      memory support.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_CLOCK_FREQUENCY</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">Maximum configured clock frequency of the device in MHz.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_COMPUTE_UNITS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The number of parallel compute units on the OpenCL device.  A work-group executes
                      on a single compute unit. The minimum value is 1.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_CONSTANT_ARGS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Max number of arguments declared with the <a class="citerefentry" href="constant.html"><span class="citerefentry"><span class="refentrytitle">__constant</span></span></a>
                      qualifier in a kernel. The minimum value is 8 for devices that are not
                      of type <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_CONSTANT_
BUFFER_SIZE</code>
                      </td>
                      <td align="left">cl_ulong</td>
                      <td align="left">
                      Max size in bytes of a constant buffer allocation.  The
                      minimum value is 64 KB for devices that are not of type
                      <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_GLOBAL_
VARIABLE_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      The maximum number of bytes of storage 
                        that may be allocated for any single 
                        variable in program scope or inside a 
                        function in OpenCL C declared in the 
                        global address space. This value is also 
                        provided inside OpenCL C as a 
                        preprocessor macro by the same name.
                        The minimum value is 64 KB.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_MEM_ALLOC_SIZE</code>
                      </td>
                      <td align="left">cl_ulong</td>
                      <td align="left">
                      Max size of memory object allocation in bytes. The minimum value is 
                        max(min(1024*1024*1024, 1/4th of 
                        <code class="constant">CL_DEVICE_GLOBAL_MEM_SIZE</code>), 128*1024*1024) for devices
                      that are not of type <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_ON_DEVICE_EVENTS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The maximum number of events in use by 
                        a device queue. These refer to events 
                        returned by the <code class="function">enqueue_</code> built-in 
                        functions to a device queue or user events 
                        returned by the 
                        <a class="citerefentry" href="create_user_event.html"><span class="citerefentry"><span class="refentrytitle">create_user_event</span></span></a>
                        built-in function that have not been 
                        released.
                        The minimum value is 1024.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_ON_DEVICE_QUEUES</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The maximum number of device queues 
                        that can be created per context.
                        The minimum value is 1.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_PARAMETER_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Max size in bytes of all arguments that can be passed to a
                      kernel. The minimum value is 1024 for devices that are not of type
                      <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.  For this minimum value,
                      only a maximum of 128 arguments can be passed to a kernel.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_PIPE_ARGS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The maximum number of pipe objects that 
                        can be passed as arguments to a kernel. 
                        The minimum value is 16.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_READ_IMAGE_ARGS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Max number of image objects arguments 
                        of a kernel declared with the <code class="code">read_only</code>
                        qualifier. The
                      minimum value is 128 if <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_READ_
WRITE_IMAGE_ARGS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Max number of image objects arguments 
                        of a kernel declared with the <code class="code">write_only</code> or <code class="code">read_only</code>
                        qualifier. The
                      minimum value is 64 if <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      is <code class="constant">CL_TRUE</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_SAMPLERS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Maximum number of samplers that can be used in a kernel.  The minimum
                      value is 16 if <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code>
                      is <code class="constant">CL_TRUE</code>.  (Also see
                      <a class="citerefentry" href="sampler_t.html"><span class="citerefentry"><span class="refentrytitle">sampler_t</span></span></a>.)
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_WORK_GROUP_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Maximum number of work-items in a work-group executing a kernel on a
                      single compute unit, using the data parallel execution model. (Refer to
                      <a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</span></span></a>).
                      The minimum value is 1.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_WORK_ITEM_
DIMENSIONS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Maximum dimensions that specify the global and local
                      work-item IDs used by the data parallel execution model. (Refer to
                      <a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</span></span></a>).
                      The minimum value is 3 for devices that are not of type
                      <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_WORK_ITEM_SIZES</code>
                      </td>
                      <td align="left">size_t[]</td>
                      <td align="left">
                      <p>
                        Maximum number of work-items that can be
                        specified in each dimension of the work-group to
                        <a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</span></span></a>.
                      </p>

                      <p>
                        Returns <code class="varname">n</code> <span class="type">size_t</span> entries, where
                        <code class="varname">n</code> is the value returned by the query for
                        <code class="constant">CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS</code>.
                      </p>

                      <p>
                        The minimum value is (1, 1, 1) for devices that are not of type
                        <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MAX_WRITE_IMAGE_ARGS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                        Max number of image objects arguments 
                        of a kernel declared with the 
                        <code class="code">write_only</code> qualifier. 
                        The minimum value is 64 if
                        <code class="constant">CL_DEVICE_IMAGE_SUPPORT</code> is <code class="constant">CL_TRUE</code>.
                        NOTE: <code class="constant">CL_DEVICE_MAX_WRITE_IMAGE_ARGS</code> 
                        is only there for backward compatibility. 
                        <code class="constant">CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS</code> 
                        should be used instead.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_MEM_BASE_ADDR_ALIGN</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The minimum value is the size (in bits) of the largest OpenCL built-in
                      data type supported by the device (<span class="type">long16</span> in FULL profile,
                      <span class="type">long16</span> or <span class="type">int16</span> in EMBEDDED profile) for devices
                      that are not of type <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_NAME</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">Device name string.</td>
                    </tr>
                    <tr>
                      <td align="left"><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_CHAR</code>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_SHORT</code></p>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_INT</code></p>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_LONG</code></p>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_FLOAT</code></p>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_DOUBLE</code></p>
                      <p><code class="constant">CL_DEVICE_NATIVE_
VECTOR_WIDTH_HALF</code></p></td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      <p>
                        Returns the native ISA vector width. The vector width is defined as
                        the number of scalar elements that can be stored in the vector.
                      </p>

                      <p>
                        If double precision is not supported,
                        <code class="constant">CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE</code> must return 0.
                      </p>

                      <p>
                        If the
                        <a class="citerefentry" href="cl_khr_fp16.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp16</span></span></a>
                        extension is not supported,
                        <code class="constant">CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF</code> must return 0.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_OPENCL_C_VERSION</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      <p>
                        OpenCL C version string. Returns the highest OpenCL C version
                        supported by the compiler for this device that is not of type
                        <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>. This version string has
                        the following format:
                      </p>

                      <p>
                        <code class="varname">
                        OpenCL&lt;space&gt;C&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;vendor-specific
                        information&gt; </code>
                      </p>

                      <p>
                        The <code class="varname">major_version.minor_version</code> value returned must
                        be 2.0 if <code class="constant">CL_DEVICE_VERSION</code> is OpenCL 2.0.
                      </p>

                      <p>
                        The <code class="varname">major_version.minor_version</code> value returned must
                        be 1.2 if <code class="constant">CL_DEVICE_VERSION</code> is OpenCL 1.2.
                      </p>

                      <p>
                        The <code class="varname">major_version.minor_version</code> value returned must
                        be 1.1 if <code class="constant">CL_DEVICE_VERSION</code> is OpenCL 1.1.
                      </p>

                      <p>
                        The <code class="varname">major_version.minor_version</code> value returned can
                        be 1.0 or 1.1 if <code class="constant">CL_DEVICE_VERSION</code> is OpenCL 1.0.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PARENT_DEVICE</code>
                      </td>
                      <td align="left">cl_device_id</td>
                      <td align="left">
                      Returns the <span class="type">cl_device_id</span> of the parent device to which this sub-device
                      belongs. If <code class="varname">device</code> is a root-level device, a NULL value is returned.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PARTITION_
AFFINITY_DOMAIN</code>
                      </td>
                      <td align="left"><p>cl_device_aff-</p>
                           <p>inity_domain</p></td>
                      <td align="left">
                      Returns the list of supported affinity domains for partitioning the <code class="varname">device</code> using
                      <code class="constant">CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN</code>.
                      This is a bit-field that describes one or more of the following values:
                      <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_NUMA</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE</code></li></ul></div>
                      If the device does not support any affinity domains, a value of 0 will be returned.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PARTITION_MAX_
SUB_DEVICES</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Returns the maximum number of sub-devices that can be created
                      when a device is partitioned. The value returned cannot exceed
                      <code class="constant">CL_DEVICE_MAX_COMPUTE_UNITS</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PARTITION_PROPERTIES</code>
                      </td>
                      <td align="left">
                        <p>cl_device_partit-</p>
                        <p>ion_property[]</p>
                      </td>
                      <td align="left">
                      Returns the list of partition types supported by <code class="varname">device</code>. This is an array of
                      <span class="type">cl_device_partition_property</span> values drawn from the following list:
                      <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_PARTITION_EQUALLY</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_PARTITION_BY_COUNTS</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN</code></li></ul></div>
                      If the device cannot be partitioned (i.e. 
                        there is no partitioning scheme supported 
                        by the device that will return at least two 
                        subdevices), a value of 0 will be returned.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PARTITION_TYPE</code>
                      </td>
                      <td align="left"><p>cl_device_part-</p>
                           <p>ition_property[]</p></td>
                      <td align="left">
                      Returns the <code class="varname">properties</code> argument specified in
                      <a class="citerefentry" href="clCreateSubDevices.html"><span class="citerefentry"><span class="refentrytitle">clCreateSubDevices</span></span></a>
                      if <code class="varname">device</code> is a subdevice. In the case where the <code class="varname">properties</code>
                        argument to <a class="citerefentry" href="clCreateSubDevices.html"><span class="citerefentry"><span class="refentrytitle">clCreateSubDevices</span></span></a> is
                        <code class="constant">CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN</code>,
                        <code class="constant">CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE</code>, the affinity domain used to 
                        perform the partition will be returned. This 
                        can be one of the following values:
                      <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_NUMA</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE</code></li><li class="listitem" style="list-style-type: disc"><code class="constant">CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE</code></li></ul></div>
                        Otherwise the implementation may either 
                        return a <code class="varname">param_value_size_ret</code> of 0 i.e. 
                        there is no partition type associated with 
                        <code class="varname">device</code> or can return a property value of 0 
                        (where 0 is used to terminate the partition 
                        property list) in the memory that 
                        <code class="varname">param_value</code> points to.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PIPE_MAX_
ACTIVE_RESERVATIONS</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                       The maximum number of reservations that 
                       can be active for a pipe per work-item in a 
                       kernel. A work-group reservation is 
                       counted as one reservation per work-item. 
                       The minimum value is 1.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PIPE_MAX_PACKET_SIZE</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">The maximum size of pipe packet in bytes. 
                            The minimum value is 1024 bytes.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PLATFORM</code>
                      </td>
                      <td align="left">
                        <a class="link" href="abstractDataTypes.html" target="pagedisplay">cl_platform_id</a>
                      </td>
                      <td align="left">The platform associated with this device.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PREFERRED_
GLOBAL_ATOMIC_ALIGNMENT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                       Returns the value representing the 
                       preferred alignment in bytes for OpenCL
                       2.0 atomic types to global memory. This 
                       query can return 0 which indicates that the 
                       preferred alignment is aligned to the 
                       natural size of the type.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PREFERRED_
INTEROP_USER_SYNC</code>
                      </td>
                      <td align="left">cl_bool</td>
                      <td align="left">
                      Is <code class="constant">CL_TRUE</code> if the device's preference is for the user
                      to be responsible for synchronization, when sharing memory objects between
                      OpenCL and other APIs such as DirectX, <code class="constant">CL_FALSE</code> if the
                      device / implementation has a performant path for performing synchronization
                      of memory object shared between OpenCL and other APIs such as DirectX
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PREFERRED_
LOCAL_ATOMIC_ALIGNMENT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                       Returns the value representing the 
                       preferred alignment in bytes for OpenCL
                       2.0 atomic types to local memory. This 
                       query can return 0 which indicates that the 
                       preferred alignment is aligned to the 
                       natural size of the type.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PREFERRED_
PLATFORM_ATOMIC_ALIGNMENT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                       Returns the value representing the 
                       preferred alignment in bytes for OpenCL
                       2.0 fine-grained SVM atomic types. This 
                       query can return 0 which indicates that the 
                       preferred alignment is aligned to the 
                       natural size of the type.
                    </td>
                    </tr>
                    <tr>
                      <td align="left"><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_CHAR</code>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_SHORT</code></p>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_INT</code></p>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_LONG</code></p>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_FLOAT</code></p>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_DOUBLE</code></p>
                      <p><code class="constant">CL_DEVICE_PREFERRED_
VECTOR_WIDTH_HALF</code></p></td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      <p>
                        Preferred native vector width size for built-in scalar types that can
                        be put into vectors. The vector width is defined as the number of scalar
                        elements that can be stored in the vector.
                      </p>

                      <p>
                        If double precision is not supported,
                        <code class="constant">CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE</code> must return 0.
                      </p>

                      <p>
                        If the
                        <a class="citerefentry" href="cl_khr_fp16.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp16</span></span></a>
                        extension is not supported,
                        <code class="constant">CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF</code> must return 0.
                      </p>

                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PRINTF_BUFFER_SIZE</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">
                      Maximum size in bytes of the internal buffer that holds the output of <a class="citerefentry" href="printfFunction.html"><span class="citerefentry"><span class="refentrytitle">printf</span></span></a>
                      calls from a kernel. The minimum value for the FULL profile is 1 MB.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PROFILE</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      <p>
                        OpenCL profile string. Returns the profile name supported by the device
                        (see note).  The profile name returned can be one of the following strings:
                      </p>

                      <p>
                        FULL_PROFILE - if the device supports the OpenCL specification
                        (functionality defined as part of the core specification and does not
                        require any extensions to be supported).
                      </p>

                      <p>
                        EMBEDDED_PROFILE - if the device supports the OpenCL embedded profile.
                      </p>

                      <p>
                        The platform profile returns the profile that is 
                        implemented by the OpenCL framework. If the 
                        platform profile 
                        returned is <code class="constant">FULL_PROFILE</code>, 
                        the OpenCL framework will support devices that 
                        are <code class="constant">FULL_PROFILE</code> and may also 
                        support devices that are <code class="constant">EMBEDDED_PROFILE</code>. 
                        The compiler must be available for all devices i.e.
                        <code class="constant">CL_DEVICE_COMPILER_AVAILABLE</code> 
                        is <code class="constant">CL_TRUE</code>. If the 
                        platform profile returned is 
                        <code class="constant">EMBEDDED_PROFILE</code>, then 
                        devices that are only <code class="constant">EMBEDDED_PROFILE</code> are supported.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_PROFILING_
TIMER_RESOLUTION</code>
                      </td>
                      <td align="left">size_t</td>
                      <td align="left">Describes the resolution of device timer. This is measured in nanoseconds.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_QUEUE_ON_
DEVICE_MAX_SIZE</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The max. size of the device queue in bytes. The minimum value is 256 KB for the full 
                        profile and 64 KB for the embedded profile
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_QUEUE_ON_
DEVICE_PREFERRED_SIZE</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      The size of the device queue in bytes
                        preferred by the implementation. 
                        Applications should use this size for the 
                        device queue to ensure good performance.
                        The minimum value is 16 KB.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_QUEUE_
ON_DEVICE_PROPERTIES</code>
                      </td>
                      <td align="left">
                      <p>cl_command_-</p>
                      <p>queue_properties</p>
                    </td>
                      <td align="left">
                      <p>
                        Describes the on device command-queue properties supported by the device. This is
                        a bit-field that describes one or more of the following values:
                      </p>

                      <p><code class="constant">CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</code></p>
                      <p><code class="constant">CL_QUEUE_PROFILING_ENABLE</code></p>
                      <p>
                        These properties are described in the table for
                        <a class="citerefentry" href="clCreateCommandQueueWithProperties.html"><span class="citerefentry"><span class="refentrytitle">clCreateCommandQueueWithProperties</span></span></a>.
                        The mandated minimum capability is
                        <code class="constant">CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</code>
                        | <code class="constant">CL_QUEUE_PROFILING_ENABLE</code>.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_QUEUE_ON_
HOST_PROPERTIES</code>
                      </td>
                      <td align="left">
                      <p>cl_command_-</p>
                      <p>queue_properties</p>
                    </td>
                      <td align="left">
                      <p>
                        Describes the on host command-queue properties supported by the device.  This is
                        a bit-field that describes one or more of the following values:
                      </p>

                      <p><code class="constant">CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</code></p>
                      <p><code class="constant">CL_QUEUE_PROFILING_ENABLE</code></p>
                      <p>
                        These properties are described in the table for
                        <a class="citerefentry" href="clCreateCommandQueueWithProperties.html"><span class="citerefentry"><span class="refentrytitle">clCreateCommandQueueWithProperties</span></span></a>.
                        The mandated minimum capability is
                        <code class="constant">CL_QUEUE_PROFILING_ENABLE</code>.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_REFERENCE_COUNT</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      Returns the <code class="varname">device</code> reference count. If the device is a root-level device,
                      a reference count of one is returned.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_SINGLE_FP_CONFIG</code>
                      </td>
                      <td align="left">
                        <p>cl_device_-</p>
                        <p>fp_config</p>
                      </td>
                      <td align="left">
                      <p>
                        Describes single precision floating-point capability of the device. This
                        is a bit-field that describes one or more of the following values:
                      </p>

                      <p><code class="constant">CL_FP_DENORM</code> - denorms are supported</p>
                      <p><code class="constant">CL_FP_INF_NAN</code> - INF and quiet NaNs are supported</p>
                      <p><code class="constant">CL_FP_ROUND_TO_NEAREST</code> - round to nearest even rounding mode supported</p>
                      <p><code class="constant">CL_FP_ROUND_TO_ZERO</code> - round to zero rounding mode supported</p>
                      <p><code class="constant">CL_FP_ROUND_TO_INF</code> - round to +ve and -ve infinity rounding modes supported</p>
                      <p><code class="constant">CL_FP_FMA</code> - IEEE754-2008 fused multiply-add is supported</p>

                      <p>
                        <code class="constant">CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT</code> - divide and
                        sqrt are correctly rounded as defined by the IEEE754 specification.
                      </p>

                      <p>
                        <code class="constant">CL_FP_SOFT_FLOAT</code> - Basic floating-point operations
                        (such as addition, subtraction, multiplication) are implemented in
                        software.
                      </p>

                      <p>
                        The mandated minimum floating-point capability for devices that
                        are not of type <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>
                        is <code class="constant">CL_FP_ROUND_TO_NEAREST</code> |
                        <code class="constant">CL_FP_INF_NAN</code>.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_SPIR_VERSIONS</code>
                      </td>
                      <td align="left">char []</td>
                      <td align="left">
                        If the <a class="citerefentry" href="cl_khr_spir.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_spir</span></span></a>
                        extension is enabled,
                        a space separated list of SPIR versions 
                        supported by the device.
                        For example returning “1.2 2.0” in this 
                        query implies that SPIR version 1.2 and 
                        2.0 are supported by the implementation.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_SVM_CAPABILITIES</code>
                      </td>
                      <td align="left">
                        <p>cl_device_svm_-</p>
                        <p>capabilities</p>
                      </td>
                      <td align="left"><p>
                      Describes the various shared virtual 
                        memory (a.k.a. SVM) memory allocation 
                        types the device supports. Coarse-grain 
                        SVM allocations are required to be 
                        supported by all OpenCL 2.0 devices. This 
                        is a bit-field that describes a combination 
                        of the following values:</p>

                        <p><code class="constant">CL_DEVICE_SVM_COARSE_GRAIN_BUFFER</code> – 
                        Support for coarse-grain buffer 
                        sharing using <a class="citerefentry" href="clSVMAlloc.html"><span class="citerefentry"><span class="refentrytitle">clSVMAlloc</span></span></a>. Memory 
                        consistency is guaranteed at 
                        synchronization points and the host must 
                        use calls to 
                        <a class="citerefentry" href="clEnqueueMapBuffer.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueMapBuffer</span></span></a> and 
                        <a class="citerefentry" href="clEnqueueUnmapMemObject.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueUnmapMemObject</span></span></a>.</p>

                        <p><code class="constant">CL_DEVICE_SVM_FINE_GRAIN_BUFFER</code>
                        – Support for fine-grain buffer sharing 
                        using <a class="citerefentry" href="clSVMAlloc.html"><span class="citerefentry"><span class="refentrytitle">clSVMAlloc</span></span></a>. Memory consistency 
                        is guaranteed atsynchronization points 
                        without need for <a class="citerefentry" href="clEnqueueMapBuffer.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueMapBuffer</span></span></a>
                        and <a class="citerefentry" href="clEnqueueUnmapMemObject.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueUnmapMemObject</span></span></a>.</p>

                        <p><code class="constant">CL_DEVICE_SVM_FINE_GRAIN_SYSTEM</code>
                        – Support for sharing the host’s entire 
                        virtual memory including memory 
                        allocated using malloc. Memory 
                        consistency is guaranteed at 
                        synchronization points.</p>

                        <p><code class="constant">CL_DEVICE_SVM_ATOMICS</code> – Support 
                        for the OpenCL 2.0 atomic operations that 
                        provide memory consistency across the 
                        host and all OpenCL devices supporting 
                        fine-grain SVM allocations.</p>

                        <p>
                            The mandated minimum capability is 
                            <code class="constant">CL_DEVICE_SVM_COARSE_GRAIN_BUFFER</code>.
                        </p>

                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_TERMINATE_CAPABILITY_KHR</code>
                      </td>
                      <td align="left">cl_device_terminate_capability_khr</td>
                      <td align="left">
                        If the 
                        <a class="citerefentry" href="cl_khr_terminate_context.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_terminate_context</span></span></a> 
                        extension is enabled, describes the termination capability of the OpenCL 
                        device. This is a bitfield where a value of 
                        <code class="constant">CL_DEVICE_TERMINATE_CAPABILITY_CONTEXT_KHR</code>
                        indicates that context termination is supported.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_TYPE</code>
                      </td>
                      <td align="left">cl_device_type</td>
                      <td align="left">
                      The OpenCL device type. Currently supported values are:
                      <code class="constant">CL_DEVICE_TYPE_CPU</code>,
                      <code class="constant">CL_DEVICE_TYPE_GPU</code>,
                      <code class="constant">CL_DEVICE_TYPE_ACCELERATOR</code>,
                      <code class="constant">CL_DEVICE_TYPE_DEFAULT</code>, a combination of the above
                      types, or <code class="constant">CL_DEVICE_TYPE_CUSTOM</code>.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_VENDOR</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">Vendor name string.</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_VENDOR_ID</code>
                      </td>
                      <td align="left">cl_uint</td>
                      <td align="left">
                      A unique device vendor identifier. An example of a unique device identifier
                      could be the PCIe ID.
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DEVICE_VERSION</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      <p>
                        OpenCL version string. Returns the OpenCL version supported by the
                        device. This version string has the following format:
                      </p>

                      <p>
                        <code class="varname">
                        OpenCL&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;vendor-specific
                        information&gt; </code>
                      </p>

                      <p>
                        The <code class="varname">major_version.minor_version</code> value returned will
                        be 2.0.
                      </p>
                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_DRIVER_VERSION</code>
                      </td>
                      <td align="left">char[]</td>
                      <td align="left">
                      OpenCL software driver version string in the form
                      <code class="varname">major_number.minor_number</code>.
                    </td>
                    </tr>
                  </tbody>
                </table>
              </div>
            </dd>
          </dl>
        </div>
      </div>
      <div class="refsect1">
        <a id="notes"></a>
        <h2>Notes</h2>
        <p>
          <code class="constant">CL_DEVICE_PROFILE</code>: The platform profile returns the profile
          that is implemented by the OpenCL framework. If the platform profile returned is
          <code class="constant">FULL_PROFILE</code>, the OpenCL framework will support devices 
          that are <code class="constant">FULL_PROFILE</code> and may
          also support devices that are <code class="constant">EMBEDDED_PROFILE</code>. The compiler must
          be available for all devices i.e. <code class="constant">CL_DEVICE_COMPILER_AVAILABLE</code>
          is <code class="constant">CL_TRUE</code>. If the platform profile returned
          is <code class="constant">EMBEDDED_PROFILE</code>, then devices that are only
          <code class="constant">EMBEDDED_PROFILE</code> are supported.
        </p>
        <p>
          The device queries described in the table above should return the
          same information for a root-level device i.e. a device returned by
          <a class="citerefentry" href="clGetDeviceIDs.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceIDs</span></span></a> and any
          sub-devices created from this device except for the following queries:

            </p>
        <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: disc; ">
            <li class="listitem" style="list-style-type: disc">
              <code class="constant">CL_DEVICE_GLOBAL_MEM_CACHE_SIZE</code>
            </li>
            <li class="listitem" style="list-style-type: disc">
              <code class="constant">CL_DEVICE_BUILT_IN_KERNELS</code>
            </li>
            <li class="listitem" style="list-style-type: disc">
              <code class="constant">CL_DEVICE_PARENT_DEVICE</code>
            </li>
            <li class="listitem" style="list-style-type: disc">
              <code class="constant">CL_DEVICE_PARTITION_TYPE</code>
            </li>
            <li class="listitem" style="list-style-type: disc">
              <code class="constant">CL_DEVICE_REFERENCE_COUNT</code>
            </li>
          </ul>
        </div>
        <p>
        </p>
      </div>
      <div class="refsect1">
        <a id="errors"></a>
        <h2>Errors</h2>
        <p>
      <code class="function">clGetDeviceInfo</code> returns <span class="errorname">CL_SUCCESS</span> if the
      function is executed successfully. Otherwise, it returns the following:
    </p>
        <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: disc; ">
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_DEVICE</span> if <code class="varname">device</code> is not valid.
        </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_INVALID_VALUE</span> if <code class="varname">param_name</code>
          is not one of the supported values or if size in bytes specified by
          <code class="varname">param_value_size</code> is less than size of return type as shown in the
          table above and <code class="varname">param_value</code> is not a <span class="errorname">NULL</span>
          value or if <code class="varname">param_name</code> is a value that is available as an extension and the corresponding
          extension is not supported by the device.
        </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_OUT_OF_RESOURCES</span> if there is a failure to allocate resources
          required by the OpenCL implementation on the device.
        </li>
            <li class="listitem" style="list-style-type: disc"><span class="errorname">CL_OUT_OF_HOST_MEMORY</span> if there is a failure to allocate
          resources required by the OpenCL implementation on the host.
        </li>
          </ul>
        </div>
      </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.0.pdf#page=60" target="OpenCL Spec">OpenCL Specification</a>
        </p>
      </div>
      <div class="refsect1">
        <a id="seealso"></a>
        <h2>Also see</h2>
        <p>
            <a class="citerefentry" href="clGetDeviceIDs.html"><span class="citerefentry"><span class="refentrytitle">clGetDeviceIDs</span></span></a>,
            <a class="citerefentry" href="cl_khr_fp64.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp64</span></span></a>,
            <a class="citerefentry" href="constant.html"><span class="citerefentry"><span class="refentrytitle">__constant</span></span></a>,
            <a class="citerefentry" href="clCreateCommandQueueWithProperties.html"><span class="citerefentry"><span class="refentrytitle">clCreateCommandQueueWithProperties</span></span></a>,
            <a class="citerefentry" href="clRetainCommandQueue.html"><span class="citerefentry"><span class="refentrytitle">clRetainCommandQueue</span></span></a>,
            <a class="citerefentry" href="clEnqueueNDRangeKernel.html"><span class="citerefentry"><span class="refentrytitle">clEnqueueNDRangeKernel</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-2013 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>
