From cb43954308f44717814b53f40672163384cc005e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 27 Jan 2012 20:29:15 +0100 Subject: [PATCH] svga: set POINTSIZEMIN to 1.0 for non-sprite non-aa points v2: add the helper function, improve the condition --- src/gallium/auxiliary/util/u_inlines.h | 11 +++++++++++ src/gallium/drivers/svga/svga_state_rss.c | 6 ++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/util/u_inlines.h b/src/gallium/auxiliary/util/u_inlines.h index 9660cdc6eae..c90dc57073f 100644 --- a/src/gallium/auxiliary/util/u_inlines.h +++ b/src/gallium/auxiliary/util/u_inlines.h @@ -461,6 +461,17 @@ static INLINE void util_copy_vertex_buffers(struct pipe_vertex_buffer *dst, memcpy(dst, src, src_count * sizeof(struct pipe_vertex_buffer)); } +static INLINE float +util_get_min_point_size(const struct pipe_rasterizer_state *state) +{ + /* The point size should be clamped to this value at the rasterizer stage. + */ + return state->gl_rasterization_rules && + !state->point_quad_rasterization && + !state->point_smooth && + !state->multisample ? 1.0f : 0.0f; +} + #ifdef __cplusplus } #endif diff --git a/src/gallium/drivers/svga/svga_state_rss.c b/src/gallium/drivers/svga/svga_state_rss.c index af68d9cde3d..1ee8b7f49b1 100644 --- a/src/gallium/drivers/svga/svga_state_rss.c +++ b/src/gallium/drivers/svga/svga_state_rss.c @@ -78,6 +78,7 @@ static int emit_rss( struct svga_context *svga, unsigned dirty ) { struct rs_queue queue; + float point_size_min; queue.rs_count = 0; @@ -211,14 +212,15 @@ static int emit_rss( struct svga_context *svga, if (svga->state.sw.need_pipeline) cullmode = SVGA3D_FACE_NONE; + point_size_min = util_get_min_point_size(&curr->templ); + EMIT_RS( svga, cullmode, CULLMODE, fail ); EMIT_RS( svga, curr->scissortestenable, SCISSORTESTENABLE, fail ); EMIT_RS( svga, curr->multisampleantialias, MULTISAMPLEANTIALIAS, fail ); EMIT_RS( svga, curr->lastpixel, LASTPIXEL, fail ); EMIT_RS( svga, curr->linepattern, LINEPATTERN, fail ); EMIT_RS_FLOAT( svga, curr->pointsize, POINTSIZE, fail ); - /* XXX still need to set this? */ - EMIT_RS_FLOAT( svga, 0.0, POINTSIZEMIN, fail ); + EMIT_RS_FLOAT( svga, point_size_min, POINTSIZEMIN, fail ); EMIT_RS_FLOAT( svga, SVGA_MAX_POINTSIZE, POINTSIZEMAX, fail ); EMIT_RS( svga, curr->pointsprite, POINTSPRITEENABLE, fail); } -- 2.30.2