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:
@@ -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);
|
||||
|
@@ -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())
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user