mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2024-11-21 14:42:25 +00:00
backend/drm: Skip plane props if buffer is not committed
If our session is re-activated during scanout, restore_drm_device will reset planes and then attempt an enabling modeset commit without a buffer. The new plane transform logic requires a committed buffer to be present to calculate the boxes if they were not explicitly provided, and at least amdgpu rejects commits that try to use 0 as default. Skip updating plane props instead of segfaulting if no buffer is set. A better fix would be to not rely on restore_drm_device at all and instead require compositors to modeset in response to session activation. Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3912
This commit is contained in:
parent
4c74a8843a
commit
7717c92ed0
@ -439,14 +439,15 @@ static void atomic_connector_add(struct atomic *atom,
|
|||||||
if (crtc->props.vrr_enabled != 0) {
|
if (crtc->props.vrr_enabled != 0) {
|
||||||
atomic_add(atom, crtc->id, crtc->props.vrr_enabled, state->vrr_enabled);
|
atomic_add(atom, crtc->id, crtc->props.vrr_enabled, state->vrr_enabled);
|
||||||
}
|
}
|
||||||
|
if (state->base->committed & WLR_OUTPUT_STATE_BUFFER) {
|
||||||
|
struct wlr_fbox src_box;
|
||||||
|
struct wlr_box dst_box;
|
||||||
|
output_state_get_buffer_src_box(state->base, &src_box);
|
||||||
|
output_state_get_buffer_dst_box(state->base, &dst_box);
|
||||||
|
|
||||||
struct wlr_fbox src_box;
|
set_plane_props(atom, drm, crtc->primary, state->primary_fb, crtc->id,
|
||||||
struct wlr_box dst_box;
|
&dst_box, &src_box);
|
||||||
output_state_get_buffer_src_box(state->base, &src_box);
|
}
|
||||||
output_state_get_buffer_dst_box(state->base, &dst_box);
|
|
||||||
|
|
||||||
set_plane_props(atom, drm, crtc->primary, state->primary_fb, crtc->id,
|
|
||||||
&dst_box, &src_box);
|
|
||||||
if (crtc->primary->props.fb_damage_clips != 0) {
|
if (crtc->primary->props.fb_damage_clips != 0) {
|
||||||
atomic_add(atom, crtc->primary->id,
|
atomic_add(atom, crtc->primary->id,
|
||||||
crtc->primary->props.fb_damage_clips, state->fb_damage_clips);
|
crtc->primary->props.fb_damage_clips, state->fb_damage_clips);
|
||||||
|
Loading…
Reference in New Issue
Block a user