diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_draw.c b/src/gallium/drivers/freedreno/a6xx/fd6_draw.c index 829f9ddb3be..ab235b946f8 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_draw.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_draw.c @@ -142,9 +142,7 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info, struct shader_info *gs_info = ir3_get_shader_info(ctx->prog.gs); struct fd6_emit emit = { .ctx = ctx, - .vtx = &ctx->vtx, .info = info, - .drawid_offset = drawid_offset, .indirect = indirect, .draw = draw, .key = { @@ -207,10 +205,8 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info, fixup_draw_state(ctx, &emit); /* *after* fixup_shader_state(): */ - emit.dirty = ctx->dirty; emit.dirty_groups = ctx->gen_dirty; - emit.bs = fd6_emit_get_prog(&emit)->bs; emit.vs = fd6_emit_get_prog(&emit)->vs; emit.hs = fd6_emit_get_prog(&emit)->hs; emit.ds = fd6_emit_get_prog(&emit)->ds; diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_emit.c b/src/gallium/drivers/freedreno/a6xx/fd6_emit.c index 75424ace2b2..c07a4f87f72 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_emit.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_emit.c @@ -315,7 +315,7 @@ fd6_emit_combined_textures(struct fd6_emit *emit, static struct fd_ringbuffer * build_vbo_state(struct fd6_emit *emit) assert_dt { - const struct fd_vertex_state *vtx = emit->vtx; + const struct fd_vertex_state *vtx = &emit->ctx->vtx; /* Limit PKT4 size, because at max count (32) we would overflow the * size of the PKT4 size field: @@ -635,8 +635,7 @@ fd6_emit_streamout(struct fd_ringbuffer *ring, struct fd6_emit *emit) assert_dt const struct fd6_program_state *prog = fd6_emit_get_prog(emit); const struct ir3_stream_output_info *info = prog->stream_output; struct fd_streamout_stateobj *so = &ctx->streamout; - - emit->streamout_mask = 0; + unsigned streamout_mask = 0; if (!info) return; @@ -680,10 +679,10 @@ fd6_emit_streamout(struct fd_ringbuffer *ring, struct fd6_emit *emit) assert_dt so->reset &= ~(1 << i); - emit->streamout_mask |= (1 << i); + streamout_mask |= (1 << i); } - if (emit->streamout_mask) { + if (streamout_mask) { fd6_state_add_group(&emit->state, prog->streamout_stateobj, FD6_GROUP_SO); } else if (ctx->last.streamout_mask != 0) { /* If we transition from a draw with streamout to one without, turn @@ -710,7 +709,8 @@ fd6_emit_streamout(struct fd_ringbuffer *ring, struct fd6_emit *emit) assert_dt if (ctx->dirty & FD_DIRTY_STREAMOUT) fd_wfi(ctx->batch, ring); - ctx->last.streamout_mask = emit->streamout_mask; + ctx->last.streamout_mask = streamout_mask; + emit->streamout_mask = streamout_mask; } /** @@ -720,7 +720,7 @@ static void fd6_emit_non_ring(struct fd_ringbuffer *ring, struct fd6_emit *emit) assert_dt { struct fd_context *ctx = emit->ctx; - const enum fd_dirty_3d_state dirty = emit->dirty; + const enum fd_dirty_3d_state dirty = ctx->dirty; unsigned num_viewports = emit->prog->num_viewports; if (dirty & FD_DIRTY_STENCIL_REF) { diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_emit.h b/src/gallium/drivers/freedreno/a6xx/fd6_emit.h index 65060ba8898..02e21571fc0 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_emit.h +++ b/src/gallium/drivers/freedreno/a6xx/fd6_emit.h @@ -145,32 +145,27 @@ fd6_state_add_group(struct fd6_state *state, struct fd_ringbuffer *stateobj, /* grouped together emit-state for prog/vertex/state emit: */ struct fd6_emit { struct fd_context *ctx; - const struct fd_vertex_state *vtx; const struct pipe_draw_info *info; - unsigned drawid_offset; const struct pipe_draw_indirect_info *indirect; const struct pipe_draw_start_count_bias *draw; struct ir3_cache_key key; - enum fd_dirty_3d_state dirty; uint32_t dirty_groups; uint32_t sprite_coord_enable; /* bitmask */ - bool sprite_coord_mode; - bool rasterflat; - bool primitive_restart; + bool sprite_coord_mode : 1; + bool rasterflat : 1; + bool primitive_restart : 1; + uint8_t streamout_mask; /* cached to avoid repeated lookups: */ const struct fd6_program_state *prog; - struct ir3_shader_variant *bs; struct ir3_shader_variant *vs; struct ir3_shader_variant *hs; struct ir3_shader_variant *ds; struct ir3_shader_variant *gs; struct ir3_shader_variant *fs; - unsigned streamout_mask; - struct fd6_state state; };