gallium/ddebug: support mesh shader

Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36976>
This commit is contained in:
Qiang Yu 2025-05-13 17:28:03 +08:00
parent e1bd743c3a
commit 3bc4004ca9
3 changed files with 53 additions and 4 deletions

View file

@ -312,6 +312,8 @@ DD_SHADER(VERTEX, vs)
DD_SHADER(GEOMETRY, gs)
DD_SHADER(TESS_CTRL, tcs)
DD_SHADER(TESS_EVAL, tes)
DD_SHADER(TASK, ts)
DD_SHADER(MESH, ms)
static void * \
dd_context_create_compute_state(struct pipe_context *_pipe,
@ -884,6 +886,12 @@ dd_context_create(struct dd_screen *dscreen, struct pipe_context *pipe)
CTX_INIT(create_compute_state);
CTX_INIT(bind_compute_state);
CTX_INIT(delete_compute_state);
CTX_INIT(create_ts_state);
CTX_INIT(bind_ts_state);
CTX_INIT(delete_ts_state);
CTX_INIT(create_ms_state);
CTX_INIT(bind_ms_state);
CTX_INIT(delete_ms_state);
CTX_INIT(create_vertex_elements_state);
CTX_INIT(bind_vertex_elements_state);
CTX_INIT(delete_vertex_elements_state);

View file

@ -405,10 +405,7 @@ dd_dump_draw_vbo(struct dd_draw_state *dstate, struct pipe_draw_info *info,
}
fprintf(f, "\n");
for (sh = 0; sh < MESA_SHADER_MESH_STAGES; sh++) {
if (sh == MESA_SHADER_COMPUTE)
continue;
for (sh = 0; sh < MESA_SHADER_COMPUTE; sh++) {
dd_dump_shader(dstate, sh, f);
}
@ -650,6 +647,20 @@ dd_dump_driver_state(struct dd_context *dctx, FILE *f, unsigned flags)
}
}
static void
dd_dump_draw_mesh_tasks(struct dd_draw_state *dstate, struct pipe_grid_info *info,
FILE *f)
{
fprintf(f, "%s:\n", __func__+8);
DUMP(grid_info, info);
fprintf(f, "\n");
dd_dump_shader(dstate, MESA_SHADER_TASK, f);
dd_dump_shader(dstate, MESA_SHADER_MESH, f);
dd_dump_shader(dstate, MESA_SHADER_FRAGMENT, f);
fprintf(f, "\n");
}
static void
dd_dump_call(FILE *f, struct dd_draw_state *state, struct dd_call *call)
{
@ -716,6 +727,9 @@ dd_dump_call(FILE *f, struct dd_draw_state *state, struct dd_call *call)
case CALL_TEXTURE_SUBDATA:
dd_dump_texture_subdata(&call->info.texture_subdata, f);
break;
case CALL_DRAW_MESH_TASKS:
dd_dump_draw_mesh_tasks(state, &call->info.launch_grid, f);
break;
}
}
@ -797,6 +811,10 @@ dd_unreference_copy_of_call(struct dd_call *dst)
case CALL_TEXTURE_SUBDATA:
pipe_resource_reference(&dst->info.texture_subdata.resource, NULL);
break;
case CALL_DRAW_MESH_TASKS:
pipe_resource_reference(&dst->info.launch_grid.indirect, NULL);
pipe_resource_reference(&dst->info.launch_grid.indirect_draw_count, NULL);
break;
}
}
@ -1892,6 +1910,27 @@ dd_context_texture_subdata(struct pipe_context *_pipe,
dd_after_draw(dctx, record);
}
static void
dd_context_draw_mesh_tasks(struct pipe_context *_pipe,
const struct pipe_grid_info *info)
{
struct dd_context *dctx = dd_context(_pipe);
struct pipe_context *pipe = dctx->pipe;
struct dd_draw_record *record = dd_create_record(dctx);
record->call.type = CALL_DRAW_MESH_TASKS;
record->call.info.launch_grid = *info;
record->call.info.launch_grid.indirect = NULL;
pipe_resource_reference(&record->call.info.launch_grid.indirect, info->indirect);
record->call.info.launch_grid.indirect_draw_count = NULL;
pipe_resource_reference(&record->call.info.launch_grid.indirect_draw_count,
info->indirect_draw_count);
dd_before_draw(dctx, record);
pipe->draw_mesh_tasks(pipe, info);
dd_after_draw(dctx, record);
}
void
dd_init_draw_functions(struct dd_context *dctx)
{
@ -1917,4 +1956,5 @@ dd_init_draw_functions(struct dd_context *dctx)
CTX_INIT(buffer_subdata);
CTX_INIT(texture_subdata);
CTX_INIT(draw_vertex_state);
CTX_INIT(draw_mesh_tasks);
}

View file

@ -79,6 +79,7 @@ enum call_type
CALL_TRANSFER_UNMAP,
CALL_BUFFER_SUBDATA,
CALL_TEXTURE_SUBDATA,
CALL_DRAW_MESH_TASKS,
};
struct call_resource_copy_region