aux/trace: trace transfer ops
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Fri, 7 May 2021 19:03:46 +0000 (15:03 -0400)
committerMarge Bot <eric+marge@anholt.net>
Sat, 22 May 2021 12:37:57 +0000 (12:37 +0000)
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10899>

src/gallium/auxiliary/driver_trace/tr_context.c

index 8a04d4c..9fcf97f 100644 (file)
@@ -1563,23 +1563,29 @@ trace_context_transfer_map(struct pipe_context *_context,
                            struct pipe_transfer **transfer)
 {
    struct trace_context *tr_context = trace_context(_context);
-   struct pipe_context *context = tr_context->pipe;
-   struct pipe_transfer *result = NULL;
+   struct pipe_context *pipe = tr_context->pipe;
+   struct pipe_transfer *xfer = NULL;
    void *map;
 
-   /*
-    * Map and transfers can't be serialized so we convert all write transfers
-    * to texture/buffer_subdata and ignore read transfers.
-    */
-
    if (resource->target == PIPE_BUFFER)
-      map = context->buffer_map(context, resource, level, usage, box, &result);
+      map = pipe->buffer_map(pipe, resource, level, usage, box, &xfer);
    else
-      map = context->texture_map(context, resource, level, usage, box, &result);
+      map = pipe->texture_map(pipe, resource, level, usage, box, &xfer);
    if (!map)
       return NULL;
+   *transfer = trace_transfer_create(tr_context, resource, xfer);
+   trace_dump_call_begin("pipe_context", resource->target == PIPE_BUFFER ? "buffer_map" : "texture_map");
 
-   *transfer = trace_transfer_create(tr_context, resource, result);
+   trace_dump_arg(ptr, pipe);
+   trace_dump_arg(ptr, resource);
+   trace_dump_arg(uint, level);
+   trace_dump_arg(uint, usage);
+   trace_dump_arg(box, box);
+
+   trace_dump_arg(ptr, xfer);
+   trace_dump_ret(ptr, map);
+
+   trace_dump_call_end();
 
    if (map) {
       if (usage & PIPE_MAP_WRITE) {
@@ -1597,10 +1603,18 @@ trace_context_transfer_flush_region( struct pipe_context *_context,
 {
    struct trace_context *tr_context = trace_context(_context);
    struct trace_transfer *tr_transfer = trace_transfer(_transfer);
-   struct pipe_context *context = tr_context->pipe;
+   struct pipe_context *pipe = tr_context->pipe;
    struct pipe_transfer *transfer = tr_transfer->transfer;
 
-   context->transfer_flush_region(context, transfer, box);
+   trace_dump_call_begin("pipe_context", "transfer_flush_region");
+
+   trace_dump_arg(ptr, pipe);
+   trace_dump_arg(ptr, transfer);
+   trace_dump_arg(box, box);
+
+   trace_dump_call_end();
+
+   pipe->transfer_flush_region(pipe, transfer, box);
 }
 
 static void
@@ -1612,6 +1626,14 @@ trace_context_transfer_unmap(struct pipe_context *_context,
    struct pipe_context *context = tr_ctx->pipe;
    struct pipe_transfer *transfer = tr_trans->transfer;
 
+
+   trace_dump_call_begin("pipe_context", "transfer_unmap");
+
+   trace_dump_arg(ptr, context);
+   trace_dump_arg(ptr, transfer);
+
+   trace_dump_call_end();
+
    if (tr_trans->map) {
       /*
        * Fake a texture/buffer_subdata