radeonsi: remove special handling of TGSI_INTERPOLATE_COLOR in shader codegen
authorMarek Olšák <marek.olsak@amd.com>
Sun, 4 Jan 2015 19:09:51 +0000 (20:09 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 7 Jan 2015 11:06:43 +0000 (12:06 +0100)
It doesn't do anything useful. And colors are floating-point, so we can use
fs.interp, remove "flatshade" from the shader key, and rely on the FLAT_SHADE
state only (in the next patch).

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeonsi/si_shader.c

index 42febe22cf85bc6d38e973e8c4b09407522b1bb5..5d61a549fe6626251b7d0b938746daa4bc12dfc1 100644 (file)
@@ -453,11 +453,6 @@ static void declare_input_fs(
                        interp_param = LLVMGetParam(main_fn, SI_PARAM_LINEAR_CENTER);
                break;
        case TGSI_INTERPOLATE_COLOR:
-               if (si_shader_ctx->shader->key.ps.flatshade) {
-                       interp_param = 0;
-                       break;
-               }
-               /* fall through to perspective */
        case TGSI_INTERPOLATE_PERSPECTIVE:
                if (decl->Interp.Location == TGSI_INTERPOLATE_LOC_SAMPLE)
                        interp_param = LLVMGetParam(main_fn, SI_PARAM_PERSP_SAMPLE);
@@ -471,9 +466,18 @@ static void declare_input_fs(
                return;
        }
 
+       /* fs.constant returns the param from the middle vertex, so it's not
+        * really useful for flat shading. It's meant to be used for custom
+        * interpolation (but the intrinsic can't fetch from the other two
+        * vertices).
+        *
+        * Luckily, it doesn't matter, because we rely on the FLAT_SHADE state
+        * to do the right thing. The only reason we use fs.constant is that
+        * fs.interp cannot be used on integers, because they can be equal
+        * to NaN.
+        */
        intr_name = interp_param ? "llvm.SI.fs.interp" : "llvm.SI.fs.constant";
 
-       /* XXX: Could there be more than TGSI_NUM_CHANNELS (4) ? */
        if (decl->Semantic.Name == TGSI_SEMANTIC_COLOR &&
            si_shader_ctx->shader->key.ps.color_two_side) {
                LLVMValueRef args[4];