diff options
author | Kenneth Graunke <[email protected]> | 2019-05-22 18:14:38 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2019-05-23 08:07:08 -0700 |
commit | 7d2b54e3936ded025d5d75246a7c0a3f2712413f (patch) | |
tree | e9f62693149dcb27500fd16120da4614d9666305 /src/gallium/drivers/iris/iris_screen.c | |
parent | 00cfeacf3179ee37d2517188cb5074e5bea66a34 (diff) |
iris: Record state sizes for INTEL_DEBUG=bat decoding.
Felix noticed a crash when using INTEL_DEBUG=bat decoding. It turned
out that we were sometimes placing variable length data near the end
of a buffer, and with the decoder guessing random lengths rather than
having an actual count, it was walking off the end and crashing. So
this does more than improve the decoder output.
Unfortunately, this is a bit more complicated than i965's handling,
because we don't have a single state buffer. Various places upload
data via u_upload_mgr, and so there isn't a central place to record
the size. We don't need to catch every single place, however, since
it's only important to record variable length packets (like viewports
and binding tables).
State data also lives arbitrarily long, rather than being discarded on
every batch like i965, so we don't know when to clear out old entries
either. (We also don't have a callback when an upload buffer is
released.) So, this tracking may space leak over time. That's probably
okay though, as this is only a debugging feature and it's a slow leak.
We may also get lucky and overwrite existing entries as we reuse BOs,
though I find this unlikely to happen.
The fact that the decoder works in terms of offsets from a state base
address is also not ideal, as dynamic state base address and surface
state base address differ for iris. However, because dynamic state
addresses start from the top of a 4GB region, and binding tables start
from addresses [0, 64K), it's highly unlikely that we'll get overlap.
We can always improve this, but for now it's better than what we had.
Diffstat (limited to 'src/gallium/drivers/iris/iris_screen.c')
0 files changed, 0 insertions, 0 deletions