intel: Make the decoder handle STATE_BASE_ADDRESS not being a buffer.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 11 Jul 2018 17:50:16 +0000 (10:50 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 25 Jul 2018 21:43:47 +0000 (14:43 -0700)
commit933223db3ceacad9f25a6c74213a54854550315b
tree967c0e9a7b0c4ccae1d796a797503551fa7c7e94
parentaa59f9c8bc6796796487dd74b7fd568186b38350
intel: Make the decoder handle STATE_BASE_ADDRESS not being a buffer.

Normally, i965 programs STATE_BASE_ADDRESS every batch, and puts all
state for a given base in a single buffer.

I'm working on a prototype which emits STATE_BASE_ADDRESS only once at
startup, where each base address is a fixed 4GB region of the PPGTT.
State may live in many buffers in that 4GB region, even if there isn't
a buffer located at the actual base address itself.

To handle this, we need to save the STATE_BASE_ADDRESS values across
multiple batches, rather than assuming we'll see the command each time.
Then, each time we see a pointer, we need to ask the driver for the BO
map for that data.  (We can't just use the map for the base address, as
state may be in multiple buffers, and there may not even be a buffer
at the base address to map.)

v2: Fix things caught in review by Lionel:
 - Drop bogus bind_bo.size check.
 - Drop "get the BOs again" code - we just get the BOs as needed
 - Add a message about interface descriptor data being unavailable

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
src/intel/common/gen_batch_decoder.c
src/intel/common/gen_decoder.h