backend/drm: Use cached vrr support flag

We do not expect the connector support to change throughout the lifetime
of the link on this connector, so use the value we initially probed.
master
Kenny Levinsen 5 months ago committed by Kirill Primak
parent f10327f915
commit bedc890935

@ -276,7 +276,7 @@ bool drm_atomic_connector_prepare(struct wlr_drm_connector_state *state, bool mo
output->adaptive_sync_status == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED; output->adaptive_sync_status == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED;
bool vrr_enabled = prev_vrr_enabled; bool vrr_enabled = prev_vrr_enabled;
if ((state->base->committed & WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED)) { if ((state->base->committed & WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED)) {
if (state->base->adaptive_sync_enabled && !drm_connector_supports_vrr(conn)) { if (state->base->adaptive_sync_enabled && !output->adaptive_sync_supported) {
return false; return false;
} }
vrr_enabled = state->base->adaptive_sync_enabled; vrr_enabled = state->base->adaptive_sync_enabled;

@ -721,32 +721,6 @@ static bool drm_connector_set_pending_layer_fbs(struct wlr_drm_connector *conn,
static bool drm_connector_alloc_crtc(struct wlr_drm_connector *conn); static bool drm_connector_alloc_crtc(struct wlr_drm_connector *conn);
bool drm_connector_supports_vrr(struct wlr_drm_connector *conn) {
struct wlr_drm_backend *drm = conn->backend;
struct wlr_drm_crtc *crtc = conn->crtc;
if (!crtc) {
return false;
}
uint64_t vrr_capable;
if (conn->props.vrr_capable == 0 ||
!get_drm_prop(drm->fd, conn->id, conn->props.vrr_capable,
&vrr_capable) || !vrr_capable) {
wlr_drm_conn_log(conn, WLR_DEBUG, "Failed to enable adaptive sync: "
"connector doesn't support VRR");
return false;
}
if (crtc->props.vrr_enabled == 0) {
wlr_drm_conn_log(conn, WLR_DEBUG, "Failed to enable adaptive sync: "
"CRTC %"PRIu32" doesn't support VRR", crtc->id);
return false;
}
return true;
}
static bool drm_connector_prepare(struct wlr_drm_connector_state *conn_state, bool test_only) { static bool drm_connector_prepare(struct wlr_drm_connector_state *conn_state, bool test_only) {
const struct wlr_output_state *state = conn_state->base; const struct wlr_output_state *state = conn_state->base;
struct wlr_drm_connector *conn = conn_state->connector; struct wlr_drm_connector *conn = conn_state->connector;
@ -770,7 +744,9 @@ static bool drm_connector_prepare(struct wlr_drm_connector_state *conn_state, bo
if ((state->committed & WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED) && if ((state->committed & WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED) &&
state->adaptive_sync_enabled && state->adaptive_sync_enabled &&
!drm_connector_supports_vrr(conn)) { !output->adaptive_sync_supported) {
wlr_drm_conn_log(conn, WLR_DEBUG,
"Can't enable adaptive sync: connector doesn't support VRR");
return false; return false;
} }

@ -110,7 +110,7 @@ static bool legacy_crtc_commit(const struct wlr_drm_connector_state *state,
} }
if (state->base->committed & WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED) { if (state->base->committed & WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED) {
if (state->base->adaptive_sync_enabled && !drm_connector_supports_vrr(conn)) { if (state->base->adaptive_sync_enabled && !output->adaptive_sync_supported) {
return false; return false;
} }
if (crtc->props.vrr_enabled != 0 && if (crtc->props.vrr_enabled != 0 &&

@ -212,7 +212,6 @@ void restore_drm_device(struct wlr_drm_backend *drm);
int handle_drm_event(int fd, uint32_t mask, void *data); int handle_drm_event(int fd, uint32_t mask, void *data);
void destroy_drm_connector(struct wlr_drm_connector *conn); void destroy_drm_connector(struct wlr_drm_connector *conn);
bool drm_connector_is_cursor_visible(struct wlr_drm_connector *conn); bool drm_connector_is_cursor_visible(struct wlr_drm_connector *conn);
bool drm_connector_supports_vrr(struct wlr_drm_connector *conn);
size_t drm_crtc_get_gamma_lut_size(struct wlr_drm_backend *drm, size_t drm_crtc_get_gamma_lut_size(struct wlr_drm_backend *drm,
struct wlr_drm_crtc *crtc); struct wlr_drm_crtc *crtc);
void drm_lease_destroy(struct wlr_drm_lease *lease); void drm_lease_destroy(struct wlr_drm_lease *lease);

Loading…
Cancel
Save