gallium/trace: add pipe_vertex_state support

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13050>
This commit is contained in:
Marek Olšák
2021-09-30 13:15:06 -04:00
committed by Marge Bot
parent 0842488859
commit e8cad57aa7
4 changed files with 92 additions and 0 deletions

View File

@@ -141,6 +141,39 @@ trace_context_draw_vbo(struct pipe_context *_pipe,
}
static void
trace_context_draw_vertex_state(struct pipe_context *_pipe,
struct pipe_vertex_state *state,
uint32_t partial_velem_mask,
struct pipe_draw_vertex_state_info info,
const struct pipe_draw_start_count_bias *draws,
unsigned num_draws)
{
struct trace_context *tr_ctx = trace_context(_pipe);
struct pipe_context *pipe = tr_ctx->pipe;
if (!tr_ctx->seen_fb_state && trace_dump_is_triggered())
dump_fb_state(tr_ctx, "current_framebuffer_state", true);
trace_dump_call_begin("pipe_context", "draw_vertex_state");
trace_dump_arg(ptr, pipe);
trace_dump_arg(ptr, state);
trace_dump_arg(uint, partial_velem_mask);
trace_dump_arg(draw_vertex_state_info, info);
trace_dump_arg_begin("draws");
trace_dump_struct_array(draw_start_count, draws, num_draws);
trace_dump_arg_end();
trace_dump_arg(uint, num_draws);
trace_dump_trace_flush();
pipe->draw_vertex_state(pipe, state, partial_velem_mask, info, draws,
num_draws);
trace_dump_call_end();
}
static struct pipe_query *
trace_context_create_query(struct pipe_context *_pipe,
unsigned query_type,
@@ -2177,6 +2210,7 @@ trace_context_create(struct trace_screen *tr_scr,
tr_ctx->base . _member = pipe -> _member ? trace_context_ ## _member : NULL
TR_CTX_INIT(draw_vbo);
TR_CTX_INIT(draw_vertex_state);
TR_CTX_INIT(render_condition);
TR_CTX_INIT(create_query);
TR_CTX_INIT(destroy_query);

View File

@@ -834,6 +834,17 @@ void trace_dump_draw_info(const struct pipe_draw_info *state)
trace_dump_struct_end();
}
void trace_dump_draw_vertex_state_info(struct pipe_draw_vertex_state_info state)
{
if (!trace_dumping_enabled_locked())
return;
trace_dump_struct_begin("pipe_draw_vertex_state_info");
trace_dump_member(uint, &state, mode);
trace_dump_member(uint, &state, take_vertex_state_ownership);
trace_dump_struct_end();
}
void trace_dump_draw_start_count(const struct pipe_draw_start_count_bias *state)
{
if (!trace_dumping_enabled_locked())

View File

@@ -86,6 +86,8 @@ void trace_dump_shader_buffer(const struct pipe_shader_buffer *buffer);
void trace_dump_draw_info(const struct pipe_draw_info *state);
void trace_dump_draw_vertex_state_info(struct pipe_draw_vertex_state_info state);
void trace_dump_draw_start_count(const struct pipe_draw_start_count_bias *state);
void trace_dump_draw_indirect_info(const struct pipe_draw_indirect_info *state);

View File

@@ -1040,6 +1040,49 @@ trace_screen_get_dmabuf_modifier_planes(struct pipe_screen *_screen, uint64_t mo
return ret;
}
static struct pipe_vertex_state *
trace_screen_create_vertex_state(struct pipe_screen *_screen,
struct pipe_vertex_buffer *buffer,
const struct pipe_vertex_element *elements,
unsigned num_elements,
struct pipe_resource *indexbuf,
uint32_t full_velem_mask)
{
struct trace_screen *tr_scr = trace_screen(_screen);
struct pipe_screen *screen = tr_scr->screen;
trace_dump_call_begin("pipe_screen", "create_vertex_state");
trace_dump_arg(ptr, screen);
trace_dump_arg(ptr, buffer->buffer.resource);
trace_dump_arg(vertex_buffer, buffer);
trace_dump_struct_array(vertex_element, elements, num_elements);
trace_dump_arg(uint, num_elements);
trace_dump_arg(ptr, indexbuf);
trace_dump_arg(uint, full_velem_mask);
struct pipe_vertex_state *vstate =
screen->create_vertex_state(screen, buffer, elements, num_elements,
indexbuf, full_velem_mask);
trace_dump_ret(ptr, vstate);
trace_dump_call_end();
return vstate;
}
static void trace_screen_vertex_state_destroy(struct pipe_screen *_screen,
struct pipe_vertex_state *state)
{
struct trace_screen *tr_scr = trace_screen(_screen);
struct pipe_screen *screen = tr_scr->screen;
trace_dump_call_begin("pipe_screen", "vertex_state_destroy");
trace_dump_arg(ptr, screen);
trace_dump_arg(ptr, state);
trace_dump_call_end();
screen->vertex_state_destroy(screen, state);
}
bool
trace_enabled(void)
{
@@ -1134,6 +1177,8 @@ trace_screen_create(struct pipe_screen *screen)
SCR_INIT(get_driver_uuid);
SCR_INIT(get_device_uuid);
SCR_INIT(finalize_nir);
SCR_INIT(create_vertex_state);
SCR_INIT(vertex_state_destroy);
tr_scr->base.transfer_helper = screen->transfer_helper;
tr_scr->screen = screen;