backend/drm: Init connector after we try to allocate a crtc for it

drm_connect_state_init() will set primary_fd to null if no CRTC is active
for the connector and can crash later if the code expects a CRTC (like
when lighting up an output).
master
Alexander Orzechowski 9 months ago
parent 54e1fefd2e
commit 672ff1e14e

@ -672,26 +672,26 @@ static bool drm_connector_test(struct wlr_output *output,
} }
} }
bool ok = false; if ((state->committed & WLR_OUTPUT_STATE_ENABLED) ? state->enabled : output->enabled) {
struct wlr_drm_connector_state pending = {0};
drm_connector_state_init(&pending, conn, state);
if (pending.active) {
if ((state->committed & if ((state->committed &
(WLR_OUTPUT_STATE_ENABLED | WLR_OUTPUT_STATE_MODE)) && (WLR_OUTPUT_STATE_ENABLED | WLR_OUTPUT_STATE_MODE)) &&
!(state->committed & WLR_OUTPUT_STATE_BUFFER)) { !(state->committed & WLR_OUTPUT_STATE_BUFFER)) {
wlr_drm_conn_log(conn, WLR_DEBUG, wlr_drm_conn_log(conn, WLR_DEBUG,
"Can't enable an output without a buffer"); "Can't enable an output without a buffer");
goto out; return false;
} }
if (!drm_connector_alloc_crtc(conn)) { if (!drm_connector_alloc_crtc(conn)) {
wlr_drm_conn_log(conn, WLR_DEBUG, wlr_drm_conn_log(conn, WLR_DEBUG,
"No CRTC available for this connector"); "No CRTC available for this connector");
goto out; return false;
} }
} }
bool ok = false;
struct wlr_drm_connector_state pending = {0};
drm_connector_state_init(&pending, conn, state);
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)) { !drm_connector_supports_vrr(conn)) {

Loading…
Cancel
Save