Mesa (mesa_7_7_branch): svga: add DEBUG_CACHE option

Keith Whitwell keithw at kemper.freedesktop.org
Fri Nov 27 12:26:17 UTC 2009


Module: Mesa
Branch: mesa_7_7_branch
Commit: b911688b87a011eacf2034bd61562e633952a66b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b911688b87a011eacf2034bd61562e633952a66b

Author: Keith Whitwell <keithw at vmware.com>
Date:   Fri Nov 27 12:18:22 2009 +0000

svga: add DEBUG_CACHE option

---

 src/gallium/drivers/svga/svga_debug.h         |    1 +
 src/gallium/drivers/svga/svga_draw.c          |    7 +++++
 src/gallium/drivers/svga/svga_pipe_blit.c     |    8 ++++++
 src/gallium/drivers/svga/svga_pipe_clear.c    |    6 +++++
 src/gallium/drivers/svga/svga_pipe_flush.c    |    3 ++
 src/gallium/drivers/svga/svga_screen.c        |    5 ++++
 src/gallium/drivers/svga/svga_screen_buffer.c |    2 +-
 src/gallium/drivers/svga/svga_screen_cache.c  |   30 ++++++++++++++++++------
 8 files changed, 53 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/svga/svga_debug.h b/src/gallium/drivers/svga/svga_debug.h
index b7bb568..3a3fcd8 100644
--- a/src/gallium/drivers/svga/svga_debug.h
+++ b/src/gallium/drivers/svga/svga_debug.h
@@ -43,6 +43,7 @@
 #define DEBUG_FLUSH    0x1000   /* flush after every draw */
 #define DEBUG_SYNC     0x2000   /* sync after every flush */
 #define DEBUG_QUERY    0x4000
+#define DEBUG_CACHE    0x8000
 
 #ifdef DEBUG
 extern int SVGA_DEBUG;
diff --git a/src/gallium/drivers/svga/svga_draw.c b/src/gallium/drivers/svga/svga_draw.c
index 1b371ce..8db40d0 100644
--- a/src/gallium/drivers/svga/svga_draw.c
+++ b/src/gallium/drivers/svga/svga_draw.c
@@ -29,10 +29,13 @@
 #include "util/u_memory.h"
 #include "util/u_math.h"
 
+#include "svga_context.h"
 #include "svga_draw.h"
 #include "svga_draw_private.h"
+#include "svga_debug.h"
 #include "svga_screen.h"
 #include "svga_screen_buffer.h"
+#include "svga_screen_texture.h"
 #include "svga_winsys.h"
 #include "svga_cmd.h"
 
@@ -160,6 +163,10 @@ svga_hwtnl_flush( struct svga_hwtnl *hwtnl )
          ib_handle[i] = handle;
       }
 
