diff options
Diffstat (limited to 'src/radeon_kms.c')
-rw-r--r-- | src/radeon_kms.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/radeon_kms.c b/src/radeon_kms.c index c372661..deecdc9 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -88,6 +88,12 @@ void radeon_cs_flush_indirect(ScrnInfoPtr pScrn) info->accel_state->vbo.vb_start_op = -1; } + /* release the current VBO so we don't block on mapping it later */ + if (info->accel_state->cbuf.vb_offset && info->accel_state->cbuf.vb_bo) { + radeon_vbo_put(pScrn, &info->accel_state->cbuf); + info->accel_state->cbuf.vb_start_op = -1; + } + radeon_cs_emit(info->cs); radeon_cs_erase(info->cs); @@ -100,6 +106,14 @@ void radeon_cs_flush_indirect(ScrnInfoPtr pScrn) if (ret) ErrorF("space check failed in flush\n"); + if (accel_state->cbuf.vb_bo) { + ret = radeon_cs_space_check_with_bo(info->cs, + accel_state->cbuf.vb_bo, + RADEON_GEM_DOMAIN_GTT, 0); + if (ret) + ErrorF("space check failed in flush\n"); + } + if (info->reemit_current2d && info->state_2d.op) info->reemit_current2d(pScrn, info->state_2d.op); |