Mesa (master): r600g: fix OQ on evergreen

Alex Deucher agd5f at kemper.freedesktop.org
Mon Jan 31 07:49:52 UTC 2011


Module: Mesa
Branch: master
Commit: 26a4c1cb650eee1380f87f3d7e8cff43c3d6a3e6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=26a4c1cb650eee1380f87f3d7e8cff43c3d6a3e6

Author: Alex Deucher <alexdeucher at gmail.com>
Date:   Mon Jan 31 02:47:54 2011 -0500

r600g: fix OQ on evergreen

6xx/7xx have a max of 4 DBs, evergreen have a max of 8.

Signed-off-by: Alex Deucher <alexdeucher at gmail.com>

---

 src/gallium/drivers/r600/r600.h               |    2 +-
 src/gallium/winsys/r600/drm/r600_hw_context.c |    9 ++++++---
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index 15cfb7f..64c52bc 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -250,7 +250,7 @@ struct r600_context {
 	struct list_head	query_list;
 	unsigned		num_query_running;
 	struct list_head	fenced_bo;
-	unsigned                num_db; /* for OQ */
+	unsigned                max_db; /* for OQ */
 };
 
 struct r600_draw {
diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c b/src/gallium/winsys/r600/drm/r600_hw_context.c
index 53879a5..f4e2aaa 100644
--- a/src/gallium/winsys/r600/drm/r600_hw_context.c
+++ b/src/gallium/winsys/r600/drm/r600_hw_context.c
@@ -753,7 +753,10 @@ int r600_context_init(struct r600_context *ctx, struct radeon *radeon)
 	LIST_INITHEAD(&ctx->dirty);
 
 	/* TODO update this value correctly */
-	ctx->num_db = 4;
+	if (radeon->family >= CHIP_CEDAR)
+		ctx->max_db = 8;
+	else
+		ctx->max_db = 4;
 
 	return 0;
 out_err:
@@ -1265,7 +1268,7 @@ static boolean r600_query_result(struct r600_context *ctx, struct r600_query *qu
 	if (!results)
 		return FALSE;
 
-	size = query->num_results * (query->type == PIPE_QUERY_OCCLUSION_COUNTER ? ctx->num_db : 1);
+	size = query->num_results * (query->type == PIPE_QUERY_OCCLUSION_COUNTER ? ctx->max_db : 1);
 	for (i = 0; i < size; i += 4) {
 		start = (u64)results[i] | (u64)results[i + 1] << 32;
 		end = (u64)results[i + 2] | (u64)results[i + 3] << 32;
@@ -1344,7 +1347,7 @@ void r600_query_end(struct r600_context *ctx, struct r600_query *query)
 	ctx->pm4[ctx->pm4_cdwords++] = 0;
 	r600_context_bo_reloc(ctx, &ctx->pm4[ctx->pm4_cdwords - 1], query->buffer);
 
-	query->num_results += 4 * (query->type == PIPE_QUERY_OCCLUSION_COUNTER ? ctx->num_db : 1);
+	query->num_results += 4 * (query->type == PIPE_QUERY_OCCLUSION_COUNTER ? ctx->max_db : 1);
 	query->state ^= R600_QUERY_STATE_STARTED;
 	query->state |= R600_QUERY_STATE_ENDED;
 	ctx->num_query_running--;




More information about the mesa-commit mailing list