From 313205cb8f9cda5d60764f889aaa05f37f2afc46 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Sat, 27 Feb 2016 11:01:27 -0500 Subject: [PATCH] st/mesa: don't force per-sample interp if only sampleid/pos are used MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The OES extensions clarify this behaviour to differentiate between per-sample invocation and per-sample interpolation. Using sampleid/pos will force per-sample invocation but not per-sample interpolation. See https://www.khronos.org/bugzilla/show_bug.cgi?id=1462 Signed-off-by: Ilia Mirkin Reviewed-by: Marek Olšák --- src/mesa/state_tracker/st_atom_shader.c | 14 ++++++-------- src/mesa/state_tracker/st_program.c | 4 ---- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c index a88f0352746..ff90bd61d5b 100644 --- a/src/mesa/state_tracker/st_atom_shader.c +++ b/src/mesa/state_tracker/st_atom_shader.c @@ -37,6 +37,7 @@ #include "main/imports.h" #include "main/mtypes.h" +#include "main/framebuffer.h" #include "program/program.h" #include "pipe/p_context.h" @@ -70,16 +71,13 @@ update_fp( struct st_context *st ) key.clamp_color = st->clamp_frag_color_in_shader && st->ctx->Color._ClampFragmentColor; - /* 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. - */ + /* _NEW_MULTISAMPLE | _NEW_BUFFERS */ key.persample_shading = st->force_persample_in_shader && - !(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->ctx->Multisample._Enabled && + st->ctx->Multisample.SampleShading && + st->ctx->Multisample.MinSampleShadingValue * + _mesa_geometric_samples(st->ctx->DrawBuffer) > 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 2e21d02b8b5..c9f390aa9a2 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -573,10 +573,6 @@ st_translate_fragment_program(struct st_context *st, else interpLocation[slot] = TGSI_INTERPOLATE_LOC_CENTER; - if (stfp->Base.Base.SystemValuesRead & (SYSTEM_BIT_SAMPLE_ID | - SYSTEM_BIT_SAMPLE_POS)) - interpLocation[slot] = TGSI_INTERPOLATE_LOC_SAMPLE; - switch (attr) { case VARYING_SLOT_POS: input_semantic_name[slot] = TGSI_SEMANTIC_POSITION; -- 2.30.2