iris: Introduce cache coherency matrix for batch-local memory ordering.
authorFrancisco Jerez <currojerez@riseup.net>
Wed, 19 Feb 2020 04:48:23 +0000 (20:48 -0800)
committerMarge Bot <eric+marge@anholt.net>
Wed, 3 Jun 2020 23:12:22 +0000 (23:12 +0000)
commitfc221875cf1fe546e0087aeef55ca976647ef9c2
tree5b2dee4403766f854f1d78572baed4900ee42b12
parent4b7fd91be656ecc7944b7523b28246366cf5a8b7
iris: Introduce cache coherency matrix for batch-local memory ordering.

This introduces a representation of the cache coherency status of the
GPU at any point in the batch.  This is done by defining a matrix C of
synchronization sequence numbers such that at any point of batch
construction, a memory operation from domain i introduced into the
batch is guaranteed to be ordered after any memory operation from
domain j in a previous batch section with seqno n if the following
condition holds:

  C_i_j >= n

This allows us to efficiently determine whether additional flushing
and/or invalidation is required in order to access a buffer object
from some arbitrary domain.

Except for batch buffer reset which requires clearing the whole
matrix, all operations on the matrix are either O(n) or O(1) on the
number of caching domains (which is basically constant).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3875>
src/gallium/drivers/iris/iris_batch.c
src/gallium/drivers/iris/iris_batch.h