[Mesa-dev] [PATCH 0/2 v2] Add support for clip distances in Gallium

Ian Romanick idr at freedesktop.org
Tue Dec 13 12:40:55 PST 2011


On 12/13/2011 12:26 PM, Bryan Cain wrote:
> On 12/13/2011 02:11 PM, Jose Fonseca wrote:
>> ----- Original Message -----
>>> This is an updated version of the patch set I sent to the list a few
>>> hours
>>> ago.
>>> There is now a TGSI property called
>>> TGSI_PROPERTY_NUM_CLIP_DISTANCES
>>> that drivers can use to determine how many of the 8 available clip
>>> distances
>>> are actually used by a shader.
>> Can't the info in TGSI_PROPERTY_NUM_CLIP_DISTANCES be easily derived from the shader, and queried through src/gallium/auxiliary/tgsi/tgsi_scan.h ?
>
> No.  The clip distances can be indirectly addressed (there are up to 2
> of them in vec4 form for a total of 8 floats), which makes it impossible
> to determine which ones are used by analyzing the shader.

The description is almost complete. :)  The issue is that the shader may 
declare

out float gl_ClipDistance[4];

the use non-constant addressing of the array.  The compiler knows that 
gl_ClipDistance has at most 4 elements, but post-hoc analysis would not 
be able to determine that.  Often the fixed-function hardware (see 
below) needs to know which clip distance values are actually written.

>> Could you also elaborate on why TGSI_SEMANTIC_CLIPDIST is useful for the drivers? I personally don't have nothing against it, but just like to understand why it makes a difference.
>>
>> Jose
>
> Unless my understanding of clip distances is wrong, the GPU uses clip
> distances to decide whether a vertex should be clipped, and thus needs
> to know which of the vertex shader outputs are clip distances.

Right.  Clip distance is generally written to a special register that 
some fixed-function hardware uses to do clipping.


More information about the mesa-dev mailing list