virgl: improve virgl_transfer_queue_is_queued
authorChia-I Wu <olvaffe@gmail.com>
Mon, 8 Jul 2019 23:34:32 +0000 (16:34 -0700)
committerChia-I Wu <olvaffe@gmail.com>
Tue, 9 Jul 2019 21:26:55 +0000 (14:26 -0700)
commitbec2a85c480dbdafcc468cdd13e7616031be35bd
treecc7936b823a29afc10886dc7832488919bfc2084
parent5f6aab2ee2795ee1b295bf9379b707d6db4d91dc
virgl: improve virgl_transfer_queue_is_queued

Search only the pending list and return immediately on the first
hit.

When the transfer queue was introduced, the function was used to
deal with

  write transfer -> draw -> write transfer

sequence.  It was used to tell if the second transfer intersects
with the first transfer. If yes, the transfer queue avoided
reordering the second transfer to before the draw (by flushing) in
case the draw uses the transferred data.

With the recent changes to the transfer code, the function is used
to deal with

  write transfer -> readback transfer

We want to avoid reordering the readback transfer to before the
first transfer (also by flushing).

In the old code, we needed to track the compeleted transfers as well
to avoid reordering.  But in the new code, a readback transfer is
guaranteed to see the data from the completed transfers (in other
words, it cannot be reoderered to before the already completed
transfers).  We don't need to search the COMPLETED_LIST.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
src/gallium/drivers/virgl/virgl_transfer_queue.c