aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2020-03-10 13:51:24 +1000
committerMarge Bot <[email protected]>2020-05-06 06:20:37 +0000
commit24cf7a2b36fa784cce9eee4ae8957d3d9dac98c3 (patch)
tree6d53492724b032bdba42c357fe9379d4c0b495aa
parent4c72bb4a960e7362e7cf4cd6e3159af85c967614 (diff)
draw: disable point/line smoothing for multisample (v2)
When MSAA is enabled smoothing is ignored v2: As pointed out by Roland I got this completely wrong, fix this to work the other way Reviewed-by: Roland Scheidegger <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4122>
-rw-r--r--src/gallium/auxiliary/draw/draw_pipe_aaline.c6
-rw-r--r--src/gallium/auxiliary/draw/draw_pipe_aapoint.c6
-rw-r--r--src/gallium/auxiliary/draw/draw_pipe_validate.c12
3 files changed, 12 insertions, 12 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pipe_aaline.c b/src/gallium/auxiliary/draw/draw_pipe_aaline.c
index 872b29e9c8d..cd4be6d967f 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_aaline.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_aaline.c
@@ -502,7 +502,7 @@ aaline_first_line(struct draw_stage *stage, struct prim_header *header)
const struct pipe_rasterizer_state *rast = draw->rasterizer;
void *r;
- assert(draw->rasterizer->line_smooth);
+ assert(draw->rasterizer->line_smooth && !draw->rasterizer->multisample);
if (draw->rasterizer->line_width <= 1.0)
aaline->half_line_width = 1.0;
@@ -718,11 +718,11 @@ draw_aaline_prepare_outputs(struct draw_context *draw,
/* update vertex attrib info */
aaline->pos_slot = draw_current_shader_position_output(draw);
- if (!rast->line_smooth)
+ if (!rast->line_smooth || rast->multisample)
return;
/* allocate the extra post-transformed vertex attribute */
- if (aaline->fs->aaline_fs)
+ if (aaline->fs && aaline->fs->aaline_fs)
aaline->coord_slot = draw_alloc_extra_vertex_attrib(draw,
TGSI_SEMANTIC_GENERIC,
aaline->fs->generic_attrib);
diff --git a/src/gallium/auxiliary/draw/draw_pipe_aapoint.c b/src/gallium/auxiliary/draw/draw_pipe_aapoint.c
index 797e0d2d9c2..2ee2bc17faa 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_aapoint.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_aapoint.c
@@ -580,7 +580,7 @@ aapoint_first_point(struct draw_stage *stage, struct prim_header *header)
const struct pipe_rasterizer_state *rast = draw->rasterizer;
void *r;
- assert(draw->rasterizer->point_smooth);
+ assert(draw->rasterizer->point_smooth && !draw->rasterizer->multisample);
if (draw->rasterizer->point_size <= 2.0)
aapoint->radius = 1.0;
@@ -666,10 +666,10 @@ draw_aapoint_prepare_outputs(struct draw_context *draw,
/* update vertex attrib info */
aapoint->pos_slot = draw_current_shader_position_output(draw);
- if (!rast->point_smooth)
+ if (!rast->point_smooth || rast->multisample)
return;
- if (aapoint->fs->aapoint_fs) {
+ if (aapoint->fs && aapoint->fs->aapoint_fs) {
/* allocate the extra post-transformed vertex attribute */
aapoint->tex_slot = draw_alloc_extra_vertex_attrib(draw,
TGSI_SEMANTIC_GENERIC,
diff --git a/src/gallium/auxiliary/draw/draw_pipe_validate.c b/src/gallium/auxiliary/draw/draw_pipe_validate.c
index 940ca5644de..3c5afaf29a8 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_validate.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_validate.c
@@ -77,7 +77,7 @@ draw_need_pipeline(const struct draw_context *draw,
return TRUE;
/* AA lines */
- if (rasterizer->line_smooth && draw->pipeline.aaline)
+ if ((!rasterizer->multisample && rasterizer->line_smooth) && draw->pipeline.aaline)
return TRUE;
if (draw_current_shader_num_written_culldistances(draw))
@@ -94,7 +94,7 @@ draw_need_pipeline(const struct draw_context *draw,
return TRUE;
/* AA points */
- if (rasterizer->point_smooth && draw->pipeline.aapoint)
+ if ((!rasterizer->multisample && rasterizer->point_smooth) && draw->pipeline.aapoint)
return TRUE;
/* point sprites */
@@ -162,12 +162,12 @@ static struct draw_stage *validate_pipeline( struct draw_stage *stage )
/* drawing wide, non-AA lines? */
wide_lines = rast->line_width != 1.0f &&
roundf(rast->line_width) > draw->pipeline.wide_line_threshold &&
- !rast->line_smooth;
+ (!rast->line_smooth || rast->multisample);
/* drawing large/sprite points (but not AA points)? */
if (rast->sprite_coord_enable && draw->pipeline.point_sprite)
wide_points = TRUE;
- else if (rast->point_smooth && draw->pipeline.aapoint)
+ else if ((!rast->multisample && rast->point_smooth) && draw->pipeline.aapoint)
wide_points = FALSE;
else if (rast->point_size > draw->pipeline.wide_point_threshold)
wide_points = TRUE;
@@ -183,13 +183,13 @@ static struct draw_stage *validate_pipeline( struct draw_stage *stage )
* shorter pipelines for lines & points.
*/
- if (rast->line_smooth && draw->pipeline.aaline) {
+ if ((!rast->multisample && rast->line_smooth) && draw->pipeline.aaline) {
draw->pipeline.aaline->next = next;
next = draw->pipeline.aaline;
precalc_flat = TRUE;
}
- if (rast->point_smooth && draw->pipeline.aapoint) {
+ if ((!rast->multisample && rast->point_smooth) && draw->pipeline.aapoint) {
draw->pipeline.aapoint->next = next;
next = draw->pipeline.aapoint;
}