[Mesa-dev] [PATCH 5/9] softpipe: Split code getting a filter into separate function
Krzesimir Nowak
krzesimir at kinvolk.io
Wed Sep 9 03:35:34 PDT 2015
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) {
+ 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);
--
2.4.3
More information about the mesa-dev
mailing list