<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook MathML Module V1.1b1//EN"
              "http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd">

<refentry>
    <refentryinfo>
        <keywordset><keyword>clGetDeviceInfo</keyword></keywordset>
    </refentryinfo>
    <refmeta>
        <refentrytitle>clGetDeviceInfo</refentrytitle>
        <refmiscinfo>
            <copyright>
                <year>2007-2013</year>
                <holder>The Khronos Group Inc.
 Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the condition that this copyright notice and permission notice shall be included
in all copies or substantial portions of the Materials.</holder>
            </copyright>
        </refmiscinfo>
        <manvolnum>3</manvolnum>
    </refmeta>

<!-- ================================ SYNOPSIS -->

  <refnamediv id="clGetDeviceInfo">
<refname>clGetDeviceInfo</refname>
           <refpurpose>Get information about an OpenCL device.</refpurpose>
    </refnamediv>
    <refsynopsisdiv xmlns:xlink="http://www.w3.org/1999/xlink"><title></title>
        <funcsynopsis>
            <funcprototype>
                <funcdef>
                    <link xlink:href="scalarDataTypes.html">cl_int</link>
                    <function>clGetDeviceInfo</function>
                </funcdef>

                <paramdef>
                    <link xlink:href="abstractDataTypes.html">cl_device_id</link>
                    <parameter>device</parameter>
                </paramdef>

                <paramdef>
                    <link xlink:href="enums.html#cl_device_info">cl_device_info</link>
                    <parameter>param_name</parameter>
                </paramdef>

                <paramdef>
                    <link xlink:href="scalarDataTypes.html">size_t</link>
                    <parameter>param_value_size</parameter>
                </paramdef>

                <paramdef>
                    <link xlink:href="scalarDataTypes.html">void</link>
                    <parameter>*param_value</parameter>
                </paramdef>

                <paramdef>
                    <link xlink:href="scalarDataTypes.html">size_t</link>
                    <parameter>*param_value_size_ret</parameter>
                </paramdef>
            </funcprototype>
        </funcsynopsis>
    </refsynopsisdiv>

<!-- ================================ PARAMETERS -->

    <refsect1 xmlns:xlink="http://www.w3.org/1999/xlink" id="parameters"><title>Parameters</title>
        <variablelist>
        <varlistentry>
            <term><varname>device</varname></term>
            <listitem>
                <para> <!-- The first sentence is not compatible with the second, but that's
                        how the API spec rev 19 reads, p. 66 -->
                  A device returned by 
                  <citerefentry><refentrytitle>clGetDeviceIDs</refentrytitle></citerefentry>.
                </para>
                <para>
                  May be a device returned by
                  <citerefentry><refentrytitle>clGetDeviceIDs</refentrytitle></citerefentry>
                  or a sub-device created by
                  <citerefentry><refentrytitle>clCreateSubDevices</refentrytitle></citerefentry>.
                  If <varname>device</varname> is a sub-device, the specific information for
                  the sub-device will be returned. The information that can be queried using
                  <function>clGetDeviceInfo</function> is specified in the table below (Table 4.3).
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>param_value</varname></term>
            <listitem>
                <para>
                  A pointer to memory location where appropriate values for a given
                  <varname>param_name</varname> as specified in the table below will be
                  returned. If <varname>param_value</varname> is NULL, it is ignored.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>param_value_size</varname></term> <listitem>
                <para>
                  Specifies the size in bytes of memory pointed to by
                  <varname>param_value</varname>.  This size in bytes must be &ge; size of
                  return type specified in the table below.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>param_value_size_ret</varname></term> <listitem>
                <para>
                  Returns the actual size in bytes of data being queried by
                  <varname>param_value</varname>. If <varname>param_value_size_ret</varname>
                  is NULL, it is ignored.
                </para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>param_name</varname></term> <listitem>
                <para>
                  An enumeration constant that identifies the device information being queried. It
                  can be one of the values as specified in the table below.
                </para>
            </listitem>
        </varlistentry>

