blob: ba687654c6a212a133cdc82dcd6a2fb2b3c20d00 [file] [log] [blame]
Name
ARB_vertex_type_10f_11f_11f_rev
Name Strings
GL_ARB_vertex_type_10f_11f_11f_rev
Contact
Daniel Koch, NVIDIA Corporation (dkoch 'at' nvidia.com)
Contributors
Pat Brown, NVIDIA
Jeff Bolz, NVIDIA
Piers Daniel, NVIDIA
Members of the ARB working group
Notice
Copyright (c) 2013 The Khronos Group Inc. Copyright terms at
http://www.khronos.org/registry/speccopyright.html
Specification Update Policy
Khronos-approved extension specifications are updated in response to
issues and bugs prioritized by the Khronos OpenGL Working Group. For
extensions which have been promoted to a core Specification, fixes will
first appear in the latest version of that core Specification, and will
eventually be backported to the extension document. This policy is
described in more detail at
https://www.khronos.org/registry/OpenGL/docs/update_policy.php
Status
Complete. Approved by the ARB on June 3, 2013.
Ratified by the Khronos Board of Promoters on July 19, 2013.
Version
Last Modified Date: May 2, 2013
Revision: 4
Number
ARB Extension #151
Dependencies
OpenGL 3.0 is required.
This extension depends on ARB_vertex_attrib_binding.
This extension requires ARB_vertex_type_2_10_10_10_rev.
This extension is written against the OpenGL 4.3 (Core Profile)
Specification (October 18, 2012).
Overview
This extension adds the following data format:
A new vertex attribute data format: a packed 11.11.10 unsigned
float vertex data format. This vertex data format can be used
to describe a compressed 3 component stream of values that can
be represented by 10- or 11-bit unsigned floating point values.
The UNSIGNED_INT_10F_11F_11F_REV vertex attribute type is
equivalent to the R11F_G11F_B10F texture internal format.
IP Status
No known IP claims.
New Procedures and Functions
None
New Types
None
New Tokens
Accepted by the <type> parameter of VertexAttribP{123}ui,
VertexAttribP{123}uiv, VertexAttribFormat and VertexAttribPointer:
UNSIGNED_INT_10F_11F_11F_REV 0x8C3B // (reuse core enum)
Additions to Chapter 10 of the OpenGL 4.3 (Core Profile) Specification
(Vertex Specification and Drawing Commands)
Modify the 6th paragraph of 10.2.1 (Current Generic Attributes)
to read as follows:
"The VertexAttribP* commands specify up to four attribute component
values packed into a single natural type <type> as described in section
10.3.7. <type> must be INT_2_10_10_10_REV, UNSIGNED_INT_2_10_10_10_REV,
or UNSIGNED_INT_10F_11F_11F_REV, specifying signed, unsigned, or unsigned
floating-point data, respectively. The first one (x), two (x,y), three
(x,y,z), or four (x,y,z,w) components of the packed data are consumed
by VertexAttribP1ui, VertexAttribP2ui, VertexAttribP3ui, and
VertexAttribP4ui, respectively. If <normalized> is TRUE, signed or
unsigned components are converted to floating-point by normalizing
to [-1,1] or [0,1] respectively. If <normalized> is FALSE, signed
and unsigned components are directly cast to floating-point. For
floating-point formats, <normalized> is ignored. For VertexAttribP*uiv,
<value> contains the address of a single uint containing the packed
attribute components. If <type> is UNSIGNED_INT_10F_11F_11F_REV, calling
VertexAttribP4ui and VertexAttribP4uiv results in an INVALID_ENUM error
being generated because there are only 3 components present."
Modify the 3rd paragraph of 10.3.1 (Specifying Arrays for Generic
Vertex Attributes) to read as follows:
"Table 10.2 indicates the allowable values for <size> and <type>.
A <type> of BYTE, UNSIGNED_BYTE, SHORT, UNSIGNED_SHORT, INT,
UNSIGNED_INT, FLOAT, HALF_FLOAT, or DOUBLE indicates the corresponding
GL data type shown in Table 8.2.
A <type> of FIXED indicates the data type "fixed".
A <type> of INT_2_10_10_10_REV and UNSIGNED_INT_2_10_10_10_REV indicate
respectively, four signed or unsigned elements packed into a single
"uint".
A <type> of UNSIGNED_INT_10F_11F_11F_REV indicates two unsigned 11-bit
floating-point elements and one unsigned 10-bit floating-point elements
packed into a single "uint". The encoding of the unsigned 10- and
11-bit floating point values is described in section 2.3.3 (Numerical
Representation and Computation).
The types INT_2_10_10_10_REV, UNSIGNED_INT_2_10_10_10_REV and
UNSIGNED_INT_10F_11F_11F_REV all correspond to the term <packed> in
Table 10.2). The components are packed as shown in Table 8.8
(UNSIGNED_INT formats).
<packed> is not a GL type, but indicates commands accepting multiple
components packed into a single uint."
Add the following sentence to the end of the paragraph on "Integer
Handling" following Table 10.2:
"The <normalized> flag is ignored for floating-point data types,
including fixed, float, half, double, and any packed types that have
floating point components."
Insert another paragraph after Table 10.2:
"If <type> is UNSIGNED_INT_10F_11F_11F_REV, the vertex array values
are never normalized, irrespective of the "normalize" table entry."
Add to the errors section for the VertexAttrib*Format commands:
"An INVALID_OPERATION error is generated if <type> is
UNSIGNED_INT_10F_11F_11F_REV and <size> is not 3."
Add the following to the end of section 10.3.7 (Packed Vertex Data
Formats)
"The UNSIGNED_INT_10F_11F_11F_REV vertex data format describes a packed,
3-component format that is stored in a single 32-bit word. The first (x),
and second (y) components are represented as 11-bit unsigned
floating-point values, and the third (z) component is represented as a
10-bit unsigned floating-point value. Table 10.x describes how these
components are laid out in a 32-bit word.
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
-----------------------------------------------------------------------------------------------
| z | y | x |
-----------------------------------------------------------------------------------------------
Table 10.x: Packed component layout for the UNSIGNED_INT_10F_11F_11F_REV
format. Bit numbers are indicated for each component."
[[Compatibility Profile-only]]
Add the following to Section 10.3.2 (Specifying Arrays for Fixed-Function
Attributes) to the end of the second paragraph:
"The packed type UNSIGNED_INT_10F_11F_11F_REV is not permitted for any of
the above commands. The INVALID_ENUM error is generated if a <type> of
UNSIGNED_INT_10F_11F_11F_REV is specified."
Additions to the AGL/EGL/GLX/WGL Specifications
None
Dependencies on ARB_vertex_attrib_binding and Open GL 4.3
If ARB_vertex_attrib_binding or OpenGL 4.3 is not supported, then
delete all references to VertexAttribFormat.
Dependencies on ARB_vertex_type_2_10_10_10_rev
ARB_vertex_type_2_10_10_10_rev is required to provide the
infrastrucure for handling packed vertex attributes
(such as the VertexAttribP* commands, etc).
Dependencies on the compatibility profile
If the compatibility profile is not supported, ignore any additions
marked [[Compatibility Profile-only]].
Errors
The error INVALID_OPERATION is generated by VertexAttribFormat, or
VertexAttribPointer if <type> is UNSIGNED_INT_10F_11F_11F_REV and
<size> is not 3.
The error INVALID_ENUM is generated by VertexAttribIFormat,
VertexAttribLFormat, VertexAttribIPointer, VertexAttribLPointer,
VertexAttribP4ui, or VertexAttribP4uiv if <type> is
UNSIGNED_INT_10F_11F_11F_REV.
[[Compatibility Profile-only]]
The error INVALID_ENUM is generated by VertexPointer, NormalPointer,
ColorPointer, SecondaryColorPointer, IndexPointer, EdgeFlagPointer,
FogCoordPointer, or TexCoordPointer if <type> is
UNSIGNED_INT_10F_11F_11F_REV.
New State
None.
New Implementation Dependent State
None.
Sample Code
TBD
Conformance Tests
Needed.
Issues
1. Should <normalized> be supported, ignored, or an error?
RESOLVED. The <normalized> flag only takes effect when converting
from integer to float formats and is ignored otherwise. Since the
new type being accepted is a packed floating point format, the
<normalized> flag is ignored when specified with it. The current
core specification is not entirely clear on this matter so we
will add language to clarify this.
2. Should we accept this new type in the current generic attribute
entry points?
RESOLVED. Yes. It is sometimes convenient to be able to specify
only a single value from a buffer via the VertexAttrib commands
for debugging or manual instancing. This will be accepted by the
VertexAttribP commands.
3. Should the new vertex type be supported by the immediate-mode entry
points (such as Vertex{1234}f, TexCoordP*, NormalP3*, etc) in the
compatibility profile?
RESOLVED: No. There is no interest in extending the fixed-function
pipeline to handle packed floating point vertex data. This is disallowed
by the fact that we have not modified section 10.2.2 to accept the
UNSIGNED_INT_10F_11F_11F_REV type in the packed entry points.
4. Should the new vertex type be supported by the legacy arrayed entry
points for fixed-function (such as glVertexPointer, glNormalPointer, etc)
in the compatibility profile?
RESOLVED: No. There is no interest in extending the fixed-function
pipeline to handle the packed floating point vertex data format. This is
explicitly disallowed by the edits to 10.3.2.
5. Does the new vertex type work with a component size of BGRA?
RESOLVED: No. It is specified to only work with a size of 3.
Revision History
Revision 4, 2013/05/02, dgkoch
- finish errors and dependencies sections
Revision 3, 2013/04/21, dgkoch
- added issue 5.
- misc formatting.
Revision 2, 2013/03/21, dgkoch
- Resolved Issue 1, 2, added 3, 4 and corresponding edits.
- Added edits to 10.3.7, support for current generic vertex attribs
Revision 1, 2013/01/24, dgkoch
- Initial revision