Mesa (master): gallivm: don't use AoS path if min/ mag filter are different with multiple lods

Roland Scheidegger sroland at kemper.freedesktop.org
Fri Aug 30 21:20:24 UTC 2013


Module: Mesa
Branch: master
Commit: 61add3cc3c68b3b1faffc468c2a2b882c267f94b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=61add3cc3c68b3b1faffc468c2a2b882c267f94b

Author: Roland Scheidegger <sroland at vmware.com>
Date:   Thu Aug 29 20:52:18 2013 +0200

gallivm: don't use AoS path if min/mag filter are different with multiple lods

Instead of enhancing the AoS path so it can deal with it, just use SoA. Fixing
AoS path wouldn't be all that difficult (use all the same logic as SoA) but
considered not worth it for now.

Reviewed-by: Jose Fonseca <jfonseca at vmware.com>

---

 src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
index 7f91951..26a65d0 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
@@ -2264,6 +2264,10 @@ lp_build_sample_soa(struct gallivm_state *gallivm,
                         /* not sure this is strictly needed or simply impossible */
                         static_sampler_state->compare_mode == PIPE_TEX_COMPARE_NONE &&
                         lp_is_simple_wrap_mode(static_sampler_state->wrap_s);
+
+      use_aos &= bld.num_lods <= num_quads ||
+                 static_sampler_state->min_img_filter ==
+                    static_sampler_state->mag_img_filter;
       if (dims > 1) {
          use_aos &= lp_is_simple_wrap_mode(static_sampler_state->wrap_t);
          if (dims > 2) {
@@ -2292,7 +2296,8 @@ lp_build_sample_soa(struct gallivm_state *gallivm,
 
       /*
        * we only try 8-wide sampling with soa as it appears to
-       * be a loss with aos with AVX (but it should work).
+       * be a loss with aos with AVX (but it should work, except
+       * for conformance if min_filter != mag_filter if num_lods > 1).
        * (It should be faster if we'd support avx2)
        */
       if (num_quads == 1 || !use_aos) {




More information about the mesa-commit mailing list