<!-- ================================ PARAMETER TABLE (OPTIONAL) -->

        <varlistentry>
          <term></term>
          <listitem>
            <!-- table 4.3 -->

            <para>
                Table 4.3:
            </para>

            <informaltable frame="all">
              <tgroup cols="2" align="left" colsep="1" rowsep="1">
                <colspec colname="col1" colnum="1" />
                <colspec colname="col2" colnum="2" />
                <colspec colname="col3" colnum="3" />
                <thead>
                  <row>
                    <entry>cl_device_info</entry>
                    <entry>Return Type</entry>
                    <entry>Description</entry>
                  </row>
                </thead>

                <tbody>
                  <row>
                    <entry><constant>CL_DEVICE_ADDRESS_BITS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                       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.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_AVAILABLE</constant></entry>
                    <entry>cl_bool</entry>
                    <entry>
                      Is <constant>CL_TRUE</constant> if the device is available and
                      <constant>CL_FALSE</constant> otherwise. A device is 
                        considered to be available if the device can 
                        be expected to successfully execute 
                        commands enqueued to the device
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_BUILT_IN_KERNELS</constant></entry>
                    <entry>char[]</entry>
                    <entry>
                      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.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_COMPILER_AVAILABLE</constant></entry>
                    <entry>cl_bool</entry>
                    <entry>
                      Is <constant>CL_FALSE</constant> if the implementation does
                      not have a compiler available to compile the program source.
                      Is <constant>CL_TRUE</constant> if the compiler is available. This can
                      be <constant>CL_FALSE</constant> for the embedded platform profile only.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_DOUBLE_FP_CONFIG</constant></entry>
                    <entry><para>cl_device_-</para><para>fp_config</para></entry>
                    <entry>
                      Describes double precision floating-point capability of the
                      OpenCL device.  This is a bit-field that describes one or more of the following values:
                      <itemizedlist mark="disc">
                        <listitem><constant>CL_FP_DENORM</constant> - denorms are supported.</listitem>
                        <listitem><constant>CL_FP_INF_NAN</constant> - INF and NaNs are supported.</listitem>
                        <listitem><constant>CL_FP_ROUND_TO_NEAREST</constant> - round to nearest even rounding mode supported.</listitem>
                        <listitem><constant>CL_FP_ROUND_TO_ZERO</constant> - round to zero rounding mode supported.</listitem>
                        <listitem><constant>CL_FP_ROUND_TO_INF</constant> -
                            round to positive and negative infinity rounding modes supported.</listitem>
                        <listitem><constant>CL_FP_FMA</constant> - IEEE754-2008 fused multiply-add is supported. </listitem>
                        <listitem><constant>CL_FP_SOFT_FLOAT</constant> -  Basic floating-point operations (such as
                            addition, subtraction, multiplication) are implemented in software.</listitem>
                      </itemizedlist>

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

                      <para>
                        If double precision is supported by the device, then the minimum double
                        precision floating-point capability must be: <constant>CL_FP_FMA</constant>
                        |  <constant>CL_FP_ROUND_TO_NEAREST</constant> |
                        <constant>CL_FP_INF_NAN</constant> | <constant>CL_FP_DENORM</constant>.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_ENDIAN_LITTLE</constant></entry>
                    <entry>cl_bool</entry>
                    <entry>
                      Is <constant>CL_TRUE</constant> if the OpenCL device is a little endian
                      device and <constant>CL_FALSE</constant> otherwise.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_ERROR_
CORRECTION_SUPPORT</constant></entry>
                    <entry>cl_bool</entry>
                    <entry>
                      Is <constant>CL_TRUE</constant> if the device implements error correction
                      for all accesses to compute device memory (global and constant).
                      Is <constant>CL_FALSE</constant> if the device does not implement such
                      error correction.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_EXECUTION_CAPABILITIES</constant></entry>
                    <entry> <para>cl_device_-</para><para>exec_capabilities</para> </entry>
                    <entry>
                      Describes the execution capabilities of the device. This is
                      a bit-field that describes one or more of the following values:
                      <para><constant>CL_EXEC_KERNEL</constant> - The OpenCL device can execute
                      OpenCL kernels.</para> <para><constant>CL_EXEC_NATIVE_KERNEL</constant>
                      - The OpenCL device can execute native kernels.</para> <para>The mandated
                      minimum capability is <constant>CL_EXEC_KERNEL</constant>.</para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_EXTENSIONS</constant></entry>
                    <entry>char[]</entry>
                    <entry>
                      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:

                      <para>
                        <literallayout>
<citerefentry><refentrytitle>cl_khr_int64_base_atomics</refentrytitle></citerefentry>
<citerefentry><refentrytitle>cl_khr_int64_extended_atomics</refentrytitle></citerefentry>
<citerefentry><refentrytitle>cl_khr_fp16</refentrytitle></citerefentry>
<citerefentry><refentrytitle>cl_khr_gl_sharing</refentrytitle></citerefentry>
<citerefentry><refentrytitle>cl_khr_gl_event</refentrytitle></citerefentry>
<citerefentry><refentrytitle>cl_khr_d3d10_sharing</refentrytitle></citerefentry>
<citerefentry><refentrytitle>cl_khr_dx9_media_sharing</refentrytitle></citerefentry>
<citerefentry><refentrytitle>cl_khr_d3d11_sharing</refentrytitle></citerefentry>
<citerefentry><refentrytitle>cl_khr_gl_depth_images</refentrytitle></citerefentry>
<citerefentry><refentrytitle>cl_khr_gl_msaa_sharing</refentrytitle></citerefentry>
<citerefentry><refentrytitle>cl_khr_initialize_memory</refentrytitle></citerefentry>
cl_khr_context_abort
<citerefentry><refentrytitle>cl_khr_spir</refentrytitle></citerefentry>
<citerefentry><refentrytitle>cl_khr_srgb_image_writes</refentrytitle></citerefentry>
                        </literallayout>
                      </para>

                      <para>
                          The following approved Khronos extension names 
                          must be returned by all device that support OpenCL C 2.0:</para>
                      <para>
                        <literallayout>
cl_khr_byte_addressable_store
<citerefentry><refentrytitle>cl_khr_fp64</refentrytitle></citerefentry> (for backward compatibility if double precision is supported)
<citerefentry><refentrytitle>cl_khr_3d_image_writes</refentrytitle></citerefentry>
cl_khr_image2d_from_buffer
cl_khr_depth_images
                        </literallayout>
                      </para>

                      <para>
                       Please refer to the OpenCL 2.0 Extension Specification for a detailed description of these extensions.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_GLOBAL_MEM_CACHE_SIZE</constant></entry>
                    <entry>cl_ulong</entry>
                    <entry>Size of global memory cache in bytes.</entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_GLOBAL_MEM_CACHE_TYPE</constant></entry>
                    <entry> <para>cl_device_mem-</para><para>_cache_type</para> </entry>
                    <entry>
                      Type of global memory cache supported. Valid values are:
                      <constant>CL_NONE</constant>, <constant>CL_READ_ONLY_CACHE</constant>,
                      and <constant>CL_READ_WRITE_CACHE</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_GLOBAL_
