blob: af8c21140d8c97ffcd7e1e836dd290f3c3219842 [file] [log] [blame]
Name
IMG_texture_compression_pvrtc
Name Strings
GL_IMG_texture_compression_pvrtc
Notice
Copyright Imagination Technologies Limited, 2005.
Contact
Graham Connor, Imagination Technologies (graham 'dot' connor 'at'
imgtec 'dot' com)
Status
Complete
Version
1.3, 20 September 2012
Number
OpenGL ES Extension #54
Dependencies
This extension is written against the OpenGL ES 1.0 Specification, (which in turn
is derived from OpenGL 1.3). Thus this spec is effectively written against OpenGL
1.3 but does not address sections explicitly removed or reduced by OpenGL ES 1.0.
It can be implemented against OpenGL ES 2.0.
OpenGL ES 2.0 affects the definition of this extension.
APPLE_texture_2D_limited_npot affects the definition of this extension.
Overview
This extension provides additional texture compression functionality
specific to Imagination Technologies PowerVR Texture compression format
(called PVRTC) subject to all the requirements and limitations described
by the OpenGL 1.3 specifications.
This extension supports 4 and 2 bit per pixel texture compression
formats. Because the compression of PVRTC is very CPU intensive,
it is not appropriate to carry out compression on the target
platform. Therefore this extension only supports the loading of
compressed texture data.
IP Status
Imagination Technologies Proprietary
Issues
1) Different versions of PowerVR hardware may interpret the
compression formats differently.
Resolution: If this situation arises, or could potentially arise
in the field, then further extensions would be defined to add tokens
for these compression formats.
2) Future revisions of PowerVR hardware might allow custom
texture dimensions to be used. How will this be dealt with?
Resolution: As with Issue 1, further extensions would be defined to
add tokens for extra compression formats.
3) PVRTC can encode alpha and opaque data in the same image and
this is handled seamlessly by the hardware decode. Why then are
there separate tokens for RGB and RGBA compressed textures?
Resolution: OpenGL needs to know whether a texture contains
alpha data so that the blend modes can be set up correctly. If
this information is not encoded in the image format token then
some blends will be unobtainable. Note that the driver scanning
the data is not a viable solution as it would restrict a
texture to being used in one mode only.
4) If this extension does not support driver compression of data,
how is data compressed?
Resolution: Textures should be compressed using the
PVRTextureTool available from PowerVR Developer Relations
(devrel 'at' powervr 'dot' com)
5) Is sub-texturing supported?
Resolution: Only for the reloading of complete
images. Sub-images are not supportable because the PVRTC
algorithm uses significant adjacency information, so there is
no discrete block of texels that can be decoded as a standalone
sub-unit, and so it follows that no stand alone sub-unit of
data can be loaded without changing the decoding of surrounding
texels.
6) How is the imageSize argument calculated for the CompressedTexImage2D
and CompressedTexSubImage2D functions.
Resolution: For PVRTC 4BPP formats the imageSize is calculated as:
( max(width, 8) * max(height, 8) * 4 + 7) / 8
For PVRTC 2BPP formats the imageSize is calculated as:
( max(width, 16) * max(height, 8) * 2 + 7) / 8
New Procedures and Functions
None.
New Tokens
Accepted by the <internalformat> parameter of CompressedTexImage2D
and the <format> parameter of CompressedTexSubImage2D:
COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00
COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01
COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02
COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03
Additions to Chapter 2 of the OpenGL 1.3 Specification (OpenGL Operation)
None.
Additions to Chapter 3 of the OpenGL 1.3 Specification (Rasterization)
Add to Table 3.16.1: Specific Compressed Internal Formats
Compressed Internal Format Base Internal Format
========================== ====================
COMPRESSED_RGB_PVRTC_4BPPV1_IMG RGB
COMPRESSED_RGB_PVRTC_2BPPV1_IMG RGB
COMPRESSED_RGBA_PVRTC_4BPPV1_IMG RGBA
COMPRESSED_RGBA_PVRTC_2BPPV1_IMG RGBA
Modify Section 3.8.3, Compressed Texture Images
Add to Section 3.8.3, Compressed Texture Images (adding to the end of
the CompressedTexImage section)
If <internalformat> is COMPRESSED_RGB_PVRTC_4BPPV1_IMG,
COMPRESSED_RGB_PVRTC_2BPPV1_IMG, COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, or
COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, the compressed texture is stored using one
of several PVRTC compressed texture image formats. The PVRTC texture
compression algorithm supports only 2D images without borders.
CompressedTexImage2D will produce an INVALID_VALUE if <border> is non-zero.
Add to Section 3.8.3, Compressed Texture Images (adding to the end of
the CompressedTexSubImage section)
If the internal format of the texture image being modified is
COMPRESSED_RGB_PVRTC_4BPPV1_IMG, COMPRESSED_RGB_PVRTC_2BPPV1_IMG,
COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, or COMPRESSED_RGBA_PVRTC_2BPPV1_IMG the
texture is stored using one of the several PVRTC compressed texture image
formats. CompressedTexSubImage2D result in an INVALID_OPERATION error only
if one of the following conditions occurs:
* <width> is not equal to TEXTURE_WIDTH.
* <height> is not equal to TEXTURE_HEIGHT.
* <xoffset> or <yoffset> is not zero.
Additions to Chapter 4 of the OpenGL 1.3 Specification (Per-Fragment
Operations and the Frame Buffer)
None.
Additions to Chapter 5 of the OpenGL 1.3 Specification (Special Functions)
None.
Additions to Chapter 6 of the OpenGL 1.3 Specification (State and
State Requests)
None.
Additions to Appendix A of the OpenGL 1.3 Specification (Invariance)
None.
Additions to the AGL/GLX/WGL Specifications
None.
GLX Protocol
None.
Interactions with OpenGL ES 2.0 and APPLE_texture_2D_limited_npot
If the GL is OpenGL ES 2.0 or if APPLE_texture_2D_limited_npot is
supported, either of which introduces general support for non-power-of-two
texture dimensions, the error condition from OpenGL ES 1.1 restricting
NPOT dimensions is reintroduced specifically for CompressedTexImage2D when
<internalformat> is one of the PVRTC formats:
"For non-zero <width> and <height>, it must be the case that
w_s = 2^n (3.12)
h_s = 2^m (3.13)
for some integers n and m, where w_s and h_s are the specified image width
and height. If any one of these relationships cannot be satisfied, then
the error INVALID_VALUE is generated."
Errors
INVALID_VALUE is generated by CompressedTexImage2D if
<internalformat> is COMPRESSED_RGB_PVRTC_4BPPV1_IMG,
COMPRESSED_RGB_PVRTC_2BPPV1_IMG, COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, or
COMPRESSED_RGBA_PVRTC_2BPPV1_IMG and <border> is not equal to zero.
INVALID_OPERATION is generated by CompressedTexSubImage2D if INTERNAL_FORMAT
is COMPRESSED_RGB_PVRTC_4BPPV1_IMG, COMPRESSED_RGB_PVRTC_2BPPV1_IMG,
COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, or COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
and any of the following apply: <width> is not equal to TEXTURE_WIDTH;
<height> is not equal to TEXTURE_HEIGHT; <xoffset> and <yoffset> are not zero.
New State
None.
Revision History
0.1, 18/12/2003 gdc: Initial revision.
0.2, 13/01/2004 gdc: Formatting changes.
0.3, 24/08/2004 gdc: Mini-mip behaviour.
0.4, 25/01/2005 nt: Removed sections about CompressedTex[Sub]Image[1|3]D
and rewrote specs based on OpenGL 1.3.
1.0, 30/04/2009 bcb: Final cleanup for publish to the registry
1.1, 01/11/2011 bcb: Fix some incorrect error conditions (not matching
reality)
1.2, 08/05/2012 bnl: Fix missing error for NPOT dimensions and remove
occasional use of ARB suffixes
1.3, 20/09/2012 bcb: Remove 1:1 language to match error conditions