David Ghandehari | b153652 | 2017-05-24 00:01:15 -0700 | [diff] [blame] | 1 | Name |
| 2 | |
| 3 | ANGLE_lossy_etc_decode |
| 4 | |
| 5 | Name Strings |
| 6 | |
| 7 | GL_ANGLE_lossy_etc_decode |
| 8 | |
| 9 | Contributors |
| 10 | |
| 11 | Minmin Gong (mgong 'at' microsoft.com) |
| 12 | |
| 13 | Contacts |
| 14 | |
| 15 | Minmin Gong (mgong 'at' microsoft.com) |
| 16 | |
| 17 | Status |
| 18 | |
| 19 | Draft |
| 20 | |
| 21 | Version |
| 22 | |
| 23 | Last Modified Date: Nov 25, 2015 |
| 24 | Author Revision: 1 |
| 25 | |
| 26 | Number |
| 27 | |
| 28 | TBD |
| 29 | |
| 30 | Dependencies |
| 31 | |
| 32 | Requires OpenGL ES 3.0 for ETC2 and EAC formats, or OpenGL ES 2.0 and |
| 33 | OES_compressed_ETC1_RGB8_texture for ETC1 format. |
| 34 | The extension is written against the OpenGL ES 2.0 specification. |
| 35 | |
| 36 | Overview |
| 37 | |
| 38 | Both the OpenGL ES 3.0 specification and OES_compressed_ETC1_RGB8_texture |
| 39 | specify that Ericsson Texture Compression (ETC) decoding must not be lossy. |
| 40 | The goal of this extension is to allow a lossy decode of |
| 41 | compressed textures in the ETC formats in OpenGL ES, for lower memory |
| 42 | and bandwidth consumption. |
| 43 | |
| 44 | This extension uses the same ETC compression format as OpenGL ES 3.0 |
| 45 | and OES_compressed_ETC1_RGB8_texture, with the restriction that the texture |
| 46 | dimensions must be a multiple of four (except for mip levels where the |
| 47 | dimensions are either 2 or 1). And the requirement that ETC decoding must |
| 48 | not be lossy is relaxed. |
| 49 | |
| 50 | See OES_compressed_ETC1_RGB8_texture for a description of the ETC1 format. |
| 51 | Also see OpenGL ES 3.0 specification appendix C.2 (ETC Compressed Texture |
| 52 | ImageFormats) for a description of ETC2 and EAC formats. |
| 53 | |
| 54 | IP Status |
| 55 | |
| 56 | See Ericsson's "IP Statement" |
| 57 | |
| 58 | New Procedures and Functions |
| 59 | |
| 60 | None. |
| 61 | |
| 62 | New Types |
| 63 | |
| 64 | None. |
| 65 | |
| 66 | New Tokens |
| 67 | |
| 68 | Accepted by the <internalformat> parameter of CompressedTexImage2D |
| 69 | and the <format> parameter of CompressedTexSubImage2D: |
| 70 | |
| 71 | ETC1_RGB8_LOSSY_DECODE_ANGLE 0x9690 |
| 72 | COMPRESSED_R11_LOSSY_DECODE_EAC_ANGLE 0x9691 |
| 73 | COMPRESSED_SIGNED_R11_LOSSY_DECODE_EAC_ANGLE 0x9692 |
| 74 | COMPRESSED_RG11_LOSSY_DECODE_EAC_ANGLE 0x9693 |
| 75 | COMPRESSED_SIGNED_RG11_LOSSY_DECODE_EAC_ANGLE 0x9694 |
| 76 | COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE 0x9695 |
| 77 | COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE 0x9696 |
| 78 | COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE 0x9697 |
| 79 | COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE 0x9698 |
| 80 | COMPRESSED_RGBA8_LOSSY_DECODE_ETC2_EAC_ANGLE 0x9699 |
| 81 | COMPRESSED_SRGB8_ALPHA8_LOSSY_DECODE_ETC2_EAC_ANGLE 0x969A |
| 82 | |
| 83 | Additions to Chapter 3 of the OpenGL ES 2.0 Specification (Rasterization) |
| 84 | |
| 85 | Add the following to Section 3.7.3 (Compressed Texture Images) |
| 86 | (at the end of the description of the CompressedTexImage2D command): |
| 87 | |
| 88 | Compressed Internal Format Base Internal Format |
| 89 | ========================== ==================== |
| 90 | ETC1_RGB8_LOSSY_DECODE_ANGLE RGB |
| 91 | COMPRESSED_R11_LOSSY_DECODE_EAC_ANGLE R |
| 92 | COMPRESSED_SIGNED_R11_LOSSY_DECODE_EAC_ANGLE R |
| 93 | COMPRESSED_RG11_LOSSY_DECODE_EAC_ANGLE RG |
| 94 | COMPRESSED_SIGNED_RG11_LOSSY_DECODE_EAC_ANGLE RG |
| 95 | COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE RGB |
| 96 | COMPRESSED_SRGB8_LOSSY_DECODE_ETC2_ANGLE RGB |
| 97 | COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE RGBA |
| 98 | COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_LOSSY_DECODE_ETC2_ANGLE RGBA |
| 99 | COMPRESSED_RGBA8_LOSSY_DECODE_ETC2_EAC_ANGLE RGBA |
| 100 | COMPRESSED_SRGB8_ALPHA8_LOSSY_DECODE_ETC2_EAC_ANGLE RGBA |
| 101 | |
| 102 | Table 3.x: Specific Compressed Internal Formats |
| 103 | |
| 104 | If <internalformat> is one of the ETC lossy decode formats listed in |
| 105 | Table 3.x, the compressed texture is stored in an unspecified compressed |
| 106 | texture format, that may introduce losses of precision in the texture data. |
| 107 | The GL and the ETC texture compression algorithm support only 2D images |
| 108 | without borders. |
| 109 | |
| 110 | CompressedTexImage2D will produce the INVALID_OPERATION error when |
| 111 | <internalformat> is one of the lossy decode ETC-format values from |
| 112 | Table 3.x under the following conditions: |
| 113 | |
| 114 | * <border> is non-zero. |
| 115 | * <width> is not one, two, nor a multiple of four. |
| 116 | * <height> is not one, two, nor a multiple of four. |
| 117 | |
| 118 | Add the following to Section 3.7.3 (Compressed Texture Images) |
| 119 | (at the end of the description of the CompressedTexSubImage2D command): |
| 120 | |
| 121 | If the internal format of the texture image being modified is an ETC-format |
| 122 | listed in Table 3.x, the compressed texture is stored in an unspecified |
| 123 | compressed texture format. The xoffset and yoffset must also be aligned to |
| 124 | 4x4 texel block boundaries, since ETC encoding makes it difficult to modify |
| 125 | non-aligned regions. CompressedTexSubImage2D will result in an |
| 126 | INVALID_OPERATION error only if one of the following conditions occurs: |
| 127 | |
| 128 | * <width> is not a multiple of four nor equal to TEXTURE_WIDTH. |
| 129 | * <height> is not a multiple of four nor equal to TEXTURE_HEIGHT. |
| 130 | * <xoffset> or <yoffset> is not a multiple of four. |
| 131 | * <format> does not match the internal format of the texture image |
| 132 | being modified. |
| 133 | |
| 134 | Errors |
| 135 | |
| 136 | INVALID_OPERATION is generated by CompressedTexImage2D if |
| 137 | lossy decode ETC-format is used and <internalformat> is one of the |
| 138 | compressed internal formats from Table 3.x and any of the following apply: |
| 139 | - <border> is not equal to zero. |
| 140 | - <width> is not one, two, nor a multiple of four. |
| 141 | - <height> is not one, two, nor a multiple of four. |
| 142 | |
| 143 | INVALID_OPERATION is generated by CompressedTexSubImage2D if |
| 144 | lossy decode ETC-format is used and <format> is one of the compressed |
| 145 | interal formats from Table 3.x and any of the following apply: |
| 146 | - <width> is not a multiple of four nor equal to TEXTURE_WIDTH; |
| 147 | - <height> is not a multiple of four nor equal to TEXTURE_HEIGHT; |
| 148 | - <xoffset> or <yoffset> is not a multiple of four; |
| 149 | - <format> does not match the internal format of the texture image |
| 150 | being modified. |
| 151 | |
| 152 | New State |
| 153 | |
| 154 | None. |
| 155 | |
| 156 | Revision History |
| 157 | |
| 158 | Revision 1, 2015/11/25 - mgong |
| 159 | - Initial revision |