[Mesa-dev] [PATCH] gallium/u_blitter: don't use TXF for scaled blits
Marek Olšák
maraeo at gmail.com
Thu Jul 13 20:38:05 UTC 2017
From: Marek Olšák <marek.olsak at amd.com>
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.
---
src/gallium/auxiliary/util/u_blitter.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c
index c38534d..65c6f5d 100644
--- a/src/gallium/auxiliary/util/u_blitter.c
+++ b/src/gallium/auxiliary/util/u_blitter.c
@@ -1770,29 +1770,31 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
blit_color = has_color && (mask & PIPE_MASK_RGBA);
blit_depth = has_depth && (mask & PIPE_MASK_Z);
blit_stencil = has_stencil && (mask & PIPE_MASK_S) &&
ctx->has_stencil_export;
if (!blit_stencil && !blit_depth && !blit_color) {
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) {
int src_width = u_minify(src_width0, src->u.tex.first_level);
int src_height = u_minify(src_height0, src->u.tex.first_level);
int src_depth = src->u.tex.last_layer + 1;
struct pipe_box box = *srcbox;
/* Eliminate negative width/height/depth. */
if (box.width < 0) {
--
2.7.4
More information about the mesa-dev
mailing list