<?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>                            
                clGetContextInfo
            </keyword>
        </keywordset>
    </refentryinfo>

    <refmeta>                                    
        <refentrytitle>clGetContextInfo</refentrytitle>


        <refmiscinfo>
            <copyright>
                <year>2007-2009</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>2</manvolnum>
  
    </refmeta>


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

    <refnamediv id="clGetDeviceIDs">             
        <refname>clGetContextInfo</refname> 
                                                
        <refpurpose>                             
            Query information about a context.
        </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>                   
                        clGetContextInfo
                    </function>
                </funcdef>

                <paramdef><link xlink:href="abstractDataTypes.html">cl_context</link><parameter>context</parameter></paramdef>
                <paramdef><link xlink:href="enums.html#cl_context_info">cl_context_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> <!-- parameter name -->
                        context
                    </varname>
                </term>

                <listitem>
                    <para> <!-- parameter description -->
                        Specifies the OpenCL context being queried.
                    </para>
               </listitem>
            </varlistentry>
        

        

            <varlistentry>
                <term>
                    <varname> <!-- parameter name -->
                        param_name
                    </varname>
                </term>

                <listitem>
                    <para> <!-- parameter description -->
                        An enumeration constant that specifies the information to query.
                        The valid values for <varname>param_name</varname> are:
                    </para>
                
                    <informaltable frame="all">
                        <tgroup cols="3" 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_context_info</entry>
                                    <entry>Return Type</entry>
                                    <entry>Information returned in param_value</entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><constant>CL_CONTEXT_REFERENCE_COUNT</constant></entry>
                                    <entry>cl_uint</entry>
                                    <entry>
                                        Return the <varname>context</varname> reference count. The reference count returned should be considered immediately stale. It is unsuitable for general use in applications. This feature is provided for identifying memory leaks.
                                    </entry>
                                </row>
        
                                <row>
                                    <entry><constant>CL_CONTEXT_DEVICES</constant></entry>
                                    <entry>cl_device_id[]</entry>
                                    <entry>
                                        Return the list of devices in <varname>context</varname>.
                                    </entry>
                                </row>
        
                                <row>
                                    <entry><constant>CL_CONTEXT_PROPERTIES</constant></entry>
                                    <entry>cl_context_properties[]</entry>
                                    <entry>
                                        Return the properties argument specified in <citerefentry><refentrytitle>clCreateContext</refentrytitle></citerefentry>.
                                    </entry>
                                </row>
                            </tbody>    
                        </tgroup>
                    </informaltable>
                </listitem>
            </varlistentry>
            <!-- END PARAMETER TABLE  -->          

            <varlistentry>
                <term>
                    <varname> <!-- parameter name -->
                        param_value
                    </varname>
                </term>

                <listitem>
                    <para> <!-- parameter description -->
                         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> <!-- parameter name -->
                        param_value_size
                    </varname>
                </term>

                <listitem>
                    <para> <!-- parameter description -->
                         Specifies the size in bytes of memory pointed to by <varname>param_value</varname>. This size must be greater than or equal to the size of return type as described in the table above.
                    </para>
                </listitem>
            </varlistentry>

            <varlistentry>
                <term>
                    <varname> <!-- parameter name -->
                        param_value_size_ret
                    </varname>
                </term>

                <listitem>
                    <para> <!-- parameter description -->
                        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>
        </variablelist>
    </refsect1>

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

    <!-- refsect1 id="notes"><title>Notes</title>
        <para>
            <function>
                clGetContextInfo
            </function>
            Notes go here
        </para>

        <para>
            The application can query specific capabilities of the OpenCL device(s) returned by
            <function>clGetDeviceIDs</function>. This can be used by the application to determine
            which device(s) to use.
        </para>
    </refsect1 -->
    

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

    <refsect1 id="errors"><title>Errors</title>
        <para>
            Returns <errorname>CL_SUCCESS</errorname> if the function executed successfully, or one of the errors below:
        </para>

        <itemizedlist mark="disc">
            <listitem>
                <errorname>CL_INVALID_CONTEXT</errorname> if <varname>context</varname>
                is not a valid context.
            </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 specified in the table above and <varname>param_value</varname> is not a <errorname>NULL</errorname> value.
            </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="clGetContextInfo">OpenCL Specification</olink>
        </para>
    </refsect1>     


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

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

</refentry>

