[Mesa-dev] [PATCH] mesa/st: get interpolation mode from the fragment shader.

Dave Airlie airlied at gmail.com
Fri Oct 28 10:49:50 PDT 2011


From: Dave Airlie <airlied at redhat.com>

With the recent changes to interpolation stuff, we can now get the value
direct from the program instead of just being fail.

fixes some of the glsl-1.30 interpolation tests with softpipe

Signed-off-by: Dave Airlie <airlied at redhat.com>
---
 src/mesa/state_tracker/st_program.c |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index c419c40..023879d 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -416,6 +416,19 @@ st_get_vp_variant(struct st_context *st,
    return vpv;
 }
 
+static int st_translate_interp(enum glsl_interp_qualifier glsl_qual)
+{
+   switch (glsl_qual) {
+   case INTERP_QUALIFIER_NONE:
+   case INTERP_QUALIFIER_SMOOTH:
+      return TGSI_INTERPOLATE_PERSPECTIVE;
+   case INTERP_QUALIFIER_FLAT:
+      return TGSI_INTERPOLATE_CONSTANT;
+   case INTERP_QUALIFIER_NOPERSPECTIVE:
+      return TGSI_INTERPOLATE_LINEAR;
+   }
+   assert(0);
+}
 
 /**
  * Translate a Mesa fragment shader into a TGSI shader using extra info in
@@ -558,7 +571,7 @@ st_translate_fragment_program(struct st_context *st,
                if (attr == FRAG_ATTRIB_PNTC)
                   interpMode[slot] = TGSI_INTERPOLATE_LINEAR;
                else
-                  interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE;
+                  interpMode[slot] = st_translate_interp(stfp->Base.InterpQualifier[attr]);
                break;
             }
          }
-- 
1.7.6.4



More information about the mesa-dev mailing list