intel: Reserve enough space to finish occlusion queries on Gen6.
After realizing that brw_finish_batch emitted some final PIPE_CONTROLs to record occlusion queries, Chris noted that we probably hadn't reserved enough space to actually emit them. Reserving a full 60 bytes seems a bit harsh, since we only need that much if occlusion queries are actually active. Plus, 28 bytes would be sufficient for Gen7, and 24 for Gen4-5. We could optimize this in the future, but it doesn't seem too critical. NOTE: This is a candidate for stable release branches. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=53311 Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
9da50667f4
commit
4e087de51a
|
@ -147,6 +147,10 @@ brw_update_draw_buffer(struct intel_context *intel)
|
|||
/**
|
||||
* called from intel_batchbuffer_flush and children before sending a
|
||||
* batchbuffer off.
|
||||
*
|
||||
* Note that ALL state emitted here must fit in the reserved space
|
||||
* at the end of a batchbuffer. If you add more GPU state, increase
|
||||
* the BATCH_RESERVED macro.
|
||||
*/
|
||||
static void brw_finish_batch(struct intel_context *intel)
|
||||
{
|
||||
|
|
|
@ -11,7 +11,17 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define BATCH_RESERVED 16
|
||||
/**
|
||||
* Number of bytes to reserve for commands necessary to complete a batch.
|
||||
*
|
||||
* This includes:
|
||||
* - MI_BATCHBUFFER_END (4 bytes)
|
||||
* - Optional MI_NOOP for ensuring the batch length is qword aligned (4 bytes)
|
||||
* - Any state emitted by vtbl->finish_batch()
|
||||
* - On 965+, this means ending occlusion queries (on Gen6, which has the
|
||||
* most workaround flushes, this can be as much as (4+4+5)*4 = 52 bytes)
|
||||
*/
|
||||
#define BATCH_RESERVED 60
|
||||
|
||||
struct intel_batchbuffer;
|
||||
|
||||
|
|
Loading…
Reference in New Issue