<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd">
<!-- saved from url=(0013)about:internet -->
<?xml-stylesheet type="text/xsl" href="mathml.xsl"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:pref="http://www.w3.org/2002/Math/preference" xmlns:xlink="http://www.w3.org/1999/xlink" pref:renderer="mathplayer-dl">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style xmlns="" type="text/css">
    /* This style sets a margin around the entire page */
        html, body {
            margin: 10px;
        }

        p {
            font: normal 16px verdana, sans-serif;
            margin: 0;
            padding-bottom:12px;
        }

        h1 {
            font: bold 25px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h2 {
            font: bold 19px verdana, sans-serif;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0; 
            padding-bottom: 0;
        }

        h3 {
            font: bold 19px verdana, sans-serif !important;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        li {
            font: normal 16px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 18px;
            padding-top: 0;
            padding-bottom: 0;
        }

        .pdparam {
            font: italic 16px verdana, sans-serif;
        }
		
		.term {
			font: italic 16px verdana, sans-serif;
			font-weight: normal;
		}	
		
		.type {
			font: normal 16px verdana, sans-serif !important;
		}			
		
		.parameter { 
			font-style: italic; 
			}

        a:link, a:visited {
            color: blue;
            text-decoration: none;
            font: normal 16px;
        }

        a:hover {
            background-color: #FFFF99;
            font: normal 16px;
        }

        div.funcsynopsis {
            text-align: left;
            background-color: #e6e6e6;
            font: normal 16px verdana, sans-serif;
			padding-top: 10px;
			padding-bottom: 10px;
        }

        div.funcsynopsis table {
            border-collapse: separate;
            font: normal 16px verdana, sans-serif;
        }

        div.funcsynopsis td {
            background-color: #e6e6e6;
            border: 0 solid #000;
            padding: 1px;
            font: normal 16px verdana, sans-serif;
        }

        div.refsect1 {
            font-family: verdana, sans-serif;
            font-size: 16px;
        }

        code.constant {
            font: normal 16px courier new, monospace !important;
        }
		
		span.errorname {
            font: normal 16px verdana, sans-serif !important;
        }

        code.function {
            font: bold 16px verdana, sans-serif !important;
        }
		
        b.fsfunc {
            font: bold 16px verdana, sans-serif !important;
        }
		
        code.varname {
            font: italic 16px verdana, sans-serif;
        }

        code.replaceable {
            font: italic 16px courier new, monospace;
        }

        code.funcdef {
            font: normal 16px verdana, sans-serif !important;
        }

        .citerefentry {
            font: normal 16px verdana, sans-serif !important;
        }

        .parameter {
            font-style: italic;
        }

        code.fsfunc {
            font: normal 16px verdana, sans-serif !important;
        }

        /* PARAMETER: This style controls spacing between the terms in Parameter section */
        dt {
            margin-top: 15px;
        }

        /* TABLES: These styles apply to all tables OTHER than the Synopsis and Example tables */
        div.refsect1 table {
            width: 100%;
			margin-top: 10px;
            background-color: #FFF;
			border-collapse: collapse;
			border-color: #000;
            border-width: 1px;
			font: normal 16px verdana, sans-serif;
        }
		
        div.refsect1 th {
			border-collapse: collapse;
			border-color: #000;
            border-width: 1px;
            font: bold 16px verdana, sans-serif;
        }
		
        div.refsect1 td {
            background-color: #FFF;
            padding: 5px;
            vertical-align: text-top;
			border-collapse: collapse;
			border-color: #000;
            border-width: 1px;
            font: normal 16px verdana, sans-serif;
        }
		
		  div.refsect1 p{
            font: normal 16px verdana, sans-serif;
            margin-top: 8px;
            margin-bottom: 8px;
            padding-top: 0;
            padding-bottom: 0;
        }
		

        /* EXAMPLE: These styles apply only to the Example section */
        div.refsect2 {
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 table {
            margin-top: 0;
            background-color: #e6e6e6;
            width: 100%;
            border: 0 solid #000;
            padding: 2px;
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 td {
            background-color: #e6e6e6;
            font: normal 16px courier new, monospace !important;
			white-space:pre;
        }

        /* COPYRIGHT: This style formats the text of the copyright statement at the bottom of the page */
        div.refsect3 {
            font: normal 11px verdana, sans-serif;
            margin-top: 50px;
            margin-bottom: 20px;
            padding-top: 0;
            padding-bottom: 0;
        }
					
</style>
    <title>clGetProgramInfo</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.79.1" />
    <meta name="keywords" content="         &#10;                clGetProgramInfo&#10;            " />
  </head>
  <body>
    <div class="refentry">
      <a id="idm1"></a>
      <div class="titlepage"></div>
      <div xmlns="" class="refnamediv">
        <a xmlns="http://www.w3.org/1999/xhtml" id="clGetProgramInfo"></a>
        <h1>     
            clGetProgramInfo
        </h1>
        <p>          
            Returns information about the program object.
        </p>
      </div>
      <div class="refsynopsisdiv">
        <h2></h2>
        <div class="funcsynopsis">
          <table xmlns="" border="0" summary="Function synopsis" cellspacing="0" cellpadding="0">
            <tr valign="bottom">
              <td>
                <code xmlns="http://www.w3.org/1999/xhtml" class="funcdef">
                    <a class="link" href="scalarDataTypes.html" target="_top">cl_int</a>
 <strong class="fsfunc">clGetProgramInfo</strong>
                (</code>
                <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="abstractDataTypes.html" target="_top">cl_program</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">program</var>, </td>
              </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="#cl_program_info">cl_program_info</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">param_name</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="_top">size_t</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">param_value_size</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="_top">void</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*param_value</var>, </td>
            </tr>
            <tr valign="top">
              <td> </td>
              <td><a xmlns="http://www.w3.org/1999/xhtml" class="link" href="scalarDataTypes.html" target="_top">size_t</a> <var xmlns="http://www.w3.org/1999/xhtml" class="pdparam">*param_value_size_ret</var><code>)</code></td>
            </tr>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="parameters"></a>
        <h2>Parameters</h2>
        <div class="variablelist">
          <dl class="variablelist">
            <dt>
              <span class="term">
                    <code class="varname">
						program
                    </code>
                </span>
            </dt>
            <dd>
              <p> 
						Specifies the program object being queried.
                    </p>
            </dd>
            <dt>
              <span class="term">
                    <code class="varname">
						param_name
                    </code>
                </span>
            </dt>
            <dd>
              <p>
						Specifies the information to query. The list of supported <code class="varname">param_name</code> types and the information returned in <code class="varname">param_value</code> by <code class="function">clGetProgramInfo</code> is described in the table below.
                    </p>
              <div class="informaltable">
                <a id="cl_program_info"></a>
                <table class="informaltable" border="1">
                  <colgroup>
                    <col align="left" class="col1" />
                    <col align="left" class="col2" />
                  </colgroup>
                  <thead>
                    <tr>
                      <th align="left">cl_program_info</th>
                      <th align="left">Return Type and Info. returned in <code class="varname">param_value</code></th>
                    </tr>
                  </thead>
                  <tbody>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_PROGRAM_REFERENCE_COUNT</code>
                      </td>
                      <td align="left">Return type: cl_uint 
										<p>Return the <code class="varname">program</code> reference count.</p>
										<p>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.</p>
                                    </td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_PROGRAM_CONTEXT</code>
                      </td>
                      <td align="left">Return type: cl_context
										<p>
								Return the context specified when the program object is created
									</p></td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_PROGRAM_NUM_DEVICES</code>
                      </td>
                      <td align="left">Return type: cl_uint 
											<p>Return the number of devices associated with <code class="varname">program</code>.
									</p></td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_PROGRAM_DEVICES</code>
                      </td>
                      <td align="left">Return type: cl_device_id[] 
											<p>Return the list of devices associated
											with the program object. This can be
											the devices associated with context on
											which the program object has been
											created or can be a subset of devices
											that are specified when a progam object
											is created using
											<a class="citerefentry" href="clCreateProgramWithBinary.html"><span class="citerefentry"><span class="refentrytitle">clCreateProgramWithBinary</span></span></a>.</p>
									</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_PROGRAM_SOURCE</code>
                      </td>
                      <td align="left">Return type: char[] 
										
										<p>
											Return the program source code specified by
											<a class="citerefentry" href="clCreateProgramWithSource.html"><span class="citerefentry"><span class="refentrytitle">clCreateProgramWithSource</span></span></a>. The
											source string returned is a
											concatenation of all source strings
											specified to
											<a class="citerefentry" href="clCreateProgramWithSource.html"><span class="citerefentry"><span class="refentrytitle">clCreateProgramWithSource</span></span></a> with a
											null terminator. The concatenation
											strips any nulls in the original source
											strings.
										</p>
										<p>
											The actual number of characters that
											represents the program source code
											including the null terminator is returned
											in <code class="varname">param_value_size_ret</code>.
										</p>
									</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_PROGRAM_BINARY_SIZES</code>
                      </td>
                      <td align="left">Return type: size_t[]
											<p>Returns an array that contains the size
											in bytes of the program binary for each
											device associated with <code class="varname">program</code>. The
											size of the array is the number of
											devices associated with <code class="varname">program</code>. If a
											binary is not available for a device(s),
											a size of zero is returned.</p>
									</td>
                    </tr>
                    <tr>
                      <td align="left">
                        <code class="constant">CL_PROGRAM_BINARIES</code>
                      </td>
                      <td align="left">Return type: unsigned char *[]
										<p>
											Return the program binaries for all
											devices associated with <code class="varname">program</code>. For each device in <code class="varname">program</code>, the binary returned can be the binary specified for the device when <code class="varname">program</code> is created with <a class="citerefentry" href="clCreateProgramWithBinary.html"><span class="citerefentry"><span class="refentrytitle">clCreateProgramWithBinary</span></span></a> or it can be the executable binary generated by <a class="citerefentry" href="clBuildProgram.html"><span class="citerefentry"><span class="refentrytitle">clBuildProgram</span></span></a>. If program is created with 			<a class="citerefentry" href="clCreateProgramWithSource.html"><span class="citerefentry"><span class="refentrytitle">clCreateProgramWithSource</span></span></a>, the binary returned is the binary generated by <a class="citerefentry" href="clBuildProgram.html"><span class="citerefentry"><span class="refentrytitle">clBuildProgram</span></span></a>. The bits returned can be an implementation-specific intermediate representation (a.k.a. IR) or device specific executable bits or both. The decision on which information is returned in the binary is up to the OpenCL implementation.
										</p>
										<p>
											<code class="varname">param_value</code> points to an array of n
											pointers where n is the number of
											devices associated with program. The
											buffer sizes needed to allocate the
											memory that these n pointers refer to
											can be queried using the
											<code class="constant">CL_PROGRAM_BINARY_SIZES</code> query
											as described in this table.
										</p>
										<p>
											Each entry in this array is used by the
											implementation as the location in
											memory where to copy the program
											binary for a specific device, if there is a
											binary available. To find out which
											device the program binary in the array
											refers to, use the
											<code class="constant">CL_PROGRAM_DEVICES</code> query to get
											the list of devices. There is a one-to-one
											correspondence between the array
											of n pointers returned by
											<code class="constant">CL_PROGRAM_BINARIES</code> and array of
											devices returned by
											<code class="constant">CL_PROGRAM_DEVICES.</code>
										</p>
									</td>
                    </tr>
                  </tbody>
                </table>
              </div>
            </dd>
            <dt>
              <span class="term">
                    <code class="varname">
						param_value
					</code>
				</span>
            </dt>
            <dd>
              <p>
						A pointer to memory where the appropriate result being queried is returned. If <code class="varname">param_value</code> is NULL, it is ignored.
					</p>
            </dd>
            <dt>
              <span class="term">
                    <code class="varname">
						param_value_size
					</code>
				</span>
            </dt>
            <dd>
              <p>
						Used to specify the size in bytes of memory pointed to by <code class="varname">param_value</code>.
						This size must be greater than or equal to the size of return type as described in the table above.
                    </p>
            </dd>
            <dt>
              <span class="term">
                    <code class="varname">
						param_value_size_ret
					</code>
				</span>
            </dt>
            <dd>
              <p>
						Returns the actual size in bytes of data copied to <code class="varname">param_value</code>. If <code class="varname">param_value_size_ret</code> is NULL, it is ignored.
					</p>
            </dd>
          </dl>
        </div>
      </div>
      <div class="refsect1">
        <a id="errors"></a>
        <h2>Errors</h2>
        <p>
			<code class="function">clGetProgramInfo</code> returns <span class="errorname">CL_SUCCESS</span> if the function is executed successfully, returns
			<span class="errorname">CL_INVALID_VALUE</span> if <code class="varname">param_name</code> is not valid, or if size in bytes specified by
			<code class="varname">param_value_size</code> is less than the size of return type as described in the table above and <code class="varname">param_value</code> is not
			NULL, and returns <span class="errorname">CL_INVALID_PROGRAM</span> if <code class="varname">program</code> is a not a valid program object.
		</p>
      </div>
      <div class="refsect1">
        <a id="specification"></a>
        <h2>Specification</h2>
        <p>
            <img src="pdficon_small1.gif" />
			
				      
            <a href="http://www.khronos.org/registry/cl/specs/opencl-1.0.pdf#page=96" target="OpenCL Spec">OpenCL Specification</a>
        </p>
      </div>
      <div class="refsect1">
        <a id="seealso"></a>
        <h2>Also see</h2>
        <p>
            <a class="citerefentry" href="clGetProgramBuildInfo.html"><span class="citerefentry"><span class="refentrytitle">clGetProgramBuildInfo</span></span></a>
        </p>
      </div>
      <div xmlns="" class="refsect3" lang="en" xml:lang="en"><a xmlns="http://www.w3.org/1999/xhtml" id="Copyright"></a><h4 xmlns="http://www.w3.org/1999/xhtml"></h4>
            Copyright ©
    Copyright © 2007-2009 The Khronos Group Inc. 
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the condition that this copyright notice and permission notice shall be included
in all copies or substantial portions of the Materials. 
</div>
    </div>
  </body>
</html>
