mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-03 09:01:40 -05:00
backend/drm: don't insert duplicate custom modes, fix refresh rate
This commit is contained in:
parent
6d4bfa3226
commit
ff6c4f80b2
3 changed files with 11 additions and 4 deletions
|
|
@ -550,11 +550,18 @@ bool wlr_drm_connector_add_mode(struct wlr_output *output,
|
|||
const drmModeModeInfo *modeinfo) {
|
||||
struct wlr_drm_connector *conn = get_drm_connector_from_output(output);
|
||||
|
||||
assert(modeinfo);
|
||||
if (modeinfo->type != DRM_MODE_TYPE_USERDEF) {
|
||||
return false;
|
||||
}
|
||||
|
||||
struct wlr_output_mode *wlr_mode;
|
||||
wl_list_for_each(wlr_mode, &conn->output.modes, link) {
|
||||
struct wlr_drm_mode *mode = (struct wlr_drm_mode *)wlr_mode;
|
||||
if (memcmp(&mode->drm_mode, modeinfo, sizeof(*modeinfo)) == 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
struct wlr_drm_mode *mode = calloc(1, sizeof(*mode));
|
||||
if (!mode) {
|
||||
return false;
|
||||
|
|
@ -563,7 +570,7 @@ bool wlr_drm_connector_add_mode(struct wlr_output *output,
|
|||
|
||||
mode->wlr_mode.width = mode->drm_mode.hdisplay;
|
||||
mode->wlr_mode.height = mode->drm_mode.vdisplay;
|
||||
mode->wlr_mode.refresh = mode->drm_mode.vrefresh;
|
||||
mode->wlr_mode.refresh = calculate_refresh_rate(modeinfo);
|
||||
|
||||
wlr_log(WLR_INFO, "Registered custom mode "
|
||||
"%"PRId32"x%"PRId32"@%"PRId32,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue