diff options
author | Kenneth Graunke <[email protected]> | 2017-03-01 16:41:05 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2017-06-15 22:42:50 -0700 |
commit | ad412d63193c1a6cceff392f7ebd8e63e5742a54 (patch) | |
tree | e6c8c03062845f902862b3b2e6d2bf5a10fea9b3 /src/mesa/drivers/dri/i965/brw_context.h | |
parent | 1b03323e17c096000d7c5b6b60cc2fb9fcc9f2d1 (diff) |
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 <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_context.h')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index b1374092bac..36a1ec6c9d1 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -576,7 +576,11 @@ enum brw_predicate_state { /* In this case whether to draw or not depends on the result of an * MI_PREDICATE command so the predicate enable bit needs to be checked. */ - BRW_PREDICATE_STATE_USE_BIT + BRW_PREDICATE_STATE_USE_BIT, + /* In this case, either MI_PREDICATE doesn't exist or we lack the + * necessary kernel features to use it. Stall for the query result. + */ + BRW_PREDICATE_STATE_STALL_FOR_QUERY, }; struct shader_times; |