static void annotation_flush(struct annotations_context *ctx, struct intel_batchbuffer *batch) { if (!igt_aub_dump_enabled()) return; drm_intel_bufmgr_gem_set_aub_annotations(batch->bo, ctx->annotations, ctx->index); }
/** * Generate a set of aub file annotations for the current batch buffer, and * deliver them to DRM. * * The "used" section of the batch buffer (the portion containing batch * commands) is annotated with AUB_TRACE_TYPE_BATCH. The remainder of the * batch buffer (which contains data structures pointed to by batch commands) * is annotated according to the type of each data structure. */ void brw_annotate_aub(struct brw_context *brw) { unsigned annotation_count = 2 * brw->state_batch_count + 1; drm_intel_aub_annotation annotations[annotation_count]; int a = 0; make_annotation(&annotations[a++], AUB_TRACE_TYPE_BATCH, 0, 4*brw->batch.used); for (int i = brw->state_batch_count; i-- > 0; ) { uint32_t type = brw->state_batch_list[i].type; uint32_t start_offset = brw->state_batch_list[i].offset; uint32_t end_offset = start_offset + brw->state_batch_list[i].size; make_annotation(&annotations[a++], AUB_TRACE_TYPE_NOTYPE, 0, start_offset); make_annotation(&annotations[a++], AUB_TRACE_TYPE(type), AUB_TRACE_SUBTYPE(type), end_offset); } assert(a == annotation_count); drm_intel_bufmgr_gem_set_aub_annotations(brw->batch.bo, annotations, annotation_count); }