[Mesa-dev] [PATCH] draw: fix points with negative w coords for d3d style point clipping

Brian Paul brianp at vmware.com
Tue Jan 21 07:55:37 PST 2014


On 01/20/2014 06:26 PM, sroland at vmware.com wrote:
> From: Roland Scheidegger <sroland at vmware.com>
>
> 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).
> ---
>   src/gallium/auxiliary/draw/draw_pipe_clip.c |    8 ++++++--
>   1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c b/src/gallium/auxiliary/draw/draw_pipe_clip.c
> index 8bdb882..eb0813d 100644
> --- a/src/gallium/auxiliary/draw/draw_pipe_clip.c
> +++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c
> @@ -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 ||

Let's compare against 0.0f to avoid MSVC compiler warnings.


> +             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 )
>

Reviewed-by: Brian Paul <brianp at vmware.com>




More information about the mesa-dev mailing list