diff options
author | Kenneth Graunke <[email protected]> | 2017-09-05 15:14:18 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2017-09-14 16:17:36 -0700 |
commit | 7c5988e615e580f771f6f478631d63aaada872a6 (patch) | |
tree | b6c78156373886d589d89ff2a805037c5be1017e /src/mesa/drivers/dri/i965/brw_compute.c | |
parent | 2c46a67b4138631217141f1cf9fb5ab336f0f69a (diff) |
i965: Disentangle batch and state buffer flushing.
We now flush the batch when either the batchbuffer or statebuffer
reaches the original intended batch size, instead of when the sum of
the two reaches a certain size (which makes no sense now that they're
separate buffers).
With this change, we also need to update our "are we near the end?"
estimate to require separate batch and state buffer space. I obtained
these estimates by looking at the size of draw calls in the Unreal 4
Elemental Demo (using INTEL_DEBUG=flush and always_flush_batch=true).
This will significantly impact the size of our batches. I've adjusted
both down to try and be roughly similar to what we had been doing. On
various benchmarks, a 20kB batch and 16kB statebuffer seemed to about
right, but we may need to adjust this further. I tried a 16kB batch,
but that regressed Synmark OglMultithread performance by a fair bit.
32kB for both would have significantly increased our batch sizes.
Reviewed-by: Matt Turner <[email protected]>
Reviewed-by: Chris Wilson <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_compute.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_compute.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_compute.c b/src/mesa/drivers/dri/i965/brw_compute.c index 1bad7ac7a0c..7f0278ac92b 100644 --- a/src/mesa/drivers/dri/i965/brw_compute.c +++ b/src/mesa/drivers/dri/i965/brw_compute.c @@ -167,7 +167,6 @@ static void brw_dispatch_compute_common(struct gl_context *ctx) { struct brw_context *brw = brw_context(ctx); - int estimated_buffer_space_needed; bool fail_next = false; if (!_mesa_check_conditional_render(ctx)) @@ -180,20 +179,11 @@ brw_dispatch_compute_common(struct gl_context *ctx) brw_predraw_resolve_inputs(brw); - const int sampler_state_size = 16; /* 16 bytes */ - estimated_buffer_space_needed = 512; /* batchbuffer commands */ - estimated_buffer_space_needed += (BRW_MAX_TEX_UNIT * - (sampler_state_size + - sizeof(struct gen5_sampler_default_color))); - estimated_buffer_space_needed += 1024; /* push constants */ - estimated_buffer_space_needed += 512; /* misc. pad */ - - /* Flush the batch if it's approaching full, so that we don't wrap while - * we've got validated state that needs to be in the same batch as the - * primitives. + /* Flush the batch if the batch/state buffers are nearly full. We can + * grow them if needed, but this is not free, so we'd like to avoid it. */ - intel_batchbuffer_require_space(brw, estimated_buffer_space_needed, - RENDER_RING); + intel_batchbuffer_require_space(brw, 600, RENDER_RING); + brw_require_statebuffer_space(brw, 2500); intel_batchbuffer_save_state(brw); retry: |