From 7727e6f67c47ab0a36d5646092ee89852523cad8 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Thu, 7 Jul 2016 23:59:03 -0400 Subject: [PATCH] st/mesa: refactor duplicated etc fallback checks MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Ilia Mirkin Reviewed-by: Marek Olšák --- src/mesa/state_tracker/st_cb_texture.c | 15 +++++++++------ src/mesa/state_tracker/st_texture.h | 3 +++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index ab061956f85..86702615607 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -189,6 +189,12 @@ st_FreeTextureImageBuffer(struct gl_context *ctx, stImage->num_transfers = 0; } +bool +st_etc_fallback(struct st_context *st, struct gl_texture_image *texImage) +{ + return (_mesa_is_format_etc2(texImage->TexFormat) && !st->has_etc2) || + (texImage->TexFormat == MESA_FORMAT_ETC1_RGB8 && !st->has_etc1); +} /** called via ctx->Driver.MapTextureImage() */ static void @@ -215,8 +221,7 @@ st_MapTextureImage(struct gl_context *ctx, map = st_texture_image_map(st, stImage, pipeMode, x, y, slice, w, h, 1, &transfer); if (map) { - if ((_mesa_is_format_etc2(texImage->TexFormat) && !st->has_etc2) || - (texImage->TexFormat == MESA_FORMAT_ETC1_RGB8 && !st->has_etc1)) { + if (st_etc_fallback(st, texImage)) { /* ETC isn't supported by gallium and it's represented * by uncompressed formats. Only write transfers with precompressed * data are supported by ES3, which makes this really simple. @@ -258,8 +263,7 @@ st_UnmapTextureImage(struct gl_context *ctx, struct st_context *st = st_context(ctx); struct st_texture_image *stImage = st_texture_image(texImage); - if ((_mesa_is_format_etc2(texImage->TexFormat) && !st->has_etc2) || - (texImage->TexFormat == MESA_FORMAT_ETC1_RGB8 && !st->has_etc1)) { + if (st_etc_fallback(st, texImage)) { /* Decompress the ETC texture to the mapped one. */ unsigned z = slice + stImage->base.Face; struct st_texture_image_transfer *itransfer = &stImage->transfer[z]; @@ -1618,8 +1622,7 @@ st_CompressedTexSubImage(struct gl_context *ctx, GLuint dims, if (!_mesa_is_bufferobj(ctx->Unpack.BufferObj)) goto fallback; - if ((_mesa_is_format_etc2(texImage->TexFormat) && !st->has_etc2) || - (texImage->TexFormat == MESA_FORMAT_ETC1_RGB8 && !st->has_etc1)) { + if (st_etc_fallback(st, texImage)) { /* ETC isn't supported and is represented by uncompressed formats. */ goto fallback; } diff --git a/src/mesa/state_tracker/st_texture.h b/src/mesa/state_tracker/st_texture.h index ae9e2b4e9b3..d5e828189ef 100644 --- a/src/mesa/state_tracker/st_texture.h +++ b/src/mesa/state_tracker/st_texture.h @@ -245,4 +245,7 @@ st_texture_release_all_sampler_views(struct st_context *st, void st_texture_free_sampler_views(struct st_texture_object *stObj); +bool +st_etc_fallback(struct st_context *st, struct gl_texture_image *texImage); + #endif -- 2.30.2