[Mesa-dev] [PATCH] softpipe: fix anisotropic filtering crash
Eduardo Lima Mitev
elima at igalia.com
Sun Mar 13 06:21:14 UTC 2016
On 03/13/2016 06:53 AM, sroland at vmware.com wrote:
> From: Roland Scheidegger <sroland at vmware.com>
>
> The filt_args->offset wasn't assigned but was always used later leading
> to a crash (as far as I can tell, texel offsets don't actually make much
> sense with anisotropic filtering, but because there's no explicit setting
> if offsets are enabled there the array is always accessed).
>
> This fixes https://bugs.freedesktop.org/show_bug.cgi?id=94481
>
> CC: <mesa-stable at lists.freedesktop.org>
> ---
> src/gallium/drivers/softpipe/sp_tex_sample.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c b/src/gallium/drivers/softpipe/sp_tex_sample.c
> index e3e28a3..5e3d47b 100644
> --- a/src/gallium/drivers/softpipe/sp_tex_sample.c
> +++ b/src/gallium/drivers/softpipe/sp_tex_sample.c
> @@ -2209,6 +2209,7 @@ img_filter_2d_ewa(const struct sp_sampler_view *sp_sview,
> const float t[TGSI_QUAD_SIZE],
> const float p[TGSI_QUAD_SIZE],
> const uint faces[TGSI_QUAD_SIZE],
> + const int8_t *offset,
> unsigned level,
> const float dudx, const float dvdx,
> const float dudy, const float dvdy,
> @@ -2268,6 +2269,8 @@ img_filter_2d_ewa(const struct sp_sampler_view *sp_sview,
> /* F *= formScale; */ /* no need to scale F as we don't use it below here */
>
> args.level = level;
> + args.offset = offset;
> +
> for (j = 0; j < TGSI_QUAD_SIZE; j++) {
> /* Heckbert MS thesis, p. 59; scan over the bounding box of the ellipse
> * and incrementally update the value of Ax^2+Bxy*Cy^2; when this
> @@ -2431,6 +2434,8 @@ mip_filter_linear_aniso(const struct sp_sampler_view *sp_sview,
> const float dvdy = (t[QUAD_TOP_LEFT] - t[QUAD_BOTTOM_LEFT]) * t_to_v;
> struct img_filter_args args;
>
> + args.offset = filt_args->offset;
> +
> if (filt_args->control == TGSI_SAMPLER_LOD_BIAS ||
> filt_args->control == TGSI_SAMPLER_LOD_NONE ||
> /* XXX FIXME */
> @@ -2495,6 +2500,11 @@ mip_filter_linear_aniso(const struct sp_sampler_view *sp_sview,
> args.p = p[j];
> args.level = psview->u.tex.last_level;
> args.face_id = filt_args->faces[j];
> + /*
> + * XXX: we overwrote any linear filter with nearest, so this
> + * isn't right (albeit if last level is 1x1 and no border it
> + * will work just the same).
> + */
> min_filter(sp_sview, sp_samp, &args, &rgba[0][j]);
> }
Patch looks right but this comment seems unrelated with it. If that's
the case then perhaps it should be moved out to a patch of its own.
Other than that:
Reviewed-by: Eduardo Lima Mitev <elima at igalia.com>
Thanks.
Eduardo
> }
> @@ -2503,8 +2513,8 @@ mip_filter_linear_aniso(const struct sp_sampler_view *sp_sview,
> * seem to be worth the extra running time.
> */
> img_filter_2d_ewa(sp_sview, sp_samp, min_filter, mag_filter,
> - s, t, p, filt_args->faces, level0,
> - dudx, dvdx, dudy, dvdy, rgba);
> + s, t, p, filt_args->faces, filt_args->offset,
> + level0, dudx, dvdx, dudy, dvdy, rgba);
> }
>
> if (DEBUG_TEX) {
>
More information about the mesa-dev
mailing list