st/mesa: automatically set per-sample interpolation if using SampleID/Pos
authorMarek Olšák <marek.olsak@amd.com>
Sun, 27 Sep 2015 17:54:57 +0000 (19:54 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Sat, 3 Oct 2015 20:06:09 +0000 (22:06 +0200)
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/mesa/state_tracker/st_atom_shader.c
src/mesa/state_tracker/st_program.c

index dc0315698d8bed2081952aeee1f40e876f72ae4e..1e880a107c0c14a5a499484d1573e45312a962ec 100644 (file)
@@ -70,9 +70,15 @@ update_fp( struct st_context *st )
    key.clamp_color = st->clamp_frag_color_in_shader &&
                      st->ctx->Color._ClampFragmentColor;
 
-   /* Ignore sample qualifier while computing this flag. */
+   /* Don't set it if the driver can force the interpolation by itself.
+    * If SAMPLE_ID or SAMPLE_POS are used, the interpolation is set
+    * automatically.
+    * Ignore sample qualifier while computing this flag.
+    */
    key.persample_shading =
       !st->can_force_persample_interp &&
+      !(stfp->Base.Base.SystemValuesRead & (SYSTEM_BIT_SAMPLE_ID |
+                                            SYSTEM_BIT_SAMPLE_POS)) &&
       _mesa_get_min_invocations_per_fragment(st->ctx, &stfp->Base, true) > 1;
 
    st->fp_variant = st_get_fp_variant(st, stfp, &key);
index 9c271476dd2bddc76e57ae0d70c9a7596ce55540..a07f8fec309877085436a268e55fc99e09d5df66 100644 (file)
@@ -619,7 +619,9 @@ st_translate_fragment_program(struct st_context *st,
          else
             interpLocation[slot] = TGSI_INTERPOLATE_LOC_CENTER;
 
-         if (key->persample_shading)
+         if (stfp->Base.Base.SystemValuesRead & (SYSTEM_BIT_SAMPLE_ID |
+                                                 SYSTEM_BIT_SAMPLE_POS) ||
+             key->persample_shading)
             interpLocation[slot] = TGSI_INTERPOLATE_LOC_SAMPLE;
 
          switch (attr) {