summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlia Mirkin <[email protected]>2016-02-27 11:01:27 -0500
committerIlia Mirkin <[email protected]>2016-03-05 23:26:03 -0500
commit313205cb8f9cda5d60764f889aaa05f37f2afc46 (patch)
treef97774d95188545e65592efb326971e7326444ce
parentdcbf8377befde50fe4d75738e2af5813e06e8f04 (diff)
st/mesa: don't force per-sample interp if only sampleid/pos are used
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 <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
-rw-r--r--src/mesa/state_tracker/st_atom_shader.c14
-rw-r--r--src/mesa/state_tracker/st_program.c4
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;