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 parameter of CompressedTexImage2D and the 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 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 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: * is not equal to TEXTURE_WIDTH. * is not equal to TEXTURE_HEIGHT. * or 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 is one of the PVRTC formats: "For non-zero and , 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 is COMPRESSED_RGB_PVRTC_4BPPV1_IMG, COMPRESSED_RGB_PVRTC_2BPPV1_IMG, COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, or COMPRESSED_RGBA_PVRTC_2BPPV1_IMG and 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: is not equal to TEXTURE_WIDTH; is not equal to TEXTURE_HEIGHT; and 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