diff --git a/src/gallium/auxiliary/driver_trace/tr_context.c b/src/gallium/auxiliary/driver_trace/tr_context.c index 74a215231fb..589531e48ec 100644 --- a/src/gallium/auxiliary/driver_trace/tr_context.c +++ b/src/gallium/auxiliary/driver_trace/tr_context.c @@ -145,6 +145,7 @@ trace_context_draw_vbo(struct pipe_context *_pipe, static void trace_context_draw_mesh_tasks(struct pipe_context *_pipe, + unsigned drawid_offset, const struct pipe_grid_info *info) { struct trace_context *tr_ctx = trace_context(_pipe); @@ -153,11 +154,12 @@ trace_context_draw_mesh_tasks(struct pipe_context *_pipe, trace_dump_call_begin("pipe_context", "draw_mesh_tasks"); trace_dump_arg(ptr, pipe); + trace_dump_arg(uint, drawid_offset); trace_dump_arg(grid_info, info); trace_dump_trace_flush(); - pipe->draw_mesh_tasks(pipe, info); + pipe->draw_mesh_tasks(pipe, drawid_offset, info); trace_dump_call_end(); } diff --git a/src/gallium/drivers/llvmpipe/lp_state_cs.c b/src/gallium/drivers/llvmpipe/lp_state_cs.c index 0bf0e5cab9c..c9cfbabfd3c 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_cs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_cs.c @@ -2059,6 +2059,7 @@ lp_mesh_call_draw(struct llvmpipe_context *lp, static void llvmpipe_draw_mesh_tasks(struct pipe_context *pipe, + unsigned drawid_offset, const struct pipe_grid_info *info) { struct llvmpipe_context *lp = llvmpipe_context(pipe); @@ -2142,7 +2143,7 @@ llvmpipe_draw_mesh_tasks(struct pipe_context *pipe, job_info.payload = payload; job_info.payload_stride = payload_stride; job_info.work_dim = info->work_dim; - job_info.draw_id = dr; + job_info.draw_id = dr + drawid_offset; job_info.req_local_mem = lp->tss->req_local_mem + info->variable_shared_mem; job_info.current = &lp->task_ctx->cs.current; @@ -2176,7 +2177,7 @@ llvmpipe_draw_mesh_tasks(struct pipe_context *pipe, job_info.req_local_mem = lp->mhs->req_local_mem + info->variable_shared_mem; job_info.current = &lp->mesh_ctx->cs.current; job_info.payload_stride = 0; - job_info.draw_id = dr; + job_info.draw_id = dr + drawid_offset; job_info.io_stride = task_out_size; uint32_t job_strides[3] = { job_info.grid_size[0], job_info.grid_size[1], job_info.grid_size[2] }; diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c index 2b7986e91a0..b02f98164f1 100644 --- a/src/gallium/frontends/lavapipe/lvp_execute.c +++ b/src/gallium/frontends/lavapipe/lvp_execute.c @@ -3874,7 +3874,7 @@ static void handle_draw_mesh_tasks(struct vk_cmd_queue_entry *cmd, state->dispatch_info.grid_base[2] = 0; state->dispatch_info.draw_count = 1; state->dispatch_info.indirect = NULL; - state->pctx->draw_mesh_tasks(state->pctx, &state->dispatch_info); + state->pctx->draw_mesh_tasks(state->pctx, 0, &state->dispatch_info); } static void handle_draw_mesh_tasks_indirect(struct vk_cmd_queue_entry *cmd, @@ -3884,7 +3884,7 @@ static void handle_draw_mesh_tasks_indirect(struct vk_cmd_queue_entry *cmd, state->dispatch_info.indirect_offset = cmd->u.draw_mesh_tasks_indirect_ext.offset; state->dispatch_info.indirect_stride = cmd->u.draw_mesh_tasks_indirect_ext.stride; state->dispatch_info.draw_count = cmd->u.draw_mesh_tasks_indirect_ext.draw_count; - state->pctx->draw_mesh_tasks(state->pctx, &state->dispatch_info); + state->pctx->draw_mesh_tasks(state->pctx, 0, &state->dispatch_info); } static void handle_draw_mesh_tasks_indirect_count(struct vk_cmd_queue_entry *cmd, @@ -3896,7 +3896,7 @@ static void handle_draw_mesh_tasks_indirect_count(struct vk_cmd_queue_entry *cmd state->dispatch_info.draw_count = cmd->u.draw_mesh_tasks_indirect_count_ext.max_draw_count; state->dispatch_info.indirect_draw_count_offset = cmd->u.draw_mesh_tasks_indirect_count_ext.count_buffer_offset; state->dispatch_info.indirect_draw_count = lvp_buffer_from_handle(cmd->u.draw_mesh_tasks_indirect_count_ext.count_buffer)->bo; - state->pctx->draw_mesh_tasks(state->pctx, &state->dispatch_info); + state->pctx->draw_mesh_tasks(state->pctx, 0, &state->dispatch_info); } static VkBuffer diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h index dbe08593b70..7d1be91813c 100644 --- a/src/gallium/include/pipe/p_context.h +++ b/src/gallium/include/pipe/p_context.h @@ -1023,6 +1023,7 @@ struct pipe_context { const struct pipe_grid_info *info); void (*draw_mesh_tasks)(struct pipe_context *context, + unsigned drawid_offset, const struct pipe_grid_info *info); /*@}*/