diff options
author | Marek Olšák <[email protected]> | 2015-09-27 19:54:57 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2015-10-03 22:06:09 +0200 |
commit | 6b0f21cb287bde3acaba1b0d18ab1c291acf327f (patch) | |
tree | 7d528a5feb35865cdc05d59adc31799bca965559 /src/mesa/state_tracker | |
parent | 4e9fc7e4e2fa3b3c77d08c4db545dcc279e849e9 (diff) |
st/mesa: automatically set per-sample interpolation if using SampleID/Pos
Reviewed-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r-- | src/mesa/state_tracker/st_atom_shader.c | 8 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_program.c | 4 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c index dc0315698d8..1e880a107c0 100644 --- a/src/mesa/state_tracker/st_atom_shader.c +++ b/src/mesa/state_tracker/st_atom_shader.c @@ -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); diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 9c271476dd2..a07f8fec309 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -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) { |