MEM_CACHELINE_SIZE</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>Size of global memory cache line in bytes.</entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_GLOBAL_MEM_SIZE</constant></entry>
                    <entry>cl_ulong</entry>
                    <entry>Size of global device memory in bytes.</entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_GLOBAL_VARIABLE_
PREFERRED_TOTAL_SIZE</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                       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.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_IL_VERSION</constant></entry>
                    <entry>char []</entry>
                    <entry>
                        The intermediate languages that can be
                        supported by 
                        <citerefentry><refentrytitle>clCreateProgramWithIL</refentrytitle></citerefentry>
                        for this device. Returns a space-separated
                        list of IL version strings of the form
                        &lt;IL_Prefix>_&lt;Major_Version>.&lt;Minor_Version>. 
                        For OpenCL 2.1, "SPIR-V" is a
                        required IL prefix.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_IMAGE2D_MAX_HEIGHT</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                      Max height of 2D image in pixels. The minimum value is 16384 if
                      <constant>CL_DEVICE_IMAGE_SUPPORT</constant> is <constant>CL_TRUE</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_IMAGE2D_MAX_WIDTH</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                      Max width of 2D image or 1D image not created from a buffer object in pixels.
                      The minimum value is 16384 if <constant>CL_DEVICE_IMAGE_SUPPORT</constant>
                      is <constant>CL_TRUE</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_IMAGE3D_MAX_DEPTH</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                      Max depth of 3D image in pixels. The minimum value is 2048 if
                      <constant>CL_DEVICE_IMAGE_SUPPORT</constant> is <constant>CL_TRUE</constant>.</entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_IMAGE3D_MAX_HEIGHT</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                      Max height of 3D image in pixels. The minimum value is 2048 if
                      <constant>CL_DEVICE_IMAGE_SUPPORT</constant> is <constant>CL_TRUE</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_IMAGE3D_MAX_WIDTH</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                      Max width of 3D image in pixels. The minimum value is 2048 if
                      <constant>CL_DEVICE_IMAGE_SUPPORT</constant> is <constant>CL_TRUE</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_IMAGE_BASE_
ADDRESS_ALIGNMENT</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      This query should be used when a 2D
                        image is created from a buffer which was 
                        created using <constant>CL_MEM_USE_HOST_PTR</constant>. 
                        The value returned must be a power of 2.
                        This query specifies the minimum 
                        alignment in pixels of the <varname>host_ptr</varname>
                        specified to <citerefentry><refentrytitle>clCreateBuffer</refentrytitle></citerefentry>.
                        If the device does not support images, this 
                        value must be 0.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_IMAGE_MAX_ARRAY_SIZE</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                      Max number of images in a 1D or 2D image array.  The minimum value is 2048 if
                      <constant>CL_DEVICE_IMAGE_SUPPORT</constant> is <constant>CL_TRUE</constant>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_IMAGE_MAX_BUFFER_SIZE</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                      Max number of pixels for a 1D image created from a buffer object.
                      The minimum value is 65536 if <constant>CL_DEVICE_IMAGE_SUPPORT</constant>
                      is <constant>CL_TRUE</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_IMAGE_PITCH_ALIGNMENT</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      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.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_IMAGE_SUPPORT</constant></entry>
                    <entry>cl_bool</entry>
                    <entry>
                      Is <constant>CL_TRUE</constant> if images are supported by the OpenCL
                      device and <constant>CL_FALSE</constant> otherwise.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_LINKER_AVAILABLE</constant></entry>
                    <entry>cl_bool</entry>
                    <entry>
                      Is <constant>CL_FALSE</constant> if the implementation does not
                      have a linker available.  Is <constant>CL_TRUE</constant> if the
                      linker is available. This can be <constant>CL_FALSE</constant> for the embedded
                      platform profile only. This must be <constant>CL_TRUE</constant> if
                      <constant>CL_DEVICE_COMPILER_AVAILABLE</constant> is <constant>CL_TRUE</constant>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_LOCAL_MEM_SIZE</constant></entry>
                    <entry>cl_ulong</entry>
                    <entry>
                      Size of local memory region in bytes. The minimum value is 32 KB for
                      devices that are not of type <constant>CL_DEVICE_TYPE_CUSTOM</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_LOCAL_MEM_TYPE</constant></entry>
                    <entry> <para>cl_device_-</para><para>local_mem_type</para></entry>
                    <entry>
                      Type of local memory supported. This can be set to
                      <constant>CL_LOCAL</constant> implying dedicated local memory storage
                      such as SRAM, or <constant>CL_GLOBAL</constant>.  For custom devices,
                      <constant>CL_NONE</constant> can also be returned indicating no local
                      memory support.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_CLOCK_FREQUENCY</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>Maximum configured clock frequency of the device in MHz.</entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_COMPUTE_UNITS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      The number of parallel compute units on the OpenCL device.  A work-group executes
                      on a single compute unit. The minimum value is 1.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_CONSTANT_ARGS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      Max number of arguments declared with the <citerefentry
                      href="constant"><refentrytitle>__constant</refentrytitle></citerefentry>
                      qualifier in a kernel. The minimum value is 8 for devices that are not
                      of type <constant>CL_DEVICE_TYPE_CUSTOM</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_CONSTANT_
