diff options
author | Paul Berry <[email protected]> | 2011-12-19 11:53:52 -0800 |
---|---|---|
committer | Paul Berry <[email protected]> | 2011-12-20 15:22:28 -0800 |
commit | c5e17a84983d7799fd842a62daaece3d97a670be (patch) | |
tree | b6ac916f22456b546f65c425fc04e9c078bca06e | |
parent | f8328c998b4d68c62ba939165390c2c22c5b5740 (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 <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_queryobj.c | 36 |
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 8875541a968..3ad522da138 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; } } |