[Mesa-dev] [PATCH] gallium: add bits for clipping points as tris (d3d-style)

Roland Scheidegger sroland at vmware.com
Fri Jan 10 08:33:02 PST 2014


Am 10.01.2014 12:04, schrieb Erik Faye-Lund:
> On Fri, Jan 10, 2014 at 10:33 AM, Lauri Kasanen <cand at gmx.com> wrote:
>> On Fri, 10 Jan 2014 03:57:45 +0100
>> sroland at vmware.com wrote:
>>
>>> From: Roland Scheidegger <sroland at vmware.com>
>>>
>>> OpenGL does whole-point clipping, that is a large point is either fully
>>> clipped or fully unclipped (the latter means it may extend beyond the
>>> viewport as long as the center is inside the viewport). d3d9 (d3d10 has
>>> no large points) however requires points to be clipped after they are
>>> expanded to a rectangle. (Note some IHVs are known to ignore GL rules at
>>> least with some hw/drivers.)
>>>
>>> Hence add a rasterizer bit indicating which way points should be clipped
>>> (some drivers probably will always ignore this), and add the draw interaction
>>> this requires. Drivers wanting to support this and using draw must support
>>> large points on their own as draw doesn't implement vp clipping on the
>>> expanded points (it potentially could but the complexity doesn't seem
>>> warranted), and the driver needs to do viewport scissoring on such points.
>>
>> Is there any possibility of this being exposed to user-space? With that
>> hat on, it would have been useful to me several times in the past.
>>
>> Perhaps whoever was Mesa's ARB contact could propose an extension? I
>> know nothing about how that happens, just would like this functionality.
> 
> IIRC there were some draft by NVIDIA discussed in Khronos OpenGL ES
> meetings 6-7 years ago, but I don't think it ever resulted in a
> released extension spec
> 

I think the spec would actually be a bit messy, as it means you have to
convert points essentially to tris before before rasterization (before
clipping in fact), so it doesn't really fit into "normal" pipeline. The
llvmpipe implementation (which is only in a private branch as it can't
be merged easily to master due to needing fake viewport scissoring) of
course doesn't do this (points rasterization is way easier than tris)
but just pretends like it does.
It is worth noting d3d10 got rid of the problem entirely (for large
points you have to explicitly convert your points to tris in the gs).
Also, even if we had such an extension, drivers need to implement this.
I don't know if all hw can easily do that, though at least some nvidia
cards with blob will always follow d3d9 behavior (but I have no idea if
the hw couldn't do GL behavior or nvidia just thought the d3d9 behavior
is more useful anyway).
(Not saying I'd object such an extension just rather it's out of the
scope of this patch as we just need it for d3d9.)

Roland


More information about the mesa-dev mailing list