st/mesa: refactor duplicated etc fallback checks
authorIlia Mirkin <imirkin@alum.mit.edu>
Fri, 8 Jul 2016 03:59:03 +0000 (23:59 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Sat, 13 Aug 2016 00:21:08 +0000 (20:21 -0400)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_cb_texture.c
src/mesa/state_tracker/st_texture.h

index ab061956f8524d11dbf38ab2e45a999b6cd65891..86702615607f1974ae159dfc990876dbea235685 100644 (file)
@@ -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;
    }
index ae9e2b4e9b30d9334a60391e42d0b3a19f28c5b3..d5e828189ef95669d98ec67fd578c45da0bc8046 100644 (file)
@@ -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