mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2024-11-24 16:12:23 +00:00
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:
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;
|
||||
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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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 &&
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user