[Mesa-dev] [PATCH] st/mesa: adjust Z coordinates for quad clearing

Roland Scheidegger sroland at vmware.com
Tue Aug 5 09:16:40 PDT 2014


Am 04.08.2014 18:08, schrieb Brian Paul:
> Specify the quad's Z position in clip coordinate space, not
> normalized Z space.  Use viewport scale, translation = 0.5, 0.5.
> 
> Before, we were specifying the quad's Z position in [0,1] and using
> viewport scale=1.0, translate=0.0.  That works fine, unless your
> driver needs to work in clip coordinate space and needs to
> reconstruct viewport near/far values from the scale/translation
> factors.  The VMware svga driver falls into that category.
> 
> When we did that reconstruction we wound up with near=-1 and far=1
> which are outside the limits of [0,1].  In some cases, this caused
> the quad to be drawn at the wrong depth.  In other cases it was
> clipped away.
> 
> Fixes some scissored depth clears with VMware driver.  This should
> have no effect on other drivers.
> ---
>  src/mesa/state_tracker/st_cb_clear.c |    7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c
> index 4bfa8d7..4ca6de3 100644
> --- a/src/mesa/state_tracker/st_cb_clear.c
> +++ b/src/mesa/state_tracker/st_cb_clear.c
> @@ -173,6 +173,9 @@ draw_quad(struct st_context *st,
>        return;
>     }
>  
> +   /* Convert Z from [0,1] to [-1,1] range */
> +   z = z * 2.0f - 1.0f;
> +
>     /* positions */
>     vertices[0][0][0] = x0;
>     vertices[0][0][1] = y0;
> @@ -319,11 +322,11 @@ clear_with_quad(struct gl_context *ctx, unsigned clear_buffers)
>        struct pipe_viewport_state vp;
>        vp.scale[0] = 0.5f * fb_width;
>        vp.scale[1] = fb_height * (invert ? -0.5f : 0.5f);
> -      vp.scale[2] = 1.0f;
> +      vp.scale[2] = 0.5;
0.5f for consistency? Same below.

>        vp.scale[3] = 1.0f;
>        vp.translate[0] = 0.5f * fb_width;
>        vp.translate[1] = 0.5f * fb_height;
> -      vp.translate[2] = 0.0f;
> +      vp.translate[2] = 0.5;
>        vp.translate[3] = 0.0f;
>        cso_set_viewport(st->cso_context, &vp);
>     }
> 

Other than that,
Reviewed-by: Roland Scheidegger <sroland at vmware.com>

I thought though the same math is used in other places too, but I could
be wrong.

Roland




More information about the mesa-dev mailing list