+      SVGA_DBG(DEBUG_DMA, "draw to sid %p, %d prims\n",
+               svga_surface(svga->curr.framebuffer.cbufs[0])->handle,
+               hwtnl->cmd.prim_count);
+
       ret = SVGA3D_BeginDrawPrimitives(swc, 
                                        &vdecl, 
                                        hwtnl->cmd.vdecl_count, 
diff --git a/src/gallium/drivers/svga/svga_pipe_blit.c b/src/gallium/drivers/svga/svga_pipe_blit.c
index 5a4a8c0..4f575b0 100644
--- a/src/gallium/drivers/svga/svga_pipe_blit.c
+++ b/src/gallium/drivers/svga/svga_pipe_blit.c
@@ -25,6 +25,7 @@
 
 #include "svga_screen_texture.h"
 #include "svga_context.h"
+#include "svga_debug.h"
 #include "svga_cmd.h"
 
 #define FILE_DEBUG_FLAG DEBUG_BLIT
@@ -43,6 +44,13 @@ static void svga_surface_copy(struct pipe_context *pipe,
 
    svga_hwtnl_flush_retry( svga );
 
+   SVGA_DBG(DEBUG_DMA, "blit to sid %p (%d,%d), from sid %p (%d,%d) sz %dx%d\n",
+            svga_surface(dest)->handle,
+            destx, desty,
+            svga_surface(src)->handle,
+            srcx, srcy,
+            width, height);
+
    ret = SVGA3D_BeginSurfaceCopy(svga->swc,
                                  src,
                                  dest,
diff --git a/src/gallium/drivers/svga/svga_pipe_clear.c b/src/gallium/drivers/svga/svga_pipe_clear.c
index 8977d26..6195c38 100644
--- a/src/gallium/drivers/svga/svga_pipe_clear.c
+++ b/src/gallium/drivers/svga/svga_pipe_clear.c
@@ -24,12 +24,14 @@
  **********************************************************/
 
 #include "svga_cmd.h"
+#include "svga_debug.h"
 
 #include "pipe/p_defines.h"
 #include "util/u_pack_color.h"
 
 #include "svga_context.h"
 #include "svga_state.h"
+#include "svga_screen_texture.h"
 
 
 static enum pipe_error
@@ -98,6 +100,10 @@ svga_clear(struct pipe_context *pipe, unsigned buffers, const float *rgba,
 {
    struct svga_context *svga = svga_context( pipe );
    int ret;
+   
+   if (buffers & PIPE_CLEAR_COLOR)
+      SVGA_DBG(DEBUG_DMA, "clear sid %p\n",
+               svga_surface(svga->curr.framebuffer.cbufs[0])->handle);
 
    ret = try_clear( svga, buffers, rgba, depth, stencil );
 
diff --git a/src/gallium/drivers/svga/svga_pipe_flush.c b/src/gallium/drivers/svga/svga_pipe_flush.c
index 942366d..0becb07 100644
--- a/src/gallium/drivers/svga/svga_pipe_flush.c
+++ b/src/gallium/drivers/svga/svga_pipe_flush.c
@@ -59,6 +59,9 @@ static void svga_flush( struct pipe_context *pipe,
    /* Flush command queue.
     */
    svga_context_flush(svga, fence);
+
+   SVGA_DBG(DEBUG_DMA|DEBUG_PERF, "%s flags %x fence_ptr %p\n",
+            __FUNCTION__, flags, fence ? *fence : 0x0);
 }
 
 
diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c
index 3afcaff..fc1b3c9 100644
--- a/src/gallium/drivers/svga/svga_screen.c
+++ b/src/gallium/drivers/svga/svga_screen.c
@@ -57,6 +57,7 @@ static const struct debug_named_value svga_debug_flags[] = {
    { "perf",     DEBUG_PERF },
    { "flush",    DEBUG_FLUSH },
    { "sync",     DEBUG_SYNC },
+   { "cache",    DEBUG_CACHE },
    {NULL, 0}
 };
 #endif
@@ -297,6 +298,10 @@ svga_fence_finish(struct pipe_screen *screen,
                   unsigned flag)
 {
    struct svga_winsys_screen *sws = svga_screen(screen)->sws;
+
+   SVGA_DBG(DEBUG_DMA|DEBUG_PERF, "%s fence_ptr %p\n",
+            __FUNCTION__, fence);
+
    return sws->fence_finish(sws, fence, flag);
 }
 
diff --git a/src/gallium/drivers/svga/svga_screen_buffer.c b/src/gallium/drivers/svga/svga_screen_buffer.c
index c0b0f51..1f8a889 100644
--- a/src/gallium/drivers/svga/svga_screen_buffer.c
+++ b/src/gallium/drivers/svga/svga_screen_buffer.c
@@ -447,7 +447,7 @@ svga_buffer_map_range( struct pipe_screen *screen,
             enum pipe_error ret;
             struct pipe_fence_handle *fence = NULL;
             
-            SVGA_DBG(DEBUG_DMA|DEBUG_PERF, "dma from sid %p, bytes %u - %u\n", 
+            SVGA_DBG(DEBUG_DMA|DEBUG_PERF, "dma from sid %p (buffer), bytes %u - %u\n", 
                      sbuf->handle, 0, sbuf->base.size);
 
             memset(&flags, 0, sizeof flags);
diff --git a/src/gallium/drivers/svga/svga_screen_cache.c b/src/gallium/drivers/svga/svga_screen_cache.c
index 689981c..8a06383 100644
--- a/src/gallium/drivers/svga/svga_screen_cache.c
+++ b/src/gallium/drivers/svga/svga_screen_cache.c
@@ -134,7 +134,8 @@ svga_screen_cache_add(struct svga_screen *svgascreen,
    else if(!LIST_IS_EMPTY(&cache->unused)) {
       /* free the last used buffer and reuse its entry */
       entry = LIST_ENTRY(struct svga_host_surface_cache_entry, cache->unused.prev, head);
-      SVGA_DBG(DEBUG_DMA, "unref sid %p (make space)\n", entry->handle);
+      SVGA_DBG(DEBUG_CACHE|DEBUG_DMA,
+               "unref sid %p (make space)\n", entry->handle);
       sws->surface_reference(sws, &entry->handle, NULL);
 
       LIST_DEL(&entry->bucket_head);
@@ -146,11 +147,14 @@ svga_screen_cache_add(struct svga_screen *svgascreen,
       entry->handle = handle;
       memcpy(&entry->key, key, sizeof entry->key);
    
+      SVGA_DBG(DEBUG_CACHE|DEBUG_DMA,
+               "cache sid %p\n", entry->handle);
       LIST_ADD(&entry->head, &cache->validated);
    }
    else {
       /* Couldn't cache the buffer -- this really shouldn't happen */
-      SVGA_DBG(DEBUG_DMA, "unref sid %p (couldn't find space)\n", handle);
+      SVGA_DBG(DEBUG_CACHE|DEBUG_DMA,
+               "unref sid %p (couldn't find space)\n", handle);
       sws->surface_reference(sws, &handle, NULL);
    }
    
@@ -209,7 +213,8 @@ svga_screen_cache_cleanup(struct svga_screen *svgascreen)
    
    for(i = 0; i < SVGA_HOST_SURFACE_CACHE_SIZE; ++i) {
       if(cache->entries[i].handle) {
-	 SVGA_DBG(DEBUG_DMA, "unref sid %p (shutdown)\n", cache->entries[i].handle);
+	 SVGA_DBG(DEBUG_CACHE|DEBUG_DMA,
+                  "unref sid %p (shutdown)\n", cache->entries[i].handle);
 	 sws->surface_reference(sws, &cache->entries[i].handle, NULL);
       }
 
@@ -252,7 +257,8 @@ svga_screen_surface_create(struct svga_screen *svgascreen,
    struct svga_winsys_surface *handle = NULL;
    boolean cachable = SVGA_SURFACE_CACHE_ENABLED && key->cachable;
 
-   SVGA_DBG(DEBUG_DMA, "%s sz %dx%dx%d mips %d faces %d cachable %d\n", 
+   SVGA_DBG(DEBUG_CACHE|DEBUG_DMA,
+            "%s sz %dx%dx%d mips %d faces %d cachable %d\n", 
             __FUNCTION__,
             key->size.width,
             key->size.height,
@@ -276,10 +282,12 @@ svga_screen_surface_create(struct svga_screen *svgascreen,
       handle = svga_screen_cache_lookup(svgascreen, key);
       if (handle) {
          if (key->format == SVGA3D_BUFFER)
-            SVGA_DBG(DEBUG_DMA, "  reuse sid %p sz %d (buffer)\n", handle, 
+            SVGA_DBG(DEBUG_CACHE|DEBUG_DMA,
+                     "reuse sid %p sz %d (buffer)\n", handle, 
                      key->size.width);
          else
-            SVGA_DBG(DEBUG_DMA, "  reuse sid %p sz %dx%dx%d mips %d faces %d\n", handle, 
+            SVGA_DBG(DEBUG_CACHE|DEBUG_DMA,
+                     "reuse sid %p sz %dx%dx%d mips %d faces %d\n", handle, 
                      key->size.width,
                      key->size.height,
                      key->size.depth,
@@ -296,7 +304,12 @@ svga_screen_surface_create(struct svga_screen *svgascreen,
                                    key->numFaces, 
                                    key->numMipLevels);
       if (handle)
-         SVGA_DBG(DEBUG_DMA, "create sid %p sz %d\n", handle, key->size);
+         SVGA_DBG(DEBUG_CACHE|DEBUG_DMA,
+                  "  CREATE sid %p sz %dx%dx%d\n", 
+                  handle, 
+                  key->size.width,
+                  key->size.height,
+                  key->size.depth);
    }
 
    return handle;
@@ -318,7 +331,8 @@ svga_screen_surface_destroy(struct svga_screen *svgascreen,
       svga_screen_cache_add(svgascreen, key, p_handle);
    }
    else {
-      SVGA_DBG(DEBUG_DMA, "unref sid %p (uncachable)\n", *p_handle);
+      SVGA_DBG(DEBUG_DMA,
+               "unref sid %p (uncachable)\n", *p_handle);
       sws->surface_reference(sws, p_handle, NULL);
    }
 }




More information about the mesa-commit mailing list