mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 09:18:04 +02:00
r600g: fix streamout on RS780 and RS880
The latest kernel from git is required. Transform feedback (along with GL3.0)
is turned off on older kernels.
(cherry picked from commit d063c7b142)
This commit is contained in:
parent
7bcc228beb
commit
1106bbc7d6
2 changed files with 14 additions and 7 deletions
|
|
@ -1095,10 +1095,11 @@ 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 */
|
||||
(ctx->family >= CHIP_RS780 &&
|
||||
ctx->family <= CHIP_RV740 ? 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 */
|
||||
(ctx->family > CHIP_R600 && ctx->family < CHIP_RS780 ? 2 : 0) + /* SURFACE_BASE_UPDATE */
|
||||
ctx->num_cs_dw_streamout_end, TRUE);
|
||||
|
||||
if (ctx->chip_class >= EVERGREEN) {
|
||||
|
|
@ -1133,7 +1134,7 @@ void r600_context_streamout_begin(struct r600_context *ctx)
|
|||
|
||||
/* R7xx requires this packet after updating BUFFER_BASE.
|
||||
* Without this, R7xx locks up. */
|
||||
if (ctx->chip_class == R700) {
|
||||
if (ctx->family >= CHIP_RS780 && ctx->family <= CHIP_RV740) {
|
||||
cs->buf[cs->cdw++] = PKT3(PKT3_STRMOUT_BASE_UPDATE, 1, 0);
|
||||
cs->buf[cs->cdw++] = i;
|
||||
cs->buf[cs->cdw++] = va >> 8;
|
||||
|
|
@ -1173,7 +1174,7 @@ void r600_context_streamout_begin(struct r600_context *ctx)
|
|||
}
|
||||
}
|
||||
|
||||
if (ctx->family > CHIP_R600 && ctx->family < CHIP_RV770) {
|
||||
if (ctx->family > CHIP_R600 && ctx->family < CHIP_RS780) {
|
||||
cs->buf[cs->cdw++] = PKT3(PKT3_SURFACE_BASE_UPDATE, 0, 0);
|
||||
cs->buf[cs->cdw++] = update_flags;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -933,13 +933,19 @@ struct pipe_screen *r600_screen_create(struct radeon_winsys *ws)
|
|||
/* Figure out streamout kernel support. */
|
||||
switch (rscreen->chip_class) {
|
||||
case R600:
|
||||
case EVERGREEN:
|
||||
case CAYMAN:
|
||||
rscreen->has_streamout = rscreen->info.drm_minor >= 14;
|
||||
if (rscreen->family < CHIP_RS780) {
|
||||
rscreen->has_streamout = rscreen->info.drm_minor >= 14;
|
||||
} else {
|
||||
rscreen->has_streamout = rscreen->info.drm_minor >= 23;
|
||||
}
|
||||
break;
|
||||
case R700:
|
||||
rscreen->has_streamout = rscreen->info.drm_minor >= 17;
|
||||
break;
|
||||
case EVERGREEN:
|
||||
case CAYMAN:
|
||||
rscreen->has_streamout = rscreen->info.drm_minor >= 14;
|
||||
break;
|
||||
}
|
||||
|
||||
if (r600_init_tiling(rscreen)) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue