diff options
author | Marek Olšák <marek.olsak@amd.com> | 2017-08-04 17:10:58 +0200 |
---|---|---|
committer | Marek Olšák <marek.olsak@amd.com> | 2017-08-07 21:12:24 +0200 |
commit | e887c68bd23fa6e7421279286842f15746eb5e28 (patch) | |
tree | 5b0e74e48c5c0cde79aa41ef9da05b70171dd679 /src/gallium/drivers/radeonsi/si_hw_context.c | |
parent | a7b0014d1a809268e55483ccc2c66674847f4a6e (diff) |
radeonsi: add a separate dirty mask for prefetches
so that we don't rely on si_pm4_state_enabled_and_changed, allowing us
to move prefetches after draw calls.
v2: ckear the dirty mask after unbinding shaders
Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de> (v1)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> (v1)
Diffstat (limited to 'src/gallium/drivers/radeonsi/si_hw_context.c')
-rw-r--r-- | src/gallium/drivers/radeonsi/si_hw_context.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/gallium/drivers/radeonsi/si_hw_context.c b/src/gallium/drivers/radeonsi/si_hw_context.c index 756b15968d9..3582cd711b5 100644 --- a/src/gallium/drivers/radeonsi/si_hw_context.c +++ b/src/gallium/drivers/radeonsi/si_hw_context.c @@ -216,8 +216,20 @@ void si_begin_new_cs(struct si_context *ctx) if (ctx->ce_ib) si_ce_restore_all_descriptors_at_ib_start(ctx); - if (ctx->b.chip_class >= CIK) - ctx->prefetch_L2 = true; + if (ctx->queued.named.ls) + ctx->prefetch_L2_mask |= SI_PREFETCH_LS; + if (ctx->queued.named.hs) + ctx->prefetch_L2_mask |= SI_PREFETCH_HS; + if (ctx->queued.named.es) + ctx->prefetch_L2_mask |= SI_PREFETCH_ES; + if (ctx->queued.named.gs) + ctx->prefetch_L2_mask |= SI_PREFETCH_GS; + if (ctx->queued.named.vs) + ctx->prefetch_L2_mask |= SI_PREFETCH_VS; + if (ctx->queued.named.ps) + ctx->prefetch_L2_mask |= SI_PREFETCH_PS; + if (ctx->vertex_buffers.buffer) + ctx->prefetch_L2_mask |= SI_PREFETCH_VBO_DESCRIPTORS; /* CLEAR_STATE disables all colorbuffers, so only enable bound ones. */ ctx->framebuffer.dirty_cbufs = |