diff options
author | SooChan Lim <sc1.lim@samsung.com> | 2020-08-13 14:01:29 +0900 |
---|---|---|
committer | SooChan Lim <sc1.lim@samsung.com> | 2020-08-13 14:15:54 +0900 |
commit | ffe01e304f8c277b2df0267255fff0d18f084fb6 (patch) | |
tree | 28ab960186e32b1d0729d87133582ffe948f2b5e | |
parent | 3a2f2c9d40c75e625f2f703070d4269594fa94a5 (diff) | |
download | libtdm-sprd-ffe01e304f8c277b2df0267255fff0d18f084fb6.tar.gz libtdm-sprd-ffe01e304f8c277b2df0267255fff0d18f084fb6.tar.bz2 libtdm-sprd-ffe01e304f8c277b2df0267255fff0d18f084fb6.zip |
support the sync(block) mode for wait_vblank
Change-Id: I6b85fa9846f1d6e8585e68cf884cc62e8615f003
-rw-r--r-- | src/tdm_sprd.h | 2 | ||||
-rw-r--r-- | src/tdm_sprd_display.c | 18 | ||||
-rw-r--r-- | src/tdm_sprd_hwc.c | 2 |
3 files changed, 14 insertions, 8 deletions
diff --git a/src/tdm_sprd.h b/src/tdm_sprd.h index 1d1f482..96da47e 100644 --- a/src/tdm_sprd.h +++ b/src/tdm_sprd.h @@ -303,7 +303,7 @@ tdm_sprd_display_buffer *tdm_sprd_display_find_buffer(tdm_sprd_data *sprd_data, tdm_error tdm_sprd_output_do_commit(tdm_sprd_output_data *output_data); tdm_error tdm_sprd_output_get_cur_msc(int fd, int pipe, uint *msc); -tdm_error tdm_sprd_output_wait_vblank(int fd, int pipe, uint *target_msc, void *data); +tdm_error tdm_sprd_output_wait_vblank(int fd, int pipe, uint *target_msc, int sync, void *data); tdm_sprd_layer_data *sprd_output_data_get_layer_data(tdm_sprd_output_data *output_data, int layer_zpos); tdm_error sprd_layer_get_buffer(tdm_layer *layer, tbm_surface_h *surface); tdm_error sprd_layer_get_zpos(tdm_layer *layer, int *zpos); diff --git a/src/tdm_sprd_display.c b/src/tdm_sprd_display.c index 90b6393..d7ef6a9 100644 --- a/src/tdm_sprd_display.c +++ b/src/tdm_sprd_display.c @@ -161,16 +161,22 @@ tdm_sprd_output_get_cur_msc(int fd, int pipe, uint *msc) } tdm_error -tdm_sprd_output_wait_vblank(int fd, int pipe, uint *target_msc, void *data) +tdm_sprd_output_wait_vblank(int fd, int pipe, uint *target_msc, int sync, void *data) { drmVBlank vbl; - vbl.request.type = DRM_VBLANK_ABSOLUTE | DRM_VBLANK_EVENT; if (pipe > 0) vbl.request.type |= DRM_VBLANK_SECONDARY; - vbl.request.sequence = *target_msc; - vbl.request.signal = (unsigned long) (uintptr_t) data; + if (sync) { + vbl.request.type = DRM_VBLANK_RELATIVE; + vbl.request.sequence = 1; + vbl.request.signal = (unsigned long) (uintptr_t) data; + } else { + vbl.request.type = DRM_VBLANK_ABSOLUTE | DRM_VBLANK_EVENT; + vbl.request.sequence = *target_msc; + vbl.request.signal = (unsigned long) (uintptr_t) data; + } if (_localdrmWaitVBlank(fd, &vbl)) { *target_msc = 0; @@ -1092,7 +1098,7 @@ sprd_output_wait_vblank(tdm_output *output, int interval, int sync, void *user_d vblank_data->output_data = output_data; vblank_data->user_data = user_data; - ret = tdm_sprd_output_wait_vblank(sprd_data->drm_fd, output_data->pipe, &target_msc, vblank_data); + ret = tdm_sprd_output_wait_vblank(sprd_data->drm_fd, output_data->pipe, &target_msc, sync, vblank_data); if (ret != TDM_ERROR_NONE) goto failed_vblank; @@ -1147,7 +1153,7 @@ sprd_output_commit(tdm_output *output, int sync, void *user_data) vblank_data->output_data = output_data; vblank_data->user_data = user_data; - ret = tdm_sprd_output_wait_vblank(sprd_data->drm_fd, output_data->pipe, &target_msc, vblank_data); + ret = tdm_sprd_output_wait_vblank(sprd_data->drm_fd, output_data->pipe, &target_msc, sync, vblank_data); if (ret != TDM_ERROR_NONE) { free(vblank_data); return ret; diff --git a/src/tdm_sprd_hwc.c b/src/tdm_sprd_hwc.c index 48ea88d..03698cd 100644 --- a/src/tdm_sprd_hwc.c +++ b/src/tdm_sprd_hwc.c @@ -585,7 +585,7 @@ sprd_hwc_commit(tdm_hwc *hwc, int sync, void *user_data) vblank_data->output_data = output_data; vblank_data->user_data = user_data; - ret = tdm_sprd_output_wait_vblank(sprd_data->drm_fd, output_data->pipe, &target_msc, vblank_data); + ret = tdm_sprd_output_wait_vblank(sprd_data->drm_fd, output_data->pipe, &target_msc, sync, vblank_data); if (ret != TDM_ERROR_NONE) { free(vblank_data); return ret; |