mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 12:20:10 +01:00
freedreno/a3xx: only emit dirty consts
If app only updates (for example) vertex uniforms, it would be nice to only re-emit those and not also frag uniforms. Means we need to mark the first frag shader const buffer dirty after a clear. Signed-off-by: Rob Clark <robclark@freedesktop.org>
This commit is contained in:
parent
74069e324e
commit
94bb33617d
2 changed files with 9 additions and 5 deletions
|
|
@ -136,14 +136,21 @@ fd3_draw(struct fd_context *ctx, const struct pipe_draw_info *info)
|
|||
},
|
||||
.rasterflat = ctx->rasterizer && ctx->rasterizer->flatshade,
|
||||
};
|
||||
unsigned dirty;
|
||||
uint32_t dirty, vconst;
|
||||
|
||||
fixup_shader_state(ctx, &emit.key);
|
||||
|
||||
/* save/restore vertex const state too, so that vertex
|
||||
* shader consts also get emitted for render pass:
|
||||
*/
|
||||
vconst = ctx->constbuf[PIPE_SHADER_VERTEX].dirty_mask;
|
||||
|
||||
dirty = ctx->dirty;
|
||||
emit.dirty = dirty & ~(FD_DIRTY_BLEND);
|
||||
draw_impl(ctx, ctx->binning_ring, &emit);
|
||||
|
||||
ctx->constbuf[PIPE_SHADER_VERTEX].dirty_mask = vconst;
|
||||
|
||||
/* and now regular (non-binning) pass: */
|
||||
emit.key.binning_pass = false;
|
||||
emit.dirty = dirty;
|
||||
|
|
@ -312,6 +319,7 @@ fd3_clear(struct fd_context *ctx, unsigned buffers,
|
|||
|
||||
fd3_emit_vertex_bufs(ring, &emit);
|
||||
|
||||
ctx->constbuf[PIPE_SHADER_FRAGMENT].dirty_mask = ~0;
|
||||
fd3_emit_constant(ring, SB_FRAG_SHADER, 0, 0, 4, color->ui, NULL);
|
||||
|
||||
OUT_PKT0(ring, REG_A3XX_PC_PRIM_VTX_CNTL, 1);
|
||||
|
|
|
|||
|
|
@ -93,10 +93,6 @@ emit_constants(struct fd_ringbuffer *ring,
|
|||
uint32_t first_immediate;
|
||||
uint32_t base = 0;
|
||||
|
||||
// XXX TODO only emit dirty consts.. but we need to keep track if
|
||||
// they are clobbered by a clear, gmem2mem, or mem2gmem..
|
||||
constbuf->dirty_mask = enabled_mask;
|
||||
|
||||
/* in particular, with binning shader we may end up with unused
|
||||
* consts, ie. we could end up w/ constlen that is smaller
|
||||
* than first_immediate. In that case truncate the user consts
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue