i965: Use 3DSTATE_CLIP's User Clip Distance Enable bitmask on Gen8+.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 16 Nov 2016 06:59:45 +0000 (22:59 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 24 Nov 2016 00:57:29 +0000 (16:57 -0800)
commit903056e016e3ea52c2f493f8b0938b519ee40894
tree9013d9b41670c8b1a5d639a306dd361cbc1a6e6b
parent3b6893b678b4f3594b37b0c709a2fce7f2852eca
i965: Use 3DSTATE_CLIP's User Clip Distance Enable bitmask on Gen8+.

Gen6-7.5 specify the user clip distance enable bitmask in 3DSTATE_CLIP.
Gen8+ normally uses the new internal signalling mechanism to select the
one specified in the last enabled shader stage (3DSTATE_VS, DS, or GS).

This is a pretty good fit for Vulkan, or even newer GL, where the
bitmask comes entirely from the shader.  But with glClipPlane(),
this is dynamic state, and we have to listen to _NEW_TRASNFORM.

Clip plane enables are the only reason the VS/DS/GS atoms need to
listen to _NEW_TRANSFORM.  3DSTATE_CLIP already has to listen to it
in order to support ARB_clip_control settings.

Setting the "Use the 3DSTATE_CLIP bitmask" force enable bit allows
us to drop _NEW_TRANSFORM from all the shader stage atoms, so we can
re-emit them less often.

Improves performance of OglBatch7 (version 6) by 2.70773% +/- 0.491257%
(n = 38) at 1024x768 on Cherryview.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_defines.h
src/mesa/drivers/dri/i965/gen6_clip_state.c
src/mesa/drivers/dri/i965/gen8_ds_state.c
src/mesa/drivers/dri/i965/gen8_gs_state.c
src/mesa/drivers/dri/i965/gen8_vs_state.c