On Fri, Mar 4, 2016 at 12:26 PM, Ilia Mirkin <[email protected]> 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 <[email protected]> > Reviewed-by: Marek Olšák <[email protected]> (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 > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
