From: Ilia Mirkin Date: Fri, 22 Apr 2016 04:01:56 +0000 (-0400) Subject: nvc0: fix retrieving query results into buffer for timestamps X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=88ca4a43a2dffe132c9a2fa29d490d6644ecd7f8;p=mesa.git nvc0: fix retrieving query results into buffer for timestamps The timestamps are stored in a funny place, and even though they are a 64-bit result, are not stored with is64bit. Account for that when retrieving the query result into a resource. Signed-off-by: Ilia Mirkin Cc: "11.2" --- diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw.c b/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw.c index 62385884137..4c34593ef9c 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_query_hw.c @@ -370,7 +370,7 @@ nvc0_hw_get_query_result_resource(struct nvc0_context *nvc0, struct nouveau_pushbuf *push = nvc0->base.pushbuf; struct nvc0_hw_query *hq = nvc0_hw_query(q); struct nv04_resource *buf = nv04_resource(resource); - unsigned stride; + unsigned qoffset = 0, stride; assert(!hq->funcs || !hq->funcs->get_query_result); @@ -426,17 +426,27 @@ nvc0_hw_get_query_result_resource(struct nvc0_context *nvc0, case PIPE_QUERY_PIPELINE_STATISTICS: stride = 12; break; + case PIPE_QUERY_TIME_ELAPSED: + case PIPE_QUERY_TIMESTAMP: + qoffset = 8; + /* fallthrough */ default: assert(index == 0); stride = 1; break; } - if (hq->is64bit) { - nouveau_pushbuf_data(push, hq->bo, hq->offset + 16 * index, - 8 | NVC0_IB_ENTRY_1_NO_PREFETCH); - nouveau_pushbuf_data(push, hq->bo, hq->offset + 16 * (index + stride), + if (hq->is64bit || qoffset) { + nouveau_pushbuf_data(push, hq->bo, hq->offset + qoffset + 16 * index, 8 | NVC0_IB_ENTRY_1_NO_PREFETCH); + if (q->type == PIPE_QUERY_TIMESTAMP) { + PUSH_DATA(push, 0); + PUSH_DATA(push, 0); + } else { + nouveau_pushbuf_data(push, hq->bo, hq->offset + qoffset + + 16 * (index + stride), + 8 | NVC0_IB_ENTRY_1_NO_PREFETCH); + } } else { nouveau_pushbuf_data(push, hq->bo, hq->offset + 4, 4 | NVC0_IB_ENTRY_1_NO_PREFETCH);