iris: Fix zeroing of transform feedback offsets in strange cases.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 27 Apr 2019 07:24:05 +0000 (00:24 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 27 Apr 2019 08:07:14 +0000 (01:07 -0700)
commit6bd4cb920e9c0b431df3ab2f5878b2b24182fd00
tree9700be01ea7c367ddcd99ed71c6cb1e27ebcda7c
parentedb04953c8b8520108f333b1e289f18719a7d597
iris: Fix zeroing of transform feedback offsets in strange cases.

Some of the dEQP.functional.transform_feedback tests end up doing
the following sequence of operations:

   1. BeginTransformFeedback
   2. PauseTransformFeedback
   3. Draw
   4. ResumeTransformFeedback

At step 1, we'd pack 3DSTATE_SO_BUFFER commands saying to zero the
SO_WRITE_OFFSET registers.  At step 2, we disable streamout, so step 3
doesn't bother emitting those commands.  Then, step 4 re-packs new
3DSTATE_SO_BUFFER commands with offset = 0xFFFFFFFF, saying to continue
appending at the existing offset.  This loads the value from the BO as
the offsets - but we never actually zeroed it.

So, just maintain a flag saying "we actually emitted the commands",
and stomp offset back to zero until we emit some.
src/gallium/drivers/iris/iris_context.h
src/gallium/drivers/iris/iris_state.c