summaryrefslogtreecommitdiffstats
path: root/gralloc_drm_kms.c
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2011-08-24 14:07:06 +0800
committerChia-I Wu <olvaffe@gmail.com>2011-08-24 14:52:40 +0800
commitdb29afe66e49efc4f28016154ca46541fd640359 (patch)
tree9032f4a3403eb39acc588aa550be0c8a1a2df028 /gralloc_drm_kms.c
parent64591d8f71b902b32d07122e91a1e1a3129dab61 (diff)
downloadexternal_drm_gralloc-db29afe66e49efc4f28016154ca46541fd640359.zip
external_drm_gralloc-db29afe66e49efc4f28016154ca46541fd640359.tar.gz
external_drm_gralloc-db29afe66e49efc4f28016154ca46541fd640359.tar.bz2
vmwgfx: assorted fixes
Based on trial and error, we know - drm_kms_wait_for_post() hangs the VM - drmModeDirtyFB() should be called whenever the front buffer changes - drmModePageFlip() is not supported They might not be entirely correct, but fixing them makes drm_gralloc work.
Diffstat (limited to 'gralloc_drm_kms.c')
-rw-r--r--gralloc_drm_kms.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gralloc_drm_kms.c b/gralloc_drm_kms.c
index 6b4a63d..9dc917b 100644
--- a/gralloc_drm_kms.c
+++ b/gralloc_drm_kms.c
@@ -85,10 +85,8 @@ static int drm_kms_set_crtc(struct gralloc_drm_t *drm, int fb_id)
return ret;
}
-#ifdef DRM_MODE_FEATURE_DIRTYFB
- if (drm->mode_dirty_fb)
+ if (drm->mode_quirk_vmwgfx)
ret = drmModeDirtyFB(drm->fd, fb_id, &drm->clip, 1);
-#endif
return ret;
}
@@ -150,6 +148,9 @@ static void drm_kms_wait_for_post(struct gralloc_drm_t *drm, int flip)
drmVBlank vbl;
int ret;
+ if (drm->mode_quirk_vmwgfx)
+ return;
+
flip = !!flip;
memset(&vbl, 0, sizeof(vbl));
@@ -257,6 +258,8 @@ int gralloc_drm_bo_post(struct gralloc_drm_bo_t *bo)
bo, 0, 0,
bo->handle->width,
bo->handle->height);
+ if (drm->mode_quirk_vmwgfx)
+ ret = drmModeDirtyFB(drm->fd, drm->current_front->fb_id, &drm->clip, 1);
ret = 0;
break;
case DRM_SWAP_SETCRTC: