| Name |
| |
| NV_texture_compression_s3tc_update |
| |
| Name Strings |
| |
| GL_NV_texture_compression_s3tc_update |
| |
| Contact |
| |
| Ian Stewart, NVIDIA Corporation (istewart 'at' nvidia.com) |
| |
| Contributors |
| |
| Nicholas Haemel, NVIDIA Corporation |
| Acorn Pooley, NVIDIA Corporation |
| Antti Rasmus, NVIDIA Corporation |
| Musawir Shah, NVIDIA Corporation |
| |
| Status |
| |
| Complete. |
| |
| Version |
| |
| Last Modified Date: Sep 27, 2012 |
| NVIDIA Revision: 2 |
| |
| Number |
| |
| OpenGL ES Extension #95 |
| |
| Dependencies |
| |
| This specification is written against the OpenGL ES 2.0.25 |
| specification. |
| |
| Depends on the GL_NV_texture_compression_s3tc extension. |
| |
| Overview |
| |
| This extension allows for full or partial image updates to a |
| compressed 2D texture from an uncompressed texel data buffer using |
| TexImage2D and TexSubImage2D. Consquently, if a compressed internal |
| format is used, all the restrictions associated with compressed |
| textures will apply. These include sub-image updates aligned to 4x4 |
| pixel blocks and the restriction on usage as render targets. |
| |
| IP Status |
| |
| NVIDIA Proprietary |
| |
| New Procedures and Functions |
| |
| None |
| |
| New Tokens |
| |
| None |
| |
| Additions to Chapter 3 of the OpenGL ES 2.0.25 Specification (Rasterization) |
| |
| Modify Section 3.7.1, Texture Image Specification |
| |
| (change last paragraph on Page 67 as follows) |
| |
| Components are then selected from the resulting R, G, B, or A values |
| to obtain a texture with the base internal format specified by |
| <internalformat>, which must match <format> except when <target> is |
| TEXTURE_2D and <internalformat> is one of the following compressed |
| formats: COMPRESSED_RGB_S3TC_DXT1_NV, |
| COMPRESSED_RGBA_S3TC_DXT1_NV, COMPRESSED_RGBA_S3TC_DXT3_NV, or |
| COMPRESSED_RGBA_S3TC_DXT5_NV. In this case, conversion from only |
| RGB and RGBA formats are supported during texture image processing. |
| <format> values other than RBA or RGBA will result in the |
| INVALID_OPERATION error. In all other cases where <internalformat> |
| does not match <format>, the error INVALID_OPERATION is generated. |
| Table 3.8 summarizes the mapping of R, G, B, and A values to texture |
| components, as a function of the base internal format of the texture |
| image. <internalformat> may be one of the five internal format |
| symbolic constants listed in table 3.8 or the four compressed |
| formats: COMPRESSED_RGB_S3TC_DXT1_NV, |
| COMPRESSED_RGBA_S3TC_DXT1_NV, COMPRESSED_RGBA_S3TC_DXT3_NV, or |
| COMPRESSED_RGBA_S3TC_DXT5_NV. Specifying a value for |
| <internalformat> that is not one of the above values generates the |
| error INVALID_VALUE. When a compressed <internalformat> is |
| specified, a compressed texture is created and all the associated |
| restrictions mentioned in Section 3.7.3 are imposed. |
| |
| Note that when encoding an RGBA image into a format using 1-bit |
| alpha, any texels with an alpha component less than 0.5 end up |
| with an alpha of 0.0 and any texels with an alpha component |
| greater than or equal to 0.5 end up with an alpha of 1.0. When |
| encoding an RGBA image into the COMPRESSED_RGBA_S3TC_DXT1_NV |
| format, the resulting red, green, and blue components of any |
| texels with a final alpha of 0.0 will automatically be zero |
| (black). If this behavior is not desired by an application, it |
| should not use COMPRESSED_RGBA_S3TC_DXT1_NV. |
| |
| Modify Section 3.7.2, Alternate Texture Image Specification Commands |
| |
| (add to the end of section) |
| |
| When the internal format of the texture object is |
| COMPRESSED_RGB_S3TC_DXT1_NV, COMPRESSED_RGBA_S3TC_DXT1_NV, |
| COMPRESSED_RGBA_S3TC_DXT3_NV, or COMPRESSED_RGBA_S3TC_DXT5_NV, the |
| update region specified in TexSubImage2D must be aligned to 4x4 |
| pixel blocks. If <xoffset> or <yoffset> are not multiples of 4 an |
| INVALID_OPERATION error is generated. If <width> is not a multiple |
| of 4 and <xoffset> + <width> is not equal to the width of the LOD |
| then an INVALID_OPERATION error is generated. If <height> is not |
| a multiple of 4 and <yoffset> + <height> is not equal to the |
| height of the LOD then an INVALID_OPERATION error is generated. |
| |
| Additions to Chapter 4 of the OpenGL ES 2.0.25 Specification (Per-Fragment |
| Operations and the Framebuffer) |
| |
| Modify Section 4.4.3, Attaching Texture Images to a Framebuffer |
| |
| (add after last paragraph on Page 113) |
| |
| If <texture> is not zero and the internal format of the |
| corresponding texture object is a compressed format, an |
| INVALID_OPERATION error is generated. |
| |
| Errors |
| |
| INVALID_OPERATION is generated by TexImage2D and TexSubImage2D if |
| TEXTURE_INTERNAL_FORMAT is COMPRESSED_RGB_S3TC_DXT1_NV, |
| COMPRESSED_RGBA_S3TC_DXT1_NV, COMPRESSED_RGBA_S3TC_DXT3_NV, or |
| COMPRESSED_RGBA_S3TC_DXT5_NV and <format> is not RGB or RGBA. |
| |
| If <xoffset> or <yoffset> are not multiples of 4 an |
| INVALID_OPERATION error is generated. |
| |
| If <width> is not a multiple of 4 and <xoffset> + <width> is not |
| equal to the width of the LOD then an INVALID_OPERATION error is |
| generated. |
| |
| If <height> is not a multiple of 4 and <yoffset> + <height> is not |
| equal to the height of the LOD then an INVALID_OPERATION error is |
| generated. |
| |
| Issues |
| |
| 1) Should sub-image updates be aligned to 4x4 pixel blocks? |
| |
| RESOLUTION: Yes. Relaxing this restriction would otherwise require |
| CPU read-back of pixels at the 4x4 compression block boundary. |
| |
| 2) Should we support binding of compressed textures as render targets? |
| |
| RESOLUTION: No. Writing to directly to compressed formats not |
| possible using hardware. Supporting this feature would involve |
| read-back of the texture and re-compression on the CPU, which would |
| be prohibitively slow. |
| |
| 3) Should we support mip map generation? |
| |
| RESOLUTION: No. Mip map generation is not supported for compressed |
| textures. However, uploading to specific mip level is supported. |
| |
| Revision History |
| |
| Rev. Date Author Changes |
| ---- -------- --------- ------------------------------------- |
| 2 09/27/12 istewart Changed all EXT references to NV. |
| Added note about DXT1 alpha encoding. |
| Fixed TexSubImage2D error conditions. |
| 1 04/06/11 mshah First revision. |