intel: Add an interface for setting the output file for decode.
authorEric Anholt <eric@anholt.net>
Tue, 3 Jan 2012 21:05:57 +0000 (13:05 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 4 Jan 2012 22:49:44 +0000 (14:49 -0800)
Consumers often want to choose stdout vs stderr, and for testing I
want to output to an open_memstream file.

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
intel/intel_bufmgr.h
intel/intel_decode.c

index 68017a5..85da8b9 100644 (file)
@@ -34,6 +34,7 @@
 #ifndef INTEL_BUFMGR_H
 #define INTEL_BUFMGR_H
 
+#include <stdio.h>
 #include <stdint.h>
 
 struct drm_clip_rect;
@@ -199,6 +200,7 @@ void drm_intel_decode_set_dump_past_end(struct drm_intel_decode *ctx,
                                        int dump_past_end);
 void drm_intel_decode_set_head_tail(struct drm_intel_decode *ctx,
                                    uint32_t head, uint32_t tail);
+void drm_intel_decode_set_output_file(struct drm_intel_decode *ctx, FILE *out);
 void drm_intel_decode(struct drm_intel_decode *ctx);
 
 
index e80e840..81ef712 100644 (file)
@@ -33,6 +33,9 @@
 
 /* Struct for tracking drm_intel_decode state. */
 struct drm_intel_decode {
+       /** stdio file where the output should land.  Defaults to stdout. */
+       FILE *out;
+
        /** PCI device ID. */
        uint32_t devid;
 
@@ -3558,6 +3561,7 @@ drm_intel_decode_context_alloc(uint32_t devid)
                return NULL;
 
        ctx->devid = devid;
+       ctx->out = stdout;
 
        return ctx;
 }
@@ -3592,6 +3596,13 @@ drm_intel_decode_set_head_tail(struct drm_intel_decode *ctx,
        ctx->tail = tail;
 }
 
+void
+drm_intel_decode_set_output_file(struct drm_intel_decode *ctx,
+                                FILE *out)
+{
+       ctx->out = out;
+}
+
 /**
  * Decodes an i830-i915 batch buffer, writing the output to stdout.
  *
@@ -3618,12 +3629,11 @@ drm_intel_decode(struct drm_intel_decode *ctx)
        devid = ctx->devid;
        head_offset = ctx->head;
        tail_offset = ctx->tail;
+       out = ctx->out;
 
        saved_s2_set = 0;
        saved_s4_set = 1;
 
-       out = stdout;
-
        while (index < count) {
                switch ((data[index] & 0xe0000000) >> 29) {
                case 0x0: