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

    <refmeta>
        <refentrytitle>       
            clGetProgramBuildInfo
        </refentrytitle>

        <refmiscinfo>
            <copyright>
                <year>2007-2010</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="clGetProgramBuildInfo">
        <refname>     
            clGetProgramBuildInfo
        </refname> 

        <refpurpose>          
            Returns build information for each device in the program object.
        </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>clGetProgramBuildInfo</function>
                </funcdef>

                <paramdef><link xlink:href="abstractDataTypes.html">cl_program</link> <parameter>program</parameter></paramdef>,
                <paramdef>cl_device_id <parameter>device</parameter></paramdef>,
                <paramdef><link xlink:href="enums.html#cl_command_queue_properties">cl_program_build_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>program</varname></term>
                <listitem><para> Specifies the program object being queried.</para></listitem>
            </varlistentry>

            <varlistentry>
                <term><varname>device</varname></term>
                <listitem><para>
                    Specifies the device for which build information is being queried. 
                    <varname>device</varname> must be a valid device associated with <varname>program</varname>.
                </para></listitem>
            </varlistentry>

            <varlistentry>
                <term><varname> 
                        param_name
                </varname></term>

                <listitem>
                    <para> 
                        Specifies the information to query. The list of supported <varname>param_name</varname> types and the
                        information returned in <varname>param_value</varname> by <function>clGetProgramBuildInfo</function> is 
                        described in the table below.
                    </para>
                    <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_program_buid_info</entry>
                                    <entry>Return Type and Info. returned in <varname>param_value</varname></entry>
                                </row>
                            </thead>
                            <tbody>
                                <row>
                                    <entry><constant>CL_PROGRAM_BUILD_STATUS</constant></entry>
                                    <entry>Return type: cl_build_status
                                        <para>
                                            Returns the build status of <varname>program</varname> for a specific device 
                                            as given by <varname>device</varname>. This can be one of the following:
                                        </para>
                                        <para>
                                            <errorname>CL_BUILD_NONE</errorname>. The build status returned if no build has 
                                            been performed on the specified program object for <varname>device</varname>.
                                        </para>
                                        <para>
                                            <errorname>CL_BUILD_ERROR</errorname>. The build status returned if the last call 
                                            to <citerefentry><refentrytitle>clBuildProgram</refentrytitle></citerefentry> on the specified program object for <varname>device</varname> 
                                            generated an error.
                                        </para>
                                        <para>
                                            <errorname>CL_BUILD_SUCCESS</errorname>. The build status returned if the last call 
                                            to <citerefentry><refentrytitle>clBuildProgram</refentrytitle></citerefentry> on the 
                                            specified program object for <varname>device</varname> was successful.
                                        </para>
                                        <para>
                                            <errorname>CL_BUILD_IN_PROGRESS</errorname>. The build status returned if the last call 
                                            to  <citerefentry><refentrytitle>clBuildProgram</refentrytitle></citerefentry> on the 
                                            specified program object for <varname>device</varname> has not finished.
                                        </para>
                                    </entry>
                                </row>
        
                                <row>
                                 <entry><errorname>CL_PROGRAM_BUILD_OPTIONS</errorname></entry>
                                    <entry>Return type: char[]
                                        <para>
                                            Return the build options specified by the <varname>options</varname> argument 
                                            in  <citerefentry><refentrytitle>clBuildProgram</refentrytitle></citerefentry> 
                                            for <varname>device</varname>.
                                        </para>
                                        <para>
                                            If build status of <varname>program</varname> for <varname>device</varname> 
                                            is <errorname>CL_BUILD_NONE</errorname>, an empty string is returned.
                                        </para>
                                    </entry>
                                </row>
                                <row>
                                    <entry><errorname>CL_PROGRAM_BUILD_LOG</errorname></entry>
                                    <entry>Return type: char[]
                                        <para>
                                        Return the build log when
                                        <citerefentry><refentrytitle>clBuildProgram</refentrytitle></citerefentry> was called 
                                        for <varname>device</varname>. If build status of <varname>program</varname> 
                                        for <varname>device</varname> is <errorname>CL_BUILD_NONE</errorname>, an empty string 
                                        is returned.</para>
                                    </entry>
                                </row>
                            </tbody>    
                        </tgroup>
                    </informaltable> 
               </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</varname></term>
                <listitem><para>
                    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>param_value_size_ret</varname></term>
                <listitem><para> 
                    Returns the actual size in bytes of data copied to <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>
        </para>
    </refsect1>
--> 


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

    <refsect1 id="errors"><title>Errors</title>
        <para>
            Returns <errorname>CL_SUCCESS</errorname> if the function is executed successfully. 
            Otherwise it returns the following:
        </para>
    <itemizedlist mark="disc">
        <listitem>
            Returns <errorname>CL_INVALID_DEVICE</errorname> if <varname>device</varname> 
            is not in the list of devices associated with <varname>program</varname>.
        </listitem>
        <listitem>
            Returns <errorname>CL_INVALID_VALUE</errorname> if <varname>param_name</varname> 
            is not valid, 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 NULL.
        </listitem>
        <listitem>
            Returns <errorname>CL_INVALID_PROGRAM</errorname> if <varname>program</varname> 
            is a not a valid program object.
        </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="clGetProgramBuildInfo">OpenCL Specification</olink>
        </para>
    </refsect1>     


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

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

