summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Berry <stereotype441@gmail.com>2011-12-19 11:53:52 -0800
committerPaul Berry <stereotype441@gmail.com>2011-12-20 15:22:28 -0800
commitc5e17a84983d7799fd842a62daaece3d97a670be (patch)
treeb6ac916f22456b546f65c425fc04e9c078bca06e
parentf8328c998b4d68c62ba939165390c2c22c5b5740 (diff)
i965: Convert if/else to switch statements in brw_queryobj.c
Previously, i965 only supported two query types: GL_TIME_ELAPSED_EXT and GL_SAMPLES_PASSED_ARB, and it distinguished between the two using if/else statements that compared query->Base.Target to GL_TIME_ELAPSED_EXT. This patch changes the if/else statements to switch statements so that we can add more query types without having to have a chain of else-ifs. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
-rw-r--r--src/mesa/drivers/dri/i965/brw_queryobj.c36
1 files changed, 30 insertions, 6 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_queryobj.c b/src/mesa/drivers/dri/i965/brw_queryobj.c
index 8875541a96..3ad522da13 100644
--- a/src/mesa/drivers/dri/i965/brw_queryobj.c
+++ b/src/mesa/drivers/dri/i965/brw_queryobj.c
@@ -60,16 +60,24 @@ brw_queryobj_get_results(struct gl_context *ctx,
drm_intel_bo_map(query->bo, false);
results = query->bo->virtual;
- if (query->Base.Target == GL_TIME_ELAPSED_EXT) {
+ switch (query->Base.Target) {
+ case GL_TIME_ELAPSED_EXT:
if (intel->gen >= 6)
query->Base.Result += 80 * (results[1] - results[0]);
else
query->Base.Result += 1000 * ((results[1] >> 32) - (results[0] >> 32));
- } else {
+ break;
+
+ case GL_SAMPLES_PASSED_ARB:
/* Map and count the pixels from the current query BO */
for (i = query->first_index; i <= query->last_index; i++) {
query->Base.Result += results[i * 2 + 1] - results[i * 2];
}
+ break;
+
+ default:
+ assert(!"Unrecognized query target in brw_queryobj_get_results()");
+ break;
}
drm_intel_bo_unmap(query->bo);
@@ -108,7 +116,8 @@ brw_begin_query(struct gl_context *ctx, struct gl_query_object *q)
struct intel_context *intel = intel_context(ctx);
struct brw_query_object *query = (struct brw_query_object *)q;
- if (query->Base.Target == GL_TIME_ELAPSED_EXT) {
+ switch (query->Base.Target) {
+ case GL_TIME_ELAPSED_EXT:
drm_intel_bo_unreference(query->bo);
query->bo = drm_intel_bo_alloc(intel->bufmgr, "timer query",
4096, 4096);
@@ -136,7 +145,9 @@ brw_begin_query(struct gl_context *ctx, struct gl_query_object *q)
OUT_BATCH(0);
ADVANCE_BATCH();
}
- } else {
+ break;
+
+ case GL_SAMPLES_PASSED_ARB:
/* Reset our driver's tracking of query state. */
drm_intel_bo_unreference(query->bo);
query->bo = NULL;
@@ -145,6 +156,11 @@ brw_begin_query(struct gl_context *ctx, struct gl_query_object *q)
brw->query.obj = query;
intel->stats_wm++;
+ break;
+
+ default:
+ assert(!"Unrecognized query target in brw_begin_query()");
+ break;
}
}
@@ -158,7 +174,8 @@ brw_end_query(struct gl_context *ctx, struct gl_query_object *q)
struct intel_context *intel = intel_context(ctx);
struct brw_query_object *query = (struct brw_query_object *)q;
- if (query->Base.Target == GL_TIME_ELAPSED_EXT) {
+ switch (query->Base.Target) {
+ case GL_TIME_ELAPSED_EXT:
if (intel->gen >= 6) {
BEGIN_BATCH(4);
OUT_BATCH(_3DSTATE_PIPE_CONTROL);
@@ -184,7 +201,9 @@ brw_end_query(struct gl_context *ctx, struct gl_query_object *q)
}
intel_batchbuffer_flush(intel);
- } else {
+ break;
+
+ case GL_SAMPLES_PASSED_ARB:
/* Flush the batchbuffer in case it has writes to our query BO.
* Have later queries write to a new query BO so that further rendering
* doesn't delay the collection of our results.
@@ -200,6 +219,11 @@ brw_end_query(struct gl_context *ctx, struct gl_query_object *q)
brw->query.obj = NULL;
intel->stats_wm--;
+ break;
+
+ default:
+ assert(!"Unrecognized query target in brw_end_query()");
+ break;
}
}