diff options
author | Marek Olšák <[email protected]> | 2017-04-02 15:24:19 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2017-05-10 19:00:16 +0200 |
commit | 22f6624ed318e8131681ec1f2e7b3a59449df412 (patch) | |
tree | ba8d1d3e12d2a75fdf82eea5ac409974e76153ad /src/gallium/drivers/ddebug | |
parent | c24c3b94ed29ecd99b1101c74c6c4606f9b5580e (diff) |
gallium: separate indirect stuff from pipe_draw_info - 80 -> 56 bytes
For faster initialization of non-indirect draws.
Diffstat (limited to 'src/gallium/drivers/ddebug')
-rw-r--r-- | src/gallium/drivers/ddebug/dd_draw.c | 42 | ||||
-rw-r--r-- | src/gallium/drivers/ddebug/dd_pipe.h | 7 |
2 files changed, 33 insertions, 16 deletions
diff --git a/src/gallium/drivers/ddebug/dd_draw.c b/src/gallium/drivers/ddebug/dd_draw.c index 90ccf160e68..4b14516fb25 100644 --- a/src/gallium/drivers/ddebug/dd_draw.c +++ b/src/gallium/drivers/ddebug/dd_draw.c @@ -297,10 +297,12 @@ dd_dump_draw_vbo(struct dd_draw_state *dstate, struct pipe_draw_info *info, FILE if (info->count_from_stream_output) DUMP_M(stream_output_target, info, count_from_stream_output); - if (info->indirect) - DUMP_M(resource, info, indirect); - if (info->indirect_params) - DUMP_M(resource, info, indirect_params); + if (info->indirect) { + DUMP_M(resource, info, indirect->buffer); + if (info->indirect->indirect_draw_count) + DUMP_M(resource, info, indirect->indirect_draw_count); + } + fprintf(f, "\n"); /* TODO: dump active queries */ @@ -500,7 +502,7 @@ dd_dump_call(FILE *f, struct dd_draw_state *state, struct dd_call *call) { switch (call->type) { case CALL_DRAW_VBO: - dd_dump_draw_vbo(state, &call->info.draw_vbo, f); + dd_dump_draw_vbo(state, &call->info.draw_vbo.draw, f); break; case CALL_LAUNCH_GRID: dd_dump_launch_grid(state, &call->info.launch_grid, f); @@ -619,9 +621,9 @@ dd_unreference_copy_of_call(struct dd_call *dst) { switch (dst->type) { case CALL_DRAW_VBO: - pipe_so_target_reference(&dst->info.draw_vbo.count_from_stream_output, NULL); - pipe_resource_reference(&dst->info.draw_vbo.indirect, NULL); - pipe_resource_reference(&dst->info.draw_vbo.indirect_params, NULL); + pipe_so_target_reference(&dst->info.draw_vbo.draw.count_from_stream_output, NULL); + pipe_resource_reference(&dst->info.draw_vbo.indirect.buffer, NULL); + pipe_resource_reference(&dst->info.draw_vbo.indirect.indirect_draw_count, NULL); break; case CALL_LAUNCH_GRID: pipe_resource_reference(&dst->info.launch_grid.indirect, NULL); @@ -661,13 +663,17 @@ dd_copy_call(struct dd_call *dst, struct dd_call *src) switch (src->type) { case CALL_DRAW_VBO: - pipe_so_target_reference(&dst->info.draw_vbo.count_from_stream_output, - src->info.draw_vbo.count_from_stream_output); - pipe_resource_reference(&dst->info.draw_vbo.indirect, - src->info.draw_vbo.indirect); - pipe_resource_reference(&dst->info.draw_vbo.indirect_params, - src->info.draw_vbo.indirect_params); + pipe_so_target_reference(&dst->info.draw_vbo.draw.count_from_stream_output, + src->info.draw_vbo.draw.count_from_stream_output); + pipe_resource_reference(&dst->info.draw_vbo.indirect.buffer, + src->info.draw_vbo.indirect.buffer); + pipe_resource_reference(&dst->info.draw_vbo.indirect.indirect_draw_count, + src->info.draw_vbo.indirect.indirect_draw_count); dst->info.draw_vbo = src->info.draw_vbo; + if (!src->info.draw_vbo.draw.indirect) + dst->info.draw_vbo.draw.indirect = NULL; + else + dst->info.draw_vbo.draw.indirect = &dst->info.draw_vbo.indirect; break; case CALL_LAUNCH_GRID: pipe_resource_reference(&dst->info.launch_grid.indirect, @@ -1173,7 +1179,13 @@ dd_context_draw_vbo(struct pipe_context *_pipe, struct dd_call call; call.type = CALL_DRAW_VBO; - call.info.draw_vbo = *info; + call.info.draw_vbo.draw = *info; + if (info->indirect) { + call.info.draw_vbo.indirect = *info->indirect; + call.info.draw_vbo.draw.indirect = &call.info.draw_vbo.indirect; + } else { + memset(&call.info.draw_vbo.indirect, 0, sizeof(*info->indirect)); + } dd_before_draw(dctx); pipe->draw_vbo(pipe, info); diff --git a/src/gallium/drivers/ddebug/dd_pipe.h b/src/gallium/drivers/ddebug/dd_pipe.h index deae1f5bc3d..ea3319397a5 100644 --- a/src/gallium/drivers/ddebug/dd_pipe.h +++ b/src/gallium/drivers/ddebug/dd_pipe.h @@ -104,12 +104,17 @@ struct call_generate_mipmap { unsigned last_layer; }; +struct call_draw_info { + struct pipe_draw_info draw; + struct pipe_draw_indirect_info indirect; +}; + struct dd_call { enum call_type type; union { - struct pipe_draw_info draw_vbo; + struct call_draw_info draw_vbo; struct pipe_grid_info launch_grid; struct call_resource_copy_region resource_copy_region; struct pipe_blit_info blit; |