[Mesa-dev] [PATCH 1/2] r200: fix r200 large points

Alex Deucher alexdeucher at gmail.com
Tue Nov 9 08:17:35 PST 2010


On Mon, Nov 8, 2010 at 4:12 PM, Roland Scheidegger <sroland at vmware.com> wrote:
> DD_POINT_SIZE got never set for some time now (as it was set only in ifdefed
> out code), which caused the r200 driver to use the point primitive mistakenly
> in some cases which can only do size 1 instead of point sprite. Since the
> logic to use point instead of point sprite prim is flaky at best anyway (can't
> work correctly for per-vertex point size), just drop this and always emit point
> sprites (except for AA points) - reasons why the driver tried to use points for
> size 1.0 are unknown though it is possible they are faster or more conformant.
> Note that we can't emit point sprites without point sprite cntl as that might
> result in undefined point sizes, hence need drm version check (which was
> unnecessary before as it should always have selected points). An
> alternative would be to rely on the RE point size clamp controls which could
> clamp the size to 1.0 min/max even if the SE point size is undefined, but currently
> always use 0 for min clamp. (As a side note, this also means the driver does
> not honor the gl spec which mandates points, but not point sprites, with zero size
> to be rendered as size 1.)
> This should fix recent reports of https://bugs.freedesktop.org/show_bug.cgi?id=702.
> This is a candidate for the mesa 7.9 branch.

Looks good to me.  I suppose a drm cs checker fix would be nice for
completeness, but as long as the 3D driver emits the point sprite cntl
properly, I think it should be fine.  Are there any cases where it
wouldn't?

Reviewed-by: Alex Deucher <alexdeucher at gmail.com>

> ---
>  src/mesa/drivers/dri/r200/r200_swtcl.c |    7 +++----
>  src/mesa/drivers/dri/r200/r200_tcl.c   |    5 ++---
>  2 files changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/r200/r200_swtcl.c b/src/mesa/drivers/dri/r200/r200_swtcl.c
> index 3886416..c56a49d 100644
> --- a/src/mesa/drivers/dri/r200/r200_swtcl.c
> +++ b/src/mesa/drivers/dri/r200/r200_swtcl.c
> @@ -319,10 +319,9 @@ static INLINE GLuint reduced_hw_prim( struct gl_context *ctx, GLuint prim)
>  {
>    switch (prim) {
>    case GL_POINTS:
> -      return (ctx->Point.PointSprite ||
> -        ((ctx->_TriangleCaps & (DD_POINT_SIZE | DD_POINT_ATTEN)) &&
> -        !(ctx->_TriangleCaps & (DD_POINT_SMOOTH)))) ?
> -        R200_VF_PRIM_POINT_SPRITES : R200_VF_PRIM_POINTS;
> +      return (((R200_CONTEXT(ctx))->radeon.radeonScreen->drmSupportsPointSprites &&
> +              !(ctx->_TriangleCaps & DD_POINT_SMOOTH)) ?
> +        R200_VF_PRIM_POINT_SPRITES : R200_VF_PRIM_POINTS);
>    case GL_LINES:
>    /* fallthrough */
>    case GL_LINE_LOOP:
> diff --git a/src/mesa/drivers/dri/r200/r200_tcl.c b/src/mesa/drivers/dri/r200/r200_tcl.c
> index 84db7c9..7aed116 100644
> --- a/src/mesa/drivers/dri/r200/r200_tcl.c
> +++ b/src/mesa/drivers/dri/r200/r200_tcl.c
> @@ -68,9 +68,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
>  #define HAVE_ELTS        1
>
>
> -#define HW_POINTS           ((ctx->Point.PointSprite || \
> -                               ((ctx->_TriangleCaps & (DD_POINT_SIZE | DD_POINT_ATTEN)) && \
> -                               !(ctx->_TriangleCaps & (DD_POINT_SMOOTH)))) ? \
> +#define HW_POINTS           (((R200_CONTEXT(ctx))->radeon.radeonScreen->drmSupportsPointSprites && \
> +                             !(ctx->_TriangleCaps & DD_POINT_SMOOTH)) ? \
>                                R200_VF_PRIM_POINT_SPRITES : R200_VF_PRIM_POINTS)
>  #define HW_LINES            R200_VF_PRIM_LINES
>  #define HW_LINE_LOOP        0
> --
> 1.7.0.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>


More information about the mesa-dev mailing list