On 03/13/2016 06:53 AM, srol...@vmware.com wrote:
From: Roland Scheidegger <srol...@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-sta...@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 <el...@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) {


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to