From 072feea138c6d18e5f67fd13f3de811a61441390 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Wed, 29 Jan 2020 14:50:48 +0900 Subject: [PATCH 01/16] package version up to 2.10.3 Change-Id: I6a2b27980be20b7c2ddaff8226bac5201b9eb339 Signed-off-by: Junkyeong Kim --- packaging/libtdm.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/libtdm.spec b/packaging/libtdm.spec index fb2a9ea..6350362 100644 --- a/packaging/libtdm.spec +++ b/packaging/libtdm.spec @@ -2,7 +2,7 @@ %define HALTESTS_GCOV 0 Name: libtdm -Version: 2.10.2 +Version: 2.10.3 Release: 0 Summary: User Library of Tizen Display Manager Group: Development/Libraries -- 2.7.4 From 6556acfea218c79c73c51973f41c981ae538d219 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Fri, 31 Jan 2020 15:51:16 +0900 Subject: [PATCH 02/16] tool: change copy length Change-Id: Ie455205297df6ed31c79bd3c0ad276c2c842d9f3 Signed-off-by: Junkyeong Kim --- tools/tdm_test_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tdm_test_server.c b/tools/tdm_test_server.c index 45671ea..3eaf916 100644 --- a/tools/tdm_test_server.c +++ b/tools/tdm_test_server.c @@ -477,7 +477,7 @@ parse_arg_w(tdm_test_server_prop *w, char *arg) { char *end; TDM_EXIT_IF_FAIL(arg != NULL); - end = strtostr(w->name, TDM_PATH_LEN, arg, TDM_DELIM); + end = strtostr(w->name, TDM_NAME_LEN, arg, TDM_DELIM); TDM_EXIT_IF_FAIL(*end == ':'); arg = end + 1; w->value.u32 = strtol(arg, &end, 10); -- 2.7.4 From 1b7ce67e473517578e9c78b4afe05fb0bf2a8361 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Fri, 31 Jan 2020 16:55:45 +0900 Subject: [PATCH 03/16] tdm_helper: change format setting sequence Change-Id: Ic5e60219f2f7800948ea722f383f975088197ef6 Signed-off-by: Junkyeong Kim --- src/tdm_helper.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/tdm_helper.c b/src/tdm_helper.c index 5fe5403..696fc58 100644 --- a/src/tdm_helper.c +++ b/src/tdm_helper.c @@ -873,7 +873,6 @@ _tdm_helper_get_backend_information(tdm_private_module *private_module, char *re tdm_info_layer info; unsigned int format; tdm_size size; - tbm_surface_info_s buf_info; TDM_DBG_RETURN_VAL_IF_FAIL(func_layer->layer_get_info, reply); memset(&info, 0, sizeof info); @@ -883,14 +882,13 @@ _tdm_helper_get_backend_information(tdm_private_module *private_module, char *re if (!private_layer->showing_buffer) continue; - format = tbm_surface_get_format(private_layer->showing_buffer->buffer); - tbm_surface_get_info(private_layer->showing_buffer->buffer, &buf_info); - size.h = tbm_surface_get_width(private_layer->showing_buffer->buffer); size.v = tbm_surface_get_height(private_layer->showing_buffer->buffer); if (info.src_config.format) - format = (info.src_config.format) ? : format; + format = info.src_config.format; + else + format = tbm_surface_get_format(private_layer->showing_buffer->buffer); TDM_SNPRINTF(reply, len, "%d %d %d %p %c%c%c%c %ux%u %ux%u+%u+%u %ux%u+%u+%u %s\n", private_layer->index, -- 2.7.4 From 856926dc88a3fcd8a0f3a578a82bcbba3564ff64 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Fri, 31 Jan 2020 17:26:45 +0900 Subject: [PATCH 04/16] package version up to 2.10.4 Change-Id: I62cad3189397bbc39ff7a26c1b63327934f7da55 Signed-off-by: Junkyeong Kim --- packaging/libtdm.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/libtdm.spec b/packaging/libtdm.spec index 6350362..536fadc 100644 --- a/packaging/libtdm.spec +++ b/packaging/libtdm.spec @@ -2,7 +2,7 @@ %define HALTESTS_GCOV 0 Name: libtdm -Version: 2.10.3 +Version: 2.10.4 Release: 0 Summary: User Library of Tizen Display Manager Group: Development/Libraries -- 2.7.4 From 38e70de1930d700b74e46e8c86c57c6e98e23f12 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Wed, 19 Feb 2020 16:46:04 +0900 Subject: [PATCH 05/16] tdm_backend: add pp capability member add vertical preferred align capability. Change-Id: I6df474e55645896c18a62632d670fabee33b6515 Signed-off-by: Junkyeong Kim --- include/tdm_backend.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/include/tdm_backend.h b/include/tdm_backend.h index f8ddd85..683eed6 100644 --- a/include/tdm_backend.h +++ b/include/tdm_backend.h @@ -167,11 +167,12 @@ typedef struct _tdm_caps_pp { tbm_format *formats; /**< The @b newly-allocated array. will be freed in frontend. */ - int min_w; /**< The minimun width */ - int min_h; /**< The minimun height */ - int max_w; /**< The maximum width */ - int max_h; /**< The maximum height */ - int preferred_align; /**< The prefered align */ + int min_w; /**< The minimun width */ + int min_h; /**< The minimun height */ + int max_w; /**< The maximum width */ + int max_h; /**< The maximum height */ + int preferred_align; /**< The prefered align */ + int preferred_align_vertical; /**< The prefered align vertical */ /**< The attach count which a PP object can handle. @since 1.2.0 */ int max_attach_count; -- 2.7.4 From 456043316bb5232f96f21bb1b685ace9196ed421 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Wed, 19 Feb 2020 17:03:49 +0900 Subject: [PATCH 06/16] tdm: execute memset before getting pp capability Change-Id: Ia4d298a3d0d3d978badce79300ee7420699f13a6 Signed-off-by: Junkyeong Kim --- src/tdm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/tdm.c b/src/tdm.c index 76c1c5e..dc66bbf 100644 --- a/src/tdm.c +++ b/src/tdm.c @@ -404,6 +404,8 @@ _tdm_display_update_caps_pp(tdm_private_module *private_module, tdm_caps_pp *cap return TDM_ERROR_BAD_MODULE; } + memset(caps, 0, sizeof(tdm_caps_pp)); + ret = func_display->display_get_pp_capability(private_module->bdata, caps); if (ret != TDM_ERROR_NONE) { TDM_ERR("backend(%s) display_get_pp_capability() failed", private_module->module_data->name); -- 2.7.4 From 1cb788d07421cbebd057aa18d2c5533a7be80352 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Wed, 19 Feb 2020 20:32:41 +0900 Subject: [PATCH 07/16] tdm_display: add tdm_display_get_pp_preferred_align_vertical api Change-Id: Ibb83649d8f5811846995f572a922d1c6cd0ae2da Signed-off-by: Junkyeong Kim --- include/tdm.h | 11 +++++++++++ src/tdm_display.c | 27 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/include/tdm.h b/include/tdm.h index c334b20..685c4ec 100644 --- a/include/tdm.h +++ b/include/tdm.h @@ -150,6 +150,17 @@ tdm_display_get_pp_available_size(tdm_display *dpy, int *min_w, int *min_h, int *max_w, int *max_h, int *preferred_align); /** + * @brief Get the pp vertical preferred align of a display object. + * @details -1 means that a TDM backend module doesn't define the value. + * @param[in] dpy A display object + * @param[out] preferred_align_vertical The preferred align height which TDM can handle + * @return #TDM_ERROR_NONE if success. Otherwise, error value. + */ +tdm_error +tdm_display_get_pp_preferred_align_vertical(tdm_display *dpy, int *preferred_align_vertical); + + +/** * @brief Get the capture capabilities of a display object. * @param[in] dpy A display object * @param[out] capabilities The capture capabilities diff --git a/src/tdm_display.c b/src/tdm_display.c index 814e60c..4deea99 100644 --- a/src/tdm_display.c +++ b/src/tdm_display.c @@ -587,6 +587,33 @@ tdm_display_get_pp_available_size(tdm_display *dpy, int *min_w, int *min_h, } EXTERN tdm_error +tdm_display_get_pp_preferred_align_vertical(tdm_display *dpy, int *preferred_align_vertical) +{ + tdm_private_module *pp_module; + + DISPLAY_FUNC_ENTRY(); + + _pthread_mutex_lock(&private_display->lock); + + if (!private_display->pp_module) { + /* LCOV_EXCL_START */ + TDM_ERR("no pp capability"); + _pthread_mutex_unlock(&private_display->lock); + return TDM_ERROR_NO_CAPABILITY; + /* LCOV_EXCL_STOP */ + } + + pp_module = private_display->pp_module; + + if (preferred_align_vertical) + *preferred_align_vertical = TDM_FRONT_VALUE(pp_module->caps_pp.preferred_align_vertical); + + _pthread_mutex_unlock(&private_display->lock); + + return ret; +} + +EXTERN tdm_error tdm_display_get_capture_capabilities(tdm_display *dpy, tdm_capture_capability *capabilities) { -- 2.7.4 From 906b15e5a68515d6aa21a1f91a3a5c8c7f311382 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Thu, 20 Feb 2020 11:29:25 +0900 Subject: [PATCH 08/16] package version up to 2.10.5 Change-Id: I12be6b87482b8c35d44280af3709ab82cef52396 Signed-off-by: Junkyeong Kim --- packaging/libtdm.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/libtdm.spec b/packaging/libtdm.spec index 536fadc..44fe6a8 100644 --- a/packaging/libtdm.spec +++ b/packaging/libtdm.spec @@ -2,7 +2,7 @@ %define HALTESTS_GCOV 0 Name: libtdm -Version: 2.10.4 +Version: 2.10.5 Release: 0 Summary: User Library of Tizen Display Manager Group: Development/Libraries -- 2.7.4 From 72b9bea808eb5939bf0e42f9f920b491e6c124d7 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Thu, 13 Feb 2020 20:11:57 +0900 Subject: [PATCH 09/16] tdm_backend: add voutput backend api for setting hwc target buffer queue flag Change-Id: I1678b56032a3c5794abe097460e77f6a6c38a1fc Signed-off-by: Junkyeong Kim --- include/tdm_backend.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/include/tdm_backend.h b/include/tdm_backend.h index 683eed6..8d6bba9 100644 --- a/include/tdm_backend.h +++ b/include/tdm_backend.h @@ -673,7 +673,16 @@ typedef struct _tdm_func_voutput { */ tdm_error (*voutput_commit_done)(tdm_voutput *voutput); - void (*reserved1)(void); + /** + * @brief Set target buffer queue flag of a virtual output's hwc object + * @param[in] voutput A voutput object + * @param[in] flags Flags of target buffer queue + * @return #TDM_ERROR_NONE if success. Otherwise, error value. + * @remark + * A backend module doesn't need to implement this function if doesn't support virtual output. + */ + tdm_error (*voutput_set_target_buffer_queue_flag)(tdm_voutput *voutput, int flags); + void (*reserved2)(void); void (*reserved3)(void); void (*reserved4)(void); -- 2.7.4 From 7a7d1c8cab025ba55a7fa7eaed457822b94f25ca Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Tue, 25 Feb 2020 15:27:29 +0900 Subject: [PATCH 10/16] tdm_virtual: implementation for voutput_set_target_buffer_queue_flag Change-Id: I9d9aa4d9b4ceb9defc7ba38d5bd24287bc7f37da Signed-off-by: Junkyeong Kim --- backends/virtual/tdm_virtual.c | 1 + backends/virtual/tdm_virtual.h | 3 +++ backends/virtual/tdm_virtual_display.c | 14 ++++++++++++++ 3 files changed, 18 insertions(+) diff --git a/backends/virtual/tdm_virtual.c b/backends/virtual/tdm_virtual.c index dd64ae7..4b65e55 100644 --- a/backends/virtual/tdm_virtual.c +++ b/backends/virtual/tdm_virtual.c @@ -128,6 +128,7 @@ tdm_virtual_init(tdm_display *dpy, tdm_error *error) virtual_func_voutput.voutput_get_output = virtual_voutput_get_output; virtual_func_voutput.voutput_set_commit_func = virtual_voutput_set_commit_func; virtual_func_voutput.voutput_commit_done = virtual_voutput_commit_done; + virtual_func_voutput.voutput_set_target_buffer_queue_flag = virtual_voutput_set_target_buffer_queue_flag; memset(&virtual_func_layer, 0, sizeof(virtual_func_layer)); virtual_func_layer.layer_get_capability = virtual_layer_get_capability; diff --git a/backends/virtual/tdm_virtual.h b/backends/virtual/tdm_virtual.h index cc36d58..efc21c6 100644 --- a/backends/virtual/tdm_virtual.h +++ b/backends/virtual/tdm_virtual.h @@ -51,6 +51,7 @@ tdm_error virtual_voutput_destroy(tdm_voutput *voutput); tdm_output *virtual_voutput_get_output(tdm_voutput *voutput, tdm_error *error); tdm_error virtual_voutput_set_commit_func(tdm_voutput *voutput, tdm_voutput_commit_handler commit_func); tdm_error virtual_voutput_commit_done(tdm_voutput *voutput); +tdm_error virtual_voutput_set_target_buffer_queue_flag(tdm_voutput *voutput, int flag); tdm_hwc *virtual_output_get_hwc(tdm_output *output, tdm_error *error); tdm_hwc_window *virtual_hwc_create_window(tdm_hwc *hwc, tdm_error *error); @@ -216,6 +217,8 @@ struct _tdm_virtual_voutput_data { unsigned int mmwidth; unsigned int mmheight; + + int target_buffer_queue_flag; }; struct _tdm_virtual_layer_data { diff --git a/backends/virtual/tdm_virtual_display.c b/backends/virtual/tdm_virtual_display.c index 89f0769..03d0c0e 100644 --- a/backends/virtual/tdm_virtual_display.c +++ b/backends/virtual/tdm_virtual_display.c @@ -810,6 +810,8 @@ virtual_display_voutput_create(tdm_backend_data *bdata, const char *name, tdm_er voutput_data->mmwidth = 10; voutput_data->mmheight = 10; + voutput_data->target_buffer_queue_flag = TBM_BO_SCANOUT; + voutput_data->virtual_data = virtual_data; output_data = calloc(1, sizeof(tdm_virtual_output_data)); @@ -993,6 +995,18 @@ virtual_voutput_commit_done(tdm_voutput *voutput) return TDM_ERROR_NONE; } +tdm_error +virtual_voutput_set_target_buffer_queue_flag(tdm_voutput *voutput, int flag) +{ + tdm_virtual_voutput_data *voutput_data = voutput; + + RETURN_VAL_IF_FAIL(voutput_data, TDM_ERROR_INVALID_PARAMETER); + + voutput_data->target_buffer_queue_flag = flag; + + return TDM_ERROR_NONE; +} + tdm_virtual_layer_data * virtual_output_data_get_layer_data(tdm_virtual_output_data *output_data, int layer_zpos) { -- 2.7.4 From 2c7f0038481d3f631b41935388c9aee01a140e1f Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Tue, 25 Feb 2020 15:30:04 +0900 Subject: [PATCH 11/16] tdm_virtual: use target_buffer_queue_flag to make voutput buffer queue Change-Id: Icac49125d90f5e346bd6e2ada9249f32c9fe19a1 Signed-off-by: Junkyeong Kim --- backends/virtual/tdm_virtual_hwc.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/backends/virtual/tdm_virtual_hwc.c b/backends/virtual/tdm_virtual_hwc.c index cd72e5c..91f5641 100644 --- a/backends/virtual/tdm_virtual_hwc.c +++ b/backends/virtual/tdm_virtual_hwc.c @@ -71,7 +71,7 @@ _print_validate_result(tdm_virtual_hwc_data *hwc_data, tdm_hwc_window **composit } static tbm_surface_queue_h -_virtual_hwc_window_get_tbm_buffer_queue(tdm_hwc_window *hwc_window, tdm_error *error) +_virtual_hwc_window_get_tbm_buffer_queue(tdm_hwc_window *hwc_window, tdm_error *error, int flags) { tdm_virtual_hwc_window_data *hwc_window_data = NULL; tbm_surface_queue_h tqueue = NULL; @@ -89,7 +89,7 @@ _virtual_hwc_window_get_tbm_buffer_queue(tdm_hwc_window *hwc_window, tdm_error * height = hwc_window_data->info.src_config.size.v; format = hwc_window_data->info.src_config.format; - tqueue = tbm_surface_queue_create(NUM_BUFFERS, width, height, format, TBM_BO_SCANOUT); + tqueue = tbm_surface_queue_create(NUM_BUFFERS, width, height, format, flags); if (error) *error = TDM_ERROR_OPERATION_FAILED; RETURN_VAL_IF_FAIL(tqueue != NULL, NULL); @@ -307,6 +307,8 @@ tbm_surface_queue_h virtual_hwc_get_client_target_buffer_queue(tdm_hwc *hwc, tdm_error *error) { tdm_virtual_hwc_data *hwc_data = hwc; + tdm_virtual_output_data *output_data = NULL; + tdm_virtual_voutput_data *voutput_data = NULL; tbm_surface_queue_h tqueue = NULL; if (error) @@ -314,13 +316,19 @@ virtual_hwc_get_client_target_buffer_queue(tdm_hwc *hwc, tdm_error *error) RETURN_VAL_IF_FAIL(hwc_data != NULL, NULL); + output_data = hwc_data->output_data; + RETURN_VAL_IF_FAIL(output_data != NULL, NULL); + + voutput_data = output_data->voutput_data; + RETURN_VAL_IF_FAIL(voutput_data != NULL, NULL); + if (hwc_data->target_hwc_window == NULL) { if (error) *error = TDM_ERROR_OPERATION_FAILED; return NULL; } - tqueue = _virtual_hwc_window_get_tbm_buffer_queue(hwc_data->target_hwc_window, error); + tqueue = _virtual_hwc_window_get_tbm_buffer_queue(hwc_data->target_hwc_window, error, voutput_data->target_buffer_queue_flag); RETURN_VAL_IF_FAIL(tqueue, NULL); if (error) -- 2.7.4 From f4b58df4fec43abaa081f3f39a11d9cba1900777 Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Thu, 13 Feb 2020 20:42:48 +0900 Subject: [PATCH 12/16] tdm_virtual: use tdm.ini flag to select virtual hwc target buffer bo type use virtual_output_hwc_target_bo_default flag. if set to 1, use TBM_BO_DEFAULT flag to make hwc target buffer queue. if set to 0 or not defined, use TBM_BO_SCANOUT flag. Change-Id: I3b6a9fca456f49cbe67bebab9ad614336f35552f Signed-off-by: Junkyeong Kim --- src/tdm.c | 5 +++++ src/tdm_config.h | 6 ++++++ src/tdm_display.c | 7 +++++++ src/tdm_private_types.h | 3 +++ 4 files changed, 21 insertions(+) diff --git a/src/tdm.c b/src/tdm.c index dc66bbf..6375b53 100644 --- a/src/tdm.c +++ b/src/tdm.c @@ -771,6 +771,7 @@ _tdm_display_setup(tdm_private_display *private_display) tdm_error ret = TDM_ERROR_NONE; int output_count = 0; int virtual = 0; + int virtual_hwc_target_buffer_bo_default = 0; if (private_display->pp_module) { ret = _tdm_display_update_caps_pp(private_display->pp_module, @@ -836,6 +837,10 @@ _tdm_display_setup(tdm_private_display *private_display) ret = _tdm_display_load_module_with_file(private_display, TDM_VIRTUAL_MODULE); TDM_GOTO_IF_FAIL(ret == TDM_ERROR_NONE, failed_update); TDM_GOTO_IF_FAIL(private_display->virtual_module != NULL, failed_update); + + virtual_hwc_target_buffer_bo_default = tdm_config_get_int(TDM_CONFIG_KEY_GENERAL_VIRTUAL_OUTPUT_HWC_TARGET_BO_DEFAULT, 0); + if (virtual_hwc_target_buffer_bo_default) + private_display->virtual_module->use_default_type_bo = 1; } return TDM_ERROR_NONE; diff --git a/src/tdm_config.h b/src/tdm_config.h index a9ed0fd..39563a1 100644 --- a/src/tdm_config.h +++ b/src/tdm_config.h @@ -120,6 +120,12 @@ tdm_config_set_string(const char *key, const char *value); */ #define TDM_CONFIG_KEY_GENERAL_VIRTUAL_OUTPUT "general:virtual_output" +/* set the tdm virtual output hwc target buffer bo to default. [0(unset), 1(set)] + * default: 0 + * ex) 1 + */ +#define TDM_CONFIG_KEY_GENERAL_VIRTUAL_OUTPUT_HWC_TARGET_BO_DEFAULT "general:virtual_output_hwc_target_bo_default" + /*** debug keys **************************************************************/ diff --git a/src/tdm_display.c b/src/tdm_display.c index 4deea99..e6c6df8 100644 --- a/src/tdm_display.c +++ b/src/tdm_display.c @@ -1081,6 +1081,13 @@ tdm_display_voutput_create(tdm_display *dpy, const char *name, tdm_error *error) return NULL; } + if (func_voutput->voutput_set_target_buffer_queue_flag) { + if (private_module->use_default_type_bo == 1) + func_voutput->voutput_set_target_buffer_queue_flag(voutput_backend, TBM_BO_DEFAULT); + else + func_voutput->voutput_set_target_buffer_queue_flag(voutput_backend, TBM_BO_SCANOUT); + } + ret = tdm_display_update_output(private_display->current_module, output_backend); if (ret != TDM_ERROR_NONE) { TDM_ERR("tdm_display_update_output fail"); diff --git a/src/tdm_private_types.h b/src/tdm_private_types.h index bbc83cd..289033f 100644 --- a/src/tdm_private_types.h +++ b/src/tdm_private_types.h @@ -157,6 +157,9 @@ struct _tdm_private_module { int fd; tdm_event_loop_source *event_source; + + /* backend virtual output target buffer type default set for hwc */ + int use_default_type_bo; }; struct _tdm_private_display { -- 2.7.4 From 4d73298c2fe1eddcc05393f318a87cf0ecfe06ee Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Thu, 27 Feb 2020 14:18:08 +0900 Subject: [PATCH 13/16] tdm_server: erase unnecessary buffer ref Change-Id: I2e30e7d04130cb03c154e152c9a60e444bf35867 Signed-off-by: Junkyeong Kim --- src/tdm_server.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/tdm_server.c b/src/tdm_server.c index 2343d8d..a54e482 100644 --- a/src/tdm_server.c +++ b/src/tdm_server.c @@ -1223,7 +1223,6 @@ tdm_voutput_attach_buffer(tdm_voutput *voutput, tbm_surface_h buffer) voutput_info->attach_buffer = voutput_buffer; - tbm_surface_internal_ref(buffer); wl_tdm_voutput_send_attach_buffer(voutput_info->resource, voutput_buffer->wl_buffer); return TDM_ERROR_NONE; -- 2.7.4 From 8128cadec763fe87289d47c25db088bb3955e1fe Mon Sep 17 00:00:00 2001 From: Junkyeong Kim Date: Thu, 27 Feb 2020 14:20:26 +0900 Subject: [PATCH 14/16] package version up to 2.10.6 Change-Id: Id32fcf09dc451d6d2c0bf82bba45ddcfa64ff87d Signed-off-by: Junkyeong Kim --- packaging/libtdm.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/libtdm.spec b/packaging/libtdm.spec index 44fe6a8..6409226 100644 --- a/packaging/libtdm.spec +++ b/packaging/libtdm.spec @@ -2,7 +2,7 @@ %define HALTESTS_GCOV 0 Name: libtdm -Version: 2.10.5 +Version: 2.10.6 Release: 0 Summary: User Library of Tizen Display Manager Group: Development/Libraries -- 2.7.4 From 95d4b2f5c0ff7736bf083740d28187996bc8a306 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Wed, 15 May 2019 17:40:48 +0900 Subject: [PATCH 15/16] layer: add the macro to check the HWC cap is enabled Change-Id: I8812530c7aed667baed03dc0a1e08ee169d9a418 --- src/tdm_layer.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/tdm_layer.c b/src/tdm_layer.c index 488f498..3737da1 100644 --- a/src/tdm_layer.c +++ b/src/tdm_layer.c @@ -71,6 +71,28 @@ private_output = private_layer->private_output; \ private_display = private_output->private_display +#define OUTPUT_HWC_CAP_CHECK() \ + if (private_output->caps.capabilities & TDM_OUTPUT_CAPABILITY_HWC) { \ + TDM_ERR("output(%p) support HWC. Use HWC functions", private_output); \ + _pthread_mutex_unlock(&private_display->lock); \ + return TDM_ERROR_OPERATION_FAILED; \ + } + +#define OUTPUT_HWC_CAP_CHECK_ERROR() \ + if (private_output->caps.capabilities & TDM_OUTPUT_CAPABILITY_HWC) { \ + TDM_ERR("output(%p) support HWC. Use HWC functions", private_output); \ + if (error) *error = TDM_ERROR_OPERATION_FAILED; \ + _pthread_mutex_unlock(&private_display->lock); \ + return NULL; \ + } + +#define OUTPUT_HWC_CAP_CHECK_VOID_RETURN() \ + if (private_output->caps.capabilities & TDM_OUTPUT_CAPABILITY_HWC) { \ + TDM_ERR("output(%p) support HWC. Use HWC functions", private_output); \ + _pthread_mutex_unlock(&private_display->lock); \ + return; \ + } + static void _tdm_layer_cb_wait_vblank(tdm_vblank *vblank, tdm_error error, unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec, void *user_data); static void _tbm_layer_queue_acquirable_cb(tbm_surface_queue_h surface_queue, void *data); -- 2.7.4 From c376fe11f2465688b944aeb07da9a8ca7443dc14 Mon Sep 17 00:00:00 2001 From: SooChan Lim Date: Wed, 15 May 2019 17:41:41 +0900 Subject: [PATCH 16/16] layer: check if the HWC cap is enabled The layer api MUST not be used when the HWC capability is enabled. When the HWC capability is set by tdm backends, it means that they does not support the layer objects. Change-Id: Ibf9210ea4abf8870e18caa23b5f0f5de2c24eb00 --- src/tdm_layer.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/tdm_layer.c b/src/tdm_layer.c index 3737da1..6e0c1bf 100644 --- a/src/tdm_layer.c +++ b/src/tdm_layer.c @@ -110,6 +110,8 @@ tdm_layer_get_output(tdm_layer *layer, tdm_error *error) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK_ERROR(); + if (error) *error = TDM_ERROR_NONE; @@ -129,6 +131,8 @@ tdm_layer_get_index(tdm_layer *layer, int *index) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + *index = private_layer->index; _pthread_mutex_unlock(&private_display->lock); @@ -145,6 +149,8 @@ tdm_layer_get_capabilities(tdm_layer *layer, tdm_layer_capability *capabilities) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + *capabilities = private_layer->caps.capabilities; _pthread_mutex_unlock(&private_display->lock); @@ -162,6 +168,8 @@ tdm_layer_get_available_formats(tdm_layer *layer, const tbm_format **formats, in _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + *formats = (const tbm_format *)private_layer->caps.formats; *count = private_layer->caps.format_count; @@ -180,6 +188,8 @@ tdm_layer_get_available_properties(tdm_layer *layer, const tdm_prop **props, int _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + *props = (const tdm_prop *)private_layer->caps.props; *count = private_layer->caps.prop_count; @@ -197,6 +207,8 @@ tdm_layer_get_zpos(tdm_layer *layer, int *zpos) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + *zpos = private_layer->caps.zpos; _pthread_mutex_unlock(&private_display->lock); @@ -213,6 +225,8 @@ tdm_layer_set_property(tdm_layer *layer, unsigned int id, tdm_value value) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + private_module = private_layer->private_module; func_layer = &private_module->func_layer; @@ -247,6 +261,8 @@ tdm_layer_get_property(tdm_layer *layer, unsigned int id, tdm_value *value) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + private_module = private_layer->private_module; func_layer = &private_module->func_layer; @@ -317,6 +333,8 @@ tdm_layer_set_info(tdm_layer *layer, tdm_info_layer *info) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + ret = tdm_layer_set_info_internal(private_layer, info); _pthread_mutex_unlock(&private_display->lock); @@ -335,6 +353,8 @@ tdm_layer_get_info(tdm_layer *layer, tdm_info_layer *info) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + private_module = private_layer->private_module; func_layer = &private_module->func_layer; @@ -562,6 +582,8 @@ tdm_layer_set_buffer(tdm_layer *layer, tbm_surface_h buffer) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + ret = tdm_layer_set_buffer_internal(private_layer, buffer); _pthread_mutex_unlock(&private_display->lock); @@ -606,6 +628,8 @@ tdm_layer_unset_buffer(tdm_layer *layer) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + ret = tdm_layer_unset_buffer_internal(private_layer); TDM_WARNING_IF_FAIL(ret == TDM_ERROR_NONE); @@ -1088,6 +1112,8 @@ tdm_layer_commit(tdm_layer *layer, tdm_layer_commit_handler func, void *user_dat _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + ret = tdm_layer_commit_internal(private_layer, func, user_data); _pthread_mutex_unlock(&private_display->lock); @@ -1104,6 +1130,8 @@ tdm_layer_is_committing(tdm_layer *layer, unsigned int *committing) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + *committing = private_layer->committing; _pthread_mutex_unlock(&private_display->lock); @@ -1152,6 +1180,8 @@ tdm_layer_remove_commit_handler(tdm_layer *layer, tdm_layer_commit_handler func, _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + tdm_layer_remove_commit_handler_internal(layer, func, user_data); _pthread_mutex_unlock(&private_display->lock); @@ -1167,6 +1197,8 @@ tdm_layer_get_displaying_buffer(tdm_layer *layer, tdm_error *error) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK_ERROR(); + if (error) *error = TDM_ERROR_NONE; @@ -1259,6 +1291,8 @@ tdm_layer_set_buffer_queue(tdm_layer *layer, tbm_surface_queue_h buffer_queue) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + private_module = private_layer->private_module; func_layer = &private_module->func_layer; @@ -1316,6 +1350,8 @@ tdm_layer_is_usable(tdm_layer *layer, unsigned int *usable) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + *usable = private_layer->usable; _pthread_mutex_unlock(&private_display->lock); @@ -1332,6 +1368,8 @@ tdm_layer_set_video_pos(tdm_layer *layer, int zpos) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + private_module = private_layer->private_module; func_layer = &private_module->func_layer; @@ -1365,6 +1403,8 @@ tdm_layer_create_capture(tdm_layer *layer, tdm_error *error) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK_ERROR(); + capture = (tdm_capture *)tdm_capture_create_layer_internal(private_layer, error); _pthread_mutex_unlock(&private_display->lock); @@ -1382,6 +1422,8 @@ tdm_layer_get_buffer_flags(tdm_layer *layer, unsigned int *flags) _pthread_mutex_lock(&private_display->lock); + OUTPUT_HWC_CAP_CHECK(); + private_module = private_layer->private_module; func_layer = &private_module->func_layer; -- 2.7.4