diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/dri/i965/brw_state_cache.c | 6 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 6 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/intel/intel_regions.c | 88 | 
3 files changed, 86 insertions, 14 deletions
| diff --git a/src/mesa/drivers/dri/i965/brw_state_cache.c b/src/mesa/drivers/dri/i965/brw_state_cache.c index 320d886c99..e40d7a0416 100644 --- a/src/mesa/drivers/dri/i965/brw_state_cache.c +++ b/src/mesa/drivers/dri/i965/brw_state_cache.c @@ -521,6 +521,9 @@ brw_clear_cache(struct brw_context *brw, struct brw_cache *cache)  void  brw_state_cache_check_size(struct brw_context *brw)  { +   if (INTEL_DEBUG & DEBUG_STATE) +      _mesa_printf("%s (n_items=%d)\n", __FUNCTION__, brw->cache.n_items); +     /* un-tuned guess.  We've got around 20 state objects for a total of around      * 32k, so 1000 of them is around 1.5MB.      */ @@ -537,6 +540,9 @@ brw_destroy_cache(struct brw_context *brw, struct brw_cache *cache)  {     GLuint i; +   if (INTEL_DEBUG & DEBUG_STATE) +      _mesa_printf("%s\n", __FUNCTION__); +     brw_clear_cache(brw, cache);     for (i = 0; i < BRW_MAX_CACHE; i++) {        dri_bo_unreference(cache->last_bo[i]); diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c index 6e1e034e53..f3652720ec 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c @@ -62,9 +62,10 @@ intel_miptree_create_internal(struct intel_context *intel,     GLboolean ok;     struct intel_mipmap_tree *mt = calloc(sizeof(*mt), 1); -   DBG("%s target %s format %s level %d..%d\n", __FUNCTION__, +   DBG("%s target %s format %s level %d..%d <-- %p\n", __FUNCTION__,         _mesa_lookup_enum_by_nr(target), -       _mesa_lookup_enum_by_nr(internal_format), first_level, last_level); +       _mesa_lookup_enum_by_nr(internal_format),  +       first_level, last_level, mt);     mt->target = target_to_target(target);     mt->internal_format = internal_format; @@ -89,6 +90,7 @@ intel_miptree_create_internal(struct intel_context *intel,     if (!ok) {        free(mt); +      DBG("%s not okay - returning NULL\n", __FUNCTION__);        return NULL;     } diff --git a/src/mesa/drivers/dri/intel/intel_regions.c b/src/mesa/drivers/dri/intel/intel_regions.c index 0aa5b8c02c..534e75efe1 100644 --- a/src/mesa/drivers/dri/intel/intel_regions.c +++ b/src/mesa/drivers/dri/intel/intel_regions.c @@ -52,12 +52,66 @@  #define FILE_DEBUG_FLAG DEBUG_REGION +/* This should be set to the maximum backtrace size desired. + * Set it to 0 to disable backtrace debugging. + */ +#define DEBUG_BACKTRACE_SIZE 0 + +#if DEBUG_BACKTRACE_SIZE == 0 +/* Use the standard debug output */ +#define _DBG(...) DBG(__VA_ARGS__) +#else +/* Use backtracing debug output */ +#define _DBG(...) {debug_backtrace(); DBG(__VA_ARGS__);} + +/* Backtracing debug support */ +#include <execinfo.h> + +static void +debug_backtrace(void) +{ +   void *trace[DEBUG_BACKTRACE_SIZE]; +   char **strings = NULL; +   int traceSize; +   register int i; + +   traceSize = backtrace(trace, DEBUG_BACKTRACE_SIZE); +   strings = backtrace_symbols(trace, traceSize); +   if (strings == NULL) { +      DBG("no backtrace:"); +      return; +   } + +   /* Spit out all the strings with a colon separator.  Ignore +    * the first, since we don't really care about the call +    * to debug_backtrace() itself.  Skip until the final "/" in +    * the trace to avoid really long lines. +    */ +   for (i = 1; i < traceSize; i++) { +      char *p = strings[i], *slash = strings[i]; +      while (*p) { +         if (*p++ == '/') { +            slash = p; +         } +      } + +      DBG("%s:", slash); +   } + +   /* Free up the memory, and we're done */ +   free(strings); +} + +#endif + + +  /* XXX: Thread safety?   */  GLubyte *  intel_region_map(struct intel_context *intel, struct intel_region *region)  { -   DBG("%s\n", __FUNCTION__); +   _DBG("%s %p\n", __FUNCTION__, region);     if (!region->map_refcount++) {        if (region->pbo)           intel_region_cow(intel, region); @@ -72,7 +126,7 @@ intel_region_map(struct intel_context *intel, struct intel_region *region)  void  intel_region_unmap(struct intel_context *intel, struct intel_region *region)  { -   DBG("%s\n", __FUNCTION__); +   _DBG("%s %p\n", __FUNCTION__, region);     if (!--region->map_refcount) {        dri_bo_unmap(region->buffer);        region->map = NULL; @@ -87,10 +141,10 @@ intel_region_alloc_internal(struct intel_context *intel,  {     struct intel_region *region; -   DBG("%s\n", __FUNCTION__); - -   if (buffer == NULL) +   if (buffer == NULL) { +      _DBG("%s <-- NULL\n", __FUNCTION__);        return NULL; +   }     region = calloc(sizeof(*region), 1);     region->cpp = cpp; @@ -104,6 +158,7 @@ intel_region_alloc_internal(struct intel_context *intel,     region->tiling = I915_TILING_NONE;     region->bit_6_swizzle = I915_BIT_6_SWIZZLE_NONE; +   _DBG("%s <-- %p\n", __FUNCTION__, region);     return region;  } @@ -158,7 +213,7 @@ void  intel_region_reference(struct intel_region **dst, struct intel_region *src)  {     if (src) -      DBG("%s %p %d\n", __FUNCTION__, src, src->refcount); +      _DBG("%s %p %d\n", __FUNCTION__, src, src->refcount);     assert(*dst == NULL);     if (src) { @@ -172,10 +227,12 @@ intel_region_release(struct intel_region **region_handle)  {     struct intel_region *region = *region_handle; -   if (region == NULL) +   if (region == NULL) { +      _DBG("%s NULL\n", __FUNCTION__);        return; +   } -   DBG("%s %p %d\n", __FUNCTION__, region, region->refcount - 1); +   _DBG("%s %p %d\n", __FUNCTION__, region, region->refcount - 1);     ASSERT(region->refcount > 0);     region->refcount--; @@ -251,7 +308,7 @@ intel_region_data(struct intel_context *intel,  {     GLboolean locked = GL_FALSE; -   DBG("%s\n", __FUNCTION__); +   _DBG("%s\n", __FUNCTION__);     if (intel == NULL)        return; @@ -293,7 +350,7 @@ intel_region_copy(struct intel_context *intel,                    GLuint src_offset,                    GLuint srcx, GLuint srcy, GLuint width, GLuint height)  { -   DBG("%s\n", __FUNCTION__); +   _DBG("%s\n", __FUNCTION__);     if (intel == NULL)        return; @@ -326,7 +383,7 @@ intel_region_fill(struct intel_context *intel,                    GLuint dstx, GLuint dsty,                    GLuint width, GLuint height, GLuint color)  { -   DBG("%s\n", __FUNCTION__); +   _DBG("%s\n", __FUNCTION__);     if (intel == NULL)        return;    @@ -356,6 +413,8 @@ intel_region_attach_pbo(struct intel_context *intel,     if (region->pbo == pbo)        return; +   _DBG("%s %p %p\n", __FUNCTION__, region, pbo); +     /* If there is already a pbo attached, break the cow tie now.      * Don't call intel_region_release_pbo() as that would      * unnecessarily allocate a new buffer we would have to immediately @@ -385,6 +444,7 @@ void  intel_region_release_pbo(struct intel_context *intel,                           struct intel_region *region)  { +   _DBG("%s %p\n", __FUNCTION__, region);     assert(region->buffer == region->pbo->buffer);     region->pbo->region = NULL;     region->pbo = NULL; @@ -412,7 +472,7 @@ intel_region_cow(struct intel_context *intel, struct intel_region *region)     assert(region->cpp * region->pitch * region->height == pbo->Base.Size); -   DBG("%s (%d bytes)\n", __FUNCTION__, pbo->Base.Size); +   _DBG("%s %p (%d bytes)\n", __FUNCTION__, region, pbo->Base.Size);     /* Now blit from the texture buffer to the new buffer:       */ @@ -459,6 +519,10 @@ intel_recreate_static(struct intel_context *intel,     if (region == NULL) {        region = calloc(sizeof(*region), 1);        region->refcount = 1; +      _DBG("%s creating new region %p\n", __FUNCTION__, region); +   } +   else { +      _DBG("%s %p\n", __FUNCTION__, region);     }     if (intel->ctx.Visual.rgbBits == 24) | 
