intel/dump_gpu: add an only-capture option
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Thu, 3 Oct 2019 21:55:43 +0000 (00:55 +0300)
committerMarge Bot <eric+marge@anholt.net>
Fri, 7 Aug 2020 11:27:54 +0000 (11:27 +0000)
This option allows for smaller aub files to be generated by only
storing the BOs flagged with EXEC_OBJECT_CAPTURE.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/2201>

src/intel/tools/intel_dump_gpu.c
src/intel/tools/intel_dump_gpu.in

index ba4d2b8a0846271c257d6c49f54b0d30ceb5090c..050ec78e3b8c90bb303e6e4a099932f38c1de801 100644 (file)
@@ -59,6 +59,7 @@ static char *output_filename = NULL;
 static FILE *output_file = NULL;
 static int verbose = 0;
 static bool device_override = false;
 static FILE *output_file = NULL;
 static int verbose = 0;
 static bool device_override = false;
+static bool capture_only = false;
 
 #define MAX_FD_COUNT 64
 #define MAX_BO_COUNT 64 * 1024
 
 #define MAX_FD_COUNT 64
 #define MAX_BO_COUNT 64 * 1024
@@ -293,7 +294,9 @@ dump_execbuffer2(int fd, struct drm_i915_gem_execbuffer2 *execbuffer2)
       else
          data = bo->map;
 
       else
          data = bo->map;
 
-      if (bo->dirty) {
+      bool write = !capture_only || (obj->flags & EXEC_OBJECT_CAPTURE);
+
+      if (write && bo->dirty) {
          if (bo == batch_bo) {
             aub_write_trace_block(&aub_file, AUB_TRACE_TYPE_BATCH,
                                   GET_PTR(data), bo->size, bo->offset);
          if (bo == batch_bo) {
             aub_write_trace_block(&aub_file, AUB_TRACE_TYPE_BATCH,
                                   GET_PTR(data), bo->size, bo->offset);
@@ -420,6 +423,8 @@ maybe_init(int fd)
          fail_if(output_file == NULL,
                  "failed to open file '%s'\n",
                  output_filename);
          fail_if(output_file == NULL,
                  "failed to open file '%s'\n",
                  output_filename);
+      } else if (!strcmp(key, "capture_only")) {
+         capture_only = atoi(value);
       } else {
          fprintf(stderr, "unknown option '%s'\n", key);
       }
       } else {
          fprintf(stderr, "unknown option '%s'\n", key);
       }
index 060c21c592b8d9c6bf724270bdf9b5e5cf3c9b5e..3efa0d4c76e8d03df90ae2a7c96a3fe9ab9446d6 100755 (executable)
@@ -16,6 +16,10 @@ contents and execution of the GEM application.
 
   -p, --platform=NAME Override PCI ID using a platform name
 
 
   -p, --platform=NAME Override PCI ID using a platform name
 
+  -c, --only-capture  Only write objects flagged with EXEC_OBJECT_CAPTURE into
+                      the output aub file. This helps reducing output file
+                      size greatly but won't produce a file replayable
+
   -v                  Enable verbose output
 
   -vv                 Enable extra verbosity - dumps gtt mappings
   -v                  Enable verbose output
 
   -vv                 Enable extra verbosity - dumps gtt mappings
@@ -31,6 +35,7 @@ ld_preload="@install_libexecdir@/libintel_dump_gpu.so${LD_PRELOAD:+:$LD_PRELOAD}
 args=""
 file=""
 gdb=""
 args=""
 file=""
 gdb=""
+capture_only=""
 
 function add_arg() {
     arg=$1
 
 function add_arg() {
     arg=$1
@@ -89,6 +94,14 @@ while true; do
             gdb=1
             shift
             ;;
             gdb=1
             shift
             ;;
+        -c)
+            add_arg "capture_only=1"
+            shift
+            ;;
+        --only-capture)
+            add_arg "capture_only=1"
+            shift
+            ;;
         --help)
             show_help
             ;;
         --help)
             show_help
             ;;