mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
r600: SMX returns CONTEXT_DONE early workaround
streamout, gs rings bug on certain r600s, requires a wait idle
before each surface sync.
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Cc: "10.6 11.0 11.1" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
(cherry picked from commit af4013d26b)
[Emil Velikov: s/radeon_set_config_reg/r600_write_config_reg/g ]
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
parent
837f316ec7
commit
b8e398d4eb
2 changed files with 13 additions and 1 deletions
|
|
@ -57,7 +57,7 @@
|
|||
|
||||
/* the number of CS dwords for flushing and drawing */
|
||||
#define R600_MAX_FLUSH_CS_DWORDS 16
|
||||
#define R600_MAX_DRAW_CS_DWORDS 49
|
||||
#define R600_MAX_DRAW_CS_DWORDS 52
|
||||
#define R600_TRACE_CS_DWORDS 7
|
||||
|
||||
#define R600_MAX_USER_CONST_BUFFERS 13
|
||||
|
|
|
|||
|
|
@ -1691,6 +1691,18 @@ static void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info
|
|||
(info.count_from_stream_output ? S_0287F0_USE_OPAQUE(1) : 0);
|
||||
}
|
||||
|
||||
/* SMX returns CONTEXT_DONE too early workaround */
|
||||
if (rctx->b.family == CHIP_R600 ||
|
||||
rctx->b.family == CHIP_RV610 ||
|
||||
rctx->b.family == CHIP_RV630 ||
|
||||
rctx->b.family == CHIP_RV635) {
|
||||
/* if we have gs shader or streamout
|
||||
we need to do a wait idle after every draw */
|
||||
if (rctx->gs_shader || rctx->b.streamout.streamout_enabled) {
|
||||
r600_write_config_reg(cs, R_008040_WAIT_UNTIL, S_008040_WAIT_3D_IDLE(1));
|
||||
}
|
||||
}
|
||||
|
||||
/* ES ring rolling over at EOP - workaround */
|
||||
if (rctx->b.chip_class == R600) {
|
||||
cs->buf[cs->cdw++] = PKT3(PKT3_EVENT_WRITE, 0, 0);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue