summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mesa/state_tracker/st_atom_rasterizer.c8
-rw-r--r--src/mesa/state_tracker/st_atom_shader.c1
-rw-r--r--src/mesa/state_tracker/st_context.c2
-rw-r--r--src/mesa/state_tracker/st_context.h1
4 files changed, 12 insertions, 0 deletions
diff --git a/src/mesa/state_tracker/st_atom_rasterizer.c b/src/mesa/state_tracker/st_atom_rasterizer.c
index cceed42c828..0f01e9939de 100644
--- a/src/mesa/state_tracker/st_atom_rasterizer.c
+++ b/src/mesa/state_tracker/st_atom_rasterizer.c
@@ -237,6 +237,14 @@ static void update_raster_state( struct st_context *st )
/* _NEW_MULTISAMPLE */
raster->multisample = ctx->Multisample._Enabled;
+ /* _NEW_MULTISAMPLE | _NEW_BUFFERS */
+ raster->force_persample_interp =
+ st->can_force_persample_interp &&
+ ctx->Multisample._Enabled &&
+ ctx->Multisample.SampleShading &&
+ ctx->Multisample.MinSampleShadingValue *
+ ctx->DrawBuffer->Visual.samples > 1;
+
/* _NEW_SCISSOR */
raster->scissor = ctx->Scissor.EnableFlags;
diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c
index fee15a980f3..dc0315698d8 100644
--- a/src/mesa/state_tracker/st_atom_shader.c
+++ b/src/mesa/state_tracker/st_atom_shader.c
@@ -72,6 +72,7 @@ update_fp( struct st_context *st )
/* Ignore sample qualifier while computing this flag. */
key.persample_shading =
+ !st->can_force_persample_interp &&
_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_context.c b/src/mesa/state_tracker/st_context.c
index f65aafa9d55..a9ab5edcf49 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -237,6 +237,8 @@ st_create_context_priv( struct gl_context *ctx, struct pipe_context *pipe,
PIPE_BIND_SAMPLER_VIEW);
st->prefer_blit_based_texture_transfer = screen->get_param(screen,
PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER);
+ st->can_force_persample_interp = screen->get_param(screen,
+ PIPE_CAP_FORCE_PERSAMPLE_INTERP);
st->needs_texcoord_semantic =
screen->get_param(screen, PIPE_CAP_TGSI_TEXCOORD);
diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h
index 81d5480431a..a4cda29059d 100644
--- a/src/mesa/state_tracker/st_context.h
+++ b/src/mesa/state_tracker/st_context.h
@@ -98,6 +98,7 @@ struct st_context
boolean has_etc1;
boolean has_etc2;
boolean prefer_blit_based_texture_transfer;
+ boolean can_force_persample_interp;
boolean needs_texcoord_semantic;
boolean apply_texture_swizzle_to_border_color;