From: José Fonseca Date: Fri, 11 Feb 2011 11:14:27 +0000 (+0000) Subject: draw: Don't use the pipeline when drawing lines with fractional widths. X-Git-Tag: mesa-7.11-rc1~2161 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4586e6c8cb5b391536a370faa0c419c3fd541693;p=platform%2Fupstream%2Fmesa.git draw: Don't use the pipeline when drawing lines with fractional widths. Spotted by Jakob Bornecrantz. --- diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c index 11eba8a..95d9671 100644 --- a/src/gallium/auxiliary/draw/draw_context.c +++ b/src/gallium/auxiliary/draw/draw_context.c @@ -410,7 +410,7 @@ void draw_wide_line_threshold(struct draw_context *draw, float threshold) { draw_do_flush( draw, DRAW_FLUSH_STATE_CHANGE ); - draw->pipeline.wide_line_threshold = threshold; + draw->pipeline.wide_line_threshold = roundf(threshold); } diff --git a/src/gallium/auxiliary/draw/draw_pipe.c b/src/gallium/auxiliary/draw/draw_pipe.c index 6206197..f1b0171 100644 --- a/src/gallium/auxiliary/draw/draw_pipe.c +++ b/src/gallium/auxiliary/draw/draw_pipe.c @@ -64,8 +64,8 @@ boolean draw_pipeline_init( struct draw_context *draw ) return FALSE; /* these defaults are oriented toward the needs of softpipe */ - draw->pipeline.wide_point_threshold = 1000000.0; /* infinity */ - draw->pipeline.wide_line_threshold = 1.0; + draw->pipeline.wide_point_threshold = 1000000.0f; /* infinity */ + draw->pipeline.wide_line_threshold = 1.0f; draw->pipeline.wide_point_sprites = FALSE; draw->pipeline.line_stipple = TRUE; draw->pipeline.point_sprite = TRUE; diff --git a/src/gallium/auxiliary/draw/draw_pipe_validate.c b/src/gallium/auxiliary/draw/draw_pipe_validate.c index c575a8a..27afba5 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_validate.c +++ b/src/gallium/auxiliary/draw/draw_pipe_validate.c @@ -29,6 +29,7 @@ */ #include "util/u_memory.h" +#include "util/u_math.h" #include "pipe/p_defines.h" #include "draw_private.h" #include "draw_pipe.h" @@ -86,7 +87,7 @@ draw_need_pipeline(const struct draw_context *draw, return TRUE; /* wide lines */ - if (rasterizer->line_width > draw->pipeline.wide_line_threshold) + if (roundf(rasterizer->line_width) > draw->pipeline.wide_line_threshold) return TRUE; /* AA lines */ @@ -169,7 +170,7 @@ static struct draw_stage *validate_pipeline( struct draw_stage *stage ) stage->next = next; /* drawing wide lines? */ - wide_lines = (rast->line_width > draw->pipeline.wide_line_threshold + wide_lines = (roundf(rast->line_width) > draw->pipeline.wide_line_threshold && !rast->line_smooth); /* drawing large/sprite points (but not AA points)? */