summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/draw/draw_wide_point.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_wide_point.c')
-rw-r--r--src/gallium/auxiliary/draw/draw_wide_point.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/gallium/auxiliary/draw/draw_wide_point.c b/src/gallium/auxiliary/draw/draw_wide_point.c
index 86281ca3d8..6fc7c9fcd7 100644
--- a/src/gallium/auxiliary/draw/draw_wide_point.c
+++ b/src/gallium/auxiliary/draw/draw_wide_point.c
@@ -41,6 +41,9 @@ struct widepoint_stage {
float point_size_min;
float point_size_max;
+ float xbias;
+ float ybias;
+
uint texcoord_slot[PIPE_MAX_SHADER_OUTPUTS];
uint texcoord_mode[PIPE_MAX_SHADER_OUTPUTS];
uint num_texcoords;
@@ -126,8 +129,6 @@ static void widepoint_point( struct draw_stage *stage,
float *pos2 = v2->data[0];
float *pos3 = v3->data[0];
- const float xbias = 0.0, ybias = -0.125;
-
/* point size is either per-vertex or fixed size */
if (wide->psize_slot >= 0) {
half_size = header->v[0]->data[wide->psize_slot][0];
@@ -144,10 +145,10 @@ static void widepoint_point( struct draw_stage *stage,
half_size = wide->half_point_size;
}
- left_adj = -half_size + xbias;
- right_adj = half_size + xbias;
- bot_adj = half_size + ybias;
- top_adj = -half_size + ybias;
+ left_adj = -half_size + wide->xbias;
+ right_adj = half_size + wide->xbias;
+ bot_adj = half_size + wide->ybias;
+ top_adj = -half_size + wide->ybias;
pos0[0] += left_adj;
pos0[1] += top_adj;
@@ -194,6 +195,12 @@ static void widepoint_first_point( struct draw_stage *stage,
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;
+ wide->xbias = 0.0;
+ wide->ybias = 0.0;
+
+ if (draw->rasterizer->gl_rasterization_rules) {
+ wide->ybias = -0.125;
+ }
/* 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) ||