From 4e9fc7e4e2fa3b3c77d08c4db545dcc279e849e9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 27 Sep 2015 19:43:00 +0200 Subject: [PATCH] st/mesa: set force_persample_interp if ARB_sample_shading is used This is only a half of the work. The next patch will handle gl_SampleID/SamplePos, which is the other half of ARB_sample_shading. Reviewed-by: Ilia Mirkin --- src/mesa/state_tracker/st_atom_rasterizer.c | 8 ++++++++ src/mesa/state_tracker/st_atom_shader.c | 1 + src/mesa/state_tracker/st_context.c | 2 ++ src/mesa/state_tracker/st_context.h | 1 + 4 files changed, 12 insertions(+) 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; -- 2.30.2