diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2013-02-22 17:04:43 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-02-22 18:23:46 -0500 |
commit | 8442b67f5f3aedbfdb4446164dd09d4eaeda4888 (patch) | |
tree | 89bd64e2115547c4af975e6fa269b274d2a368d1 | |
parent | 7ebf83f109db9dde89830d5844107c936cf42e4d (diff) |
r600g: r6xx deadlock workaround (v6)
Fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=50655
https://bugs.freedesktop.org/show_bug.cgi?id=47116
v2: flush along with workaround.
v3: just need a flush
v4: try WAIT_UNTIL
v5: switch to PS partial flush
v6: rework patch
Note: this is a candidate for the 9.1 branch.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | src/gallium/drivers/r600/r600_state_common.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c index c4bd758d796..1654233b756 100644 --- a/src/gallium/drivers/r600/r600_state_common.c +++ b/src/gallium/drivers/r600/r600_state_common.c | |||
@@ -1360,6 +1360,12 @@ static void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info | |||
1360 | rctx->vgt_state.atom.dirty = true; | 1360 | rctx->vgt_state.atom.dirty = true; |
1361 | } | 1361 | } |
1362 | 1362 | ||
1363 | /* Workaround for hardware deadlock on certain R600 ASICs: write into a CB register. */ | ||
1364 | if (rctx->chip_class == R600) { | ||
1365 | rctx->flags |= R600_CONTEXT_PS_PARTIAL_FLUSH; | ||
1366 | rctx->cb_misc_state.atom.dirty = true; | ||
1367 | } | ||
1368 | |||
1363 | /* Emit states. */ | 1369 | /* Emit states. */ |
1364 | r600_need_cs_space(rctx, ib.user_buffer ? 5 : 0, TRUE); | 1370 | r600_need_cs_space(rctx, ib.user_buffer ? 5 : 0, TRUE); |
1365 | r600_flush_emit(rctx); | 1371 | r600_flush_emit(rctx); |