Merge branch 'mesa_7_6_branch' into mesa_7_7_branch
[mesa.git] / src / gallium / drivers / trace / tr_screen.c
index 920f418ebf0665a0a3bcb4b1998c683ce6825c41..7da9bd3866ba8e6b2c82713db3b7b0a0ccc20c47 100644 (file)
@@ -38,6 +38,7 @@
 
 
 static boolean trace = FALSE;
+static boolean rbug = FALSE;
 
 static const char *
 trace_screen_get_name(struct pipe_screen *_screen)
@@ -365,7 +366,8 @@ trace_screen_get_tex_transfer(struct pipe_screen *_screen,
 
    trace_dump_call_end();
 
-   result = trace_transfer_create(tr_tex, result);
+   if (result)
+      result = trace_transfer_create(tr_tex, result);
 
    return result;
 }
@@ -402,7 +404,7 @@ trace_screen_transfer_map(struct pipe_screen *_screen,
 
    map = screen->transfer_map(screen, transfer);
    if(map) {
-      if(transfer->usage != PIPE_TRANSFER_READ) {
+      if(transfer->usage & PIPE_TRANSFER_WRITE) {
          assert(!tr_trans->map);
          tr_trans->map = map;
       }
@@ -461,6 +463,7 @@ trace_screen_surface_buffer_create(struct pipe_screen *_screen,
                                    unsigned width, unsigned height,
                                    enum pipe_format format,
                                    unsigned usage,
+                                   unsigned tex_usage,
                                    unsigned *pstride)
 {
    struct trace_screen *tr_scr = trace_screen(_screen);
@@ -475,11 +478,13 @@ trace_screen_surface_buffer_create(struct pipe_screen *_screen,
    trace_dump_arg(uint, height);
    trace_dump_arg(format, format);
    trace_dump_arg(uint, usage);
+   trace_dump_arg(uint, tex_usage);
 
    result = screen->surface_buffer_create(screen,
                                           width, height,
                                           format,
                                           usage,
+                                          tex_usage,
                                           pstride);
 
    stride = *pstride;
@@ -837,18 +842,11 @@ trace_screen_destroy(struct pipe_screen *_screen)
 boolean
 trace_enabled(void)
 {
-   return trace;
-}
-
-struct pipe_screen *
-trace_screen_create(struct pipe_screen *screen)
-{
-   struct trace_screen *tr_scr;
-   struct pipe_winsys *winsys;
-   boolean rbug = FALSE;
+   static boolean firstrun = TRUE;
 
-   if(!screen)
-      goto error1;
+   if (!firstrun)
+      return trace;
+   firstrun = FALSE;
 
    trace_dump_init();
 
@@ -862,7 +860,19 @@ trace_screen_create(struct pipe_screen *screen)
       rbug = TRUE;
    }
 
-   if (!trace)
+   return trace;
+}
+
+struct pipe_screen *
+trace_screen_create(struct pipe_screen *screen)
+{
+   struct trace_screen *tr_scr;
+   struct pipe_winsys *winsys;
+
+   if(!screen)
+      goto error1;
+
+   if (!trace_enabled())
       goto error1;
 
    trace_dump_call_begin("", "pipe_screen_create");