[Mesa-dev] [PATCH 5/6] radeonsi: enable string markers and record apitrace call numbers
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Fri Jul 1 12:16:50 UTC 2016
On Fri, Jul 1, 2016 at 1:21 AM, Marek Olšák <maraeo at gmail.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> ---
> src/gallium/drivers/radeonsi/si_debug.c | 4 ++++
> src/gallium/drivers/radeonsi/si_pipe.c | 20 +++++++++++++++++++-
> src/gallium/drivers/radeonsi/si_pipe.h | 1 +
> 3 files changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_debug.c b/src/gallium/drivers/radeonsi/si_debug.c
> index 112e686..220ce13 100644
> --- a/src/gallium/drivers/radeonsi/si_debug.c
> +++ b/src/gallium/drivers/radeonsi/si_debug.c
> @@ -814,6 +814,10 @@ void si_check_vm_faults(struct r600_common_context *ctx,
> fprintf(f, "Device name: %s\n\n", screen->get_name(screen));
> fprintf(f, "Failing VM page: 0x%08x\n\n", addr);
>
> + if (sctx->apitrace_call_number)
> + fprintf(f, "Last apitrace call: %u\n\n",
> + sctx->apitrace_call_number);
> +
> switch (ring) {
> case RING_GFX:
> si_dump_debug_state(&sctx->b.b, f, 0);
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
> index 6c88fe3..f15e589 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.c
> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
> @@ -31,6 +31,7 @@
> #include "util/u_memory.h"
> #include "util/u_suballoc.h"
> #include "vl/vl_decoder.h"
> +#include "../ddebug/dd_util.h"
>
> #define SI_LLVM_DEFAULT_FEATURES \
> "+DumpCode,+vgpr-spilling,-fp32-denormals,+fp64-denormals"
> @@ -106,6 +107,22 @@ si_amdgpu_get_reset_status(struct pipe_context *ctx)
> return sctx->b.ws->ctx_query_reset_status(sctx->b.ctx);
> }
>
> +/* Apitrace profiling:
> + * 1) qapitrace : Tools -> Profile: Measure CPU & GPU times
> + * 2) In the middle panel, zoom in (mouse wheel) on some bad draw call
> + * and remember its number.
> + * 3) In Mesa, enable queries and performance counters around that draw
> + * call and print the results.
> + * 4) glretrace --benchmark --markers ..
> + */
Were there issues that you hit with the existing apitrace performance
counters support?
> +static void si_emit_string_marker(struct pipe_context *ctx,
> + const char *string, int len)
> +{
> + struct si_context *sctx = (struct si_context *)ctx;
> +
> + dd_parse_apitrace_marker(string, len, &sctx->apitrace_call_number);
> +}
> +
> static struct pipe_context *si_create_context(struct pipe_screen *screen,
> void *priv, unsigned flags)
> {
> @@ -125,6 +142,7 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen,
> sctx->b.b.screen = screen; /* this must be set first */
> sctx->b.b.priv = priv;
> sctx->b.b.destroy = si_destroy_context;
> + sctx->b.b.emit_string_marker = si_emit_string_marker;
> sctx->b.set_atom_dirty = (void *)si_set_atom_dirty;
> sctx->screen = sscreen; /* Easy accessing of screen/winsys. */
> sctx->is_debug = (flags & PIPE_CONTEXT_DEBUG) != 0;
> @@ -361,6 +379,7 @@ static int si_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
> case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
> case PIPE_CAP_GENERATE_MIPMAP:
> case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED:
> + case PIPE_CAP_STRING_MARKER:
> return 1;
>
> case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
> @@ -413,7 +432,6 @@ static int si_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
> case PIPE_CAP_DRAW_PARAMETERS:
> case PIPE_CAP_MULTI_DRAW_INDIRECT:
> case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
> - case PIPE_CAP_STRING_MARKER:
> case PIPE_CAP_QUERY_BUFFER_OBJECT:
> case PIPE_CAP_CULL_DISTANCE:
> case PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES:
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
> index 3aff0ac..9d15cbf 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.h
> +++ b/src/gallium/drivers/radeonsi/si_pipe.h
> @@ -330,6 +330,7 @@ struct si_context {
> struct r600_resource *trace_buf;
> unsigned trace_id;
> uint64_t dmesg_timestamp;
> + unsigned apitrace_call_number;
>
> /* Other state */
> bool need_check_render_feedback;
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list