gallium/u_threaded: mark queries flushed only for non-deferred flushes

The driver uses (and must use) the flushed flag of queries as a hint that
it does not have to check for synchronization with currently queued up
commands. Deferred flushes do not actually flush queued up commands, so
we must not set the flushed flag for them.

Found by inspection.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Nicolai Hähnle
2017-10-22 17:38:50 +02:00
parent 78a4750d91
commit 11b380ed0c
2 changed files with 6 additions and 4 deletions
@@ -1809,9 +1809,11 @@ tc_flush(struct pipe_context *_pipe, struct pipe_fence_handle **fence,
struct pipe_context *pipe = tc->pipe;
struct threaded_query *tq, *tmp;
LIST_FOR_EACH_ENTRY_SAFE(tq, tmp, &tc->unflushed_queries, head_unflushed) {
tq->flushed = true;
LIST_DEL(&tq->head_unflushed);
if (!(flags & PIPE_FLUSH_DEFERRED)) {
LIST_FOR_EACH_ENTRY_SAFE(tq, tmp, &tc->unflushed_queries, head_unflushed) {
tq->flushed = true;
LIST_DEL(&tq->head_unflushed);
}
}
/* TODO: deferred flushes? */
@@ -264,7 +264,7 @@ struct threaded_query {
/* The query is added to the list in end_query and removed in flush. */
struct list_head head_unflushed;
/* Whether pipe->flush has been called after end_query. */
/* Whether pipe->flush has been called in non-deferred mode after end_query. */
bool flushed;
};