gallium/u_blitter: don't use TXF for scaled blits
authorMarek Olšák <marek.olsak@amd.com>
Wed, 12 Jul 2017 19:21:38 +0000 (21:21 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 17 Jul 2017 13:47:30 +0000 (15:47 +0200)
There seems to be a rounding difference with F2I vs nearest filtering.
The precise problem in the rounding is unknown.

This fixes an incorrect output with OpenMAX encoding.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/auxiliary/util/u_blitter.c

index c38534dfeef0315cd11e7f161be6c571115efc86..65c6f5d21fa093566c746a0da89781bbbae0c2f0 100644 (file)
@@ -1777,15 +1777,17 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
       return;
    }
 
-   if (blit_stencil ||
-       (dstbox->width == abs(srcbox->width) &&
-        dstbox->height == abs(srcbox->height))) {
+   bool is_scaled = dstbox->width != abs(srcbox->width) ||
+                    dstbox->height != abs(srcbox->height);
+
+   if (blit_stencil || !is_scaled)
       filter = PIPE_TEX_FILTER_NEAREST;
-   }
 
    bool use_txf = false;
 
+   /* Don't support scaled blits. The TXF shader uses F2I for rounding. */
    if (ctx->has_txf &&
+       !is_scaled &&
        filter == PIPE_TEX_FILTER_NEAREST &&
        src->target != PIPE_TEXTURE_CUBE &&
        src->target != PIPE_TEXTURE_CUBE_ARRAY) {