mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 10:08:08 +02:00
gallium: added draw_need_pipeline() predicate function
To test if we need any pipeline stage, or whether we can go into passthrough mode.
This commit is contained in:
parent
8b8c9acdb7
commit
3faf6230ff
1 changed files with 54 additions and 1 deletions
|
|
@ -33,6 +33,59 @@
|
|||
#include "draw_private.h"
|
||||
|
||||
|
||||
/**
|
||||
* Check if we need any special pipeline stages, or whether prims/verts
|
||||
* can go through untouched.
|
||||
*/
|
||||
boolean
|
||||
draw_need_pipeline(const struct draw_context *draw)
|
||||
{
|
||||
/* clipping */
|
||||
if (!draw->rasterizer->bypass_clipping)
|
||||
return TRUE;
|
||||
|
||||
/* vertex shader */
|
||||
if (!draw->rasterizer->bypass_vs)
|
||||
return TRUE;
|
||||
|
||||
/* line stipple */
|
||||
if (draw->rasterizer->line_stipple_enable && draw->line_stipple)
|
||||
return TRUE;
|
||||
|
||||
/* wide lines */
|
||||
if (draw->rasterizer->line_width > draw->wide_line_threshold)
|
||||
return TRUE;
|
||||
|
||||
/* large points */
|
||||
if (draw->rasterizer->point_size > draw->wide_point_threshold)
|
||||
return TRUE;
|
||||
|
||||
/* AA lines */
|
||||
if (draw->rasterizer->line_smooth && draw->pipeline.aaline)
|
||||
return TRUE;
|
||||
|
||||
/* AA points */
|
||||
if (draw->rasterizer->point_smooth && draw->pipeline.aapoint)
|
||||
return TRUE;
|
||||
|
||||
/* polygon stipple */
|
||||
if (draw->rasterizer->poly_stipple_enable && draw->pipeline.pstipple)
|
||||
return TRUE;
|
||||
|
||||
/* polygon offset */
|
||||
if (draw->rasterizer->offset_cw || draw->rasterizer->offset_ccw)
|
||||
return TRUE;
|
||||
|
||||
/* two-side lighting */
|
||||
if (draw->rasterizer->light_twoside)
|
||||
return TRUE;
|
||||
|
||||
/* polygon cull */
|
||||
if (draw->rasterizer->cull_mode)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -92,7 +145,7 @@ static struct draw_stage *validate_pipeline( struct draw_stage *stage )
|
|||
next = draw->pipeline.wide_point;
|
||||
}
|
||||
|
||||
if (draw->rasterizer->line_stipple_enable) {
|
||||
if (draw->rasterizer->line_stipple_enable && draw->line_stipple) {
|
||||
draw->pipeline.stipple->next = next;
|
||||
next = draw->pipeline.stipple;
|
||||
precalc_flat = 1; /* only needed for lines really */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue