IMG_texture_compression_pvrtc

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