mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
etnaviv: Add support for ETC2 texture compression
Add support for ETC2 compressed textures in the etnaviv driver. One step closer towards GL ES 3 support. For now, treat SRGB and RGB formats the same. It looks like these are distinguished using a different bit in sampler state, and not part of the format, but I have not yet been able to confirm this for sure. (Only enabled on GC3000+ for now, as the GC2000 ETC2 decoder implementation is buggy and we don't work around that) Signed-off-by: Wladimir J. van der Laan <laanwj@gmail.com> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
This commit is contained in:
parent
c8fe372a15
commit
322b34e57e
2 changed files with 22 additions and 1 deletions
|
|
@ -233,6 +233,17 @@ static struct etna_format formats[PIPE_FORMAT_COUNT] = {
|
|||
_T(DXT3_RGBA, DXT2_DXT3, SWIZ(X, Y, Z, W), NONE),
|
||||
_T(DXT5_RGBA, DXT4_DXT5, SWIZ(X, Y, Z, W), NONE),
|
||||
|
||||
_T(ETC2_RGB8, EXT_NONE | EXT_FORMAT, SWIZ(X, Y, Z, W), NONE), /* Extd. format NONE doubles as ETC2_RGB8 */
|
||||
_T(ETC2_SRGB8, EXT_NONE | EXT_FORMAT, SWIZ(X, Y, Z, W), NONE),
|
||||
_T(ETC2_RGB8A1, EXT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 | EXT_FORMAT, SWIZ(X, Y, Z, W), NONE),
|
||||
_T(ETC2_SRGB8A1, EXT_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 | EXT_FORMAT, SWIZ(X, Y, Z, W), NONE),
|
||||
_T(ETC2_RGBA8, EXT_RGBA8_ETC2_EAC | EXT_FORMAT, SWIZ(X, Y, Z, W), NONE),
|
||||
_T(ETC2_SRGBA8, EXT_RGBA8_ETC2_EAC | EXT_FORMAT, SWIZ(X, Y, Z, W), NONE),
|
||||
_T(ETC2_R11_UNORM, EXT_R11_EAC | EXT_FORMAT, SWIZ(X, Y, Z, W), NONE),
|
||||
_T(ETC2_R11_SNORM, EXT_SIGNED_R11_EAC | EXT_FORMAT, SWIZ(X, Y, Z, W), NONE),
|
||||
_T(ETC2_RG11_UNORM, EXT_RG11_EAC | EXT_FORMAT, SWIZ(X, Y, Z, W), NONE),
|
||||
_T(ETC2_RG11_SNORM, EXT_SIGNED_RG11_EAC | EXT_FORMAT, SWIZ(X, Y, Z, W), NONE),
|
||||
|
||||
/* YUV */
|
||||
_T(YUYV, YUY2, SWIZ(X, Y, Z, W), YUY2),
|
||||
_T(UYVY, UYVY, SWIZ(X, Y, Z, W), NONE),
|
||||
|
|
|
|||
|
|
@ -472,9 +472,19 @@ gpu_supports_texure_format(struct etna_screen *screen, uint32_t fmt,
|
|||
if (fmt >= TEXTURE_FORMAT_DXT1 && fmt <= TEXTURE_FORMAT_DXT4_DXT5)
|
||||
supported = VIV_FEATURE(screen, chipFeatures, DXT_TEXTURE_COMPRESSION);
|
||||
|
||||
if (fmt & EXT_FORMAT)
|
||||
if (fmt & EXT_FORMAT) {
|
||||
supported = VIV_FEATURE(screen, chipMinorFeatures1, HALTI0);
|
||||
|
||||
/* ETC1 is checked above, as it has its own feature bit. ETC2 is
|
||||
* supported with HALTI0, however that implementation is buggy in hardware.
|
||||
* The blob driver does per-block patching to work around this. As this
|
||||
* is currently not implemented by etnaviv, enable it for HALTI1 (GC3000)
|
||||
* only.
|
||||
*/
|
||||
if (util_format_is_etc(format))
|
||||
supported = VIV_FEATURE(screen, chipMinorFeatures2, HALTI1);
|
||||
}
|
||||
|
||||
if (!supported)
|
||||
return false;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue