draw: fix points with negative w coords for d3d style point clipping
Even with depth clipping disabled, vertices which have negative w coords must be discarded. And since we don't have a proper guardband implementation yet (relying on driver to handle all values except infs/nans in rasterization for such points) we need to kill them off manually (as they can end up with coordinates inside viewport otherwise). v2: use 0.0f instead of 0 (spotted by Brian). Reviewed-by: Jose Fonseca <jfonseca@vmware.com> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
@@ -635,8 +635,13 @@ clip_point_guard_xy( struct draw_stage *stage,
|
||||
clipmask &= ~(1 << plane_idx); /* turn off this plane's bit */
|
||||
/* TODO: this should really do proper guardband clipping,
|
||||
* currently just throw out infs/nans.
|
||||
* Also note that vertices with negative w values MUST be tossed
|
||||
* out (not sure if proper guardband clipping would do this
|
||||
* automatically). These would usually be captured by depth clip
|
||||
* too but this can be disabled.
|
||||
*/
|
||||
if (util_is_inf_or_nan(header->v[0]->clip[0]) ||
|
||||
if (header->v[0]->clip[3] <= 0.0f ||
|
||||
util_is_inf_or_nan(header->v[0]->clip[0]) ||
|
||||
util_is_inf_or_nan(header->v[0]->clip[1]))
|
||||
return;
|
||||
}
|
||||
@@ -645,7 +650,6 @@ clip_point_guard_xy( struct draw_stage *stage,
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
clip_first_point( struct draw_stage *stage,
|
||||
struct prim_header *header )
|
||||
|
Reference in New Issue
Block a user