BUFFER_SIZE</constant></entry>
                    <entry>cl_ulong</entry>
                    <entry>
                      Max size in bytes of a constant buffer allocation.  The
                      minimum value is 64 KB for devices that are not of type
                      <constant>CL_DEVICE_TYPE_CUSTOM</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_GLOBAL_
VARIABLE_SIZE</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                      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.
                        The minimum value is 64 KB.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_MEM_ALLOC_SIZE</constant></entry>
                    <entry>cl_ulong</entry>
                    <entry>
                      Max size of memory object allocation in bytes. The minimum value is 
                        max(min(1024*1024*1024, 1/4th of 
                        <constant>CL_DEVICE_GLOBAL_MEM_SIZE</constant>), 32*1024*1024) for devices
                      that are not of type <constant>CL_DEVICE_TYPE_CUSTOM</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_NUM_SUB_GROUPS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                        Maximum number of sub-groups in a
                        work-group that a device is capable of
                        executing on a single compute unit, for any
                        given kernel-instance running on the
                        device. The minimum value is 1. (Refer
                        also to 
                        <citerefentry><refentrytitle>clGetKernelSubGroupInfo</refentrytitle></citerefentry>.)
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_ON_DEVICE_EVENTS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      The maximum number of events in use by 
                        a device queue. These refer to events 
                        returned by the <function>enqueue_</function> built-in 
                        functions to a device queue or user events 
                        returned by the 
                        <citerefentry><refentrytitle>create_user_event</refentrytitle></citerefentry>
                        built-in function that have not been 
                        released.
                        The minimum value is 1024.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_ON_DEVICE_QUEUES</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      The maximum number of device queues 
                        that can be created per context.
                        The minimum value is 1.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_PARAMETER_SIZE</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                      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
                      <constant>CL_DEVICE_TYPE_CUSTOM</constant>.  For this minimum value,
                      only a maximum of 128 arguments can be passed to a kernel.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_PIPE_ARGS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      The maximum number of pipe objects that 
                        can be passed as arguments to a kernel. 
                        The minimum value is 16.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_READ_IMAGE_ARGS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      Max number of image objects arguments 
                        of a kernel declared with the <code>read_only</code>
                        qualifier. The
                      minimum value is 128 if <constant>CL_DEVICE_IMAGE_SUPPORT</constant>
                      is <constant>CL_TRUE</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_READ_
WRITE_IMAGE_ARGS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      Max number of image objects arguments 
                        of a kernel declared with the <code>write_only</code> or <code>read_write</code>
                        qualifier. The
                      minimum value is 64 if <constant>CL_DEVICE_IMAGE_SUPPORT</constant>
                      is <constant>CL_TRUE</constant>.
                        NOTE: <constant>CL_DEVICE_MAX_WRITE_IMAGE_ARGS</constant> 
                        is only there for backward compatibility. 
                        <constant>CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS</constant> 
                        should be used instead.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_SAMPLERS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      Maximum number of samplers that can be used in a kernel.  The minimum
                      value is 16 if <constant>CL_DEVICE_IMAGE_SUPPORT</constant>
                      is <constant>CL_TRUE</constant>.  (Also see
                      <citerefentry><refentrytitle>sampler_t</refentrytitle></citerefentry>.)
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_WORK_GROUP_SIZE</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                      Maximum number of work-items in a
                      work-group that a device is capable of
                      executing on a single compute unit, for any
                      given kernel-instance running on the device.
                      (Refer also to 
                      <citerefentry><refentrytitle>clEnqueueNDRangeKernel</refentrytitle></citerefentry>)
                      and <constant>CL_KERNEL_WORK_GROUP_SIZE</constant>).
                      The minimum value is 1.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_WORK_ITEM_
DIMENSIONS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      Maximum dimensions that specify the global and local
                      work-item IDs used by the data parallel execution model. (Refer to
                      <citerefentry><refentrytitle>clEnqueueNDRangeKernel</refentrytitle></citerefentry>).
                      The minimum value is 3 for devices that are not of type
                      <constant>CL_DEVICE_TYPE_CUSTOM</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_WORK_ITEM_SIZES</constant></entry>
                    <entry>size_t[]</entry>
                    <entry>
                      <para>
                        Maximum number of work-items that can be
                        specified in each dimension of the work-group to
                        <citerefentry><refentrytitle>clEnqueueNDRangeKernel</refentrytitle></citerefentry>.
                      </para>

                      <para>
                        Returns <varname>n</varname> <type>size_t</type> entries, where
                        <varname>n</varname> is the value returned by the query for
                        <constant>CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS</constant>.
                      </para>

                      <para>
                        The minimum value is (1, 1, 1) for devices that are not of type
                        <constant>CL_DEVICE_TYPE_CUSTOM</constant>.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MAX_WRITE_IMAGE_ARGS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                        Max number of image objects arguments 
                        of a kernel declared with the 
                        <code>write_only</code> qualifier. 
                        The minimum value is 64 if
                        <constant>CL_DEVICE_IMAGE_SUPPORT</constant> is <constant>CL_TRUE</constant>.
                        NOTE: <constant>CL_DEVICE_MAX_WRITE_IMAGE_ARGS</constant> 
                        is only there for backward compatibility. 
                        <constant>CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS</constant> 
                        should be used instead.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_MEM_BASE_ADDR_ALIGN</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      Alignment requirement (in bits) for sub-buffer offsets.
                      The minimum value is the size (in bits) of the largest OpenCL built-in
                      data type supported by the device (<type>long16</type> in FULL profile,
                      <type>long16</type> or <type>int16</type> in EMBEDDED profile) for devices
                      that are not of type <constant>CL_DEVICE_TYPE_CUSTOM</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_NAME</constant></entry>
                    <entry>char[]</entry>
                    <entry>Device name string.</entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_NATIVE_
