summaryrefslogtreecommitdiff
path: root/src/mesa/pipe/draw/draw_wide_prims.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/pipe/draw/draw_wide_prims.c')
-rw-r--r--src/mesa/pipe/draw/draw_wide_prims.c51
1 files changed, 33 insertions, 18 deletions
diff --git a/src/mesa/pipe/draw/draw_wide_prims.c b/src/mesa/pipe/draw/draw_wide_prims.c
index f71a38efba..26f5d10dc0 100644
--- a/src/mesa/pipe/draw/draw_wide_prims.c
+++ b/src/mesa/pipe/draw/draw_wide_prims.c
@@ -262,26 +262,19 @@ static void wide_point( struct draw_stage *stage,
}
-static void wide_begin( struct draw_stage *stage )
+static void wide_first_point( struct draw_stage *stage,
+ struct prim_header *header )
{
struct wide_stage *wide = wide_stage(stage);
struct draw_context *draw = stage->draw;
wide->half_point_size = 0.5f * draw->rasterizer->point_size;
- wide->half_line_width = 0.5f * draw->rasterizer->line_width;
-
- if (draw->rasterizer->line_width != 1.0) {
- wide->stage.line = wide_line;
- }
- else {
- wide->stage.line = passthrough_line;
- }
if (draw->rasterizer->point_size != 1.0) {
- wide->stage.point = wide_point;
+ stage->point = wide_point;
}
else {
- wide->stage.point = passthrough_point;
+ stage->point = passthrough_point;
}
if (draw->rasterizer->point_sprite) {
@@ -299,6 +292,7 @@ static void wide_begin( struct draw_stage *stage )
}
wide->psize_slot = -1;
+
if (draw->rasterizer->point_size_per_vertex) {
/* find PSIZ vertex output */
const struct draw_vertex_shader *vs = draw->vertex_shader;
@@ -311,13 +305,35 @@ static void wide_begin( struct draw_stage *stage )
}
}
- stage->next->begin( stage->next );
+ stage->point( stage, header );
+}
+
+
+
+static void wide_first_line( struct draw_stage *stage,
+ struct prim_header *header )
+{
+ struct wide_stage *wide = wide_stage(stage);
+ struct draw_context *draw = stage->draw;
+
+ wide->half_line_width = 0.5f * draw->rasterizer->line_width;
+
+ if (draw->rasterizer->line_width != 1.0) {
+ wide->stage.line = wide_line;
+ }
+ else {
+ wide->stage.line = passthrough_line;
+ }
+
+ stage->line( stage, header );
}
-static void wide_end( struct draw_stage *stage )
+static void wide_flush( struct draw_stage *stage, unsigned flags )
{
- stage->next->end( stage->next );
+ stage->line = wide_first_line;
+ stage->point = wide_first_point;
+ stage->next->flush( stage->next, flags );
}
@@ -342,11 +358,10 @@ struct draw_stage *draw_wide_stage( struct draw_context *draw )
wide->stage.draw = draw;
wide->stage.next = NULL;
- wide->stage.begin = wide_begin;
- wide->stage.point = wide_point;
- wide->stage.line = wide_line;
+ wide->stage.point = wide_first_point;
+ wide->stage.line = wide_first_line;
wide->stage.tri = passthrough_tri;
- wide->stage.end = wide_end;
+ wide->stage.flush = wide_flush;
wide->stage.reset_stipple_counter = draw_reset_stipple_counter;
wide->stage.destroy = wide_destroy;