[Mesa-dev] [PATCH v2] st/mesa: don't force per-sample interp if only sampleid/pos are used

Ilia Mirkin imirkin at alum.mit.edu
Fri Mar 4 18:13:24 UTC 2016


On Fri, Mar 4, 2016 at 12:26 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> 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 at alum.mit.edu>
> Reviewed-by: Marek Olšák <marek.olsak at amd.com> (v1)
>
> v1 -> v2:
>   set key.persample_shading in the same way as raster->force_persample_interp
>   except with an inverted dep on st->force_persample_in_shader
> ---
>
> I realized that my old method would end up setting key.persample_shading when
> the shader used sample id/sample pos. Rather than futz around with the
> condition or add more helpers, this just reuses the current logic for setting
> raster->force_persample_interp but flips the dependency on whether it has to be
> done by hand or not. (And uses the semi-new mesa_geometric_samples helper.)

And naturally I was too eager to send this out... minor compile fixes
folded in here:

https://github.com/imirkin/mesa/commit/2c4f19554adc5e9d7bea1164169381184eac50e1

Didn't think it was worth resending.

>
>  src/mesa/state_tracker/st_atom_shader.c | 13 +++++--------
>  src/mesa/state_tracker/st_program.c     |  4 ----
>  2 files changed, 5 insertions(+), 12 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c
> index a88f035..f7e85c1 100644
> --- a/src/mesa/state_tracker/st_atom_shader.c
> +++ b/src/mesa/state_tracker/st_atom_shader.c
> @@ -70,16 +70,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;
> +      ctx->Multisample._Enabled &&
> +      ctx->Multisample.SampleShading &&
> +      ctx->Multisample.MinSampleShadingValue *
> +      _mesa_geometric_samples(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 2e21d02..c9f390a 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.4.10
>


More information about the mesa-dev mailing list