Reviewed-by: Rafael Antognolli <rafael.antogno...@intel.com>
On Wed, May 10, 2017 at 11:47:25AM -0700, Kenneth Graunke wrote: > Apparently, Nanhai made the Gen4-5 point size calculations round to the > nearest integer in commit 8d5231a3582e4f2769ac0685cf0174e09750700e, > "according to spec". When Eric first ported the driver to Sandybridge, > he did not implement this rounding. > > In the GL 2.1 and 3.0 specs "Basic Point Rasterization" section, it does > say "If antialiasing and point sprites are disabled, the actual width is > determined by rounding the supplied width to the nearest integer, then > clamping it to the implementation-dependent maximum non-antialised point > width." > > In contrast, GL 3.1 and later do not appear to contain this rounding. > > It might be reasonable to round, given that we only implement GL 2.1. > Of course, if we were to do that, we should actually implement the AA > vs. non-AA distinction. Brian added an XXX comment reminding us to fix > this 10 years ago, but it never happened. > > I think a better plan is to follow the newer, unrounded behavior. This > is what we do on Gen6+ and it passes all the relevant conformance tests. > --- > src/mesa/drivers/dri/i965/brw_sf_state.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_sf_state.c > b/src/mesa/drivers/dri/i965/brw_sf_state.c > index d50ceb12133..ff6b5ebf79b 100644 > --- a/src/mesa/drivers/dri/i965/brw_sf_state.c > +++ b/src/mesa/drivers/dri/i965/brw_sf_state.c > @@ -254,14 +254,15 @@ static void upload_sf_unit( struct brw_context *brw ) > */ > sf->sf6.point_rast_rule = BRW_RASTRULE_LOWER_RIGHT; > } > - /* XXX clamp max depends on AA vs. non-AA */ > > /* _NEW_POINT */ > sf->sf7.sprite_point = ctx->Point.PointSprite; > - sf->sf7.point_size = CLAMP(rintf(CLAMP(ctx->Point.Size, > - ctx->Point.MinSize, > - ctx->Point.MaxSize)), 1.0f, > 255.0f) * > - (1<<3); > + > + float point_sz; > + point_sz = CLAMP(ctx->Point.Size, ctx->Point.MinSize, ctx->Point.MaxSize); > + point_sz = CLAMP(point_sz, 0.125f, 255.875f); > + sf->sf7.point_size = U_FIXED(point_sz, 3); > + > /* _NEW_PROGRAM | _NEW_POINT */ > sf->sf7.use_point_size_state = !(ctx->VertexProgram.PointSizeEnabled || > ctx->Point._Attenuated); > -- > 2.12.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev