From 1ed8237b1afef9dadcb75bf697803eb3b0e32872 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Thu, 7 Jul 2016 23:46:28 -0400 Subject: [PATCH] st/mesa: return appropriate mesa format for ETC texture formats MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Even when the backend driver does not support ETC formats, we handle the decoding into an uncompressed backing texture. However as far as core mesa is concerned, it's an ETC texture and we should return the relevant ETC mesa format. This condition can get hit when using glTexStorage to create the texture object. Signed-off-by: Ilia Mirkin Reviewed-by: Marek Olšák Cc: "11.2 12.0" (cherry picked from commit 00d4315d37ec736fccfee50a402fa2a929054bde) --- src/mesa/state_tracker/st_format.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index 9a280fc004b..5f7624128f4 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -37,6 +37,7 @@ #include "main/enums.h" #include "main/formats.h" #include "main/glformats.h" +#include "main/texcompress.h" #include "main/texgetimage.h" #include "main/teximage.h" #include "main/texstore.h" @@ -2282,6 +2283,12 @@ st_ChooseTextureFormat(struct gl_context *ctx, GLenum target, } if (pFormat == PIPE_FORMAT_NONE) { + /* lie about using etc1/etc2 natively if we do decoding tricks */ + mFormat = _mesa_glenum_to_compressed_format(internalFormat); + if ((mFormat == MESA_FORMAT_ETC1_RGB8 && !st->has_etc1) || + (_mesa_is_format_etc2(mFormat) && !st->has_etc2)) + return mFormat; + /* no luck at all */ return MESA_FORMAT_NONE; }