[Nouveau] (patch) Gallium NV50: honor bypass_vs_clip_and_viewport

Ben Skeggs skeggsb at gmail.com
Tue Mar 31 15:39:09 PDT 2009


On Tue, 2009-03-31 at 15:47 +0200, Christoph Bumiller wrote:
> When trying out the Gallium3D NV50 driver (curiosity) with a small OpenGL
> program that renders 2 rotating triangles partially occluding each other
> I noticed that depth buffer clearing by rendering a quad
> (st_cb_clear.c/clear_with_quad) didn't work properly.
> 
> I found this was because the rasterizer state that is set by clear_with_quad
> has bypass_vs_clip_and_viewport = 1 which would only be commited if
> the viewport was marked dirty, which it isn't when only binding a new
> rasterizer state.
> 
> I let the depth buffer clear before drawing anything else and
> then the bypass flag stuck (first viewport validate with bypass enabled and
> no further viewport updates) and the triangles didn't show even when
> disabling depth testing.
> 
> The following small patch would fix the issue, i.e. the depth buffer
> is cleared correctly. I just thought I might mention it:
Hello,

Thanks for the patch, I've applied it to mesa git.

Ben.
> 
> diff --git a/src/gallium/drivers/nv50/nv50_state_validate.c 
> b/src/gallium/drivers/nv50/nv50_state_validate.c
> index fc6157d..c13d3de 100644
> --- a/src/gallium/drivers/nv50/nv50_state_validate.c
> +++ b/src/gallium/drivers/nv50/nv50_state_validate.c
> @@ -244,7 +244,7 @@ nv50_state_validate(struct nv50_context *nv50)
> 	}
> scissor_uptodate:
> 
> -	if (nv50->dirty & NV50_NEW_VIEWPORT) {
> +	if (nv50->dirty & (NV50_NEW_VIEWPORT | NV50_NEW_RASTERIZER)) {
> 		unsigned bypass;
> 
> 		if (!nv50->rasterizer->pipe.bypass_vs_clip_and_viewport)
> @@ -281,6 +281,7 @@ scissor_uptodate:
> 
> 		so_ref(so, &nv50->state.viewport);
> 		so_ref(NULL, &so);
> +		nv50->state.dirty |= NV50_NEW_VIEWPORT;
> 	}
> viewport_uptodate:
> 
> 
> 
> 
> _______________________________________________
> Nouveau mailing list
> Nouveau at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/nouveau



More information about the Nouveau mailing list