VECTOR_WIDTH_CHAR</constant>
                      <para><constant>CL_DEVICE_NATIVE_
VECTOR_WIDTH_SHORT</constant></para>
                      <para><constant>CL_DEVICE_NATIVE_
VECTOR_WIDTH_INT</constant></para>
                      <para><constant>CL_DEVICE_NATIVE_
VECTOR_WIDTH_LONG</constant></para>
                      <para><constant>CL_DEVICE_NATIVE_
VECTOR_WIDTH_FLOAT</constant></para>
                      <para><constant>CL_DEVICE_NATIVE_
VECTOR_WIDTH_DOUBLE</constant></para>
                      <para><constant>CL_DEVICE_NATIVE_
VECTOR_WIDTH_HALF</constant></para></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      <para>
                        Returns the native ISA vector width. The vector width is defined as
                        the number of scalar elements that can be stored in the vector.
                      </para>

                      <para>
                        If double precision is not supported,
                        <constant>CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE</constant> must return 0.
                      </para>

                      <para>
                        If the
                        <citerefentry><refentrytitle>cl_khr_fp16</refentrytitle></citerefentry>
                        extension is not supported,
                        <constant>CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF</constant> must return 0.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_OPENCL_C_VERSION</constant></entry>
                    <entry>char[]</entry>
                    <entry>
                      <para>
                        OpenCL C version string. Returns the highest OpenCL C version
                        supported by the compiler for this device that is not of type
                        <constant>CL_DEVICE_TYPE_CUSTOM</constant>. This version string has
                        the following format:
                      </para>

                      <para>
                        <varname>
                        OpenCL&lt;space&gt;C&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;vendor-specific
                        information&gt; </varname>
                      </para>

                      <para>
                        The <varname>major_version.minor_version</varname> value returned must
                        be 2.0 if <constant>CL_DEVICE_VERSION</constant> is OpenCL 2.0.
                      </para>

                      <para>
                        The <varname>major_version.minor_version</varname> value returned must
                        be 1.2 if <constant>CL_DEVICE_VERSION</constant> is OpenCL 1.2.
                      </para>

                      <para>
                        The <varname>major_version.minor_version</varname> value returned must
                        be 1.1 if <constant>CL_DEVICE_VERSION</constant> is OpenCL 1.1.
                      </para>

                      <para>
                        The <varname>major_version.minor_version</varname> value returned can
                        be 1.0 or 1.1 if <constant>CL_DEVICE_VERSION</constant> is OpenCL 1.0.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PARENT_DEVICE</constant></entry>
                    <entry>cl_device_id</entry>
                    <entry>
                      Returns the <type>cl_device_id</type> of the parent device to which this sub-device
                      belongs. If <varname>device</varname> is a root-level device, a NULL value is returned.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PARTITION_
AFFINITY_DOMAIN</constant></entry>
                    <entry><para>cl_device_aff-</para>
                           <para>inity_domain</para></entry>
                    <entry>
                      Returns the list of supported affinity domains for partitioning the <varname>device</varname> using
                      <constant>CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN</constant>.
                      This is a bit-field that describes one or more of the following values:
                      <itemizedlist mark="disc">
                        <listitem><constant>CL_DEVICE_AFFINITY_DOMAIN_NUMA</constant></listitem>
                        <listitem><constant>CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE</constant></listitem>
                        <listitem><constant>CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE</constant></listitem>
                        <listitem><constant>CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE</constant></listitem>
                        <listitem><constant>CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE</constant></listitem>
                        <listitem><constant>CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE</constant></listitem>
                      </itemizedlist>
                      If the device does not support any affinity domains, a value of 0 will be returned.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PARTITION_MAX_
SUB_DEVICES</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      Returns the maximum number of sub-devices that can be created
                      when a device is partitioned. The value returned cannot exceed
                      <constant>CL_DEVICE_MAX_COMPUTE_UNITS</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PARTITION_PROPERTIES</constant></entry>
                    <entry><para>cl_device_partit-</para><para>ion_property[]</para></entry>
                    <entry>
                      Returns the list of partition types supported by <varname>device</varname>. This is an array of
                      <type>cl_device_partition_property</type> values drawn from the following list:
                      <itemizedlist mark="disc">
                        <listitem><constant>CL_DEVICE_PARTITION_EQUALLY</constant></listitem>
                        <listitem><constant>CL_DEVICE_PARTITION_BY_COUNTS</constant></listitem>
                        <listitem><constant>CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN</constant></listitem>
                      </itemizedlist>
                      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.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PARTITION_TYPE</constant></entry>
                    <entry><para>cl_device_part-</para>
                           <para>ition_property[]</para></entry>
                    <entry>
                      Returns the <varname>properties</varname> argument specified in
                      <citerefentry><refentrytitle>clCreateSubDevices</refentrytitle></citerefentry>
                      if <varname>device</varname> is a subdevice. In the case where the <varname>properties</varname>
                        argument to <citerefentry><refentrytitle>clCreateSubDevices</refentrytitle></citerefentry> is
                        <constant>CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN</constant>,
                        <constant>CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE</constant>, the affinity domain used to 
                        perform the partition will be returned. This 
                        can be one of the following values:
                      <itemizedlist mark="disc">
                        <listitem><constant>CL_DEVICE_AFFINITY_DOMAIN_NUMA</constant></listitem>
                        <listitem><constant>CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE</constant></listitem>
                        <listitem><constant>CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE</constant></listitem>
                        <listitem><constant>CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE</constant></listitem>
                        <listitem><constant>CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE</constant></listitem>
                      </itemizedlist>
                        Otherwise the implementation may either 
                        return a <varname>param_value_size_ret</varname> of 0 i.e. 
                        there is no partition type associated with 
                        <varname>device</varname> or can return a property value of 0 
                        (where 0 is used to terminate the partition 
                        property list) in the memory that 
                        <varname>param_value</varname> points to.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PIPE_MAX_
