From db29afe66e49efc4f28016154ca46541fd640359 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Wed, 24 Aug 2011 14:07:06 +0800 Subject: 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. --- gralloc_drm_kms.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'gralloc_drm_kms.c') 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: -- cgit v1.1