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
unsigned dirty )
{
struct rs_queue queue;
+ float point_size_min;
queue.rs_count = 0;
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);
}