freedreno/ir3: handle FRAG IN's without interpolation specified
authorRob Clark <robclark@freedesktop.org>
Wed, 1 Apr 2015 16:31:46 +0000 (12:31 -0400)
committerRob Clark <robclark@freedesktop.org>
Sun, 5 Apr 2015 20:36:34 +0000 (16:36 -0400)
Fallback to picking based on semantic name.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/ir3/ir3_compiler.c

index 82393088fe6868c038b0dee8b14738636e90d7cc..38df8b5fdf4f20d228eafe19bad7d1d25491c0fd 100644 (file)
@@ -3107,15 +3107,23 @@ decl_in(struct ir3_compile_context *ctx, struct tgsi_full_declaration *decl)
                                } else {
                                        bool use_ldlv = false;
 
-                                       /* I don't believe it is valid to not have Interp
-                                        * on a normal frag shader input, and various parts
-                                        * that that handle flat/smooth shading make this
-                                        * assumption as well.
+                                       /* if no interpolation given, pick based on
+                                        * semantic:
                                         */
-                                       compile_assert(ctx, decl->Declaration.Interpolate);
+                                       if (!decl->Declaration.Interpolate) {
+                                               switch (decl->Semantic.Name) {
+                                               case TGSI_SEMANTIC_COLOR:
+                                                       so->inputs[n].interpolate =
+                                                                       TGSI_INTERPOLATE_COLOR;
+                                                       break;
+                                               default:
+                                                       so->inputs[n].interpolate =
+                                                                       TGSI_INTERPOLATE_LINEAR;
+                                               }
+                                       }
 
                                        if (ctx->flat_bypass) {
-                                               switch (decl->Interp.Interpolate) {
+                                               switch (so->inputs[n].interpolate) {
                                                case TGSI_INTERPOLATE_COLOR:
                                                        if (!ctx->so->key.rasterflat)
                                                                break;
@@ -3162,7 +3170,7 @@ decl_sv(struct ir3_compile_context *ctx, struct tgsi_full_declaration *decl)
        so->inputs[n].compmask = 1;
        so->inputs[n].regid = r;
        so->inputs[n].inloc = ctx->next_inloc;
-       so->inputs[n].interpolate = false;
+       so->inputs[n].interpolate = TGSI_INTERPOLATE_CONSTANT;
 
        struct ir3_instruction *instr = NULL;