| 80 | }; |
| 81 | |
| 82 | size_t GetCompressedByteSize(GLsizei w, GLsizei h, GLsizei d, GLenum internalformat) |
| 83 | { |
| 84 | if(!IsCompressedFormat(internalformat)) |
| 85 | { |
| 86 | RDCERR("Not compressed format %s", ToStr(internalformat).c_str()); |
| 87 | return GetByteSize(w, h, d, GetBaseFormat(internalformat), GetDataType(internalformat)); |
| 88 | } |
| 89 | |
| 90 | uint32_t astc[3] = {0, 0, 1u}; |
| 91 | |
| 92 | size_t numBlockAlignedTexels = size_t(AlignUp4(w)) * size_t(AlignUp4(h)) * size_t(d); |
| 93 | |
| 94 | switch(internalformat) |
| 95 | { |
| 96 | // BC1 |
| 97 | case eGL_COMPRESSED_RGB_S3TC_DXT1_EXT: |
| 98 | case eGL_COMPRESSED_RGBA_S3TC_DXT1_EXT: |
| 99 | case eGL_COMPRESSED_SRGB_S3TC_DXT1_EXT: |
| 100 | case eGL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: return numBlockAlignedTexels / 2; |
| 101 | // BC2 |
| 102 | case eGL_COMPRESSED_RGBA_S3TC_DXT3_EXT: |
| 103 | case eGL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: return numBlockAlignedTexels; |
| 104 | // BC3 |
| 105 | case eGL_COMPRESSED_RGBA_S3TC_DXT5_EXT: |
| 106 | case eGL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: return numBlockAlignedTexels; |
| 107 | // BC4 |
| 108 | case eGL_COMPRESSED_RED_RGTC1: |
| 109 | case eGL_COMPRESSED_SIGNED_RED_RGTC1: return numBlockAlignedTexels / 2; |
| 110 | // BC5 |
| 111 | case eGL_COMPRESSED_RG_RGTC2: |
| 112 | case eGL_COMPRESSED_SIGNED_RG_RGTC2: return numBlockAlignedTexels; |
| 113 | // BC6 |
| 114 | case eGL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB: |
| 115 | case eGL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB: return numBlockAlignedTexels; |
| 116 | // BC7 |
| 117 | case eGL_COMPRESSED_RGBA_BPTC_UNORM_ARB: |
| 118 | case eGL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB: return numBlockAlignedTexels; |
| 119 | // ETC1 |
| 120 | case eGL_ETC1_RGB8_OES: |
| 121 | // ETC2 |
| 122 | case eGL_COMPRESSED_RGB8_ETC2: |
| 123 | case eGL_COMPRESSED_SRGB8_ETC2: |
| 124 | case eGL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: |
| 125 | case eGL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: return numBlockAlignedTexels / 2; |
| 126 | // EAC |
| 127 | case eGL_COMPRESSED_RGBA8_ETC2_EAC: |
| 128 | case eGL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: return numBlockAlignedTexels; |
| 129 | case eGL_COMPRESSED_R11_EAC: |
| 130 | case eGL_COMPRESSED_SIGNED_R11_EAC: return numBlockAlignedTexels / 2; |
| 131 | case eGL_COMPRESSED_RG11_EAC: |
| 132 | case eGL_COMPRESSED_SIGNED_RG11_EAC: return numBlockAlignedTexels; |
| 133 | // ASTC |
| 134 | case eGL_COMPRESSED_RGBA_ASTC_4x4_KHR: |
| 135 | case eGL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: |
| 136 | astc[0] = 4; |
| 137 | astc[1] = 4; |
| 138 | break; |
| 139 | case eGL_COMPRESSED_RGBA_ASTC_5x4_KHR: |
no test coverage detected