Consumers often want to choose stdout vs stderr, and for testing I want to output to an open_memstream file. --- intel/intel_bufmgr.h | 2 ++ intel/intel_decode.c | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/intel/intel_bufmgr.h b/intel/intel_bufmgr.h index 68017a5..85da8b9 100644 --- a/intel/intel_bufmgr.h +++ b/intel/intel_bufmgr.h @@ -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); diff --git a/intel/intel_decode.c b/intel/intel_decode.c index e80e840..81ef712 100644 --- a/intel/intel_decode.c +++ b/intel/intel_decode.c @@ -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: -- 1.7.7.3