i965/fs: Plumb compiler debug logging through brw_compiler
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 23 Jun 2015 00:01:22 +0000 (17:01 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 23 Jun 2015 21:28:08 +0000 (14:28 -0700)
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_shader.cpp
src/mesa/drivers/dri/i965/brw_shader.h

index 3b311ca..0c11a9e 100644 (file)
@@ -710,7 +710,9 @@ fs_visitor::no16(const char *msg)
    } else {
       simd16_unsupported = true;
 
-      perf_debug("SIMD16 shader failed to compile: %s", msg);
+      struct brw_compiler *compiler = brw->intelScreen->compiler;
+      compiler->shader_perf_log(brw,
+                                "SIMD16 shader failed to compile: %s", msg);
    }
 }
 
@@ -3800,9 +3802,12 @@ fs_visitor::allocate_registers()
          fail("Failure to register allocate.  Reduce number of "
               "live scalar values to avoid this.");
       } else {
-         perf_debug("%s shader triggered register spilling.  "
-                    "Try reducing the number of live scalar values to "
-                    "improve performance.\n", stage_name);
+         struct brw_compiler *compiler = brw->intelScreen->compiler;
+         compiler->shader_perf_log(brw,
+                                   "%s shader triggered register spilling.  "
+                                   "Try reducing the number of live scalar "
+                                   "values to improve performance.\n",
+                                   stage_name);
       }
 
       /* Since we're out of heuristics, just go spill registers until we
index 6bc9dd9..42d6236 100644 (file)
@@ -47,6 +47,31 @@ shader_debug_log_mesa(void *data, const char *fmt, ...)
    va_end(args);
 }
 
+static void
+shader_perf_log_mesa(void *data, const char *fmt, ...)
+{
+   struct brw_context *brw = (struct brw_context *)data;
+
+   va_list args;
+   va_start(args, fmt);
+
+   if (unlikely(INTEL_DEBUG & DEBUG_PERF)) {
+      va_list args_copy;
+      va_copy(args_copy, args);
+      vfprintf(stderr, fmt, args_copy);
+      va_end(args_copy);
+   }
+
+   if (brw->perf_debug) {
+      GLuint msg_id = 0;
+      _mesa_gl_vdebug(&brw->ctx, &msg_id,
+                      MESA_DEBUG_SOURCE_SHADER_COMPILER,
+                      MESA_DEBUG_TYPE_PERFORMANCE,
+                      MESA_DEBUG_SEVERITY_MEDIUM, fmt, args);
+   }
+   va_end(args);
+}
+
 struct brw_compiler *
 brw_compiler_create(void *mem_ctx, const struct brw_device_info *devinfo)
 {
@@ -54,6 +79,7 @@ brw_compiler_create(void *mem_ctx, const struct brw_device_info *devinfo)
 
    compiler->devinfo = devinfo;
    compiler->shader_debug_log = shader_debug_log_mesa;
+   compiler->shader_perf_log = shader_perf_log_mesa;
 
    brw_fs_alloc_reg_sets(compiler);
    brw_vec4_alloc_reg_set(compiler);
index 30cca5c..fe510e7 100644 (file)
@@ -88,6 +88,7 @@ struct brw_compiler {
    } fs_reg_sets[2];
 
    void (*shader_debug_log)(void *, const char *str, ...) PRINTFLIKE(2, 3);
+   void (*shader_perf_log)(void *, const char *str, ...) PRINTFLIKE(2, 3);
 };
 
 enum PACKED register_file {