tdm_output *output;
tdm_output_conn_status connection;
unsigned int vrefresh;
+ int HW_vblank_supported;
tdm_vblank_event_type last_type;
unsigned int check_HW_or_SW;
tdm_vblank_create(tdm_display *dpy, tdm_output *output, tdm_error *error)
{
tdm_private_vblank *private_vblank;
+ tdm_output_capability capabilities = 0;
tdm_error ret;
TDM_RETURN_VAL_IF_FAIL_WITH_ERROR(dpy != NULL, TDM_ERROR_INVALID_PARAMETER, NULL);
private_vblank->fps_changeable = 1;
private_vblank->last_interval = -1;
+ tdm_output_get_capabilities(output, &capabilities);
+ if (capabilities & TDM_OUTPUT_CAPABILITY_NO_HW_VBLANK)
+ private_vblank->HW_vblank_supported = 0;
+ else
+ private_vblank->HW_vblank_supported = 1;
+
_tdm_vblank_update_output_info(private_vblank);
strncpy(private_vblank->name, TDM_VBLANK_DEFAULT_NAME, TDM_NAME_LEN - 1);
tdm_output_get_dpms(private_vblank->output, &dpms);
- TDM_INFO("Use SW vblank. connection(%s), dpms(%s), vrefresh(%d), fps(%d), offset(%d)",
+ TDM_INFO("Use SW vblank. connection(%s), dpms(%s), vrefresh(%d), fps(%d), offset(%d), HW(%d)",
tdm_status_str(private_vblank->connection), tdm_dpms_str(dpms),
- private_vblank->vrefresh, private_vblank->fps, private_vblank->offset);
+ private_vblank->vrefresh, private_vblank->fps, private_vblank->offset,
+ private_vblank->HW_vblank_supported);
private_vblank->last_type = VBLANK_EVENT_TYPE_SW;
}
if (private_vblank->vrefresh % fps)
wait_info->type = VBLANK_TYPE_SW;
else if (TDM_OUTPUT_DPMS_VSYNC_IS_OFF(dpms) || dpms_changing ||
- private_vblank->connection != TDM_OUTPUT_CONN_STATUS_MODE_SETTED)
+ private_vblank->connection != TDM_OUTPUT_CONN_STATUS_MODE_SETTED ||
+ !private_vblank->HW_vblank_supported)
wait_info->type = VBLANK_TYPE_SW_FAKE;
else if (private_vblank->offset == 0)
wait_info->type = VBLANK_TYPE_HW;