mirror of
https://gitee.com/openharmony/third_party_mesa3d
synced 2024-11-27 09:31:03 +00:00
freedreno/a6xx: single cmdstream for draw+binning
Now that state which is different for draw vs binning pass is split out into different state-groups with appropriate enable_mask (so the appropriate one is chosen for draw vs binning), switch over to using a single cmdstream for both passes. This should significantly lower draw overhead for CPU bound benchmarks. Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
72f6164fef
commit
24d57a6d8f
@ -229,14 +229,13 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
|
||||
|
||||
fixup_shader_state(ctx, &emit.key.key);
|
||||
|
||||
unsigned dirty = ctx->dirty;
|
||||
|
||||
if (!(dirty & FD_DIRTY_PROG)) {
|
||||
if (!(ctx->dirty & FD_DIRTY_PROG)) {
|
||||
emit.prog = fd6_ctx->prog;
|
||||
} else {
|
||||
fd6_ctx->prog = fd6_emit_get_prog(&emit);
|
||||
}
|
||||
|
||||
emit.dirty = ctx->dirty; /* *after* fixup_shader_state() */
|
||||
emit.bs = fd6_emit_get_prog(&emit)->bs;
|
||||
emit.vs = fd6_emit_get_prog(&emit)->vs;
|
||||
emit.fs = fd6_emit_get_prog(&emit)->fs;
|
||||
@ -257,18 +256,8 @@ fd6_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
|
||||
*/
|
||||
emit.no_lrz_write = fp->writes_pos || fp->has_kill;
|
||||
|
||||
emit.binning_pass = false;
|
||||
emit.dirty = dirty;
|
||||
|
||||
draw_impl(ctx, ctx->batch->draw, &emit, index_offset);
|
||||
|
||||
/* and now binning pass: */
|
||||
emit.binning_pass = true;
|
||||
emit.dirty = dirty & ~(FD_DIRTY_BLEND);
|
||||
emit.vs = fd6_emit_get_prog(&emit)->bs;
|
||||
|
||||
draw_impl(ctx, ctx->batch->binning, &emit, index_offset);
|
||||
|
||||
if (emit.streamout_mask) {
|
||||
struct fd_ringbuffer *ring = ctx->batch->draw;
|
||||
|
||||
|
@ -66,7 +66,6 @@ struct fd6_emit {
|
||||
struct fd_context *ctx;
|
||||
const struct fd_vertex_state *vtx;
|
||||
const struct pipe_draw_info *info;
|
||||
bool binning_pass;
|
||||
struct ir3_cache_key key;
|
||||
enum fd_dirty_3d_state dirty;
|
||||
|
||||
|
@ -408,7 +408,7 @@ emit_binning_pass(struct fd_batch *batch)
|
||||
A6XX_SP_TP_WINDOW_OFFSET_Y(0));
|
||||
|
||||
/* emit IB to binning drawcmds: */
|
||||
ctx->emit_ib(ring, batch->binning);
|
||||
ctx->emit_ib(ring, batch->draw);
|
||||
|
||||
fd_reset_wfi(batch);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user