--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook MathML Module V1.1b1//EN"\r
+ "http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd">\r
+<refentry id="glGetProgramResource">\r
+ <refmeta>\r
+ <refmetainfo>\r
+ <copyright>\r
+ <year>2012</year>\r
+ <holder>Khronos Group</holder>\r
+ </copyright>\r
+ </refmetainfo>\r
+ <refentrytitle>glGetProgramResource</refentrytitle>\r
+ <manvolnum>3G</manvolnum>\r
+ </refmeta>\r
+ <refnamediv>\r
+ <refname>glGetProgramResource</refname>\r
+ <refpurpose>retrieve values for multiple properties of a single active resource within a program object</refpurpose>\r
+ </refnamediv>\r
+ <refsynopsisdiv><title>C Specification</title>\r
+ <funcsynopsis>\r
+ <funcprototype>\r
+ <funcdef>void <function>glGetProgramResourceiv</function></funcdef>\r
+ <paramdef>GLuint <parameter>program</parameter></paramdef>\r
+ <paramdef>GLenum <parameter>programInterface</parameter></paramdef>\r
+ <paramdef>GLuint <parameter>index</parameter></paramdef>\r
+ <paramdef>GLsizei <parameter>propCount</parameter></paramdef>\r
+ <paramdef>const Glenum * <parameter>props</parameter></paramdef>\r
+ <paramdef>GLsizei <parameter>bufSize</parameter></paramdef>\r
+ <paramdef>GLsizei * <parameter>length</parameter></paramdef>\r
+ <paramdef>GLint * <parameter>params</parameter></paramdef>\r
+ </funcprototype>\r
+ </funcsynopsis>\r
+ </refsynopsisdiv>\r
+ <refsect1 id="parameters"><title>Parameters</title>\r
+ <variablelist>\r
+ <varlistentry>\r
+ <term><parameter>program</parameter></term>\r
+ <listitem>\r
+ <para>\r
+ The name of a program object whose resources to query.\r
+ </para>\r
+ </listitem>\r
+ </varlistentry>\r
+ <varlistentry>\r
+ <term><parameter>programInterface</parameter></term>\r
+ <listitem>\r
+ <para>\r
+ A token identifying the interface within <parameter>program</parameter> containing the resource named <parameter>name</parameter>.\r
+ </para>\r
+ </listitem>\r
+ </varlistentry>\r
+ </variablelist>\r
+ </refsect1>\r
+ <refsect1 id="description"><title>Description</title>\r
+ <para>\r
+ <function>glGetProgramResourceiv</function> returns values for multiple properties of a single active resource with an\r
+ index of <parameter>index</parameter> in the interface <parameter>programInterface</parameter> of program object\r
+ <parameter>program</parameter>. For each resource, values for <parameter>propCount</parameter> properties specified\r
+ by the array <parameter>props</parameter> are returned. <parameter>propCount</parameter> may not be zero.\r
+ An error is generated if any value\r
+ in <parameter>props</parameter> is not one of the properties described immediately belowor if any value in <parameter>props</parameter> is not\r
+ allowed for <parameter>programInterface</parameter>. The set of allowed <parameter>programInterface</parameter>\r
+ values for each property can be found in the following table:\r
+ </para>\r
+ <informaltable frame="topbot">\r
+ <tgroup cols="2" align="left">\r
+ <colspec colnum="1" colname="col1" colwidth="1*"/>\r
+ <colspec colnum="2" colname="col2" colwidth="2*"/>\r
+ <thead>\r
+ <row>\r
+ <entry morerows="1" rowsep="1" align="center">Property</entry>\r
+ <entry morerows="1" rowsep="1" align="center">Supported Interfaces</entry>\r
+ </row>\r
+ </thead>\r
+ <tbody>\r
+ <row>\r
+ <entry align="left"><constant>GL_NAME_LENGTH</constant></entry>\r
+ <entry align="left">Any except <constant>GL_ATOMIC_COUNTER_BUFFER</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_TYPE</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_PROGRAM_INPUT</constant>, <constant>GL_PROGRAM_OUTPUT</constant>, <constant>GL_TRANSFORM_FEEDBACK_VARYING</constant>, <constant>GL_BUFFER_VARIABLE</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_ARRAY_SIZE</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_BUFFER_VARIABLE</constant>, <constant>GL_PROGRAM_INPUT</constant>,\r
+ <constant>GL_PROGRAM_OUTPUT, VERTEX_SUBROUTINE_UNIFORM</constant>, <constant>GL_TESS_CONTROL_SUBROUTINE_UNIFORM</constant>,\r
+ <constant>GL_TESS_EVALUATION_SUBROUTINE_UNIFORM</constant>, <constant>GL_GEOMETRY_SUBROUTINE_UNIFORM</constant>,\r
+ <constant>GL_FRAGMENT_SUBROUTINE_UNIFORM</constant>, <constant>GL_COMPUTE_SUBROUTINE_UNIFORM</constant>, <constant>GL_TRANSFORM_FEEDBACK_VARYING</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_OFFSET</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_BUFFER_VARIABLE</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_BLOCK_INDEX</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_BUFFER_VARIABLE</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_ARRAY_STRIDE</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_BUFFER_VARIABLE</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_MATRIX_STRIDE</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_BUFFER_VARIABLE</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_IS_ROW_MAJOR</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_BUFFER_VARIABLE</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_ATOMIC_COUNTER_BUFFER_INDEX</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_TEXTURE_BUFFER</constant></entry>\r
+ <entry align="left"><emph>none</emph></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_BUFFER_BINDING</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM_BLOCK</constant>, <constant>GL_ATOMIC_COUNTER_BUFFER</constant>, <constant>GL_SHADER_STORAGE_BLOCK</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_BUFFER_DATA_SIZE</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM_BLOCK</constant>, <constant>GL_ATOMIC_COUNTER_BUFFER</constant>, <constant>GL_SHADER_STORAGE_BLOCK</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_NUM_ACTIVE_VARIABLES</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM_BLOCK</constant>, <constant>GL_ATOMIC_COUNTER_BUFFER</constant>, <constant>GL_SHADER_STORAGE_BLOCK</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_ACTIVE_VARIABLES</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM_BLOCK</constant>, <constant>GL_ATOMIC_COUNTER_BUFFER</constant>, <constant>GL_SHADER_STORAGE_BLOCK</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_REFERENCED_BY_VERTEX_SHADER</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_UNIFORM_BLOCK</constant>, <constant>GL_ATOMIC_COUNTER_SHADER</constant>,\r
+ <constant>GL_BUFFER</constant>, <constant>GL_SHADER_STORAGE_BLOCK</constant>, <constant>GL_BUFFER_VARIABLE</constant>,\r
+ <constant>GL_PROGRAM_INPUT</constant>, <constant>GL_PROGRAM_OUTPUT</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_REFERENCED_BY_TESS_CONTROL_SHADER</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_UNIFORM_BLOCK</constant>, <constant>GL_ATOMIC_COUNTER_SHADER</constant>,\r
+ <constant>GL_BUFFER</constant>, <constant>GL_SHADER_STORAGE_BLOCK</constant>, <constant>GL_BUFFER_VARIABLE</constant>,\r
+ <constant>GL_PROGRAM_INPUT</constant>, <constant>GL_PROGRAM_OUTPUT</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_REFERENCED_BY_TESS_EVALUATION_SHADER</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_UNIFORM_BLOCK</constant>, <constant>GL_ATOMIC_COUNTER_SHADER</constant>,\r
+ <constant>GL_BUFFER</constant>, <constant>GL_SHADER_STORAGE_BLOCK</constant>, <constant>GL_BUFFER_VARIABLE</constant>,\r
+ <constant>GL_PROGRAM_INPUT</constant>, <constant>GL_PROGRAM_OUTPUT</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_REFERENCED_BY_GEOMETRY_SHADER</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_UNIFORM_BLOCK</constant>, <constant>GL_ATOMIC_COUNTER_SHADER</constant>,\r
+ <constant>GL_BUFFER</constant>, <constant>GL_SHADER_STORAGE_BLOCK</constant>, <constant>GL_BUFFER_VARIABLE</constant>,\r
+ <constant>GL_PROGRAM_INPUT</constant>, <constant>GL_PROGRAM_OUTPUT</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_REFERENCED_BY_FRAGMENT_SHADER</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_UNIFORM_BLOCK</constant>, <constant>GL_ATOMIC_COUNTER_SHADER</constant>,\r
+ <constant>GL_BUFFER</constant>, <constant>GL_SHADER_STORAGE_BLOCK</constant>, <constant>GL_BUFFER_VARIABLE</constant>,\r
+ <constant>GL_PROGRAM_INPUT</constant>, <constant>GL_PROGRAM_OUTPUT</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_REFERENCED_BY_COMPUTE_SHADER</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_UNIFORM_BLOCK</constant>, <constant>GL_ATOMIC_COUNTER_SHADER</constant>,\r
+ <constant>GL_BUFFER</constant>, <constant>GL_SHADER_STORAGE_BLOCK</constant>, <constant>GL_BUFFER_VARIABLE</constant>,\r
+ <constant>GL_PROGRAM_INPUT</constant>, <constant>GL_PROGRAM_OUTPUT</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_NUM_COMPATIBLE_SUBROUTINES</constant></entry>\r
+ <entry align="left"><constant>GL_VERTEX_SUBROUTINE_UNIFORM</constant>, <constant>GL_TESS_CONTROL_SUBROUTINE_UNIFORM</constant>,\r
+ <constant>GL_TESS_EVALUATION_SUBROUTINE_UNIFORM</constant>, <constant>GL_GEOMETRY_SUBROUTINE_UNIFORM</constant>,\r
+ <constant>GL_FRAGMENT_SUBROUTINE_UNIFORM</constant>, <constant>GL_COMPUTE_SUBROUTINE_UNIFORM</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_COMPATIBLE_SUBROUTINES</constant></entry>\r
+ <entry align="left"><constant>GL_VERTEX_SUBROUTINE_UNIFORM</constant>, <constant>GL_TESS_CONTROL_SUBROUTINE_UNIFORM</constant>,\r
+ <constant>GL_TESS_EVALUATION_SUBROUTINE_UNIFORM</constant>, <constant>GL_GEOMETRY_SUBROUTINE_UNIFORM</constant>,\r
+ <constant>GL_FRAGMENT_SUBROUTINE_UNIFORM</constant>, <constant>GL_COMPUTE_SUBROUTINE_UNIFORM</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_TOP_LEVEL_ARRAY_SIZE</constant></entry>\r
+ <entry align="left"><constant>GL_BUFFER_VARIABLE</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_TOP_LEVEL_ARRAY_STRIDE</constant></entry>\r
+ <entry align="left"><constant>GL_BUFFER_VARIABLE</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_LOCATION</constant></entry>\r
+ <entry align="left"><constant>GL_UNIFORM</constant>, <constant>GL_PROGRAM_INPUT</constant>, <constant>GL_PROGRAM_OUTPUT</constant>,\r
+ <constant>GL_VERTEX_SUBROUTINE_UNIFORM</constant>, <constant>GL_TESS_CONTROL_SUBROUTINE_UNIFORM</constant>,\r
+ <constant>GL_TESS_EVALUATION_SUBROUTINE_UNIFORM</constant>, <constant>GL_GEOMETRY_SUBROUTINE_UNIFORM</constant>,\r
+ <constant>GL_FRAGMENT_SUBROUTINE_UNIFORM</constant>, <constant>GL_COMPUTE_SUBROUTINE_UNIFORM</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_LOCATION_INDEX</constant></entry>\r
+ <entry align="left"><constant>GL_PROGRAM_OUTPUT</constant></entry>\r
+ </row>\r
+ <row>\r
+ <entry align="left"><constant>GL_IS_PER_PATCH</constant></entry>\r
+ <entry align="left"><constant>GL_PROGRAM_INPUT</constant>, <constant>GL_PROGRAM_OUTPUT</constant></entry>\r
+ </row>\r
+ </tbody>\r
+ </tgroup>\r
+ </informaltable>\r
+\r
+ <para>\r
+ For the property <constant>GL_NAME_LENGTH</constant>, a single integer identifying the length of\r
+ the name string associated with an active variable, interface block, or\r
+ subroutine is written to <parameter>params</parameter>. The name length includes a terminating\r
+ null character.\r
+\r
+ For the property <constant>GL_TYPE</constant>, a single integer identifying the type of an active\r
+ variable is written to <parameter>params</parameter>. The integer returned is one of the\r
+ values found in table 2.16.\r
+\r
+ For the property <constant>GL_ARRAY_SIZE</constant>, a single integer identifying the number of\r
+ active array elements of an active variable is written to <parameter>params</parameter>. The\r
+ array size returned is in units of the type associated with the property\r
+ TYPE. For active variables not corresponding to an array of basic types,\r
+ the value zero is written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_BLOCK_INDEX</constant>, a single integer identifying the index of\r
+ the active interface block containing an active variable is written to\r
+ <parameter>params</parameter>. If the variable is not the member of an interface block, the\r
+ value -1 is written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_OFFSET</constant>, a single integer identifying the offset of an\r
+ active variable is written to <parameter>params</parameter>. For active variables backed by a\r
+ buffer object, the value written is the offset, in basic machine units,\r
+ relative to the base of buffer range holding the values of the variable.\r
+ For active variables not backed by a buffer object, an offset of -1 is\r
+ written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_ARRAY_STRIDE</constant>, a single integer identifying the stride\r
+ between array elements in an active variable is written to <parameter>params</parameter>. For\r
+ active variables declared as an array of basic types, the value written is\r
+ the difference, in basic machine units, between the offsets of consecutive\r
+ elements in an array. For active variables not declared as an array of\r
+ basic types, zero is written to <parameter>params</parameter>. For active variables not backed\r
+ by a buffer object, -1 is written to <parameter>params</parameter>, regardless of the variable\r
+ type.\r
+\r
+ For the property <constant>GL_MATRIX_STRIDE</constant>, a single integer identifying the stride\r
+ between columns of a column-major matrix or rows of a row-major matrix is\r
+ written to <parameter>params</parameter>. For active variables declared a single matrix or\r
+ array of matrices, the value written is the difference, in basic machine\r
+ units, between the offsets of consecutive columns or rows in each matrix.\r
+ For active variables not declared as a matrix or array of matrices, zero\r
+ is written to <parameter>params</parameter>. For active variables not backed by a buffer\r
+ object, -1 is written to <parameter>params</parameter>, regardless of the variable type.\r
+\r
+ For the property <constant>GL_IS_ROW_MAJOR</constant>, a single integer identifying whether an\r
+ active variable is a row-major matrix is written to <parameter>params</parameter>. For active\r
+ variables backed by a buffer object, declared as a single matrix or array\r
+ of matrices, and stored in row-major order, one is written to <parameter>params</parameter>.\r
+ For all other active variables, zero is written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_ATOMIC_COUNTER_BUFFER_INDEX</constant>, a single integer identifying\r
+ the index of the active atomic counter buffer containing an active\r
+ variable is written to <parameter>params</parameter>. If the variable is not an atomic counter\r
+ uniform, the value -1 is written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_BUFFER_BINDING</constant>, to index of the buffer binding point\r
+ associated with the active uniform block, shader storage block, or atomic\r
+ counter buffer is written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_BUFFER_DATA_SIZE</constant>, then the implementation-dependent\r
+ minimum total buffer object size, in basic machine units, required to hold\r
+ all active variables associated with an active uniform block, shader\r
+ storage block, or atomic counter buffer is written to <parameter>params</parameter>. If the\r
+ final member of an active shader storage block is array with no declared\r
+ size, the minimum buffer size is computed assuming the array was declared\r
+ as an array with one element.\r
+\r
+ For the property <constant>GL_NUM_ACTIVE_VARIABLES</constant>, the number of active variables\r
+ associated with an active uniform block, shader storage block, or atomic\r
+ counter buffer is written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_of ACTIVE_VARIABLES</constant>, an array of active variable indices\r
+ associated with an active uniform block, shader storage block, or atomic\r
+ counter buffer is written to <parameter>params</parameter>. The number of values written to\r
+ <parameter>params</parameter> for an active resource is given by the value of the property\r
+ <constant>GL_NUM_ACTIVE_VARIABLES</constant> for the resource.\r
+\r
+ For the properties <constant>GL_REFERENCED_BY_VERTEX_SHADER</constant>,\r
+ <constant>GL_REFERENCED_BY_TESS_CONTROL_SHADER</constant>, <constant>GL_REFERENCED_BY_TESS_EVALUATION_SHADER</constant>,\r
+ <constant>GL_REFERENCED_BY_GEOMETRY_SHADER</constant>, <constant>GL_REFERENCED_BY_FRAGMENT_SHADER</constant>, and\r
+ <constant>GL_REFERENCED_BY_COMPUTE_SHADER</constant>, a single integer is written to <parameter>params</parameter>,\r
+ identifying whether the active resource is referenced by the vertex,\r
+ tessellation control, tessellation evaluation, geometry, or fragment\r
+ shaders, respectively, in the program object. The value one is written to\r
+ <parameter>params</parameter> if an active variable is referenced by the corresponding shader,\r
+ or if an active uniform block, shader storage block, or atomic counter\r
+ buffer contains at least one variable referenced by the corresponding\r
+ shader. Otherwise, the value zero is written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_TOP_LEVEL_ARRAY_SIZE</constant>, a single integer identifying the\r
+ number of active array elements of the top-level shader storage block\r
+ member containing to the active variable is written to <parameter>params</parameter>. If the\r
+ top-level block member is not declared as an array, the value one is\r
+ written to <parameter>params</parameter>. If the top-level block member is an array with no\r
+ declared size, the value zero is written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_TOP_LEVEL_ARRAY_STRIDE</constant>, a single integer identifying the\r
+ stride between array elements of the top-level shader storage block member\r
+ containing the active variable is written to <parameter>params</parameter>. For top-level\r
+ block members declared as arrays, the value written is the difference, in\r
+ basic machine units, between the offsets of the active variable for\r
+ consecutive elements in the top-level array. For top-level block members\r
+ not declared as an array, zero is written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_LOCATION</constant>, a single integer identifying the assigned\r
+ location for an active uniform, input, output, or subroutine uniform\r
+ variable is written to <parameter>params</parameter>. For input, output, or uniform variables\r
+ with locations specified by a layout qualifier, the specified location is\r
+ used. For vertex shader input or fragment shader output variables without\r
+ a layout qualifier, the location assigned when a program is linked is\r
+ written to <parameter>params</parameter>. For all other input and output variables, the value\r
+ -1 is written to <parameter>params</parameter>. For uniforms in uniform blocks, the value -1\r
+ is written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_LOCATION_INDEX</constant>, a single integer identifying the fragment\r
+ color index of an active fragment shader output variable is written to\r
+ <parameter>params</parameter>. If the active variable is an output for a non-fragment shader,\r
+ the value -1 will be written to <parameter>params</parameter>.\r
+\r
+ For the property <constant>GL_IS_PER_PATCH</constant>, a single integer identifying whether the\r
+ input or output is a per-patch attribute. If the active variable is a\r
+ per-patch attribute (declared with the <code>patch</code> qualifier), the value one\r
+ is written to <parameter>params</parameter>; otherwise, the value zero is written to <parameter>params</parameter>.\r
+ </para>\r
+ </refsect1>\r
+ <refsect1 id="errors"><title>Errors</title>\r
+ <para>\r
+ <constant>GL_INVALID_VALUE</constant> is generated if <parameter>program</parameter> is\r
+ not the name of an existing program object.\r
+ </para>\r
+ <para>\r
+ <constant>GL_INVALID_VALUE</constant> is generated if <parameter>propCount</parameter> is\r
+ zero.\r
+ </para>\r
+ <para>\r
+ <constant>GL_INVALID_ENUM</constant> is generated if <parameter>programInterface</parameter>\r
+ is not one of the accepted interface types.\r
+ </para>\r
+ <para>\r
+ <constant>GL_INVLALID_ENUM</constant> is generated if any value in <parameter>props</parameter>\r
+ is not one of the accepted tokens for the interface <parameter>programInterface</parameter>\r
+ </para>\r
+ </refsect1>\r
+ <refsect1 id="seealso"><title>See Also</title>\r
+ <para>\r
+ <citerefentry><refentrytitle>glGetProgramResourceName</refentrytitle></citerefentry>,\r
+ <citerefentry><refentrytitle>glGetGetProgramResourceIndex</refentrytitle></citerefentry>,\r
+ <citerefentry><refentrytitle>glGetProgramResourceLocation</refentrytitle></citerefentry>,\r
+ <citerefentry><refentrytitle>glGetProgramResourceLocationIndex</refentrytitle></citerefentry>.\r
+ </para>\r
+ </refsect1>\r
+ <refsect1 id="Copyright"><title>Copyright</title>\r
+ <para>\r
+ Copyright <trademark class="copyright"></trademark> 2012 Khronos Group. \r
+ This material may be distributed subject to the terms and conditions set forth in \r
+ the Open Publication License, v 1.0, 8 June 1999.\r
+ <ulink url="http://opencontent.org/openpub/">http://opencontent.org/openpub/</ulink>.\r
+ </para>\r
+ </refsect1>\r
+</refentry>\r