i965: Ensure that all necessary state is re-emitted if we run out of aperture.
authorPaul Berry <stereotype441@gmail.com>
Sat, 11 Jan 2014 02:56:14 +0000 (18:56 -0800)
committerPaul Berry <stereotype441@gmail.com>
Mon, 13 Jan 2014 17:44:39 +0000 (09:44 -0800)
commitfb6d9798a0c6eefd512f5b0f19eed34af8f4f257
treed415623c0cb8d2e0157942614045e92410e3aac5
parentdf918b5b90c0c1fc564adc026c9da1b8e7003807
i965: Ensure that all necessary state is re-emitted if we run out of aperture.

Prior to this patch, if we ran out of aperture space during
brw_try_draw_prims(), we would rewind the batch buffer pointer
(potentially throwing some state that may have been emitted by
brw_upload_state()), flush the batch, and then try again.  However, we
wouldn't reset the dirty bits to the state they had before the call to
brw_upload_state().  As a result, when we tried again, there was a
danger that we wouldn't re-emit all the necessary state.  (Note: prior
to the introduction of hardware contexts, this wasn't a problem
because flushing the batch forced all state to be re-emitted).

This patch fixes the problem by leaving the dirty bits set at the end
of brw_upload_state(); we only clear them after we have determined
that we don't need to rewind the batch buffer.

Cc: 10.0 9.2 <mesa-stable@lists.freedesktop.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_draw.c
src/mesa/drivers/dri/i965/brw_state.h
src/mesa/drivers/dri/i965/brw_state_upload.c