mesa/st: get interpolation mode from the fragment shader.
authorDave Airlie <airlied@redhat.com>
Fri, 28 Oct 2011 16:18:15 +0000 (17:18 +0100)
committerDave Airlie <airlied@redhat.com>
Sat, 29 Oct 2011 06:41:46 +0000 (07:41 +0100)
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@redhat.com>
src/mesa/state_tracker/st_program.c

index c419c4066a1a48a6599edc8328ca3cfb70b05896..146e77f9dbbba21836de35e98a70fd6207243b8c 100644 (file)
@@ -416,6 +416,20 @@ 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);
+   return TGSI_INTERPOLATE_PERSPECTIVE;
+}
 
 /**
  * Translate a Mesa fragment shader into a TGSI shader using extra info in
@@ -558,7 +572,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;
             }
          }