diff options
author | Jerome Glisse <[email protected]> | 2012-12-19 12:23:50 -0500 |
---|---|---|
committer | Jerome Glisse <[email protected]> | 2012-12-20 18:23:54 -0500 |
commit | e8ca1a53a625544ea30b394be905ff7e51d78af6 (patch) | |
tree | 8e5b4ff3cc166c6645130dc4b0222a9b571a2cd9 /src/gallium/drivers/r600/r600_pipe.h | |
parent | 6532eb17baff6e61b427f29e076883f8941ae664 (diff) |
r600g: add cs tracing infrastructure for lockup pin pointing
It's a build time option you need to set R600_TRACE_CS to 1 and it
will print to stderr all cs along as cs trace point value which
gave last offset into a cs process by the GPU.
Signed-off-by: Jerome Glisse <[email protected]>
Diffstat (limited to 'src/gallium/drivers/r600/r600_pipe.h')
-rw-r--r-- | src/gallium/drivers/r600/r600_pipe.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h index 515174a2e6e..84187378995 100644 --- a/src/gallium/drivers/r600/r600_pipe.h +++ b/src/gallium/drivers/r600/r600_pipe.h @@ -37,6 +37,8 @@ #define R600_NUM_ATOMS 37 +#define R600_TRACE_CS 0 + #define R600_MAX_USER_CONST_BUFFERS 1 #define R600_MAX_DRIVER_CONST_BUFFERS 2 #define R600_MAX_CONST_BUFFERS (R600_MAX_USER_CONST_BUFFERS + R600_MAX_DRIVER_CONST_BUFFERS) @@ -235,6 +237,11 @@ struct r600_screen { * XXX: Not sure if this is the best place for global_pool. Also, * it's not thread safe, so it won't work with multiple contexts. */ struct compute_memory_pool *global_pool; +#if R600_TRACE_CS + struct r600_resource *trace_bo; + uint32_t *trace_ptr; + unsigned cs_count; +#endif }; struct r600_pipe_sampler_view { @@ -533,10 +540,19 @@ static INLINE void r600_emit_command_buffer(struct radeon_winsys_cs *cs, cs->cdw += cb->num_dw; } +#if R600_TRACE_CS +void r600_trace_emit(struct r600_context *rctx); +#endif + static INLINE void r600_emit_atom(struct r600_context *rctx, struct r600_atom *atom) { atom->emit(rctx, atom); atom->dirty = false; +#if R600_TRACE_CS + if (rctx->screen->trace_bo) { + r600_trace_emit(rctx); + } +#endif } static INLINE void r600_set_cso_state(struct r600_cso_state *state, void *cso) |