ACTIVE_RESERVATIONS</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                       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.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PIPE_MAX_PACKET_SIZE</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>The maximum size of pipe packet in bytes. 
                            The minimum value is 1024 bytes.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PLATFORM</constant></entry>
                    <entry><link xlink:href="abstractDataTypes.html">cl_platform_id</link></entry>
                    <entry>The platform associated with this device.</entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PREFERRED_
GLOBAL_ATOMIC_ALIGNMENT</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                       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.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PREFERRED_
INTEROP_USER_SYNC</constant></entry>
                    <entry>cl_bool</entry>
                    <entry>
                      Is <constant>CL_TRUE</constant> 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, <constant>CL_FALSE</constant> if the
                      device / implementation has a performant path for performing synchronization
                      of memory object shared between OpenCL and other APIs such as DirectX
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PREFERRED_
LOCAL_ATOMIC_ALIGNMENT</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                       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.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PREFERRED_
PLATFORM_ATOMIC_ALIGNMENT</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                       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.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PREFERRED_
VECTOR_WIDTH_CHAR</constant>
                      <para><constant>CL_DEVICE_PREFERRED_
VECTOR_WIDTH_SHORT</constant></para>
                      <para><constant>CL_DEVICE_PREFERRED_
VECTOR_WIDTH_INT</constant></para>
                      <para><constant>CL_DEVICE_PREFERRED_
VECTOR_WIDTH_LONG</constant></para>
                      <para><constant>CL_DEVICE_PREFERRED_
VECTOR_WIDTH_FLOAT</constant></para>
                      <para><constant>CL_DEVICE_PREFERRED_
VECTOR_WIDTH_DOUBLE</constant></para>
                      <para><constant>CL_DEVICE_PREFERRED_
VECTOR_WIDTH_HALF</constant></para></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      <para>
                        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.
                      </para>

                      <para>
                        If double precision is not supported,
                        <constant>CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE</constant> must return 0.
                      </para>

                      <para>
                        If the
                        <citerefentry><refentrytitle>cl_khr_fp16</refentrytitle></citerefentry>
                        extension is not supported,
                        <constant>CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF</constant> must return 0.
                      </para>

                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PRINTF_BUFFER_SIZE</constant></entry>
                    <entry>size_t</entry>
                    <entry>
                      Maximum size in bytes of the internal buffer that holds the output of <citerefentry
                      href="printfFunction"><refentrytitle>printf</refentrytitle></citerefentry>
                      calls from a kernel. The minimum value for the FULL profile is 1 MB.
                    </entry>
                  </row>


                  <row>
                    <entry><constant>CL_DEVICE_PROFILE</constant></entry>
                    <entry>char[]</entry>
                    <entry>
                      <para>
                        OpenCL profile string. Returns the profile name supported by the device
                        (see note).  The profile name returned can be one of the following strings:
                      </para>

                      <para>
                        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).
                      </para>

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

                      <para>
                        The platform profile returns the profile that is 
                        implemented by the OpenCL framework. If the 
                        platform profile 
                        returned is <constant>FULL_PROFILE</constant>, 
                        the OpenCL framework will support devices that 
                        are <constant>FULL_PROFILE</constant> and may also 
                        support devices that are <constant>EMBEDDED_PROFILE</constant>. 
                        The compiler must be available for all devices i.e.
                        <constant>CL_DEVICE_COMPILER_AVAILABLE</constant> 
                        is <constant>CL_TRUE</constant>. If the 
                        platform profile returned is 
                        <constant>EMBEDDED_PROFILE</constant>, then 
                        devices that are only <constant>EMBEDDED_PROFILE</constant> are supported.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_PROFILING_
TIMER_RESOLUTION</constant></entry>
                    <entry>size_t</entry>
                    <entry>Describes the resolution of device timer. This is measured in nanoseconds.</entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_QUEUE_ON_
DEVICE_MAX_SIZE</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      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
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_QUEUE_ON_
DEVICE_PREFERRED_SIZE</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      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.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_QUEUE_
ON_DEVICE_PROPERTIES</constant></entry>
                    <entry>
                      <para>cl_command_-</para>
                      <para>queue_properties</para>
                    </entry>

                    <entry>
                      <para>
                        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:
                      </para>

                      <para><constant>CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</constant></para>
                      <para><constant>CL_QUEUE_PROFILING_ENABLE</constant></para>
                      <para>
                        These properties are described in the table for
                        <citerefentry><refentrytitle>clCreateCommandQueueWithProperties</refentrytitle></citerefentry>.
                        The mandated minimum capability is
                        <constant>CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</constant>
                        | <constant>CL_QUEUE_PROFILING_ENABLE</constant>.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_QUEUE_ON_
