mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 01:50:10 +01:00
r600g: fix lockups with streamout on r7xx
This requires the latest streamout kernel patches. Streamout is disabled by default on r7xx, so this patch is safe for regular users. Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
f01594be0e
commit
cb4d1d377d
2 changed files with 15 additions and 0 deletions
|
|
@ -1331,6 +1331,7 @@ void r600_context_streamout_begin(struct r600_context *ctx)
|
|||
12 + /* flush_vgt_streamout */
|
||||
6 + /* set_streamout_enable */
|
||||
util_bitcount(buffer_en) * 7 + /* SET_CONTEXT_REG */
|
||||
(ctx->chip_class == R700 ? util_bitcount(buffer_en) * 5 : 0) + /* STRMOUT_BASE_UPDATE */
|
||||
util_bitcount(buffer_en & ctx->streamout_append_bitmask) * 8 + /* STRMOUT_BUFFER_UPDATE */
|
||||
util_bitcount(buffer_en & ~ctx->streamout_append_bitmask) * 6 + /* STRMOUT_BUFFER_UPDATE */
|
||||
(ctx->family > CHIP_R600 && ctx->family < CHIP_RV770 ? 2 : 0) + /* SURFACE_BASE_UPDATE */
|
||||
|
|
@ -1366,6 +1367,19 @@ void r600_context_streamout_begin(struct r600_context *ctx)
|
|||
r600_context_bo_reloc(ctx, r600_resource(t[i]->b.buffer),
|
||||
RADEON_USAGE_WRITE);
|
||||
|
||||
/* R7xx requires this packet after updating BUFFER_BASE.
|
||||
* Without this, R7xx locks up. */
|
||||
if (ctx->chip_class == R700) {
|
||||
cs->buf[cs->cdw++] = PKT3(PKT3_STRMOUT_BASE_UPDATE, 1, 0);
|
||||
cs->buf[cs->cdw++] = i;
|
||||
cs->buf[cs->cdw++] = va >> 8;
|
||||
|
||||
cs->buf[cs->cdw++] = PKT3(PKT3_NOP, 0, 0);
|
||||
cs->buf[cs->cdw++] =
|
||||
r600_context_bo_reloc(ctx, r600_resource(t[i]->b.buffer),
|
||||
RADEON_USAGE_WRITE);
|
||||
}
|
||||
|
||||
if (ctx->streamout_append_bitmask & (1 << i)) {
|
||||
va = r600_resource_va(&ctx->screen->screen,
|
||||
(void*)t[i]->filled_size);
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@
|
|||
#define PKT3_SET_RESOURCE 0x6D
|
||||
#define PKT3_SET_SAMPLER 0x6E
|
||||
#define PKT3_SET_CTL_CONST 0x6F
|
||||
#define PKT3_STRMOUT_BASE_UPDATE 0x72
|
||||
#define PKT3_SURFACE_BASE_UPDATE 0x73
|
||||
#define SURFACE_BASE_UPDATE_DEPTH (1 << 0)
|
||||
#define SURFACE_BASE_UPDATE_COLOR(x) (2 << (x))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue