i965: extend query/counter structs for OA queries
authorRobert Bragg <robert@sixbynine.org>
Thu, 4 Jun 2015 22:26:40 +0000 (23:26 +0100)
committerRobert Bragg <robert@sixbynine.org>
Thu, 9 Mar 2017 12:53:07 +0000 (12:53 +0000)
In preparation for generating code from brw_oa_hsw.xml for describing OA
performance counter queries this adds some OA specific members to
brw_perf_query that our generated code will initialize:

- The oa_metric_set_id is the ID we will pass to
  DRM_IOCTL_I915_PERF_OPEN, and is an ID got via sysfs under:
  /sys/class/drm/<card>/metrics/<guid/id

- The oa_format is the OA report layout we will request from the kernel

- The accumulator offsets determine where the different groups of A, B
  and C counters are located within an intermediate 64bit 'accumulator'
  buffer.

Additionally brw_perf_query_counter now has 64bit or float _read()
callback members for OA counters.

Signed-off-by: Robert Bragg <robert@sixbynine.org>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Acked-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_performance_query.h

index 8f6bf18230f5e81066ad06e7e5a9de73ae7c8040..0aa27995ab9e754596ebd2716cdc7e962a728377 100644 (file)
@@ -602,9 +602,21 @@ struct brw_perf_query_info
 {
    enum brw_query_kind kind;
    const char *name;
+   const char *guid;
    struct brw_perf_query_counter *counters;
    int n_counters;
    size_t data_size;
+
+   /* OA specific */
+   uint64_t oa_metrics_set_id;
+   int oa_format;
+
+   /* For indexing into the accumulator[] ... */
+   int gpu_time_offset;
+   int gpu_clock_offset;
+   int a_offset;
+   int b_offset;
+   int c_offset;
 };
 
 /**
index 8f1f96060b6dd3f76985b176fb6acca4ca707f67..c9454f98eab8a9c32048e1b33826fe44e64087b7 100644 (file)
@@ -44,6 +44,14 @@ struct brw_perf_query_counter
    size_t offset;
    size_t size;
 
-   struct brw_pipeline_stat pipeline_stat;
+   union {
+      uint64_t (*oa_counter_read_uint64)(struct brw_context *brw,
+                                         const struct brw_perf_query_info *query,
+                                         uint64_t *accumulator);
+      float (*oa_counter_read_float)(struct brw_context *brw,
+                                     const struct brw_perf_query_info *query,
+                                     uint64_t *accumulator);
+      struct brw_pipeline_stat pipeline_stat;
+   };
 };