From 867fd2b5f586085c137af264e3eb640094e88526 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 21 May 2015 20:06:19 +0200 Subject: [PATCH] nv50: fix 64-bit queries with HUD, based on nvc0 A sequence number is written for 32-bits queries to make sure they are ready, but not for 64-bits queries. Instead, we have to use a fence in order to fix the HUD because it doesn't wait until the result is ready. Signed-off-by: Samuel Pitoiset Reviewed-by: Ilia Mirkin --- src/gallium/drivers/nouveau/nv50/nv50_query.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/nouveau/nv50/nv50_query.c b/src/gallium/drivers/nouveau/nv50/nv50_query.c index 6690aa282eb..a3c88411199 100644 --- a/src/gallium/drivers/nouveau/nv50/nv50_query.c +++ b/src/gallium/drivers/nouveau/nv50/nv50_query.c @@ -46,6 +46,7 @@ struct nv50_query { boolean flushed; boolean is64bit; struct nouveau_mm_allocation *mm; + struct nouveau_fence *fence; }; #define NV50_QUERY_ALLOC_SPACE 256 @@ -92,6 +93,7 @@ static void nv50_query_destroy(struct pipe_context *pipe, struct pipe_query *pq) { nv50_query_allocate(nv50_context(pipe), nv50_query(pq), 0); + nouveau_fence_ref(NULL, &nv50_query(pq)->fence); FREE(nv50_query(pq)); } @@ -260,12 +262,22 @@ nv50_query_end(struct pipe_context *pipe, struct pipe_query *pq) break; } q->ready = q->flushed = FALSE; + + if (q->is64bit) + nouveau_fence_ref(nv50->screen->base.fence.current, &q->fence); } static INLINE boolean nv50_query_ready(struct nv50_query *q) { - return q->ready || (!q->is64bit && (q->data[0] == q->sequence)); + if (q->is64bit) { + if (nouveau_fence_signalled(q->fence)) + return TRUE; + } else { + if (q->data[0] == q->sequence) + return TRUE; + } + return FALSE; } static boolean -- 2.30.2