tdm_hwc_set_client_target_buffer(tdm_hwc *hwc, tbm_surface_h target_buffer, tdm_region damage);
/**
+ * @brief Set the acquire fence fd of client(relative to the TDM) target
+ * @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
+tdm_hwc_set_client_target_acquire_fence(tdm_hwc *hwc, int acquire_fence);
+
+/**
* @brief Validate the output
* @details Instructs the backend to inspect all of the hw layer state and
* determine if there are any composition type changes necessary before
tdm_hwc_commit(tdm_hwc *hwc, int sync, tdm_hwc_commit_handler func, void *user_data);
/**
+ * @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
+tdm_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
tdm_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
+tdm_hwc_window_set_acquire_fence(tdm_hwc_window *hwc_window, int acquire_fence);
+
+/**
* @brief Destroy a pp object
* @param[in] pp A pp object
* @see tdm_display_create_pp
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
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
*/
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;
/**
TDM_HWC_CAPABILITY_VIDEO_SCALE = (1 << 2), /**< if a hwc allows to scale the video buffer */
TDM_HWC_CAPABILITY_VIDEO_TRANSFORM = (1 << 3), /**< if a hwc allows video to transform the video buffer */
TDM_HWC_CAPABILITY_VIDEO_SCANOUT = (1 << 4), /**< if a hwc allows video to accept the scanout buffer only */
+ TDM_HWC_CAPABILITY_FENCE = (1 << 5), /**< if a hwc allows fence */
} tdm_hwc_capability;
/**
return ret;
}
+EXTERN tdm_error
+tdm_hwc_set_client_target_acquire_fence(tdm_hwc *hwc, int acquire_fence)
+{
+ tdm_private_module *private_module;
+ tdm_func_hwc *func_hwc = NULL;
+
+ HWC_FUNC_ENTRY();
+
+ _pthread_mutex_lock(&private_display->lock);
+
+ private_module = private_hwc->private_module;
+ func_hwc = &private_module->func_hwc;
+
+ if (!func_hwc->hwc_set_client_target_acquire_fence) {
+ /* LCOV_EXCL_START */
+ _pthread_mutex_unlock(&private_display->lock);
+ TDM_WRN("not implemented!!");
+ return TDM_ERROR_NOT_IMPLEMENTED;
+ /* LCOV_EXCL_STOP */
+ }
+
+ ret = func_hwc->hwc_set_client_target_acquire_fence(private_hwc->hwc_backend, acquire_fence);
+
+ _pthread_mutex_unlock(&private_display->lock);
+
+ return ret;
+}
EXTERN tdm_error
tdm_hwc_validate(tdm_hwc *hwc, tdm_hwc_window **composited_wnds, uint32_t num_wnds, uint32_t *num_types)
/* LCOV_EXCL_STOP */
}
+EXTERN tdm_error
+tdm_hwc_get_commit_fence(tdm_hwc *hwc, int *commit_fence)
+{
+ tdm_private_module *private_module;
+ tdm_func_hwc *func_hwc = NULL;
+
+ HWC_FUNC_ENTRY();
+
+ _pthread_mutex_lock(&private_display->lock);
+
+ private_module = private_hwc->private_module;
+ func_hwc = &private_module->func_hwc;
+
+ if (!func_hwc->hwc_get_commit_fence) {
+ /* LCOV_EXCL_START */
+ _pthread_mutex_unlock(&private_display->lock);
+ TDM_WRN("not implemented!!");
+ return TDM_ERROR_NOT_IMPLEMENTED;
+ /* LCOV_EXCL_STOP */
+ }
+
+ ret = func_hwc->hwc_get_commit_fence(private_hwc->hwc_backend, commit_fence);
+
+ _pthread_mutex_unlock(&private_display->lock);
+
+ return ret;
+}
+
tdm_error
tdm_hwc_set_property(tdm_hwc *hwc, uint32_t id, tdm_value value)
{
}
EXTERN tdm_error
+tdm_hwc_window_set_acquire_fence(tdm_hwc_window *hwc_window, int acquire_fence)
+{
+ tdm_private_module *private_module;
+ tdm_func_hwc_window *func_hwc_window;
+
+ HWC_WINDOW_FUNC_ENTRY();
+
+ _pthread_mutex_lock(&private_display->lock);
+
+ private_module = private_output->private_module;
+ func_hwc_window = &private_module->func_hwc_window;
+
+ if (!func_hwc_window->hwc_window_set_acquire_fence) {
+ _pthread_mutex_unlock(&private_display->lock);
+ TDM_WRN("not implemented!!");
+ return TDM_ERROR_NOT_IMPLEMENTED;
+ }
+
+ ret = func_hwc_window->hwc_window_set_acquire_fence(private_hwc_window->hwc_window_backend, acquire_fence);
+
+ _pthread_mutex_unlock(&private_display->lock);
+
+ return ret;
+}
+
+EXTERN tdm_error
tdm_hwc_window_get_property(tdm_hwc_window *hwc_window, unsigned int id, tdm_value *value)
{
tdm_private_module *private_module;