tdm_hwc: add fence api and backend interface
[platform/core/uifw/libtdm.git] / include / tdm_backend.h
index e89cd91..60ddd1a 100644 (file)
@@ -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;
@@ -344,7 +345,7 @@ typedef struct _tdm_func_display {
         * @remark
         * A backend module doesn't need to implement this function if doesn't support virtual output.
         */
-       tdm_voutput *(*voutput_create)(tdm_backend_data *bdata, const char *name, tdm_error *error);
+       tdm_voutput *(*display_voutput_create)(tdm_backend_data *bdata, const char *name, tdm_error *error);
 
        void (*reserved2)(void);
        void (*reserved3)(void);
@@ -544,11 +545,12 @@ typedef struct _tdm_func_output {
         * #output_set_dpms_handler, a backend module needs to call the output dpms handler
         * to let the TDM frontend know the output DPMS change indeed.
         * @param[in] dpms_value DPMS value
+        * @param[out] sync A flag for sync call
         * @return #TDM_ERROR_NONE if success. Otherwise, error value.
         * @see #output_set_dpms_handler, #TDM_OUTPUT_CAPABILITY_ASYNC_DPMS
         * @since 1.7.0
         */
-       tdm_error (*output_set_dpms_async)(tdm_output *output, tdm_output_dpms dpms_value);
+       tdm_error (*output_set_dpms_async)(tdm_output *output, tdm_output_dpms dpms_value, int *sync);
 
        /**
         * @brief Get a hwc object of a output object
@@ -558,7 +560,31 @@ typedef struct _tdm_func_output {
         */
        tdm_hwc *(*output_get_hwc)(tdm_output *output, tdm_error *error);
 
-       void (*reserved3)(void);
+       /**
+        * @brief Set the mirror image of the src_output to the output
+        * @details This function set the mirro image of the src_output to the output.
+        * If there is the hardware or the implementation to display the mirror image
+        * of the src_output to the output, the backend does it in this function.
+        * If the backend output gets the ability of the mirror displaying, it has to
+        * set the TDM_OUTPUT_CAPABILITY_MIRROR on the output capability.
+        * @param[in] output A output object to display the src_output image
+        * @param[in] src_output A src output object of which image is displayed on the output
+        * @param[in] transform A transform value
+        * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+        * @see #output_set_mirror, #TDM_OUTPUT_CAPABILITY_MIRROR
+        */
+       tdm_error (*output_set_mirror)(tdm_output *output,
+                                                                       tdm_output *src_output,
+                                                                       tdm_transform transform);
+       /**
+        * @brief Unset the mirror image
+        * @details This function unset the mirro image of the output.
+        * @param[in] output A output object to display the src_output image
+        * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+        * @see #output_set_mirror, #TDM_OUTPUT_CAPABILITY_MIRROR
+        */
+       tdm_error (*output_unset_mirror)(tdm_output *output);
+
        void (*reserved4)(void);
        void (*reserved5)(void);
        void (*reserved6)(void);
@@ -571,7 +597,7 @@ typedef struct _tdm_func_voutput {
         * @brief Destroy a virtual output object of a backend module
         * @param[in] voutput The voutput object
         * @return #TDM_ERROR_NONE if success. Otherwise, error value.
-        * @see voutput_create() function
+        * @see display_voutput_create() function
         * @remark
         * A backend module doesn't need to implement this function if doesn't support virtual output.
         */
@@ -647,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);
@@ -856,6 +891,17 @@ typedef struct _tdm_func_hwc {
                                                                                          tdm_region damage);
 
        /**
+        * @brief Set the acquire fence of client(relative to the TDM) target buffer
+        * @param[in] hwc A output hwc
+        * @param[in] acquire_fence The acquire fence fd of target
+        * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+        * @since 2.0.0
+        */
+       tdm_error (*hwc_set_client_target_acquire_fence)(tdm_hwc *hwc,
+                                                                                         int acquire_fence);
+
+
+       /**
         * @brief Validate the hwc
         * @details Instructs the backend to inspect all of the hw layer state and
         * determine if there are any composition type changes necessary before
@@ -930,6 +976,16 @@ typedef struct _tdm_func_hwc {
        tdm_error (*hwc_set_commit_handler)(tdm_hwc *hwc, tdm_hwc_commit_handler func);
 
        /**
+        * @brief Get commit fence
+        * @details After all change of a window object are applied about last tdm_hwc_commit,
+        * the fence is signaled.
+        * @param[in] hwc A hwc object
+        * @param[out] commit_fence the commit fence fd of tdm_hwc_commit
+        * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+        */
+       tdm_error (*hwc_get_commit_fence)(tdm_hwc *hwc, int *commit_fence);
+
+       /**
         * @brief Set the property which has a given id on the hwc object.
         * @param[in] hwc A hwc object
         * @param[in] id The property id
@@ -937,6 +993,15 @@ typedef struct _tdm_func_hwc {
         * @return #TDM_ERROR_NONE if success. Otherwise, error value.
         */
        tdm_error (*hwc_set_property)(tdm_hwc *hwc, uint32_t id, tdm_value value);
+
+       /**
+        * @brief Get the property which has a given id on the hwc object.
+        * @param[in] hwc A hwc object
+        * @param[in] id The property id
+        * @param[in] value The value of the propery id
+        * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+        */
+       tdm_error (*hwc_get_property)(tdm_hwc *hwc, uint32_t id, tdm_value *value);
 } tdm_func_hwc;
 
 /**
@@ -1076,6 +1141,15 @@ typedef struct _tdm_func_hwc_window {
         */
        tdm_error (*hwc_window_set_cursor_image)(tdm_hwc_window *hwc_window,
                                                                int width, int height, int stride, void *ptr);
+
+       /**
+        * @brief Set the acquire fence of hwc_window
+        * @param[in] hwc_window A hwc window object
+        * @param[in] acquire_fence the acquire fence fd of a hwc window object
+        * @return #TDM_ERROR_NONE if success. Otherwise, error value.
+        */
+       tdm_error (*hwc_window_set_acquire_fence)(tdm_hwc_window *hwc_window,
+                                                                                         int acquire_fence);
 } tdm_func_hwc_window;
 
 /**