2017-07-17 18:56 GMT+02:00 Wladimir J. van der Laan <laa...@gmail.com>: > 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 <laa...@gmail.com> > --- > src/gallium/drivers/etnaviv/etnaviv_format.c | 11 +++++++++++ > src/gallium/drivers/etnaviv/etnaviv_screen.c | 27 ++++++++++++++++++++++++++- > 2 files changed, 37 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/drivers/etnaviv/etnaviv_format.c > b/src/gallium/drivers/etnaviv/etnaviv_format.c > index c7c032a..cb67060 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_format.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_format.c > @@ -234,6 +234,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), > diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c > b/src/gallium/drivers/etnaviv/etnaviv_screen.c > index ec8de96..3cae16d 100644 > --- a/src/gallium/drivers/etnaviv/etnaviv_screen.c > +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c > @@ -460,6 +460,26 @@ etna_screen_get_timestamp(struct pipe_screen *pscreen) > } > > static bool > +etna_format_is_etc2(enum pipe_format format) > +{ > + switch (format) { > + case PIPE_FORMAT_ETC2_RGB8: > + case PIPE_FORMAT_ETC2_SRGB8: > + case PIPE_FORMAT_ETC2_RGB8A1: > + case PIPE_FORMAT_ETC2_SRGB8A1: > + case PIPE_FORMAT_ETC2_RGBA8: > + case PIPE_FORMAT_ETC2_SRGBA8: > + case PIPE_FORMAT_ETC2_R11_UNORM: > + case PIPE_FORMAT_ETC2_R11_SNORM: > + case PIPE_FORMAT_ETC2_RG11_UNORM: > + case PIPE_FORMAT_ETC2_RG11_SNORM: > + return true; > + default: > + return false; > + } > +} > + > +static bool > gpu_supports_texure_format(struct etna_screen *screen, uint32_t fmt, > enum pipe_format format) > { > @@ -474,7 +494,12 @@ gpu_supports_texure_format(struct etna_screen *screen, > uint32_t fmt, > if (fmt & EXT_FORMAT) > supported = VIV_FEATURE(screen, chipMinorFeatures1, HALTI0); > > - if (util_format_is_snorm(format)) > + /* ETC2 is supported on 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_snorm(format) || etna_format_is_etc2(format)) > supported = VIV_FEATURE(screen, chipMinorFeatures2, HALTI1); >
Your checkout seems to be a little old - please create the patch against current master. > if (!supported) > -- > 2.7.4 > greets -- Christian Gmeiner, MSc https://christian-gmeiner.info _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev