gallium: add temporary facility for rasterization-time clamping of point sizes

This commit is contained in:
Keith Whitwell
2008-04-02 10:43:37 +01:00
parent 7f40115a52
commit bc739440c2
3 changed files with 19 additions and 1 deletions

View File

@@ -38,6 +38,8 @@ struct widepoint_stage {
struct draw_stage stage;
float half_point_size;
float point_size_min;
float point_size_max;
uint texcoord_slot[PIPE_MAX_SHADER_OUTPUTS];
uint texcoord_mode[PIPE_MAX_SHADER_OUTPUTS];
@@ -128,7 +130,15 @@ static void widepoint_point( struct draw_stage *stage,
/* point size is either per-vertex or fixed size */
if (wide->psize_slot >= 0) {
half_size = 0.5f * header->v[0]->data[wide->psize_slot][0];
half_size = header->v[0]->data[wide->psize_slot][0];
/* XXX: temporary -- do this in the vertex shader??
*/
half_size = CLAMP(half_size,
wide->point_size_min,
wide->point_size_max);
half_size *= 0.5f;
}
else {
half_size = wide->half_point_size;
@@ -182,6 +192,8 @@ static void widepoint_first_point( struct draw_stage *stage,
struct draw_context *draw = stage->draw;
wide->half_point_size = 0.5f * draw->rasterizer->point_size;
wide->point_size_min = draw->rasterizer->point_size_min;
wide->point_size_max = draw->rasterizer->point_size_max;
/* XXX we won't know the real size if it's computed by the vertex shader! */
if ((draw->rasterizer->point_size > draw->wide_point_threshold) ||

View File

@@ -118,6 +118,8 @@ struct pipe_rasterizer_state
float line_width;
float point_size; /**< used when no per-vertex size */
float point_size_min; /* XXX - temporary, will go away */
float point_size_max; /* XXX - temporary, will go away */
float offset_units;
float offset_scale;
ubyte sprite_coord_mode[PIPE_MAX_SHADER_OUTPUTS]; /**< PIPE_SPRITE_COORD_ */

View File

@@ -198,6 +198,10 @@ static void update_raster_state( struct st_context *st )
/* _NEW_POINT
*/
raster->point_size = ctx->Point.Size;
raster->point_size_min = 0; /* temporary, will go away */
raster->point_size_max = 1000; /* temporary, will go away */
raster->point_smooth = ctx->Point.SmoothFlag;
raster->point_sprite = ctx->Point.PointSprite;
for (i = 0; i < MAX_TEXTURE_COORD_UNITS; i++) {