summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/util
diff options
context:
space:
mode:
authorThong Thai <thong.thai@amd.com>2021-08-06 10:42:00 -0400
committerMarge Bot <eric+marge@anholt.net>2021-08-08 14:06:54 +0000
commit5dace8e0fb9c1dc9a0de062d6747cf4c3e2e819f (patch)
treed4944b08b2f2f8ccf3d89494468ef17ed393ef05 /src/gallium/auxiliary/util
parent675508dd81da8d77f179c6cc7831caaa2cbde094 (diff)
gallium/util: add half texel offset param to util_compute_blit
Fixes an issue where the video image is blurry after blitting. Fixes: c5088b49729 ("gallium: Fix VAAPI postproc blit") Signed-off-by: Thong Thai <thong.thai@amd.com> Reviewed-by: Leo Liu <leo.liu@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12251>
Diffstat (limited to 'src/gallium/auxiliary/util')
-rw-r--r--src/gallium/auxiliary/util/u_compute.c7
-rw-r--r--src/gallium/auxiliary/util/u_compute.h2
2 files changed, 5 insertions, 4 deletions
diff --git a/src/gallium/auxiliary/util/u_compute.c b/src/gallium/auxiliary/util/u_compute.c
index 79755abaf1d..1eab36ab6b8 100644
--- a/src/gallium/auxiliary/util/u_compute.c
+++ b/src/gallium/auxiliary/util/u_compute.c
@@ -76,7 +76,7 @@ static void *blit_compute_shader(struct pipe_context *ctx)
}
void util_compute_blit(struct pipe_context *ctx, struct pipe_blit_info *blit_info,
- void **compute_state)
+ void **compute_state, bool half_texel_offset)
{
if (blit_info->src.box.width == 0 || blit_info->src.box.height == 0 ||
blit_info->dst.box.width == 0 || blit_info->dst.box.height == 0)
@@ -91,9 +91,10 @@ void util_compute_blit(struct pipe_context *ctx, struct pipe_blit_info *blit_inf
float x_scale = blit_info->src.box.width / (float)blit_info->dst.box.width;
float y_scale = blit_info->src.box.height / (float)blit_info->dst.box.height;
float z_scale = blit_info->src.box.depth / (float)blit_info->dst.box.depth;
+ float offset = half_texel_offset ? 0.5 : 0.0;
- unsigned data[] = {u_bitcast_f2u(blit_info->src.box.x / (float)src->width0),
- u_bitcast_f2u(blit_info->src.box.y / (float)src->height0),
+ unsigned data[] = {u_bitcast_f2u((blit_info->src.box.x + offset) / (float)src->width0),
+ u_bitcast_f2u((blit_info->src.box.y + offset) / (float)src->height0),
u_bitcast_f2u(blit_info->src.box.z),
u_bitcast_f2u(0),
u_bitcast_f2u(x_scale / src->width0),
diff --git a/src/gallium/auxiliary/util/u_compute.h b/src/gallium/auxiliary/util/u_compute.h
index 8c2866af8d4..4a6c66e0ef4 100644
--- a/src/gallium/auxiliary/util/u_compute.h
+++ b/src/gallium/auxiliary/util/u_compute.h
@@ -36,7 +36,7 @@ extern "C" {
#endif
void util_compute_blit(struct pipe_context *ctx, struct pipe_blit_info *blit_info,
- void **compute_state);
+ void **compute_state, bool half_texel_offset);
#ifdef __cplusplus
}