[Mesa-dev] [PATCH 2/2] gallivm: add comment for bogus min/mag filter selection with nearest mip filter

Jose Fonseca jfonseca at vmware.com
Wed Aug 21 09:30:29 PDT 2013


Series looks good.

You might want to promote XXX to FIXME. Fixing wouldn't be hard -- just need to pass some additional parameters to this function, so that we can check that MIN/MAG filter are same.

Jose

----- Original Message -----
> From: Roland Scheidegger <sroland at vmware.com>
> 
> Detected this hunting some other bug, not sure if it really needs fixing but
> it is definitely wrong.
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_sample.c     |    8 ++++++++
>  src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c |    2 +-
>  src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c |    2 +-
>  3 files changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.c
> b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
> index d339aba..696855b 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_sample.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
> @@ -700,6 +700,14 @@ lp_build_lod_selector(struct lp_build_sample_context
> *bld,
>  
>              if (mip_filter == PIPE_TEX_MIPFILTER_NONE ||
>                  mip_filter == PIPE_TEX_MIPFILTER_NEAREST) {
> +               /*
> +                * XXX: this is not entirely correct, as out_lod_ipart is
> used
> +                * both for mip level determination as well as mag/min
> switchover
> +                * point (if different min/mag filters are used). In
> particular,
> +                * lod values between [-0.5,0] (rho between [sqrt(2), 1.0])
> will
> +                * incorrectly use min filter instead of mag (the
> non-optimized
> +                * calculation further down has exactly the same problem).
> +                */
>                 *out_lod_ipart = lp_build_ilog2(levelf_bld, rho);
>                 *out_lod_fpart = levelf_bld->zero;
>                 return;
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c
> b/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c
> index da416aa..2573cec 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c
> @@ -1611,7 +1611,7 @@ lp_build_sample_aos(struct lp_build_sample_context
> *bld,
>        LLVMValueRef minify;
>  
>        /*
> -       * XXX this should to all lods into account, if some are min
> +       * XXX this should take all lods into account, if some are min
>         * some max probably could hack up the coords/weights in the linear
>         * path with selects to work for nearest.
>         * If that's just two quads sitting next to each other it seems
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> index 6d12587..34ab414 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> @@ -1636,7 +1636,7 @@ lp_build_sample_general(struct lp_build_sample_context
> *bld,
>        LLVMValueRef minify;
>  
>        /*
> -       * XXX this should to all lods into account, if some are min
> +       * XXX this should take all lods into account, if some are min
>         * some max probably could hack up the coords/weights in the linear
>         * path with selects to work for nearest.
>         * If that's just two quads sitting next to each other it seems
> --
> 1.7.9.5
> 


More information about the mesa-dev mailing list