diff options
-rw-r--r-- | src/gallium/drivers/trace/tr_context.c | 39 | ||||
-rw-r--r-- | src/gallium/drivers/trace/tr_dump_state.c | 40 | ||||
-rw-r--r-- | src/gallium/drivers/trace/tr_dump_state.h | 2 |
3 files changed, 81 insertions, 0 deletions
diff --git a/src/gallium/drivers/trace/tr_context.c b/src/gallium/drivers/trace/tr_context.c index 57f851833e5..08b1d32afb0 100644 --- a/src/gallium/drivers/trace/tr_context.c +++ b/src/gallium/drivers/trace/tr_context.c @@ -1686,6 +1686,44 @@ static void trace_context_set_shader_buffers(struct pipe_context *_context, FREE(_buffers); } +static void trace_context_set_shader_images(struct pipe_context *_context, + unsigned shader, + unsigned start, unsigned nr, + struct pipe_image_view *images) +{ + struct trace_context *tr_context = trace_context(_context); + struct pipe_context *context = tr_context->pipe; + struct pipe_image_view *_images = NULL; + + trace_dump_call_begin("pipe_context", "set_shader_images"); + trace_dump_arg(ptr, context); + trace_dump_arg(uint, shader); + trace_dump_arg(uint, start); + trace_dump_arg_begin("images"); + trace_dump_struct_array(image_view, images, nr); + trace_dump_arg_end(); + trace_dump_call_end(); + + if (images) { + int i; + + _images = MALLOC(nr * sizeof(struct pipe_image_view)); + if (!_images) + return; + + for (i = 0; i < nr; i++) { + _images[i] = images[i]; + _images[i].resource = trace_resource_unwrap(tr_context, + _images[i].resource); + } + } + + context->set_shader_images(context, shader, start, nr, _images); + + if (_images) + FREE(_images); +} + static void trace_context_launch_grid(struct pipe_context *_pipe, const struct pipe_grid_info *info) { @@ -1809,6 +1847,7 @@ trace_context_create(struct trace_screen *tr_scr, TR_CTX_INIT(set_tess_state); TR_CTX_INIT(set_shader_buffers); TR_CTX_INIT(launch_grid); + TR_CTX_INIT(set_shader_images); TR_CTX_INIT(transfer_map); TR_CTX_INIT(transfer_unmap); diff --git a/src/gallium/drivers/trace/tr_dump_state.c b/src/gallium/drivers/trace/tr_dump_state.c index e805706f19d..591ca79a2fa 100644 --- a/src/gallium/drivers/trace/tr_dump_state.c +++ b/src/gallium/drivers/trace/tr_dump_state.c @@ -740,6 +740,46 @@ void trace_dump_shader_buffer(const struct pipe_shader_buffer *state) } +void trace_dump_image_view(const struct pipe_image_view *state) +{ + if (!trace_dumping_enabled_locked()) + return; + + if(!state) { + trace_dump_null(); + return; + } + + trace_dump_struct_begin("pipe_image_view"); + trace_dump_member(resource_ptr, state, resource); + trace_dump_member(uint, state, format); + trace_dump_member(uint, state, access); + + trace_dump_member_begin("u"); + trace_dump_struct_begin(""); /* anonymous */ + if (state->resource->target == PIPE_BUFFER) { + trace_dump_member_begin("buf"); + trace_dump_struct_begin(""); /* anonymous */ + trace_dump_member(uint, &state->u.buf, first_element); + trace_dump_member(uint, &state->u.buf, last_element); + trace_dump_struct_end(); /* anonymous */ + trace_dump_member_end(); /* buf */ + } else { + trace_dump_member_begin("tex"); + trace_dump_struct_begin(""); /* anonymous */ + trace_dump_member(uint, &state->u.tex, first_layer); + trace_dump_member(uint, &state->u.tex, last_layer); + trace_dump_member(uint, &state->u.tex, level); + trace_dump_struct_end(); /* anonymous */ + trace_dump_member_end(); /* tex */ + } + trace_dump_struct_end(); /* anonymous */ + trace_dump_member_end(); /* u */ + + trace_dump_struct_end(); +} + + void trace_dump_draw_info(const struct pipe_draw_info *state) { if (!trace_dumping_enabled_locked()) diff --git a/src/gallium/drivers/trace/tr_dump_state.h b/src/gallium/drivers/trace/tr_dump_state.h index ee0720d8ac8..fd2bc503052 100644 --- a/src/gallium/drivers/trace/tr_dump_state.h +++ b/src/gallium/drivers/trace/tr_dump_state.h @@ -91,4 +91,6 @@ void trace_dump_query_result(unsigned query_type, void trace_dump_grid_info(const struct pipe_grid_info *state); +void trace_dump_image_view(const struct pipe_image_view *view); + #endif /* TR_STATE_H */ |