[Mesa-dev] [PROPOSAL] gallium: move state enable bits from clip_state to rasterizer_state
Marek Olšák
maraeo at gmail.com
Sat Dec 17 11:54:15 PST 2011
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.
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);
Marek
More information about the mesa-dev
mailing list