freedreno/a6xx: split VBO state into binning/draw variants

Blob seems to manage to use same input registers for BS (binning pass)
vs VS (draw pass) shaders, so it can use the same VBO state for both.
We can't quite do that yet, so split them.

Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
Rob Clark 2018-10-13 13:51:33 -04:00
parent b23fc4cacb
commit 3313d693af
2 changed files with 8 additions and 1 deletions

View File

@ -127,7 +127,11 @@ draw_impl(struct fd_context *ctx, struct fd_ringbuffer *ring,
struct fd_ringbuffer *state; struct fd_ringbuffer *state;
state = fd6_build_vbo_state(emit, emit->vs); state = fd6_build_vbo_state(emit, emit->vs);
fd6_emit_add_group(emit, state, FD6_GROUP_VBO, 0x7); fd6_emit_add_group(emit, state, FD6_GROUP_VBO, 0x6);
fd_ringbuffer_del(state);
state = fd6_build_vbo_state(emit, emit->bs);
fd6_emit_add_group(emit, state, FD6_GROUP_VBO_BINNING, 0x1);
fd_ringbuffer_del(state); fd_ringbuffer_del(state);
} }
@ -233,6 +237,7 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
fd6_ctx->prog = fd6_emit_get_prog(&emit); fd6_ctx->prog = fd6_emit_get_prog(&emit);
} }
emit.bs = fd6_emit_get_prog(&emit)->bs;
emit.vs = fd6_emit_get_prog(&emit)->vs; emit.vs = fd6_emit_get_prog(&emit)->vs;
emit.fs = fd6_emit_get_prog(&emit)->fs; emit.fs = fd6_emit_get_prog(&emit)->fs;

View File

@ -47,6 +47,7 @@ enum fd6_state_id {
FD6_GROUP_ZSA, FD6_GROUP_ZSA,
FD6_GROUP_ZSA_BINNING, FD6_GROUP_ZSA_BINNING,
FD6_GROUP_VBO, FD6_GROUP_VBO,
FD6_GROUP_VBO_BINNING,
FD6_GROUP_VS_CONST, FD6_GROUP_VS_CONST,
FD6_GROUP_FS_CONST, FD6_GROUP_FS_CONST,
FD6_GROUP_VS_TEX, FD6_GROUP_VS_TEX,
@ -82,6 +83,7 @@ struct fd6_emit {
/* cached to avoid repeated lookups: */ /* cached to avoid repeated lookups: */
const struct fd6_program_state *prog; const struct fd6_program_state *prog;
struct ir3_shader_variant *bs;
struct ir3_shader_variant *vs; struct ir3_shader_variant *vs;
struct ir3_shader_variant *fs; struct ir3_shader_variant *fs;