[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