[Mesa-dev] [PROPOSAL] gallium: move state enable bits from clip_state to rasterizer_state
Christoph Bumiller
e0425955 at student.tuwien.ac.at
Sun Dec 18 07:32:56 PST 2011
On 17.12.2011 20:54, Marek Olšák wrote:
> On Sat, Dec 17, 2011 at 4:45 PM, Christoph Bumiller
> <e0425955 at student.tuwien.ac.at> wrote:
>> On 17.12.2011 15:45, Marek Olšák wrote:
>>> ---
>>>
>>> This was suggested by Keith Whitwell in this email addressed to me on 8/6/2010:
>>> http://lists.freedesktop.org/archives/mesa-dev/2010-August/001810.html
>>>
>>>
>>> src/gallium/include/pipe/p_defines.h | 2 +-
>>> src/gallium/include/pipe/p_state.h | 14 ++++++++++++--
>>> 2 files changed, 13 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
>>> index 800a04c..c441a1f 100644
>>> --- a/src/gallium/include/pipe/p_defines.h
>>> +++ b/src/gallium/include/pipe/p_defines.h
>>> @@ -453,7 +453,7 @@ enum pipe_cap {
>>> PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT = 38,
>>> PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER = 39,
>>> PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER = 40,
>>> - PIPE_CAP_DEPTH_CLAMP = 41,
>>> + PIPE_CAP_DEPTH_CLIP_DISABLE = 41,
>>> PIPE_CAP_SHADER_STENCIL_EXPORT = 42,
>>> PIPE_CAP_TGSI_INSTANCEID = 43,
>>> PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR = 44,
>>> diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
>>> index f943ca5..3aedada 100644
>>> --- a/src/gallium/include/pipe/p_state.h
>>> +++ b/src/gallium/include/pipe/p_state.h
>>> @@ -127,6 +127,18 @@ struct pipe_rasterizer_state
>>> */
>>> unsigned rasterizer_discard:1;
>>>
>>> + /**
>>> + * When false, depth clipping is disabled and the depth value will be
>>> + * clamped later at the per-pixel level before depth testing.
>>> + * This depends on PIPE_CAP_DEPTH_CLIP_DISABLE.
>>> + */
>>> + unsigned depth_clip:1;
>>> +
>>> + /**
>>> + * Enable bits for user clip planes.
>>> + */
>>> + unsigned user_clip_plane_enable:PIPE_MAX_CLIP_PLANES;
>>> +
>> The first is fine, but I don't like having user clip plane enables here,
>> can't make them part of a hardware state buffer since whether a clip
>> plane is enabled or not also depends on the vertex (or domain or
>> geometry) shader, using both UCPs and gl_ClipDistance at the same time
>> doesn't work.
> I don't expect anyone to use both. Anyway, the user clip planes are
> fixed-function and neither r300 nor r600 clip state has any dependency
> on shaders. The UCP state is pretty much separate from everything
> else. I'd like to keep depth_clip and UCP enables together, because
> they are set via the same register on r600.
*Sigh*.
Fine then, I think it doesn't really matter for nv50, so I'm not
opposing the change, do it if it helps r600.
> The problem with pipe_clip_state is that if I want to enable UCPs, I
> must also set the clip planes = 32 floats at most. I can't re-use the
> 32 floats which were set last time.
>
>> The rasterizer cso is already so large ... if we keep going like this at
>> some point you have re-validate everything when the rasterizer CSO
>> changes, because of interdependencies, and we'll get larger and larger
>> numbers of rasterizer CSOs with slow lookup and hashing.
> I double-checked and there should be no change in the size of
> pipe_rasterizer_state with the patch. The state currently has 3 dwords
> + 5 floats. However, some or all of the floats could be put in its own
> state struct, because they are changed at a pretty low frequency. For
> example:
>
> struct pipe_poly_offset_state {
> float offset_units;
> float offset_scale;
> float offset_clamp;
> };
>
> pipe->set_poly_offset_state(pipe, &poly_offset_state);
And keeping the enable bits in the rasterizer ? Yes, that would be the
same way we treat stencil ref, and speed up the hashing.
Also, depth_clip and poly_offset are somewhat related (at least more
than depth_clip and clip planes), so keeping the enable bits of both in
the rasterizer state seems nicer.
I don't expect people to use many different combinations of values there
though.
>
> Marek
>
More information about the mesa-dev
mailing list