<?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>clGetCommandQueueInfo</keyword></keywordset>
    </refentryinfo>
    <refmeta>
        <refentrytitle>clGetCommandQueueInfo</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="clGetCommandQueueInfo">
    <refname>clGetCommandQueueInfo</refname>
           <refpurpose>Query information about a command-queue.</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>clGetCommandQueueInfo</function>
                </funcdef>
                <paramdef>
                    <link xlink:href="abstractDataTypes.html">cl_command_queue</link>
                    <parameter>command_queue</parameter>
                </paramdef>
                <paramdef>
                    <link xlink:href="enums.html#cl_command_queue_info">cl_command_queue_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 id="parameters"><title>Parameters</title>
        <variablelist>
        <varlistentry>
            <term><varname>command_queue</varname></term>
            <listitem>
                <para>Specifies the command-queue being queried.</para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>param_name</varname></term>
            <listitem>
                <para>Specifies the information to query.</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 must be &ge; size
                    of return type as described in the table below.
                    If <varname>param_value</varname> is NULL, it is ignored.</para>
            </listitem>
        </varlistentry>

        <varlistentry>
            <term><varname>param_value</varname></term>
            <listitem>
                <para>A pointer to memory where the appropriate result being queried
                    is returned. If <varname>param_value</varname> is NULL, it is ignored.
                    </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>

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

        <varlistentry>
          <term></term>
          <listitem>
            <para>
              The list of supported <varname>param_name</varname> values and
              the information returned in <varname>param_value</varname> by
              <function>clGetCommandQueueInfo</function> is described in the table below.
            </para>

            <!-- Table 5.2 -->
            <informaltable frame="all">
              <tgroup cols="2" align="left" colsep="1" rowsep="1">
                <colspec colname="col1" colnum="1" />
                <colspec colname="col2" colnum="2" />
                <thead>
                  <row>
                    <entry>cl_command_queue_info</entry>
                    <entry>Return Type and Information returned in param_value</entry>
                  </row>
                </thead>

                <tbody>
                  <row>
                    <entry><constant>CL_QUEUE_CONTEXT</constant></entry>
                    <entry>
                      Return type: <type>cl_context</type>

                      <para>Return the context specified when the command-queue is created.</para></entry>
                  </row>

                  <row>
                    <entry><constant>CL_QUEUE_DEVICE</constant></entry>
                    <entry>
                      Return type: <type>cl_device_id</type>

                      <para>Return the device specified when the command-queue is created.</para></entry>
                  </row>

                  <row>
                    <entry><constant>CL_QUEUE_REFERENCE_COUNT</constant></entry>
                    <entry>
                      Return type: <type>cl_uint</type>

                      <para>Return the command-queue reference count.</para>
                      <para>
                        The reference count returned with
                        <constant>CL_QUEUE_REFERENCE_COUNT</constant> should be considered
                        immediately stale. It is unsuitable for general use in applications. This
                        feature is provided for identifying memory leaks.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_QUEUE_PROPERTIES</constant></entry>
                    <entry>
                      Return type: <type>cl_command_queue_properties</type>

                      <para>
                        Return the currently specified properties for the command-queue. These
                        properties are specified by the value associated with the
                        <constant>CL_COMMAND_QUEUE_PROPERTIES</constant>
                        passed in <varname>properties</varname> argument in 
                        <citerefentry><refentrytitle>clCreateCommandQueueWithProperties</refentrytitle></citerefentry>.
                      </para>
                    </entry>
                  </row>

                  <row>
                    <entry><constant>CL_QUEUE_SIZE</constant></entry>
                    <entry>
                      Return type: <type>cl_uint</type>

                      <para>
                        Return the currently specified size for the device command-queue.
                        This query is only supported for device command queues.
                      </para>
                    </entry>
                  </row>

                </tbody>
              </tgroup>
            </informaltable>
          </listitem>
        </varlistentry>

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

      </variablelist>
    </refsect1>

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

    <refsect1 id="notes"><title>Notes</title>
        <para>
          It is possible that a device(s) becomes unavailable after a context and command-queues
          that use this device(s) have been created and commands have been queued to
          command-queues. In this case the behavior of OpenCL API calls that use this context
          (and command-queues) are considered to be implementation-defined.  The user callback
          function, if specified, when the context is created can be used to record appropriate
          information in the <varname>errinfo</varname>, <varname>private_info</varname>
          arguments passed to the callback function when the device becomes unavailable.
        </para>
    </refsect1>

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

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

        <itemizedlist mark="disc">
            <listitem>
              Returns <errorname>CL_INVALID_COMMAND_QUEUE</errorname> if
              <varname>command_queue</varname> is not a valid command-queue.
            </listitem>

            <listitem>
              Returns <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 and
              <varname>param_value</varname> is not a NULL value.
            </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="clGetCommandQueueInfo">OpenCL Specification</olink>
        </para>
    </refsect1>

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

    <refsect1 id="seealso"><title>Also see</title>
        <para>
            <citerefentry><refentrytitle>clCreateCommandQueueWithProperties</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clReleaseCommandQueue</refentrytitle></citerefentry>,
            <citerefentry><refentrytitle>clRetainCommandQueue</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>

<!-- 25-Dec-2013, rev. 19 -->
</refentry>

