if (!_twe_ctx->tdm_source) {
TPL_WARN("tdm_vblank feature is disabled.");
+
+ if (surf_source->vblank) {
+ tdm_client_vblank_destroy(surf_source->vblank);
+ surf_source->vblank = NULL;
+ surf_source->vblank_done = TPL_TRUE;
+ }
+
return TPL_ERROR_INVALID_OPERATION;
}
== TPL_DISPLAY_PRESENT_MODE_FIFO_RELAXED ||
surf_source->swapchain_properties.present_mode
== TPL_DISPLAY_PRESENT_MODE_FIFO) {
- if (_twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
+ if ((_twe_ctx->tdm_source || surf_source->vblank) &&
+ _twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
TPL_ERR("Failed to set wait vblank");
}
buf_info->wl_buffer, tbm_surface,
tbm_bo_export(tbm_surface_internal_get_bo(tbm_surface, 0)));
- if (_twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
+ if ((_twe_ctx->tdm_source || surf_source->vblank) &&
+ _twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
TPL_ERR("Failed to set wait vblank.");
surf_source->draw_done_buffer = tbm_surface;
if (surf_source->vblank_done) {
- if (_twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
+ if ((_twe_ctx->tdm_source || surf_source->vblank) &&
+ _twe_surface_wait_vblank(surf_source) != TPL_ERROR_NONE)
TPL_ERR("Failed to set wait vblank");
}
break;
TPL_LOG_T(BACKEND, "[VBLANK FINI] twe_wl_surf_source(%p) vblank(%p)",
surf_source, surf_source->vblank);
tdm_client_vblank_destroy(surf_source->vblank);
+ surf_source->vblank = NULL;
}
surf_source->cb_data = NULL;