summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/evergreen_exa.c5
-rw-r--r--src/r600_exa.c5
-rw-r--r--src/radeon_exa_funcs.c5
3 files changed, 9 insertions, 6 deletions
diff --git a/src/evergreen_exa.c b/src/evergreen_exa.c
index abb5076f..d788bfc7 100644
--- a/src/evergreen_exa.c
+++ b/src/evergreen_exa.c
@@ -1658,13 +1658,14 @@ EVERGREENUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h,
if (!driver_priv || !driver_priv->bo)
return FALSE;
- /* If we know the BO won't be busy, don't bother with a scratch */
+ /* If we know the BO won't be busy / in VRAM, don't bother with a scratch */
copy_dst = driver_priv->bo;
copy_pitch = pDst->devKind;
if (!(driver_priv->tiling_flags & (RADEON_TILING_MACRO | RADEON_TILING_MICRO))) {
if (!radeon_bo_is_referenced_by_cs(driver_priv->bo, info->cs)) {
flush = FALSE;
- if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain))
+ if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain) &&
+ !(dst_domain & RADEON_GEM_DOMAIN_VRAM))
goto copy;
}
}
diff --git a/src/r600_exa.c b/src/r600_exa.c
index a354ccd0..8d11ce71 100644
--- a/src/r600_exa.c
+++ b/src/r600_exa.c
@@ -1538,13 +1538,14 @@ R600UploadToScreenCS(PixmapPtr pDst, int x, int y, int w, int h,
if (!driver_priv || !driver_priv->bo)
return FALSE;
- /* If we know the BO won't be busy, don't bother with a scratch */
+ /* If we know the BO won't be busy / in VRAM, don't bother with a scratch */
copy_dst = driver_priv->bo;
copy_pitch = pDst->devKind;
if (!(driver_priv->tiling_flags & (RADEON_TILING_MACRO | RADEON_TILING_MICRO))) {
if (!radeon_bo_is_referenced_by_cs(driver_priv->bo, info->cs)) {
flush = FALSE;
- if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain))
+ if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain) &&
+ !(dst_domain & RADEON_GEM_DOMAIN_VRAM))
goto copy;
}
/* use cpu copy for fast fb access */
diff --git a/src/radeon_exa_funcs.c b/src/radeon_exa_funcs.c
index d9340c5f..d9013057 100644
--- a/src/radeon_exa_funcs.c
+++ b/src/radeon_exa_funcs.c
@@ -403,13 +403,14 @@ RADEONUploadToScreenCS(PixmapPtr pDst, int x, int y, int w, int h,
}
#endif
- /* If we know the BO won't be busy, don't bother with a scratch */
+ /* If we know the BO won't be busy / in VRAM, don't bother with a scratch */
copy_dst = driver_priv->bo;
copy_pitch = pDst->devKind;
if (!(driver_priv->tiling_flags & (RADEON_TILING_MACRO | RADEON_TILING_MICRO))) {
if (!radeon_bo_is_referenced_by_cs(driver_priv->bo, info->cs)) {
flush = FALSE;
- if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain))
+ if (!radeon_bo_is_busy(driver_priv->bo, &dst_domain) &&
+ !(dst_domain & RADEON_GEM_DOMAIN_VRAM))
goto copy;
}
/* use cpu copy for fast fb access */