[Mesa-dev] Gallium depth clamp support
keithw at vmware.com
Wed Jul 21 06:54:14 PDT 2010
On Wed, 2010-07-21 at 01:49 -0700, Marek Olšák wrote:
> there is a new branch gallium-depth-clamp in the main repository which
> implements ARB_depth_clamp in Gallium. Wine uses this extension to
> disable clipping when it's requested from a D3D9 app, so it's an
> important one.
> There is a new state "depth_clamp" in pipe_clip_state, and a new cap
> PIPE_CAP_DEPTH_CLAMP. If you think this feature should be mandatory in
> Gallium instead, it's ok with me. There are several reasons I put the
> enable bit in pipe_clip_state, but the most important one is that Z
> clipping must be disabled in hardware first for it to work. It also
> implements depth_clamp handling in cso_cache and wires up
> ARB_depth_clamp in st/mesa.
> The support in Draw has also been implemented, and both softpipe and
> llvmpipe pass piglit/depth_clamp and piglit/depth-clamp-range.
> Please review.
This looks like a useful change.
I'm not sure it's actually going go give the expected results for
softpipe/llvmpipe or other users of the path you've put into the draw
In particular it looks like the spec calls for clamping depth on a
per-pixel basis, where as this is doing it per-vertex.
The difference is that the spec would allow a triangle with one distant
vertex to hit the far plane and then be clamped to it, whereas your
change means that the triangle as a whole will be altered to be in front
of the depth plane and touch it at one vertex.
Basically, I think the draw change needs to reduced to just disabling
depth clipping, and (if you like) a clamp(depth, 0, 1) introduced into
softpipe/llvmpipe. Or just don't advertise the cap for
It adds an extra branch to the clipmask computation, but it's not like
that code is tuned at this point anyway... I'
More information about the mesa-dev