diff -up plymouth-0.8.8/src/plugins/renderers/drm/ply-renderer-generic-driver.c.flush plymouth-0.8.8/src/plugins/renderers/drm/ply-renderer-generic-driver.c --- plymouth-0.8.8/src/plugins/renderers/drm/ply-renderer-generic-driver.c.flush 2012-09-27 02:50:53.000000000 +1000 +++ plymouth-0.8.8/src/plugins/renderers/drm/ply-renderer-generic-driver.c 2013-03-15 10:57:33.000000000 +1000 @@ -70,6 +70,7 @@ struct _ply_renderer_buffer struct _ply_renderer_driver { int device_fd; + int need_flushes; ply_hashtable_t *buffers; }; @@ -123,7 +124,7 @@ create_driver (int device_fd) driver = calloc (1, sizeof (ply_renderer_driver_t)); driver->device_fd = device_fd; - + driver->need_flushes = 1; driver->buffers = ply_hashtable_new (ply_hashtable_direct_hash, ply_hashtable_direct_compare); @@ -326,10 +327,23 @@ end_flush (ply_renderer_driver_t *driver uint32_t buffer_id) { ply_renderer_buffer_t *buffer; + struct drm_clip_rect clip; buffer = get_buffer_from_id (driver, buffer_id); - assert (buffer != NULL); + + if (driver->need_flushes) { + int ret; + clip.x1 = 0; + clip.y1 = 0; + clip.x2 = buffer->width; + clip.y2 = buffer->height; + + ret = drmModeDirtyFB(driver->device_fd, buffer->id, + &clip, 1); + if (ret == -ENOSYS) + driver->need_flushes = 0; + } } static void