summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKarl Tomlinson <karlt+@karlt.net>2010-08-21 21:44:39 +1200
committerMichel Dänzer <michel@daenzer.net>2010-09-20 10:11:23 +0200
commitbfebe039af0c0282d04eb6234b6e6d1e02097146 (patch)
tree5ba21a600f5fdfb8647aa3db644ef0a662b63062 /src
parentb90cb61ccb0f4f80e0627141f223354a9371d47d (diff)
DownloadFromScreenCS: download via a scratch BO if pixmap domain is unknown
radeon_bo_is_busy() may return without setting the domain out-parameter. If this happens, then download via a scratch GTT BO to avoid CPU VRAM read.
Diffstat (limited to 'src')
-rw-r--r--src/r600_exa.c2
-rw-r--r--src/radeon_exa_funcs.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/src/r600_exa.c b/src/r600_exa.c
index d6e98ff7..9b7a0c98 100644
--- a/src/r600_exa.c
+++ b/src/r600_exa.c
@@ -1885,7 +1885,7 @@ R600DownloadFromScreenCS(PixmapPtr pSrc, int x, int y, int w,
if (!src_domain)
radeon_bo_is_busy(driver_priv->bo, &src_domain);
- if (src_domain != RADEON_GEM_DOMAIN_VRAM)
+ if (src_domain & ~(uint32_t)RADEON_GEM_DOMAIN_VRAM)
return FALSE;
size = scratch_pitch * h;
diff --git a/src/radeon_exa_funcs.c b/src/radeon_exa_funcs.c
index 2df6ccbd..a82e416c 100644
--- a/src/radeon_exa_funcs.c
+++ b/src/radeon_exa_funcs.c
@@ -598,7 +598,7 @@ RADEONDownloadFromScreenCS(PixmapPtr pSrc, int x, int y, int w,
if (!src_domain)
radeon_bo_is_busy(driver_priv->bo, &src_domain);
- if (src_domain != RADEON_GEM_DOMAIN_VRAM) {
+ if (src_domain & ~(uint32_t)RADEON_GEM_DOMAIN_VRAM) {
#if X_BYTE_ORDER == X_BIG_ENDIAN
/* Can't return FALSE here if we need to swap bytes */
if (swap != RADEON_HOST_DATA_SWAP_NONE) {