freedreno/a6xx: Avoid zero-init fd6_emit
A pretty significant amount of time spent in fd6_draw_vbo is calling
memset to zero init the on-stack struct. And a big part of the size
of the struct is fd6_state, of which we only need to initialize
num_groups to zero. This is worth a 15% improvement in drawoverhead
test 0 ("no state change").
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20572>
This commit is contained in:
@@ -140,29 +140,32 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
|
||||
{
|
||||
struct fd6_context *fd6_ctx = fd6_context(ctx);
|
||||
struct shader_info *gs_info = ir3_get_shader_info(ctx->prog.gs);
|
||||
struct fd6_emit emit = {
|
||||
.ctx = ctx,
|
||||
.info = info,
|
||||
.indirect = indirect,
|
||||
.draw = draw,
|
||||
.key = {
|
||||
struct fd6_emit emit;
|
||||
|
||||
emit.ctx = ctx;
|
||||
emit.info = info;
|
||||
emit.indirect = indirect;
|
||||
emit.draw = draw;
|
||||
emit.key = (struct ir3_cache_key){
|
||||
.vs = ctx->prog.vs,
|
||||
.gs = ctx->prog.gs,
|
||||
.fs = ctx->prog.fs,
|
||||
.key = {
|
||||
.rasterflat = ctx->rasterizer->flatshade,
|
||||
.ucp_enables = ctx->rasterizer->clip_plane_enable,
|
||||
.sample_shading = (ctx->min_samples > 1),
|
||||
.msaa = (ctx->framebuffer.samples > 1),
|
||||
.rasterflat = ctx->rasterizer->flatshade,
|
||||
.ucp_enables = ctx->rasterizer->clip_plane_enable,
|
||||
.sample_shading = (ctx->min_samples > 1),
|
||||
.msaa = (ctx->framebuffer.samples > 1),
|
||||
},
|
||||
.clip_plane_enable = ctx->rasterizer->clip_plane_enable,
|
||||
.patch_vertices = ctx->patch_vertices,
|
||||
},
|
||||
.rasterflat = ctx->rasterizer->flatshade,
|
||||
.sprite_coord_enable = ctx->rasterizer->sprite_coord_enable,
|
||||
.sprite_coord_mode = ctx->rasterizer->sprite_coord_mode,
|
||||
.primitive_restart = info->primitive_restart && info->index_size,
|
||||
};
|
||||
emit.rasterflat = ctx->rasterizer->flatshade;
|
||||
emit.sprite_coord_enable = ctx->rasterizer->sprite_coord_enable;
|
||||
emit.sprite_coord_mode = ctx->rasterizer->sprite_coord_mode;
|
||||
emit.primitive_restart = info->primitive_restart && info->index_size;
|
||||
emit.state.num_groups = 0;
|
||||
emit.streamout_mask = 0;
|
||||
emit.prog = NULL;
|
||||
|
||||
if (!(ctx->prog.vs && ctx->prog.fs))
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user