Skip to content
This repository has been archived by the owner on Nov 1, 2021. It is now read-only.

output: fix dangling renderer context after wlr_output_preferred_read_format #2292

Merged
merged 3 commits into from
Jun 19, 2020

Conversation

emersion
Copy link
Member

output: rename impl->rollback to rollback_render

The output backend API is now mostly state-less thanks to the atomic
hooks (commit and test). There is one exception though: attach_render.
This function makes the rendering context current. However sometimes the
compositor might decide not to render after attach_render (e.g. when
there's nothing new to render to the back buffer). Thus
wlr_output_rollback has been introduced to revert the pending state.

Because the output backend API is mostly state-less, the only thing
wlr_output_impl.rollback needs to do is revert the current rendering
context. Rename the function to rollback_render to make this clear. Add
a check in the common wlr_output code to only call rollback_render when
attach_buffer has been previously called.

On the long term, we'll be able to remove attach_render and
rollback_render together.

output: make rollback_render mandatory

If the output backend provides attach_render, assert it also provides a
way to revert it via rollback_render.

output: fix dangling renderer context after wlr_output_preferred_read_format

attach_render was called without un-setting the current rendering
context afterwards.

Closes: #2164


Breaking change for backends: wlr_output_impl.rollback has been renamed to rollback_render and now needs to unconditionally unset the renderer context. It'll only be called if attach_render has previously been called.

cc @any1

The output backend API is now mostly state-less thanks to the atomic
hooks (commit and test). There is one exception though: attach_render.
This function makes the rendering context current. However sometimes the
compositor might decide not to render after attach_render (e.g. when
there's nothing new to render to the back buffer). Thus
wlr_output_rollback has been introduced to revert the pending state.

Because the output backend API is mostly state-less, the only thing
wlr_output_impl.rollback needs to do is revert the current rendering
context. Rename the function to rollback_render to make this clear. Add
a check in the common wlr_output code to only call rollback_render when
attach_buffer has been previously called.

On the long term, we'll be able to remove attach_render and
rollback_render together.
If the output backend provides attach_render, assert it also provides a
way to revert it via rollback_render.
…_format

attach_render was called without un-setting the current rendering
context afterwards.

Closes: swaywm#2164
@emersion emersion added the breaking Breaking change in public API label Jun 19, 2020
@emersion emersion requested a review from ddevault June 19, 2020 14:54
@@ -448,15 +448,16 @@ bool wlr_output_attach_render(struct wlr_output *output, int *buffer_age) {

bool wlr_output_preferred_read_format(struct wlr_output *output,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this guaranteed to be called while no other output is attached? Could this cause problems when another output is attached?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that's a problem, but already was before. I'll open a follow-up issue about this.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ddevault ddevault merged commit 155d57b into swaywm:master Jun 19, 2020
@ddevault
Copy link
Contributor

Thanks!

@emersion emersion deleted the rollback-render branch June 19, 2020 21:02
@emersion emersion added this to the 0.11.0 milestone Jul 15, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
breaking Breaking change in public API
Development

Successfully merging this pull request may close these issues.

Rendering goes bonkers with headless and wdisplays
3 participants