diff options
| author | Eric Anholt <eric@anholt.net> | 2008-11-27 12:26:00 -0800 | 
|---|---|---|
| committer | Eric Anholt <eric@anholt.net> | 2008-11-28 17:09:46 -0800 | 
| commit | 3f973de07c035c7307e4129db17ba2baa6ae9acf (patch) | |
| tree | 3a83b084cbef1eb1c458ce0a5f0694fad0eddb05 /src | |
| parent | 8e76ac070dfea5d151d31121af5c8ca1c99caeb0 (diff) | |
i965: Add debug code for dumping how frequently different dirty bits are set.
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/dri/i965/brw_state_upload.c | 126 | 
1 files changed, 126 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_state_upload.c b/src/mesa/drivers/dri/i965/brw_state_upload.c index 7a642bd2a8..3a173d5266 100644 --- a/src/mesa/drivers/dri/i965/brw_state_upload.c +++ b/src/mesa/drivers/dri/i965/brw_state_upload.c @@ -181,6 +181,119 @@ brw_clear_validated_bos(struct brw_context *brw)     brw->state.validated_bo_count = 0;  } +struct dirty_bit_map { +   uint32_t bit; +   char *name; +   uint32_t count; +}; + +#define DEFINE_BIT(name) {name, #name, 0} + +static struct dirty_bit_map mesa_bits[] = { +   DEFINE_BIT(_NEW_MODELVIEW), +   DEFINE_BIT(_NEW_PROJECTION), +   DEFINE_BIT(_NEW_TEXTURE_MATRIX), +   DEFINE_BIT(_NEW_COLOR_MATRIX), +   DEFINE_BIT(_NEW_ACCUM), +   DEFINE_BIT(_NEW_COLOR), +   DEFINE_BIT(_NEW_DEPTH), +   DEFINE_BIT(_NEW_EVAL), +   DEFINE_BIT(_NEW_FOG), +   DEFINE_BIT(_NEW_HINT), +   DEFINE_BIT(_NEW_LIGHT), +   DEFINE_BIT(_NEW_LINE), +   DEFINE_BIT(_NEW_PIXEL), +   DEFINE_BIT(_NEW_POINT), +   DEFINE_BIT(_NEW_POLYGON), +   DEFINE_BIT(_NEW_POLYGONSTIPPLE), +   DEFINE_BIT(_NEW_SCISSOR), +   DEFINE_BIT(_NEW_STENCIL), +   DEFINE_BIT(_NEW_TEXTURE), +   DEFINE_BIT(_NEW_TRANSFORM), +   DEFINE_BIT(_NEW_VIEWPORT), +   DEFINE_BIT(_NEW_PACKUNPACK), +   DEFINE_BIT(_NEW_ARRAY), +   DEFINE_BIT(_NEW_RENDERMODE), +   DEFINE_BIT(_NEW_BUFFERS), +   DEFINE_BIT(_NEW_MULTISAMPLE), +   DEFINE_BIT(_NEW_TRACK_MATRIX), +   DEFINE_BIT(_NEW_PROGRAM), +   {0, 0, 0} +}; + +static struct dirty_bit_map brw_bits[] = { +   DEFINE_BIT(BRW_NEW_URB_FENCE), +   DEFINE_BIT(BRW_NEW_FRAGMENT_PROGRAM), +   DEFINE_BIT(BRW_NEW_VERTEX_PROGRAM), +   DEFINE_BIT(BRW_NEW_INPUT_DIMENSIONS), +   DEFINE_BIT(BRW_NEW_CURBE_OFFSETS), +   DEFINE_BIT(BRW_NEW_REDUCED_PRIMITIVE), +   DEFINE_BIT(BRW_NEW_PRIMITIVE), +   DEFINE_BIT(BRW_NEW_CONTEXT), +   DEFINE_BIT(BRW_NEW_WM_INPUT_DIMENSIONS), +   DEFINE_BIT(BRW_NEW_INPUT_VARYING), +   DEFINE_BIT(BRW_NEW_PSP), +   DEFINE_BIT(BRW_NEW_METAOPS), +   DEFINE_BIT(BRW_NEW_FENCE), +   DEFINE_BIT(BRW_NEW_LOCK), +   DEFINE_BIT(BRW_NEW_INDICES), +   DEFINE_BIT(BRW_NEW_VERTICES), +   DEFINE_BIT(BRW_NEW_BATCH), +   DEFINE_BIT(BRW_NEW_DEPTH_BUFFER), +   {0, 0, 0} +}; + +static struct dirty_bit_map cache_bits[] = { +   DEFINE_BIT(CACHE_NEW_CC_VP), +   DEFINE_BIT(CACHE_NEW_CC_UNIT), +   DEFINE_BIT(CACHE_NEW_WM_PROG), +   DEFINE_BIT(CACHE_NEW_SAMPLER_DEFAULT_COLOR), +   DEFINE_BIT(CACHE_NEW_SAMPLER), +   DEFINE_BIT(CACHE_NEW_WM_UNIT), +   DEFINE_BIT(CACHE_NEW_SF_PROG), +   DEFINE_BIT(CACHE_NEW_SF_VP), +   DEFINE_BIT(CACHE_NEW_SF_UNIT), +   DEFINE_BIT(CACHE_NEW_VS_UNIT), +   DEFINE_BIT(CACHE_NEW_VS_PROG), +   DEFINE_BIT(CACHE_NEW_GS_UNIT), +   DEFINE_BIT(CACHE_NEW_GS_PROG), +   DEFINE_BIT(CACHE_NEW_CLIP_VP), +   DEFINE_BIT(CACHE_NEW_CLIP_UNIT), +   DEFINE_BIT(CACHE_NEW_CLIP_PROG), +   DEFINE_BIT(CACHE_NEW_SURFACE), +   DEFINE_BIT(CACHE_NEW_SURF_BIND), +   {0, 0, 0} +}; + + +static void +brw_update_dirty_count(struct dirty_bit_map *bit_map, int32_t bits) +{ +   int i; + +   for (i = 0; i < 32; i++) { +      if (bit_map[i].bit == 0) +	 return; + +      if (bit_map[i].bit & bits) +	 bit_map[i].count++; +   } +} + +static void +brw_print_dirty_count(struct dirty_bit_map *bit_map, int32_t bits) +{ +   int i; + +   for (i = 0; i < 32; i++) { +      if (bit_map[i].bit == 0) +	 return; + +      fprintf(stderr, "0x%08x: %12d (%s)\n", +	      bit_map[i].bit, bit_map[i].count, bit_map[i].name); +   } +} +  /***********************************************************************   * Emit all state:   */ @@ -246,6 +359,7 @@ void brw_upload_state(struct brw_context *brw)  {     struct brw_state_flags *state = &brw->state.dirty;     int i; +   static int dirty_count = 0;     brw_clear_validated_bos(brw); @@ -301,6 +415,18 @@ void brw_upload_state(struct brw_context *brw)        }     } +   if (INTEL_DEBUG & DEBUG_STATE) { +      brw_update_dirty_count(mesa_bits, state->mesa); +      brw_update_dirty_count(brw_bits, state->brw); +      brw_update_dirty_count(cache_bits, state->cache); +      if (dirty_count++ % 1000 == 0) { +	 brw_print_dirty_count(mesa_bits, state->mesa); +	 brw_print_dirty_count(brw_bits, state->brw); +	 brw_print_dirty_count(cache_bits, state->cache); +	 fprintf(stderr, "\n"); +      } +   } +     if (!brw->intel.Fallback)        memset(state, 0, sizeof(*state));  }  | 
