i965: Improve conditional rendering in fallback paths.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 2 Mar 2017 00:41:05 +0000 (16:41 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 16 Jun 2017 05:42:50 +0000 (22:42 -0700)
commitad412d63193c1a6cceff392f7ebd8e63e5742a54
treee6c8c03062845f902862b3b2e6d2bf5a10fea9b3
parent1b03323e17c096000d7c5b6b60cc2fb9fcc9f2d1
i965: Improve conditional rendering in fallback paths.

We need to fall back in a couple of cases:
- Sandybridge (it just doesn't do this in hardware)
- Occlusion queries on Gen7-7.5 with command parser version < 2
- Transform feedback overflow queries on Gen7, or on Gen7.5 with
  command parser version < 7

In these cases, we printed a perf_debug message and fell back to
_mesa_check_conditional_render(), which stalls until the full
query result is available.  Additionally, the code to handle this
was a bit of a mess.

We can do better by using our normal conditional rendering code,
and setting a new state, BRW_PREDICATE_STATE_STALL_FOR_QUERY, when
we would have set BRW_PREDICATE_STATE_USE_BIT.  Only if that state
is set do we perf_debug and potentially stall.  This means we avoid
stalls when we have a partial query result (i.e. we know it's > 0,
but don't have the full value).  The perf_debug should trigger less
often as well.

Still, this is primarily intended as a cleanup.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/drivers/dri/i965/brw_conditional_render.c
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/i965/brw_context.h