Skip to content

Commit

Permalink
st/mesa: don't force per-sample interp if only sampleid/pos are used
Browse files Browse the repository at this point in the history
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 <imirkin@alum.mit.edu>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
  • Loading branch information
imirkin committed Mar 4, 2016
1 parent 395c7b8 commit 2c4f195
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 12 deletions.
14 changes: 6 additions & 8 deletions src/mesa/state_tracker/st_atom_shader.c
Expand Up @@ -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"
Expand Down Expand Up @@ -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);

Expand Down
4 changes: 0 additions & 4 deletions src/mesa/state_tracker/st_program.c
Expand Up @@ -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;
Expand Down

0 comments on commit 2c4f195

Please sign in to comment.