On 09/09/2015 04:35 AM, Krzesimir Nowak wrote:
Putting this function pointer into a struct enables grouping of
several related functions in a single place. For now it is just a
single function, but the struct will be later extended with a
mip_level_func for returning mip level.
---
  src/gallium/drivers/softpipe/sp_tex_sample.c | 28 +++++++++++++++++-----------
  src/gallium/drivers/softpipe/sp_tex_sample.h |  5 ++++-
  2 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c 
b/src/gallium/drivers/softpipe/sp_tex_sample.c
index 38bdc93..cd4a659 100644
--- a/src/gallium/drivers/softpipe/sp_tex_sample.c
+++ b/src/gallium/drivers/softpipe/sp_tex_sample.c
@@ -2515,6 +2515,12 @@ mip_filter_linear_2d_linear_repeat_POT(
     }
  }

+static struct sp_mip mip_linear = {mip_filter_linear};
+static struct sp_mip mip_nearest = {mip_filter_nearest};
+static struct sp_mip mip_none = {mip_filter_none};
+static struct sp_mip mip_none_no_filter_select = 
{mip_filter_none_no_filter_select};
+static struct sp_mip mip_linear_aniso = {mip_filter_linear_aniso};
+static struct sp_mip mip_linear_2d_linear_repeat_POT = 
{mip_filter_linear_2d_linear_repeat_POT};

Can those be const-qualified too?



  /**
   * Do shadow/depth comparisons.
@@ -2918,18 +2924,18 @@ sample_mip(struct sp_sampler_view *sp_sview,
             const struct filter_args *filt_args,
             float rgba[TGSI_NUM_CHANNELS][TGSI_QUAD_SIZE])
  {
-   mip_filter_func mip_filter;
+   struct sp_mip *mip = NULL;
     img_filter_func min_img_filter = NULL;
     img_filter_func mag_img_filter = NULL;

     if (filt_args->control == tgsi_sampler_gather) {
-      mip_filter = mip_filter_nearest;
+      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_filter = mip_filter_linear_2d_linear_repeat_POT;
+      mip = &mip_linear_2d_linear_repeat_POT;
     }
     else {
-      mip_filter = sp_samp->mip_filter;
+      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;
@@ -2939,8 +2945,8 @@ sample_mip(struct sp_sampler_view *sp_sview,
        }
     }

-   mip_filter(sp_sview, sp_samp, min_img_filter, mag_img_filter,
-              s, t, p, c0, lod, filt_args, rgba);
+   mip->filter(sp_sview, sp_samp, min_img_filter, mag_img_filter,
+               s, t, p, c0, lod, filt_args, rgba);

     if (sp_samp->base.compare_mode != PIPE_TEX_COMPARE_NONE) {
        sample_compare(sp_sview, sp_samp, s, t, p, c0, lod, filt_args->control, 
rgba);
@@ -3239,13 +3245,13 @@ softpipe_create_sampler_state(struct pipe_context *pipe,
     switch (sampler->min_mip_filter) {
     case PIPE_TEX_MIPFILTER_NONE:
        if (sampler->min_img_filter == sampler->mag_img_filter)
-         samp->mip_filter = mip_filter_none_no_filter_select;
+         samp->mip = mip_none_no_filter_select;
        else
-         samp->mip_filter = mip_filter_none;
+         samp->mip = mip_none;
        break;

     case PIPE_TEX_MIPFILTER_NEAREST:
-      samp->mip_filter = mip_filter_nearest;
+      samp->mip = mip_nearest;
        break;

     case PIPE_TEX_MIPFILTER_LINEAR:
@@ -3257,11 +3263,11 @@ softpipe_create_sampler_state(struct pipe_context *pipe,
            sampler->max_anisotropy <= 1) {
           samp->min_mag_equal_repeat_linear = TRUE;
        }
-      samp->mip_filter = mip_filter_linear;
+      samp->mip = mip_linear;

        /* Anisotropic filtering extension. */
        if (sampler->max_anisotropy > 1) {
-         samp->mip_filter = mip_filter_linear_aniso;
+         samp->mip = mip_linear_aniso;

           /* Override min_img_filter:
            * min_img_filter needs to be set to NEAREST since we need to access
diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.h 
b/src/gallium/drivers/softpipe/sp_tex_sample.h
index 7d1aafc..78541e1 100644
--- a/src/gallium/drivers/softpipe/sp_tex_sample.h
+++ b/src/gallium/drivers/softpipe/sp_tex_sample.h
@@ -128,6 +128,9 @@ struct sp_sampler_view

  };

+struct sp_mip {

I wonder if we could come up with a more descriptive name than "sp_mip". Maybe something like sp_filter_funcs since it contains functions related to filtering?


+   mip_filter_func filter;
+};

  struct sp_sampler {
     struct pipe_sampler_state base;
@@ -144,7 +147,7 @@ struct sp_sampler {
     wrap_linear_func linear_texcoord_t;
     wrap_linear_func linear_texcoord_p;

-   mip_filter_func mip_filter;
+   struct sp_mip mip;
  };




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

Reply via email to