gallium: add temporary facility for rasterization-time clamping of point sizes
This commit is contained in:
@@ -38,6 +38,8 @@ struct widepoint_stage {
|
|||||||
struct draw_stage stage;
|
struct draw_stage stage;
|
||||||
|
|
||||||
float half_point_size;
|
float half_point_size;
|
||||||
|
float point_size_min;
|
||||||
|
float point_size_max;
|
||||||
|
|
||||||
uint texcoord_slot[PIPE_MAX_SHADER_OUTPUTS];
|
uint texcoord_slot[PIPE_MAX_SHADER_OUTPUTS];
|
||||||
uint texcoord_mode[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 */
|
/* point size is either per-vertex or fixed size */
|
||||||
if (wide->psize_slot >= 0) {
|
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 {
|
else {
|
||||||
half_size = wide->half_point_size;
|
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;
|
struct draw_context *draw = stage->draw;
|
||||||
|
|
||||||
wide->half_point_size = 0.5f * draw->rasterizer->point_size;
|
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! */
|
/* 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) ||
|
if ((draw->rasterizer->point_size > draw->wide_point_threshold) ||
|
||||||
|
@@ -118,6 +118,8 @@ struct pipe_rasterizer_state
|
|||||||
|
|
||||||
float line_width;
|
float line_width;
|
||||||
float point_size; /**< used when no per-vertex size */
|
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_units;
|
||||||
float offset_scale;
|
float offset_scale;
|
||||||
ubyte sprite_coord_mode[PIPE_MAX_SHADER_OUTPUTS]; /**< PIPE_SPRITE_COORD_ */
|
ubyte sprite_coord_mode[PIPE_MAX_SHADER_OUTPUTS]; /**< PIPE_SPRITE_COORD_ */
|
||||||
|
@@ -198,6 +198,10 @@ static void update_raster_state( struct st_context *st )
|
|||||||
/* _NEW_POINT
|
/* _NEW_POINT
|
||||||
*/
|
*/
|
||||||
raster->point_size = ctx->Point.Size;
|
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_smooth = ctx->Point.SmoothFlag;
|
||||||
raster->point_sprite = ctx->Point.PointSprite;
|
raster->point_sprite = ctx->Point.PointSprite;
|
||||||
for (i = 0; i < MAX_TEXTURE_COORD_UNITS; i++) {
|
for (i = 0; i < MAX_TEXTURE_COORD_UNITS; i++) {
|
||||||
|
Reference in New Issue
Block a user