if (tbm_surface_internal_is_valid(tbm_surface)) {
tbm_surface_internal_get_user_data(tbm_surface, KEY_BUFFER_INFO,
(void **)&buf_info);
+
if (buf_info && buf_info->need_to_release) {
twe_wl_surf_source *surf_source = buf_info->surf_source;
tbm_surface_queue_error_e tsq_err;
- tsq_err = tbm_surface_queue_release(surf_source->tbm_queue,
- tbm_surface);
- if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
- TPL_ERR("tbm_surface(%p) tsq_err(%d)", tbm_surface, tsq_err);
+ if (buf_info->sync_fd == -1) {
+ tsq_err = tbm_surface_queue_release(surf_source->tbm_queue,
+ tbm_surface);
+ if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
+ TPL_ERR("tbm_surface(%p) tsq_err(%d)", tbm_surface, tsq_err);
+ }
if (surf_source->committed_buffers) {
g_mutex_lock(&surf_source->surf_mutex);
tbm_bo_export(tbm_surface_internal_get_bo(tbm_surface, 0)));
tbm_surface_internal_unref(tbm_surface);
- return;
- }
-
- if (buf_info && buf_info->is_vk_image && !buf_info->need_to_release) {
- twe_wl_surf_source *surf_source = buf_info->surf_source;
-
- g_mutex_lock(&surf_source->free_queue_mutex);
-
- if (surf_source->committed_buffers) {
- g_mutex_lock(&surf_source->surf_mutex);
- __tpl_list_remove_data(surf_source->committed_buffers,
- (void *)tbm_surface,
- TPL_FIRST, NULL);
- g_mutex_unlock(&surf_source->surf_mutex);
- }
-
- TRACE_MARK("[RELEASE] BO(%d)",
- tbm_bo_export(tbm_surface_internal_get_bo(tbm_surface, 0)));
- TRACE_ASYNC_END((int)tbm_surface, "[COMMIT ~ RELEASE] BO(%d)",
- tbm_bo_export(tbm_surface_internal_get_bo(
- tbm_surface, 0)));
-
- TPL_LOG_T(BACKEND, "[REL] wl_buffer(%p) tbm_surface(%p) bo(%d)",
- buf_info->wl_buffer, tbm_surface,
- tbm_bo_export(tbm_surface_internal_get_bo(tbm_surface, 0)));
-
- tbm_surface_internal_unref(tbm_surface);
-
- g_mutex_unlock(&surf_source->free_queue_mutex);
}
-
} else {
TPL_ERR("Invalid parameter | tbm_surface(%p)", tbm_surface);
}
if (tsq_err != TBM_SURFACE_QUEUE_ERROR_NONE)
TPL_ERR("Failed to release tbm_surface(%p) when vk_surface_commit.",
tbm_surface);
- buf_info->need_to_release = TPL_FALSE;
- } else {
- /* Dependent on wl_buffer release event. */
- buf_info->need_to_release = TPL_TRUE;
}
+
+ /* Dependent on wl_buffer release event. */
+ buf_info->need_to_release = TPL_TRUE;
+
}
static void