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.
This commit is contained in:
Kenny Levinsen 2024-06-18 11:33:02 +02:00 committed by Kirill Primak
parent f10327f915
commit bedc890935
4 changed files with 5 additions and 30 deletions

View File

@ -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;
bool vrr_enabled = prev_vrr_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;
}
vrr_enabled = state->base->adaptive_sync_enabled;

View File

@ -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);
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) {
const struct wlr_output_state *state = conn_state->base;
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) &&
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;
}

View File

@ -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->adaptive_sync_enabled && !drm_connector_supports_vrr(conn)) {
if (state->base->adaptive_sync_enabled && !output->adaptive_sync_supported) {
return false;
}
if (crtc->props.vrr_enabled != 0 &&

View File

@ -212,7 +212,6 @@ void restore_drm_device(struct wlr_drm_backend *drm);
int handle_drm_event(int fd, uint32_t mask, void *data);
void destroy_drm_connector(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,
struct wlr_drm_crtc *crtc);
void drm_lease_destroy(struct wlr_drm_lease *lease);