On 11/28/2017 04:13 PM, Kenneth Graunke wrote: > Once we reach the intended size of the buffer (BATCH_SZ or STATE_SZ), we > try and flush. If we're not allowed to flush, we resort to growing the > buffer so that there's space for the data we need to emit. > > We accidentally got the threshold wrong. The first non-wrappable call > beyond (e.g.) STATE_SZ would grow the buffer to floor(1.5 * STATE_SZ), > The next call would see we were beyond STATE_SZ and think we needed to > grow a second time - when the buffer was already large enough. > > We still want to flush when we hit STATE_SZ, but for growing, we should > use the actual size of the buffer as the threshold. This way, we only > grow when actually necessary. > > Fixes: 2dfc119f22f257082ab0 "i965: Grow the batch/state buffers if we need > space and can't flush." > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103101 > --- > src/mesa/drivers/dri/i965/intel_batchbuffer.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c > b/src/mesa/drivers/dri/i965/intel_batchbuffer.c > index 216073129ba..1d0292b4b80 100644 > --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c > +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c > @@ -373,7 +373,7 @@ intel_batchbuffer_require_space(struct brw_context *brw, > GLuint sz, > if (batch_used + sz >= BATCH_SZ) {
Why not just change this test to >= batch->bo->size? > if (!batch->no_wrap) { > intel_batchbuffer_flush(brw); > - } else { > + } else if (batch_used + sz >= batch->bo->size) { > const unsigned new_size = > MIN2(batch->bo->size + batch->bo->size / 2, MAX_BATCH_SIZE); > grow_buffer(brw, &batch->bo, &batch->map, &batch->batch_cpu_map, > @@ -1075,7 +1075,7 @@ brw_state_batch(struct brw_context *brw, > if (!batch->no_wrap) { > intel_batchbuffer_flush(brw); > offset = ALIGN(batch->state_used, alignment); > - } else { > + } else if (offset + size >= batch->state_bo->size) { > const unsigned new_size = > MIN2(batch->state_bo->size + batch->state_bo->size / 2, > MAX_STATE_SIZE); > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev