diff options
| author | Jakob Bornecrantz <wallbraker@gmail.com> | 2010-06-12 14:09:59 +0200 | 
|---|---|---|
| committer | Jakob Bornecrantz <wallbraker@gmail.com> | 2010-06-22 20:04:55 +0200 | 
| commit | abbb1bde06990cb15c82ebcdb9ac07b00cb0ab4f (patch) | |
| tree | 64ada31cfb2ed572259cea2f31fb7eadf036ffc7 /src | |
| parent | e694f3fd4865f7e85cf1d4c9fe5789fad399dbc6 (diff) | |
i915g: Rework debug print code
Diffstat (limited to 'src')
| -rw-r--r-- | src/gallium/drivers/i915/i915_blit.c | 17 | ||||
| -rw-r--r-- | src/gallium/drivers/i915/i915_context.h | 2 | ||||
| -rw-r--r-- | src/gallium/drivers/i915/i915_debug.c | 89 | ||||
| -rw-r--r-- | src/gallium/drivers/i915/i915_debug.h | 88 | ||||
| -rw-r--r-- | src/gallium/drivers/i915/i915_debug_fp.c | 1 | ||||
| -rw-r--r-- | src/gallium/drivers/i915/i915_debug_private.h | 45 | ||||
| -rw-r--r-- | src/gallium/drivers/i915/i915_flush.c | 5 | ||||
| -rw-r--r-- | src/gallium/drivers/i915/i915_screen.c | 3 | ||||
| -rw-r--r-- | src/gallium/drivers/i915/i915_state_derived.c | 4 | ||||
| -rw-r--r-- | src/gallium/drivers/i915/i915_state_dynamic.c | 1 | ||||
| -rw-r--r-- | src/gallium/drivers/i915/i915_state_emit.c | 17 | 
11 files changed, 190 insertions, 82 deletions
| diff --git a/src/gallium/drivers/i915/i915_blit.c b/src/gallium/drivers/i915/i915_blit.c index c5b5979bf9..0a1b3e0d66 100644 --- a/src/gallium/drivers/i915/i915_blit.c +++ b/src/gallium/drivers/i915/i915_blit.c @@ -31,7 +31,6 @@  #include "i915_batch.h"  #include "i915_debug.h" -#define FILE_DEBUG_FLAG DEBUG_BLIT  void  i915_fill_blit(struct i915_context *i915, @@ -47,10 +46,8 @@ i915_fill_blit(struct i915_context *i915,     unsigned BR13, CMD; -   I915_DBG(i915, -      "%s dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n", -      __FUNCTION__, -      dst_buffer, dst_pitch, dst_offset, x, y, w, h); +   I915_DBG(DBG_BLIT, "%s dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n", +            __FUNCTION__, dst_buffer, dst_pitch, dst_offset, x, y, w, h);     switch (cpp) {     case 1: @@ -100,11 +97,11 @@ i915_copy_blit(struct i915_context *i915,     int dst_x2 = dst_x + w; -   I915_DBG(i915, -      "%s src:buf(%p)/%d+%d %d,%d dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n", -      __FUNCTION__, -      src_buffer, src_pitch, src_offset, src_x, src_y, -      dst_buffer, dst_pitch, dst_offset, dst_x, dst_y, w, h); +   I915_DBG(DBG_BLIT, +            "%s src:buf(%p)/%d+%d %d,%d dst:buf(%p)/%d+%d %d,%d sz:%dx%d\n", +            __FUNCTION__, +            src_buffer, src_pitch, src_offset, src_x, src_y, +            dst_buffer, dst_pitch, dst_offset, dst_x, dst_y, w, h);     switch (cpp) {     case 1: diff --git a/src/gallium/drivers/i915/i915_context.h b/src/gallium/drivers/i915/i915_context.h index acc0ffe037..ac02ab2332 100644 --- a/src/gallium/drivers/i915/i915_context.h +++ b/src/gallium/drivers/i915/i915_context.h @@ -237,8 +237,6 @@ struct i915_context     struct i915_state current;     unsigned hardware_dirty; -    -   unsigned debug;  };  /* A flag for each state_tracker state object: diff --git a/src/gallium/drivers/i915/i915_debug.c b/src/gallium/drivers/i915/i915_debug.c index 663fac3055..57d3390dea 100644 --- a/src/gallium/drivers/i915/i915_debug.c +++ b/src/gallium/drivers/i915/i915_debug.c @@ -27,11 +27,37 @@  #include "i915_reg.h"  #include "i915_context.h" +#include "i915_screen.h"  #include "i915_debug.h" +#include "i915_debug_private.h"  #include "i915_batch.h"  #include "util/u_debug.h" + +static const struct debug_named_value debug_options[] = { +   {"blit",      DBG_BLIT,      "Print when using the 2d blitter"}, +   {"emit",      DBG_EMIT,      "State emit information"}, +   {"atoms",     DBG_ATOMS,     "Print dirty state atoms"}, +   {"flush",     DBG_FLUSH,     "Flushing information"}, +   {"texture",   DBG_TEXTURE,   "Texture information"}, +   {"constants", DBG_CONSTANTS, "Constant buffers"}, +   DEBUG_NAMED_VALUE_END +}; + +unsigned i915_debug = 0; + +void i915_debug_init(struct i915_screen *screen) +{ +   i915_debug = debug_get_flags_option("I915_DEBUG", debug_options, 0); +} + + + +/*********************************************************************** + * Batchbuffer dumping + */ +  static void  PRINTF(     struct debug_stream  *stream, @@ -896,3 +922,66 @@ i915_dump_batchbuffer( struct i915_winsys_batchbuffer *batch )  } + +/*********************************************************************** + * Dirty state atom dumping + */ + +void +i915_dump_dirty(struct i915_context *i915, const char *func) +{ +   struct { +      unsigned dirty; +      const char *name; +   } l[] = { +      {I915_NEW_VIEWPORT,      "viewport"}, +      {I915_NEW_RASTERIZER,    "rasterizer"}, +      {I915_NEW_FS,            "fs"}, +      {I915_NEW_BLEND,         "blend"}, +      {I915_NEW_CLIP,          "clip"}, +      {I915_NEW_SCISSOR,       "scissor"}, +      {I915_NEW_STIPPLE,       "stipple"}, +      {I915_NEW_FRAMEBUFFER,   "framebuffer"}, +      {I915_NEW_ALPHA_TEST,    "alpha_test"}, +      {I915_NEW_DEPTH_STENCIL, "depth_stencil"}, +      {I915_NEW_SAMPLER,       "sampler"}, +      {I915_NEW_SAMPLER_VIEW,  "sampler_view"}, +      {I915_NEW_CONSTANTS,     "constants"}, +      {I915_NEW_VBO,           "vbo"}, +      {I915_NEW_VS,            "vs"}, +      {0, NULL}, +   }; +   int i; + +   debug_printf("%s: ", func); +   for (i = 0; l[i].name; i++) +      if (i915->dirty & l[i].dirty) +         debug_printf("%s ", l[i].name); +   debug_printf("\n"); +} + +void +i915_dump_hardware_dirty(struct i915_context *i915, const char *func) +{ +   struct { +      unsigned dirty; +      const char *name; +   } l[] = { +      {I915_HW_STATIC,    "static"}, +      {I915_HW_DYNAMIC,   "dynamic"}, +      {I915_HW_SAMPLER,   "sampler"}, +      {I915_HW_MAP,       "map"}, +      {I915_HW_PROGRAM,   "program"}, +      {I915_HW_CONSTANTS, "constants"}, +      {I915_HW_IMMEDIATE, "immediate"}, +      {I915_HW_INVARIENT, "invarient"}, +      {0, NULL}, +   }; +   int i; + +   debug_printf("%s: ", func); +   for (i = 0; l[i].name; i++) +      if (i915->hardware_dirty & l[i].dirty) +         debug_printf("%s ", l[i].name); +   debug_printf("\n"); +} diff --git a/src/gallium/drivers/i915/i915_debug.h b/src/gallium/drivers/i915/i915_debug.h index 67b8d9c2f6..8aa09f9c1f 100644 --- a/src/gallium/drivers/i915/i915_debug.h +++ b/src/gallium/drivers/i915/i915_debug.h @@ -26,89 +26,51 @@   **************************************************************************/  /* Authors:  Keith Whitwell <keith@tungstengraphics.com> + *           Jakob Bornecrantz <wallbraker@gmail.com>   */  #ifndef I915_DEBUG_H  #define I915_DEBUG_H -#include <stdarg.h> +#include "util/u_debug.h" +struct i915_screen;  struct i915_context; +struct i915_winsys_batchbuffer; -struct debug_stream  -{ -   unsigned offset;		/* current gtt offset */ -   char *ptr;		/* pointer to gtt offset zero */ -   char *end;		/* pointer to gtt offset zero */ -   unsigned print_addresses; -}; - - -/* Internal functions - */ -void i915_disassemble_program(struct debug_stream *stream,  -			      const unsigned *program, unsigned sz); - -void i915_print_ureg(const char *msg, unsigned ureg); - - -#define DEBUG_BATCH	 0x1 -#define DEBUG_BLIT       0x2 -#define DEBUG_BUFFER     0x4 -#define DEBUG_CONSTANTS  0x8 -#define DEBUG_CONTEXT    0x10 -#define DEBUG_DRAW	 0x20 -#define DEBUG_DYNAMIC	 0x40 -#define DEBUG_FLUSH      0x80 -#define DEBUG_MAP	 0x100 -#define DEBUG_PROGRAM	 0x200 -#define DEBUG_REGIONS    0x400 -#define DEBUG_SAMPLER	 0x800 -#define DEBUG_STATIC	 0x1000 -#define DEBUG_SURFACE    0x2000 -#define DEBUG_WINSYS     0x4000 - -#include "pipe/p_compiler.h" +#define DBG_BLIT      0x1 +#define DBG_EMIT      0x2 +#define DBG_ATOMS     0x4 +#define DBG_FLUSH     0x8 +#define DBG_TEXTURE   0x10 +#define DBG_CONSTANTS 0x20 -#if defined(DEBUG) && defined(FILE_DEBUG_FLAG) +extern unsigned i915_debug; -#include "util/u_simple_screen.h" +static INLINE boolean +I915_DBG_ON(unsigned flags) +{ +   return i915_debug & flags; +}  static INLINE void -I915_DBG( -   struct i915_context  *i915, -   const char           *fmt, -                        ... ) +I915_DBG(unsigned flags, const char *fmt, ...)  { -   if ((i915)->debug & FILE_DEBUG_FLAG) { +   if (I915_DBG_ON(flags)) {        va_list  args; -      va_start( args, fmt ); -      debug_vprintf( fmt, args ); -      va_end( args ); +      va_start(args, fmt); +      debug_vprintf(fmt, args); +      va_end(args);     }  } -#else - -static INLINE void -I915_DBG( -   struct i915_context  *i915, -   const char           *fmt, -                        ... ) -{ -   (void) i915; -   (void) fmt; -} - -#endif - - -struct i915_winsys_batchbuffer; +void i915_debug_init(struct i915_screen *i915); -void i915_dump_batchbuffer( struct i915_winsys_batchbuffer *i915 ); +void i915_dump_batchbuffer(struct i915_winsys_batchbuffer *i915); -void i915_debug_init( struct i915_context *i915 ); +void i915_dump_dirty(struct i915_context *i915, const char *func); +void i915_dump_hardware_dirty(struct i915_context *i915, const char *func);  #endif diff --git a/src/gallium/drivers/i915/i915_debug_fp.c b/src/gallium/drivers/i915/i915_debug_fp.c index f41c51f299..50f49c540f 100644 --- a/src/gallium/drivers/i915/i915_debug_fp.c +++ b/src/gallium/drivers/i915/i915_debug_fp.c @@ -28,6 +28,7 @@  #include "i915_reg.h"  #include "i915_debug.h" +#include "i915_debug_private.h"  #include "util/u_debug.h" diff --git a/src/gallium/drivers/i915/i915_debug_private.h b/src/gallium/drivers/i915/i915_debug_private.h new file mode 100644 index 0000000000..b3668d0848 --- /dev/null +++ b/src/gallium/drivers/i915/i915_debug_private.h @@ -0,0 +1,45 @@ +/************************************************************************** + *  + * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + *  + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + *  + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + *  + **************************************************************************/ + +/* Authors:  Keith Whitwell <keith@tungstengraphics.com> + */ + +#ifndef I915_DEBUG_PRIVATE_H +#define I915_DEBUG_PRIVATE_H + +struct debug_stream  +{ +   unsigned offset;		/* current gtt offset */ +   char *ptr;		/* pointer to gtt offset zero */ +   char *end;		/* pointer to gtt offset zero */ +   unsigned print_addresses; +}; + +void i915_disassemble_program(struct debug_stream *stream,  +			      const unsigned *program, unsigned sz); + +#endif diff --git a/src/gallium/drivers/i915/i915_flush.c b/src/gallium/drivers/i915/i915_flush.c index 1582168eba..967146479d 100644 --- a/src/gallium/drivers/i915/i915_flush.c +++ b/src/gallium/drivers/i915/i915_flush.c @@ -35,6 +35,7 @@  #include "i915_context.h"  #include "i915_reg.h"  #include "i915_batch.h" +#include "i915_debug.h"  static void i915_flush( struct pipe_context *pipe, @@ -76,9 +77,9 @@ static void i915_flush( struct pipe_context *pipe,      */     FLUSH_BATCH(fence);     i915->vbo_flushed = 1; -} - +   I915_DBG(DBG_FLUSH, "%s: #####\n", __FUNCTION__); +}  void i915_init_flush_functions( struct i915_context *i915 )  { diff --git a/src/gallium/drivers/i915/i915_screen.c b/src/gallium/drivers/i915/i915_screen.c index f82426520c..255538ebaa 100644 --- a/src/gallium/drivers/i915/i915_screen.c +++ b/src/gallium/drivers/i915/i915_screen.c @@ -31,6 +31,7 @@  #include "util/u_string.h"  #include "i915_reg.h" +#include "i915_debug.h"  #include "i915_context.h"  #include "i915_screen.h"  #include "i915_surface.h" @@ -330,5 +331,7 @@ i915_screen_create(struct i915_winsys *iws)     i915_init_screen_resource_functions(is);     i915_init_screen_surface_functions(is); +   i915_debug_init(is); +     return &is->base;  } diff --git a/src/gallium/drivers/i915/i915_state_derived.c b/src/gallium/drivers/i915/i915_state_derived.c index 5ebda94f6c..c059540357 100644 --- a/src/gallium/drivers/i915/i915_state_derived.c +++ b/src/gallium/drivers/i915/i915_state_derived.c @@ -32,6 +32,7 @@  #include "draw/draw_vertex.h"  #include "i915_context.h"  #include "i915_state.h" +#include "i915_debug.h"  #include "i915_reg.h" @@ -205,6 +206,9 @@ void i915_update_derived(struct i915_context *i915)  {     int i; +   if (I915_DBG_ON(DBG_ATOMS)) +      i915_dump_dirty(i915, __FUNCTION__); +     for (i = 0; atoms[i]; i++)        if (atoms[i]->dirty & i915->dirty)           atoms[i]->update(i915); diff --git a/src/gallium/drivers/i915/i915_state_dynamic.c b/src/gallium/drivers/i915/i915_state_dynamic.c index d63d4a98dd..d964483ac7 100644 --- a/src/gallium/drivers/i915/i915_state_dynamic.c +++ b/src/gallium/drivers/i915/i915_state_dynamic.c @@ -34,7 +34,6 @@  #include "util/u_memory.h"  #include "util/u_pack_color.h" -#define FILE_DEBUG_FLAG DEBUG_STATE  /* State that we have chosen to store in the DYNAMIC segment of the   * i915 indirect state mechanism. diff --git a/src/gallium/drivers/i915/i915_state_emit.c b/src/gallium/drivers/i915/i915_state_emit.c index 22082fece8..bbf9ff51f5 100644 --- a/src/gallium/drivers/i915/i915_state_emit.c +++ b/src/gallium/drivers/i915/i915_state_emit.c @@ -29,6 +29,7 @@  #include "i915_reg.h"  #include "i915_context.h"  #include "i915_batch.h" +#include "i915_debug.h"  #include "i915_reg.h"  #include "i915_resource.h" @@ -111,15 +112,20 @@ i915_emit_hardware_state(struct i915_context *i915 )                               3                             ) * 3/2; /* plus 50% margin */ -#if 0 -   debug_printf("i915_emit_hardware_state: %d dwords, %d relocs\n", dwords, relocs); -#endif -    +   uintptr_t save_ptr; +   size_t save_relocs; + +   if (I915_DBG_ON(DBG_ATOMS)) +      i915_dump_hardware_dirty(i915, __FUNCTION__); +     if(!BEGIN_BATCH(dwords, relocs)) {        FLUSH_BATCH(NULL);        assert(BEGIN_BATCH(dwords, relocs));     } +   save_ptr = (uintptr_t)i915->batch->ptr; +   save_relocs = i915->batch->relocs; +     /* 14 dwords, 0 relocs */     if (i915->hardware_dirty & I915_HW_INVARIENT)     { @@ -399,6 +405,9 @@ i915_emit_hardware_state(struct i915_context *i915 )        OUT_BATCH(0);     } +   I915_DBG(DBG_EMIT, "%s: used %d dwords, %d relocs\n", __FUNCTION__, +            ((uintptr_t)i915->batch->ptr - save_ptr) / 4, +            i915->batch->relocs - save_relocs);     i915->hardware_dirty = 0;  } | 
