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;
/* 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);
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;
/* 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,
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))
return TRUE;
/* AA points */
- if (rasterizer->point_smooth && draw->pipeline.aapoint)
+ if ((!rasterizer->multisample && rasterizer->point_smooth) && draw->pipeline.aapoint)
return TRUE;
/* point sprites */
/* 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;
* 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;
}