[igt-dev] [PATCH i-g-t v2 1/1] tools/intel_perf_counters: Remove libdrm dependency

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Mon Nov 2 08:58:44 UTC 2020


On Fri, Oct 02, 2020 at 12:59:37PM +0200, Dominik Grzegorzek wrote:
> Use intel_bb / intel_buf to remove libdrm dependency.
> 
> Signed-off-by: Dominik Grzegorzek <dominik.grzegorzek at intel.com>
> Cc: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>  tools/intel_perf_counters.c | 109 ++++++++++++++++++------------------
>  1 file changed, 56 insertions(+), 53 deletions(-)
> 
> diff --git a/tools/intel_perf_counters.c b/tools/intel_perf_counters.c
> index 5824d9c1..bef66650 100644
> --- a/tools/intel_perf_counters.c
> +++ b/tools/intel_perf_counters.c
> @@ -46,9 +46,9 @@
>  #include "i915_drm.h"
>  #include "drmtest.h"
>  #include "intel_io.h"
> -#include "intel_bufmgr.h"
>  #include "intel_batchbuffer.h"
>  #include "intel_chipset.h"
> +#include "intel_bufops.h"
>  
>  #define GEN5_COUNTER_COUNT 29
>  
> @@ -298,8 +298,8 @@ const int gen7_counter_format = 5; /* 0b101 */
>  int have_totals = 0;
>  uint32_t *totals;
>  uint32_t *last_counter;
> -static drm_intel_bufmgr *bufmgr;
> -struct intel_batchbuffer *batch;
> +static struct buf_ops *bops;
> +static struct intel_bb *ibb;
>  
>  /* DW0 */
>  #define GEN5_MI_REPORT_PERF_COUNT ((0x26 << 23) | (3 - 2))
> @@ -327,30 +327,29 @@ static void
>  gen5_get_counters(void)
>  {
>  	int i;
> -	drm_intel_bo *stats_bo;
> +	struct intel_buf *stats_buf;
>  	uint32_t *stats_result;
>  
> -	stats_bo = drm_intel_bo_alloc(bufmgr, "stats", 4096, 4096);
> +	stats_buf = intel_buf_create(bops, 4096, 1, 8, 0, I915_TILING_NONE,
> +				     I915_COMPRESSION_NONE);
> +	intel_bb_add_intel_buf(ibb, stats_buf, true);
>  
> -	BEGIN_BATCH(6, 2);
> -	OUT_BATCH(GEN5_MI_REPORT_PERF_COUNT | MI_COUNTER_SET_0);
> -	OUT_RELOC(stats_bo,
> -		  I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
> -		  0);
> -	OUT_BATCH(0);
> +	intel_bb_out(ibb, GEN5_MI_REPORT_PERF_COUNT | MI_COUNTER_SET_0);
> +	intel_bb_emit_reloc(ibb, stats_buf->handle, I915_GEM_DOMAIN_INSTRUCTION,
> +			    I915_GEM_DOMAIN_INSTRUCTION, 0,
> +			    stats_buf->addr.offset);
> +	intel_bb_out(ibb, 0);
>  
> -	OUT_BATCH(GEN5_MI_REPORT_PERF_COUNT | MI_COUNTER_SET_1);
> -	OUT_RELOC(stats_bo,
> -		  I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
> -		  64);
> -	OUT_BATCH(0);
> +	intel_bb_out(ibb, GEN5_MI_REPORT_PERF_COUNT | MI_COUNTER_SET_1);
> +	intel_bb_emit_reloc(ibb, stats_buf->handle, I915_GEM_DOMAIN_INSTRUCTION,
> +			    I915_GEM_DOMAIN_INSTRUCTION, 64,
> +			    stats_buf->addr.offset);
> +	intel_bb_out(ibb, 0);
>  
> -	ADVANCE_BATCH();
> +	intel_bb_flush_blit(ibb);
>  
> -	intel_batchbuffer_flush(batch);
> -
> -	drm_intel_bo_map(stats_bo, 0);
> -	stats_result = stats_bo->virtual;
> +	intel_buf_cpu_map(stats_buf, false);
> +	stats_result = stats_buf->ptr;
>  	/* skip REPORT_ID, TIMESTAMP */
>  	stats_result += 3;
>  	for (i = 0 ; i < GEN5_COUNTER_COUNT; i++) {
> @@ -358,15 +357,15 @@ gen5_get_counters(void)
>  		last_counter[i] = stats_result[i];
>  	}
>  
> -	drm_intel_bo_unmap(stats_bo);
> -	drm_intel_bo_unreference(stats_bo);
> +	intel_buf_unmap(stats_buf);
> +	intel_buf_destroy(stats_buf);
>  }
>  
>  static void
>  gen6_get_counters(void)
>  {
>  	int i;
> -	drm_intel_bo *stats_bo;
> +	struct intel_buf *stats_buf;
>  	uint32_t *stats_result;
>  
>  	/* Map from counter names to their index in the buffer object */
> @@ -378,49 +377,50 @@ gen6_get_counters(void)
>  		31, 30, 29, 28, 27, 26, 25, 24,
>  	};
>  
> -	stats_bo = drm_intel_bo_alloc(bufmgr, "stats", 4096, 4096);
> +	stats_buf = intel_buf_create(bops, 4096, 1, 8, 4096, I915_TILING_NONE,

In this case alignment doesn't matter but remember this is for stride,
not buffer size. I would change it to 0 to avoid confusion for readers.
Similar below in intel_buf_create(). Then:

Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>

--
Zbigniew

> +				     I915_COMPRESSION_NONE);
> +	intel_bb_add_intel_buf(ibb, stats_buf, true);
>  
> -	BEGIN_BATCH(3, 1);
> -	OUT_BATCH(GEN6_MI_REPORT_PERF_COUNT | (3 - 2));
> -	OUT_RELOC(stats_bo,
> -		  I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION,
> -		  MI_COUNTER_ADDRESS_GTT);
> -	OUT_BATCH(0);
> -	ADVANCE_BATCH();
> +	intel_bb_out(ibb, GEN6_MI_REPORT_PERF_COUNT | (3 - 2));
> +	intel_bb_emit_reloc(ibb, stats_buf->handle, I915_GEM_DOMAIN_INSTRUCTION,
> +			    I915_GEM_DOMAIN_INSTRUCTION,
> +			    MI_COUNTER_ADDRESS_GTT, stats_buf->addr.offset);
> +	intel_bb_out(ibb, 0);
>  
> -	intel_batchbuffer_flush_on_ring(batch, I915_EXEC_RENDER);
> +	intel_bb_flush_render(ibb);
>  
> -	drm_intel_bo_map(stats_bo, 0);
> -	stats_result = stats_bo->virtual;
> +	intel_buf_cpu_map(stats_buf, 0);
> +	stats_result = stats_buf->ptr;
>  	for (i = 0; i < GEN6_COUNTER_COUNT; i++) {
>  		totals[i] += stats_result[buffer_index[i]] - last_counter[i];
>  		last_counter[i] = stats_result[buffer_index[i]];
>  	}
>  
> -	drm_intel_bo_unmap(stats_bo);
> -	drm_intel_bo_unreference(stats_bo);
> +	intel_buf_unmap(stats_buf);
> +	intel_buf_destroy(stats_buf);
>  }
>  
>  static void
>  gen7_get_counters(void)
>  {
>  	int i;
> -	drm_intel_bo *stats_bo;
> +	struct intel_buf *stats_buf;
>  	uint32_t *stats_result;
>  
> -	stats_bo = drm_intel_bo_alloc(bufmgr, "stats", 4096, 4096);
> +	stats_buf = intel_buf_create(bops, 4096, 1, 8, 4096, I915_TILING_NONE,
> +				     I915_COMPRESSION_NONE);
> +	intel_bb_add_intel_buf(ibb, stats_buf, true);
>  
> -	BEGIN_BATCH(3, 1);
> -	OUT_BATCH(GEN6_MI_REPORT_PERF_COUNT | (3 - 2));
> -	OUT_RELOC(stats_bo,
> -		  I915_GEM_DOMAIN_INSTRUCTION, I915_GEM_DOMAIN_INSTRUCTION, 0);
> -	OUT_BATCH(0);
> -	ADVANCE_BATCH();
> +	intel_bb_out(ibb, GEN6_MI_REPORT_PERF_COUNT | (3 - 2));
> +	intel_bb_emit_reloc(ibb, stats_buf->handle, I915_GEM_DOMAIN_INSTRUCTION,
> +			    I915_GEM_DOMAIN_INSTRUCTION, 0,
> +			    stats_buf->addr.offset);
> +	intel_bb_out(ibb, 0);
>  
> -	intel_batchbuffer_flush_on_ring(batch, I915_EXEC_RENDER);
> +	intel_bb_flush_render(ibb);
>  
> -	drm_intel_bo_map(stats_bo, 0);
> -	stats_result = stats_bo->virtual;
> +	intel_buf_cpu_map(stats_buf, false);
> +	stats_result = stats_buf->ptr;
>  	/* skip REPORT_ID, TIMESTAMP */
>  	stats_result += 3;
>  	for (i = 0; i < GEN7_COUNTER_COUNT; i++) {
> @@ -431,8 +431,8 @@ gen7_get_counters(void)
>  		last_counter[i] = stats_result[i];
>  	}
>  
> -	drm_intel_bo_unmap(stats_bo);
> -	drm_intel_bo_unreference(stats_bo);
> +	intel_buf_unmap(stats_buf);
> +	intel_buf_destroy(stats_buf);
>  }
>  
>  #define STATS_CHECK_FREQUENCY	100
> @@ -458,9 +458,8 @@ main(int argc, char **argv)
>  	fd = drm_open_driver(DRIVER_INTEL);
>  	devid = intel_get_drm_devid(fd);
>  
> -	bufmgr = drm_intel_bufmgr_gem_init(fd, 4096);
> -	drm_intel_bufmgr_gem_enable_reuse(bufmgr);
> -	batch = intel_batchbuffer_alloc(bufmgr, devid);
> +	bops = buf_ops_create(fd);
> +	ibb = intel_bb_create(fd, 4096);
>  
>  	if (IS_GEN5(devid)) {
>  		counter_name = gen5_counter_names;
> @@ -531,5 +530,9 @@ main(int argc, char **argv)
>  	free(totals);
>  	free(last_counter);
>  
> +	intel_bb_destroy(ibb);
> +	buf_ops_destroy(bops);
> +	close(fd);
> +
>  	return 0;
>  }
> -- 
> 2.20.1
> 


More information about the igt-dev mailing list