Пример #1
0
static void annotation_add_state(struct annotations_context *ctx,
				 uint32_t state_type,
				 uint32_t start_offset,
				 size_t   size)
{
	assert(ctx->index < MAX_ANNOTATIONS);

	add_annotation(&ctx->annotations[ctx->index++],
		       AUB_TRACE_TYPE_NOTYPE, 0,
		       start_offset);
	add_annotation(&ctx->annotations[ctx->index++],
		       AUB_TRACE_TYPE(state_type),
		       AUB_TRACE_SUBTYPE(state_type),
		       start_offset + size);
}
Пример #2
0
/**
 * 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);
}