diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_queryobj.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_queryobj.c b/src/mesa/drivers/dri/i965/brw_queryobj.c index d218631aaf2..0881ab93893 100644 --- a/src/mesa/drivers/dri/i965/brw_queryobj.c +++ b/src/mesa/drivers/dri/i965/brw_queryobj.c @@ -532,10 +532,19 @@ brw_emit_query_begin(struct brw_context *brw) */ if (brw->query.bo == NULL || query->last_index * 2 + 1 >= 4096 / sizeof(uint64_t)) { + + if (query->bo != NULL) { + /* The old query BO did not have enough space, so we allocated a new + * one. Gather the results so far (adding up the differences) and + * release the old BO. + */ + brw_queryobj_get_results(ctx, query); + } drm_intel_bo_unreference(brw->query.bo); brw->query.bo = NULL; brw->query.bo = drm_intel_bo_alloc(intel->bufmgr, "query", 4096, 1); + drm_intel_bo_reference(brw->query.bo); /* Fill the buffer with zeroes. This is probably superfluous. */ drm_intel_bo_map(brw->query.bo, true); @@ -543,21 +552,11 @@ brw_emit_query_begin(struct brw_context *brw) drm_intel_bo_unmap(brw->query.bo); query->last_index = 0; + query->bo = brw->query.bo; } write_depth_count(intel, brw->query.bo, query->last_index * 2); - if (query->bo != brw->query.bo) { - if (query->bo != NULL) { - /* The old query BO did not have enough space, so we allocated a new - * one. Gather the results so far (adding up the differences) and - * release the old BO. - */ - brw_queryobj_get_results(ctx, query); - } - drm_intel_bo_reference(brw->query.bo); - query->bo = brw->query.bo; - } brw->query.begin_emitted = true; } |