[Mesa-dev] [PATCH 5/9] softpipe: Split code getting a filter into separate function
Roland Scheidegger
sroland at vmware.com
Wed Sep 9 10:53:00 PDT 2015
Am 09.09.2015 um 12:35 schrieb Krzesimir Nowak:
> This function will be later used by textureQueryLod. The
> img_filter_func are optional, because textureQueryLod will not need
> them.
> ---
> src/gallium/drivers/softpipe/sp_tex_sample.c | 53 +++++++++++++++++++---------
> 1 file changed, 37 insertions(+), 16 deletions(-)
>
> diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c b/src/gallium/drivers/softpipe/sp_tex_sample.c
> index cd4a659..0a3fc20 100644
> --- a/src/gallium/drivers/softpipe/sp_tex_sample.c
> +++ b/src/gallium/drivers/softpipe/sp_tex_sample.c
> @@ -2912,6 +2912,42 @@ get_img_filter(const struct sp_sampler_view *sp_sview,
> }
> }
>
> +/**
> + * Get mip filter, and optionally both img min filter and img mag filter
> + */
> +static void
> +get_filters(struct sp_sampler_view *sp_sview,
> + struct sp_sampler *sp_samp,
> + enum tgsi_sampler_control control,
> + struct sp_mip **mip,
> + img_filter_func *min,
> + img_filter_func *mag)
> +{
> + assert(mip);
> + if (control == tgsi_sampler_gather) {
> + *mip = &mip_nearest;
> + if (min)
> + *min = get_img_filter(sp_sview, &sp_samp->base, PIPE_TEX_FILTER_LINEAR, true);
> + } else if (sp_sview->pot2d & sp_samp->min_mag_equal_repeat_linear) {
> + *mip = &mip_linear_2d_linear_repeat_POT;
> + }
> + else {
> + *mip = &sp_samp->mip;
> + if (min || mag) {
I think this (and the following conditions) could be simplified a bit
since a caller should only either request both or none of min/mag.
So something like
if (min) {
assert(mag);
...
Roland
> + img_filter_func tmp_filter = get_img_filter(sp_sview, &sp_samp->base, sp_samp->min_img_filter, false);
> + if (min)
> + *min = tmp_filter;
> + if (mag) {
> + if (sp_samp->min_mag_equal) {
> + *mag = tmp_filter;
> + }
> + else {
> + *mag = get_img_filter(sp_sview, &sp_samp->base, sp_samp->base.mag_img_filter, false);
> + }
> + }
> + }
> + }
> +}
>
> static void
> sample_mip(struct sp_sampler_view *sp_sview,
> @@ -2928,22 +2964,7 @@ sample_mip(struct sp_sampler_view *sp_sview,
> img_filter_func min_img_filter = NULL;
> img_filter_func mag_img_filter = NULL;
>
> - if (filt_args->control == tgsi_sampler_gather) {
> - mip = &mip_nearest;
> - min_img_filter = get_img_filter(sp_sview, &sp_samp->base, PIPE_TEX_FILTER_LINEAR, true);
> - } else if (sp_sview->pot2d & sp_samp->min_mag_equal_repeat_linear) {
> - mip = &mip_linear_2d_linear_repeat_POT;
> - }
> - else {
> - mip = &sp_samp->mip;
> - min_img_filter = get_img_filter(sp_sview, &sp_samp->base, sp_samp->min_img_filter, false);
> - if (sp_samp->min_mag_equal) {
> - mag_img_filter = min_img_filter;
> - }
> - else {
> - mag_img_filter = get_img_filter(sp_sview, &sp_samp->base, sp_samp->base.mag_img_filter, false);
> - }
> - }
> + get_filters(sp_sview, sp_samp, filt_args->control, &mip, &min_img_filter, &mag_img_filter);
>
> mip->filter(sp_sview, sp_samp, min_img_filter, mag_img_filter,
> s, t, p, c0, lod, filt_args, rgba);
>
More information about the mesa-dev
mailing list