mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-02-08 03:41:52 +08:00
drm_page_flip not used for drm with driver_ops
This commit is contained in:
@@ -949,12 +949,22 @@ static void drm_cleanup(DrmVideoData* vdata)
|
||||
|
||||
static void DRM_DeleteDevice(GAL_VideoDevice *device)
|
||||
{
|
||||
|
||||
if (device->hidden->real_screen) {
|
||||
/* FIXME */
|
||||
DrmSurfaceBuffer *surface_buffer =
|
||||
(DrmSurfaceBuffer *)device->hidden->real_screen->hwdata;
|
||||
if (surface_buffer && !device->hidden->driver) {
|
||||
drm_destroy_dumb_buffer(device->hidden, surface_buffer);
|
||||
device->hidden->real_screen->hwdata = NULL;
|
||||
}
|
||||
GAL_FreeSurface(device->hidden->real_screen);
|
||||
device->hidden->real_screen = NULL;
|
||||
}
|
||||
|
||||
drm_cleanup(device->hidden);
|
||||
|
||||
|
||||
if (device->hidden->dev_name)
|
||||
free (device->hidden->dev_name);
|
||||
|
||||
@@ -2748,8 +2758,14 @@ static void update_real_screen_helper(_THIS, const GAL_Rect *dirty_rect)
|
||||
}
|
||||
|
||||
/* Use the buffer that is not currently displayed as the target buffer */
|
||||
target_buff = (vdata->curr_buff == vdata->flip_buff) ?
|
||||
(DrmSurfaceBuffer *)vdata->real_screen->hwdata : vdata->flip_buff;
|
||||
if (vdata->flip_buff) {
|
||||
target_buff = (vdata->curr_buff == vdata->flip_buff)
|
||||
? (DrmSurfaceBuffer *)vdata->real_screen->hwdata
|
||||
: vdata->flip_buff;
|
||||
}
|
||||
else {
|
||||
target_buff = (DrmSurfaceBuffer *)vdata->real_screen->hwdata;
|
||||
}
|
||||
|
||||
shadow_buff = (DrmSurfaceBuffer *)vdata->shadow_screen->hwdata;
|
||||
|
||||
@@ -2857,18 +2873,18 @@ static void* task_do_update(void *data)
|
||||
update_real_screen_helper(this, &dirty_rect);
|
||||
|
||||
|
||||
/* Perform page flip */
|
||||
if (vdata->flip_buff) {
|
||||
drm_page_flip(vdata);
|
||||
if (1 == is_fd_readable(vdata->dev_fd)) {
|
||||
drmHandleEvent(vdata->dev_fd, &ev);
|
||||
}
|
||||
}
|
||||
/* Flush driver buffer if needed */
|
||||
if (vdata->driver && vdata->driver_ops->flush) {
|
||||
vdata->driver_ops->flush(vdata->driver,
|
||||
vdata->curr_buff, &dirty_rect);
|
||||
}
|
||||
/* Perform page flip */
|
||||
else if (vdata->flip_buff) {
|
||||
drm_page_flip(vdata);
|
||||
if (1 == is_fd_readable(vdata->dev_fd)) {
|
||||
drmHandleEvent(vdata->dev_fd, &ev);
|
||||
}
|
||||
}
|
||||
|
||||
SetRectEmpty(&vdata->update_rect);
|
||||
}
|
||||
@@ -4074,16 +4090,6 @@ static BOOL DRM_SyncUpdate(_THIS)
|
||||
|
||||
if (vdata->shadow_screen) {
|
||||
update_real_screen_helper(this, &dirty_rect);
|
||||
|
||||
/* Perform page flip */
|
||||
if (vdata->flip_buff) {
|
||||
drm_page_flip(vdata);
|
||||
if (1 == is_fd_readable(vdata->dev_fd)) {
|
||||
drmEventContext ev = {};
|
||||
ev.version = DRM_EVENT_CONTEXT_VERSION;
|
||||
drmHandleEvent(vdata->dev_fd, &ev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
refresh_cursor(this, &dirty_rect);
|
||||
@@ -4091,6 +4097,15 @@ static BOOL DRM_SyncUpdate(_THIS)
|
||||
if (vdata->driver && vdata->driver_ops->flush) {
|
||||
vdata->driver_ops->flush(vdata->driver, vdata->curr_buff, &dirty_rect);
|
||||
}
|
||||
else if (vdata->dirty_fb_ok && vdata->flip_buff) {
|
||||
/* Perform page flip */
|
||||
drm_page_flip(vdata);
|
||||
if (1 == is_fd_readable(vdata->dev_fd)) {
|
||||
drmEventContext ev = {};
|
||||
ev.version = DRM_EVENT_CONTEXT_VERSION;
|
||||
drmHandleEvent(vdata->dev_fd, &ev);
|
||||
}
|
||||
}
|
||||
|
||||
ret:
|
||||
if (vdata->dbl_buff && vdata->update_lock != SEM_FAILED) {
|
||||
|
||||
Reference in New Issue
Block a user