HOST_PROPERTIES</constant></entry>
                    <entry>
                      <para>cl_command_-</para>
                      <para>queue_properties</para>
                    </entry>

                    <entry>
                      <para>
                        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:
                      </para>

                      <para><constant>CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE</constant></para>
                      <para><constant>CL_QUEUE_PROFILING_ENABLE</constant></para>
                      <para>
                        These properties are described in the table for
                        <citerefentry><refentrytitle>clCreateCommandQueueWithProperties</refentrytitle></citerefentry>.
                        The mandated minimum capability is
                        <constant>CL_QUEUE_PROFILING_ENABLE</constant>.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_REFERENCE_COUNT</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      Returns the <varname>device</varname> reference count. If the device is a root-level device,
                      a reference count of one is returned.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_SINGLE_FP_CONFIG</constant></entry>
                    <entry><para>cl_device_-</para><para>fp_config</para></entry>
                    <entry>
                      <para>
                        Describes single precision floating-point capability of the device. This
                        is a bit-field that describes one or more of the following values:
                      </para>

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

                      <para>
                        <constant>CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT</constant> - divide and
                        sqrt are correctly rounded as defined by the IEEE754 specification.
                      </para>

                      <para>
                        <constant>CL_FP_SOFT_FLOAT</constant> - Basic floating-point operations
                        (such as addition, subtraction, multiplication) are implemented in
                        software.
                      </para>

                      <para>
                        For the full profile, the mandated minimum 
                        floating-point capability for devices that
                        are not of type <constant>CL_DEVICE_TYPE_CUSTOM</constant>
                        is <constant>CL_FP_ROUND_TO_NEAREST</constant> |
                        <constant>CL_FP_INF_NAN</constant>.
                        For the embedded profile, see section 10.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_SPIR_VERSIONS</constant></entry>
                    <entry>char []</entry>
                    <entry>
                        If the <citerefentry><refentrytitle>cl_khr_spir</refentrytitle></citerefentry>
                        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.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_SUBGROUP_
INDEPENDENT_
FORWARD_PROGRESS</constant></entry>
                    <entry>cl_bool</entry>
                    <entry>
                        Is <constant>CL_TRUE</constant> if this device supports
                        independent forward progress of sub-groups, 
                        <constant>CL_FALSE</constant> otherwise. If
                        <citerefentry><refentrytitle>cl_khr_subgroups</refentrytitle></citerefentry> 
                        is supported by the
                        device this must return <constant>CL_TRUE</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_SVM_CAPABILITIES</constant></entry>
                    <entry><para>cl_device_svm_-</para><para>capabilities</para></entry>
                    <entry><para>
                      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:</para>

                        <para><constant>CL_DEVICE_SVM_COARSE_GRAIN_BUFFER</constant> – 
                        Support for coarse-grain buffer 
                        sharing using <citerefentry><refentrytitle>clSVMAlloc</refentrytitle></citerefentry>. Memory 
                        consistency is guaranteed at 
                        synchronization points and the host must 
                        use calls to 
                        <citerefentry><refentrytitle>clEnqueueMapBuffer</refentrytitle></citerefentry> and 
                        <citerefentry><refentrytitle>clEnqueueUnmapMemObject</refentrytitle></citerefentry>.</para>

                        <para><constant>CL_DEVICE_SVM_FINE_GRAIN_BUFFER</constant>
                        – Support for fine-grain buffer sharing 
                        using <citerefentry><refentrytitle>clSVMAlloc</refentrytitle></citerefentry>. Memory consistency 
                        is guaranteed atsynchronization points 
                        without need for <citerefentry><refentrytitle>clEnqueueMapBuffer</refentrytitle></citerefentry>
                        and <citerefentry><refentrytitle>clEnqueueUnmapMemObject</refentrytitle></citerefentry>.</para>

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

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

                        <para>
                            The mandated minimum capability is 
                            <constant>CL_DEVICE_SVM_COARSE_GRAIN_BUFFER</constant>.
                        </para>

                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_TERMINATE_CAPABILITY_KHR</constant></entry>
                    <entry>cl_device_terminate_capability_khr</entry>
                    <entry>
                        If the 
                        <citerefentry><refentrytitle>cl_khr_terminate_context</refentrytitle></citerefentry> 
                        extension is enabled, describes the termination capability of the OpenCL 
                        device. This is a bitfield where a value of 
                        <constant>CL_DEVICE_TERMINATE_CAPABILITY_CONTEXT_KHR</constant>
                        indicates that context termination is supported.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_TYPE</constant></entry>
                    <entry>cl_device_type</entry>
                    <entry>
                      The OpenCL device type. Currently supported values are:
                      <constant>CL_DEVICE_TYPE_CPU</constant>,
                      <constant>CL_DEVICE_TYPE_GPU</constant>,
                      <constant>CL_DEVICE_TYPE_ACCELERATOR</constant>,
                      <constant>CL_DEVICE_TYPE_DEFAULT</constant>, a combination of the above
                      types, or <constant>CL_DEVICE_TYPE_CUSTOM</constant>.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_VENDOR</constant></entry>
                    <entry>char[]</entry>
                    <entry>Vendor name string.</entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_VENDOR_ID</constant></entry>
                    <entry>cl_uint</entry>
                    <entry>
                      A unique device vendor identifier. An example of a unique device identifier
                      could be the PCIe ID.
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DEVICE_VERSION</constant></entry>
                    <entry>char[]</entry>
                    <entry>
                      <para>
                        OpenCL version string. Returns the OpenCL version supported by the
                        device. This version string has the following format:
                      </para>

                      <para>
                        <varname>
                        OpenCL&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;vendor-specific
                        information&gt; </varname>
                      </para>

                      <para>
                        The <varname>major_version.minor_version</varname> value returned will
                        be 2.1.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_DRIVER_VERSION</constant></entry>
                    <entry>char[]</entry>
                    <entry>
                      OpenCL software driver version string in the form
                      <varname>major_number.minor_number</varname>.
                    </entry>
                  </row>
                </tbody>
              </tgroup>
            </informaltable>
          </listitem>
        </varlistentry>

