[Mesa-dev] [PATCH] gallivm: adjust wrap mode to CLAMP_TO_EDGE always for cube maps.

Jose Fonseca jfonseca at vmware.com
Thu Sep 19 07:13:57 PDT 2013


Sounds good to me. Thanks.

Jose

----- Original Message -----
> From: Roland Scheidegger <sroland at vmware.com>
> 
> Technically without seamless filtering enabled GL allows any wrap mode, which
> made sense when supporting true borders (can get seamless effect with border
> and CLAMP_TO_BORDER), but gallium doesn't support borders and d3d9 requires
> wrap modes to be ignored and it's a pain to fix up the sampler state (as it
> makes it texture dependent). It is difficult to imagine a situation where an
> app really wants another behavior so just cheat here.
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c |   10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> index 355e97d..33378bc 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> @@ -2123,14 +2123,18 @@ lp_build_sample_soa(struct gallivm_state *gallivm,
>        debug_printf("  .min_mip_filter = %u\n",
>        derived_sampler_state.min_mip_filter);
>     }
>  
> -   if ((static_texture_state->target == PIPE_TEXTURE_CUBE ||
> -        static_texture_state->target == PIPE_TEXTURE_CUBE_ARRAY) &&
> -       static_sampler_state->seamless_cube_map)
> +   if (static_texture_state->target == PIPE_TEXTURE_CUBE ||
> +       static_texture_state->target == PIPE_TEXTURE_CUBE_ARRAY)
>     {
>        /*
>         * Seamless filtering ignores wrap modes.
>         * Setting to CLAMP_TO_EDGE is correct for nearest filtering, for
>         * bilinear it's not correct but way better than using for instance
>         repeat.
> +       * Note we even set this for non-seamless. Technically GL allows any
> wrap
> +       * mode, which made sense when supporting true borders (can get
> seamless
> +       * effect with border and CLAMP_TO_BORDER), but gallium doesn't
> support
> +       * borders and d3d9 requires wrap modes to be ignored and it's a pain
> to fix
> +       * up the sampler state (as it makes it texture dependent).
>         */
>        derived_sampler_state.wrap_s = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
>        derived_sampler_state.wrap_t = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
> --
> 1.7.9.5
> 


More information about the mesa-dev mailing list