diff options
Diffstat (limited to 'src/gallium/auxiliary/draw')
-rw-r--r-- | src/gallium/auxiliary/draw/draw_pipe_cull.c | 10 | ||||
-rw-r--r-- | src/gallium/auxiliary/draw/draw_pipe_unfilled.c | 5 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pipe_cull.c b/src/gallium/auxiliary/draw/draw_pipe_cull.c index 3e8e4589597..318d743dbbf 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_cull.c +++ b/src/gallium/auxiliary/draw/draw_pipe_cull.c @@ -181,6 +181,16 @@ static void cull_tri( struct draw_stage *stage, /* triangle is not culled, pass to next stage */ stage->next->tri( stage->next, header ); } + } else { + /* + * With zero area, this is back facing (because the spec says + * it's front facing if sign is positive?). + * Some apis apparently do not allow us to cull zero area tris + * here, in case of fill mode line (which is rather lame). + */ + if ((PIPE_FACE_BACK & cull_stage(stage)->cull_face) == 0) { + stage->next->tri( stage->next, header ); + } } } } diff --git a/src/gallium/auxiliary/draw/draw_pipe_unfilled.c b/src/gallium/auxiliary/draw/draw_pipe_unfilled.c index c465c7526f5..f39db0e6a05 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_unfilled.c +++ b/src/gallium/auxiliary/draw/draw_pipe_unfilled.c @@ -63,10 +63,9 @@ inject_front_face_info(struct draw_stage *stage, struct prim_header *header) { struct unfilled_stage *unfilled = unfilled_stage(stage); - unsigned ccw = header->det < 0.0; boolean is_front_face = ( - (stage->draw->rasterizer->front_ccw && ccw) || - (!stage->draw->rasterizer->front_ccw && !ccw)); + (stage->draw->rasterizer->front_ccw && header->det < 0.0f) || + (!stage->draw->rasterizer->front_ccw && header->det > 0.0f)); int slot = unfilled->face_slot; unsigned i; |