<!-- ================================ END PARAMETER TABLE  -->

     </variablelist>
  </refsect1>

<!-- ================================ NOTES  -->

    <refsect1 id="notes"><title>Notes</title>
        <para>
          <constant>CL_DEVICE_PROFILE</constant>: The platform profile returns the profile
          that is implemented by the OpenCL framework. If the platform profile returned is
          <constant>FULL_PROFILE</constant>, the OpenCL framework will support devices 
          that are <constant>FULL_PROFILE</constant> and may
          also support devices that are <constant>EMBEDDED_PROFILE</constant>. The compiler must
          be available for all devices i.e. <constant>CL_DEVICE_COMPILER_AVAILABLE</constant>
          is <constant>CL_TRUE</constant>. If the platform profile returned
          is <constant>EMBEDDED_PROFILE</constant>, then devices that are only
          <constant>EMBEDDED_PROFILE</constant> are supported.
        </para>

        <para>
          The device queries described in the table above should return the
          same information for a root-level device i.e. a device returned by
          <citerefentry><refentrytitle>clGetDeviceIDs</refentrytitle></citerefentry> and any
          sub-devices created from this device except for the following queries:

            <itemizedlist mark="disc">
                <listitem><constant>CL_DEVICE_GLOBAL_MEM_CACHE_SIZE</constant></listitem>
                <listitem><constant>CL_DEVICE_BUILT_IN_KERNELS</constant></listitem>
                <listitem><constant>CL_DEVICE_PARENT_DEVICE</constant></listitem>
                <listitem><constant>CL_DEVICE_PARTITION_TYPE</constant></listitem>
                <listitem><constant>CL_DEVICE_REFERENCE_COUNT</constant></listitem>
            </itemizedlist>
        </para>
    </refsect1>

<!-- ================================ ERRORS  -->

  <refsect1 id="errors"><title>Errors</title>
    <para>
      <function>clGetDeviceInfo</function> returns <errorname>CL_SUCCESS</errorname> if the
      function is executed successfully. Otherwise, it returns the following:
    </para>

    <itemizedlist mark="disc">
        <listitem>
            <errorname>CL_INVALID_DEVICE</errorname> if <varname>device</varname> is not valid.
        </listitem>

        <listitem>
          <errorname>CL_INVALID_VALUE</errorname> if <varname>param_name</varname>
          is not one of the supported values or if size in bytes specified by
          <varname>param_value_size</varname> is less than size of return type as shown in the
          table above and <varname>param_value</varname> is not a <errorname>NULL</errorname>
          value or if <varname>param_name</varname> is a value that is available as an extension and the corresponding
          extension is not supported by the device.
        </listitem>

        <listitem>
          <errorname>CL_OUT_OF_RESOURCES</errorname> if there is a failure to allocate resources
          required by the OpenCL implementation on the device.
        </listitem>

        <listitem>
          <errorname>CL_OUT_OF_HOST_MEMORY</errorname> if there is a failure to allocate
          resources required by the OpenCL implementation on the host.
        </listitem>

        </itemizedlist>
    </refsect1>

<!-- ================================ EXAMPLE  -->
<!-- DO NOT DELETE IN CASE AN EXAMPLE IS ADDED IN THE FUTURE -->
<!--
    <refsect2 id="example1">
        <title>
            Example
        </title>

        <informaltable frame="none">
            <tgroup cols="1" align="left" colsep="0" rowsep="0">
                <colspec colname="col1" colnum="1" />
                <tbody>
                    <row>
                        <entry>
                            Example goes here - it will be set in "code" type with white space preserved.
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </informaltable>
    </refsect2>
-->

<!-- ================================ SPECIFICATION  -->
<!-- Set the "uri" attribute in the <olink /> element to the "named destination" for the PDF page
-->
    <refsect1 id="specification"><title>Specification</title>
        <para><imageobject><imagedata fileref="pdficon_small1.gif" format="gif" /></imageobject>
            <olink uri="clGetDeviceInfo">OpenCL Specification</olink>
        </para>
    </refsect1>

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

    <refsect1 id="seealso"><title>Also see</title>
        <para>
            <citerefentry><refentrytitle>clGetDeviceIDs</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>cl_khr_fp64</refentrytitle></citerefentry>,
            <citerefentry href="constant"><refentrytitle>__constant</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clCreateCommandQueueWithProperties</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clRetainCommandQueue</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clEnqueueNDRangeKernel</refentrytitle></citerefentry>
        </para>
    </refsect1>

<!-- ============================== COPYRIGHT -->
<!-- Content included from copyright.inc.xsl -->

    <refsect3 id="Copyright"><title></title>
        <imageobject>
                <imagedata fileref="KhronosLogo.jpg" format="jpg" />
        </imageobject>
        <para />
    </refsect3>

<!-- 9-Nov-2015, API ver 2.1 rev 19; Ext ver 2.1 rev 10; C lang ver 2.0 rev 30 -->
</refentry>

