From a5279f1ec517b3abdc0b3194c5ebcf45f6cc22ae Mon Sep 17 00:00:00 2001 From: Julia Tatz Date: Thu, 3 Aug 2023 21:28:16 -0400 Subject: [PATCH] aux/trace: add context video methods Preliminary support without wrapping video_codec or video_buffer Part-of: --- src/gallium/auxiliary/driver_trace/tr_context.c | 70 ++++++++++++++++++++++ src/gallium/auxiliary/driver_trace/tr_context.h | 1 + .../auxiliary/driver_trace/tr_dump_defines.h | 8 +++ src/gallium/auxiliary/driver_trace/tr_dump_state.c | 47 +++++++++++++++ src/gallium/auxiliary/driver_trace/tr_dump_state.h | 5 ++ src/util/format/u_format.h | 19 ++++++ 6 files changed, 150 insertions(+) diff --git a/src/gallium/auxiliary/driver_trace/tr_context.c b/src/gallium/auxiliary/driver_trace/tr_context.c index 66a2966..24d8f45 100644 --- a/src/gallium/auxiliary/driver_trace/tr_context.c +++ b/src/gallium/auxiliary/driver_trace/tr_context.c @@ -2070,6 +2070,73 @@ trace_context_resource_commit(struct pipe_context *_context, return context->resource_commit(context, resource, level, box, commit); } +static struct pipe_video_codec * +trace_context_create_video_codec(struct pipe_context *_context, + const struct pipe_video_codec *templat) +{ + struct trace_context *tr_context = trace_context(_context); + struct pipe_context *context = tr_context->pipe; + struct pipe_video_codec *result; + + trace_dump_call_begin("pipe_context", "create_video_codec"); + + trace_dump_arg(ptr, context); + trace_dump_arg(video_codec_template, templat); + + result = context->create_video_codec(context, templat); + + trace_dump_ret(ptr, result); + trace_dump_call_end(); + + return result; +} + +static struct pipe_video_buffer * +trace_context_create_video_buffer_with_modifiers(struct pipe_context *_context, + const struct pipe_video_buffer *templat, + const uint64_t *modifiers, + unsigned int modifiers_count) +{ + struct trace_context *tr_context = trace_context(_context); + struct pipe_context *context = tr_context->pipe; + struct pipe_video_buffer *result; + + trace_dump_call_begin("pipe_screen", "create_video_buffer_with_modifiers"); + + trace_dump_arg(ptr, context); + trace_dump_arg(video_buffer_template, templat); + trace_dump_arg_array(uint, modifiers, modifiers_count); + trace_dump_arg(uint, modifiers_count); + + result = context->create_video_buffer_with_modifiers(context, templat, modifiers, modifiers_count); + + trace_dump_ret(ptr, result); + trace_dump_call_end(); + + return result; +} + +static struct pipe_video_buffer * +trace_context_create_video_buffer(struct pipe_context *_context, + const struct pipe_video_buffer *templat) +{ + struct trace_context *tr_context = trace_context(_context); + struct pipe_context *context = tr_context->pipe; + struct pipe_video_buffer *result; + + trace_dump_call_begin("pipe_screen", "create_video_buffer"); + + trace_dump_arg(ptr, context); + trace_dump_arg(video_buffer_template, templat); + + result = context->create_video_buffer(context, templat); + + trace_dump_ret(ptr, result); + trace_dump_call_end(); + + return result; +} + static void trace_context_set_tess_state(struct pipe_context *_context, const float default_outer_level[4], @@ -2443,6 +2510,9 @@ trace_context_create(struct trace_screen *tr_scr, TR_CTX_INIT(texture_barrier); TR_CTX_INIT(memory_barrier); TR_CTX_INIT(resource_commit); + TR_CTX_INIT(create_video_codec); + TR_CTX_INIT(create_video_buffer_with_modifiers); + TR_CTX_INIT(create_video_buffer); TR_CTX_INIT(set_tess_state); TR_CTX_INIT(set_patch_vertices); TR_CTX_INIT(set_shader_buffers); diff --git a/src/gallium/auxiliary/driver_trace/tr_context.h b/src/gallium/auxiliary/driver_trace/tr_context.h index 14b2b8a..0d947ab 100644 --- a/src/gallium/auxiliary/driver_trace/tr_context.h +++ b/src/gallium/auxiliary/driver_trace/tr_context.h @@ -33,6 +33,7 @@ #include "util/u_debug.h" #include "util/hash_table.h" #include "pipe/p_context.h" +#include "pipe/p_video_codec.h" #include "util/u_threaded_context.h" #include "tr_screen.h" diff --git a/src/gallium/auxiliary/driver_trace/tr_dump_defines.h b/src/gallium/auxiliary/driver_trace/tr_dump_defines.h index ca3d3b9..7f0a63d 100644 --- a/src/gallium/auxiliary/driver_trace/tr_dump_defines.h +++ b/src/gallium/auxiliary/driver_trace/tr_dump_defines.h @@ -43,6 +43,14 @@ trace_dump_format(enum pipe_format format) trace_dump_enum(util_format_name(format)); } +static inline void +trace_dump_chroma_format(enum pipe_video_chroma_format chroma_format) +{ + if (!trace_dumping_enabled_locked()) + return; + + trace_dump_enum(util_chroma_format_name(chroma_format)); +} static inline void trace_dump_query_type(unsigned value) diff --git a/src/gallium/auxiliary/driver_trace/tr_dump_state.c b/src/gallium/auxiliary/driver_trace/tr_dump_state.c index 08b2d21..8a05225 100644 --- a/src/gallium/auxiliary/driver_trace/tr_dump_state.c +++ b/src/gallium/auxiliary/driver_trace/tr_dump_state.c @@ -79,6 +79,53 @@ void trace_dump_resource_template(const struct pipe_resource *templat) } +void trace_dump_video_codec_template(const struct pipe_video_codec *templat) +{ + if (!trace_dumping_enabled_locked()) + return; + + if (!templat) { + trace_dump_null(); + return; + } + + trace_dump_struct_begin("pipe_video_codec"); + + trace_dump_member_enum(pipe_video_profile, templat, profile); + trace_dump_member(uint, templat, level); + trace_dump_member_enum(pipe_video_entrypoint, templat, entrypoint); + trace_dump_member(chroma_format, templat, chroma_format); + trace_dump_member(uint, templat, width); + trace_dump_member(uint, templat, height); + trace_dump_member(uint, templat, max_references); + trace_dump_member(bool, templat, expect_chunked_decode); + + trace_dump_struct_end(); +} + + +void trace_dump_video_buffer_template(const struct pipe_video_buffer *templat) +{ + if (!trace_dumping_enabled_locked()) + return; + + if (!templat) { + trace_dump_null(); + return; + } + + trace_dump_struct_begin("pipe_video_buffer"); + + trace_dump_member(format, templat, buffer_format); + trace_dump_member(uint, templat, width); + trace_dump_member(uint, templat, height); + trace_dump_member(bool, templat, interlaced); + trace_dump_member(uint, templat, bind); + + trace_dump_struct_end(); +} + + void trace_dump_box(const struct pipe_box *box) { if (!trace_dumping_enabled_locked()) diff --git a/src/gallium/auxiliary/driver_trace/tr_dump_state.h b/src/gallium/auxiliary/driver_trace/tr_dump_state.h index 44b8b9f..10033d0 100644 --- a/src/gallium/auxiliary/driver_trace/tr_dump_state.h +++ b/src/gallium/auxiliary/driver_trace/tr_dump_state.h @@ -30,11 +30,16 @@ #include "pipe/p_state.h" #include "pipe/p_shader_tokens.h" +#include "pipe/p_video_codec.h" struct winsys_handle; void trace_dump_resource_template(const struct pipe_resource *templat); +void trace_dump_video_codec_template(const struct pipe_video_codec *templat); + +void trace_dump_video_buffer_template(const struct pipe_video_buffer *templat); + void trace_dump_box(const struct pipe_box *box); void trace_dump_rasterizer_state(const struct pipe_rasterizer_state *state); diff --git a/src/util/format/u_format.h b/src/util/format/u_format.h index 982ae3e..93de204 100644 --- a/src/util/format/u_format.h +++ b/src/util/format/u_format.h @@ -465,6 +465,25 @@ util_format_short_name(enum pipe_format format) return desc->short_name; } +static inline const char * +util_chroma_format_name(enum pipe_video_chroma_format chroma_format) +{ + switch (chroma_format) { + case PIPE_VIDEO_CHROMA_FORMAT_400: + return "PIPE_VIDEO_CHROMA_FORMAT_400"; + case PIPE_VIDEO_CHROMA_FORMAT_420: + return "PIPE_VIDEO_CHROMA_FORMAT_420"; + case PIPE_VIDEO_CHROMA_FORMAT_422: + return "PIPE_VIDEO_CHROMA_FORMAT_422"; + case PIPE_VIDEO_CHROMA_FORMAT_444: + return "PIPE_VIDEO_CHROMA_FORMAT_444"; + case PIPE_VIDEO_CHROMA_FORMAT_NONE: + return "PIPE_VIDEO_CHROMA_FORMAT_NONE"; + default: + return "PIPE_VIDEO_CHROMA_FORMAT_???"; + } +} + /** * Whether this format is plain, see UTIL_FORMAT_LAYOUT_PLAIN for more info. */ -- 2.7.4