Manuel Stoeckl
dbc7a5cada
screencopy_v1: only bind, not render with, buffer in shm copy path
...
wlr_renderer_read_pixels does not need to be called inside a render
pass; rather, it only needs to have the correct buffer bound to
the renderer. This commit optimizes the implementation of
frame_shm_copy(...) by only binding the source buffer instead of
starting a no-op render pass with it.
2023-09-11 20:25:07 -04:00
Alexander Orzechowski
6c54c34713
output: Mutate frame_pending needs_frame when there is an explicit output commit
...
These states would be set if output_init is invoked with a enabled state.
This would make frame_pending == true which means wlroots will ignore
any further frame events and the compositor will appear dead.
2023-09-11 03:28:01 -04:00
Manuel Stoeckl
5aea90264f
render/vulkan: fix validation error with vkCmdBlitImage
...
Specfically, VUID-vkCmdBlitImage-srcImage-00247.
2023-09-10 15:28:57 -04:00
Simon Ser
65bbbbbf0c
render/vulkan: de-duplicate VkImageUsageFlags
...
The flags passed to vkCreateImage() must match the flags used when
querying formats. Make this clearer by using the same variable.
2023-09-09 23:32:28 +00:00
Leo Li
b18a849fc3
wlr_scene: Use cached node coordinates where possible
...
Avoids recalculating node coordinates.
2023-09-08 21:11:19 +00:00
Alexander Orzechowski
9be72ec4ca
backend/drm: Compute custom mode correctly
2023-09-07 01:56:32 +00:00
Kirill Primak
e315068b98
xdg-popup: validate parent
...
This matches Mutter's behavior.
Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3576
2023-09-01 12:48:36 +03:00
Simon Ser
2926acf60d
tinywl: set minimum wlroots version in Makefile
2023-09-01 00:28:55 +09:00
Simon Ser
717ded9bb0
backend/drm: drop no-op shortcut
...
Since e5fc8cd4c7
("output: trigger frame/present events on all
commits on enabled output"), any commit on an enabled output is
supposed to trigger frame/present events.
The DRM backend was skipping the commit completely for no-op
commits. Stop doing so.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3719
2023-08-25 17:16:05 +02:00
Simon Ser
7bf6c1fc6c
render/pass: ensure rect has positive size
...
Ported from wlr_render_rect().
2023-08-24 03:54:36 +00:00
Kirill Primak
4565b07484
Unify signal data docs
...
`// struct <name>` appears roughly 4 times as often as
`// struct <name> *`. Switch to the former variant everywhere.
2023-08-23 19:43:26 +00:00
Manuel Stoeckl
a94168b5fe
render: ensure wlr_render_rect_options->box is nonempty
...
This optimization also fixes an validation error with the Vulkan
renderer by ensuring vkCmdClearAttachments does not receive empty
regions.
2023-08-23 18:28:58 +00:00
Simon Ser
e5fc8cd4c7
output: trigger frame/present events on all commits on enabled output
...
Up until now, frame/present events were only triggered when the
user submitted a buffer. Change the wlr_output API so that these
events are triggered when any commit is applied on an enabled
output.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3708
2023-08-23 15:42:22 +00:00
Rose Hudson
462f04db9e
output: don't forbid multiple commits per frame
...
It's still not possible to commit while a page flip is pending in DRM,
but we don't need to enforce that here and allowing it through the
common interface can be useful for other backends.
This decouples commits from frame scheduling, which is going to make the
new frame schedulers easier to implement.
2023-08-23 16:37:07 +02:00
Rose Hudson
fc81d06add
backend/drm: report !presented if session is inactive
2023-08-23 16:36:43 +02:00
Rose Hudson
f7afef0b1f
backend/drm: don't set frame_pending on modeset
...
https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3664#note_2020392
we're gonna have to trust Simon on this one 🤞
2023-08-23 16:36:43 +02:00
Simon Ser
11aba53ead
render: only open DRM render node if necessary
...
Only open a render node if we actually need one (ie, if we're about
to attempt GLES2 or Vulkan).
2023-08-23 13:42:07 +02:00
Rose Hudson
f5917f0247
scene_output_layout: make output adding explicit
...
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3709
2023-08-22 11:53:28 +02:00
Rose Hudson
91f813ffb7
output_layout: return wlr_output_layout_output when adding output
...
This will be used for the scene-graph integration.
2023-08-22 11:53:25 +02:00
Alexander Orzechowski
e85c79051c
wlr_output: Set current_mode during new custom mode
...
When setting a custom mode current_mode will not be reset. That means
that next time the compositor tries to reset back from the custom mode,
it will compare against the stale current_mode and unset
WLR_OUTPUT_STATE_MODE erroneously.
2023-08-22 09:46:24 +00:00
Simon Ser
72787db98a
compositor: drop wlr_surface_destroy_role_object()
...
This function is now unnecessary.
2023-08-21 18:56:09 +02:00
Kirill Primak
bd5c4f4a4a
xdg-shell: rework roles
2023-08-21 16:30:29 +00:00
Kirill Primak
e5300c225e
xdg-popup: avoid using wlr_surface_destroy_role_object()
2023-08-21 16:30:29 +00:00
Kirill Primak
10ba8ebc70
Don't assume xdg_surface.{toplevel,popup} is non-NULL
...
This assumption will become incorrect with future commits.
2023-08-21 16:30:29 +00:00
Kirill Primak
f0cc712af1
xdg-shell: don't return anything from create_xdg_surface()
2023-08-21 16:30:29 +00:00
Alexander Orzechowski
ce615a44c0
egl: Don't assume display is owned when KHR_display_reference is unsupported
...
We could potentially leak a display here, but not really because the
display acts as a singleton that will be returned next time a renderer
of the same device is created.
2023-08-21 15:51:26 +00:00
Alexander Orzechowski
91a1797a96
egl: Remove dead code
...
Display is always NULL here since egl_init is always last to be called.
2023-08-21 15:51:26 +00:00
Simon Ser
9b8cd1f5d6
buffer: make wlr_client_buffer functions private
...
We want to eventually remove this. Let's make sure compositors
don't start using either of these functions.
2023-08-21 15:45:10 +00:00
Simon Ser
6c1a2a6657
backend/headless: fix broken output frame events
...
frame_delay was set to 0.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3712
2023-08-21 16:18:26 +02:00
Alexander Orzechowski
5f6912595e
renderer/vulkan: Defer device lost signal until end of pass
...
If the compositor were to try to handle a GPU reset within the lost
signal (by recreating the renderer) we should avoid referencing renderer
resources after the lost signal. This prevents use after free for such
compositors.
2023-08-20 21:12:06 -04:00
Leonardo Hernández Hernández
bdc34401ba
xdg-decoration: store an xdg_toplevel instead of xdg_surface
...
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3685
2023-08-19 11:10:36 -06:00
Simon Ser
22b6581a18
backend/wayland: wait for xdg_surface.configure explicitly
...
We were assuming a roundtrip was enough to get an
xdg_surface.configure event. That's not the case, the protocol
spec doesn't make such a guarantee.
2023-08-16 22:09:01 +02:00
Simon Ser
d3d3e19ffd
render: split render pass API into separate header
...
Keeps the main wlr_renderer.h a tad more tidy.
2023-08-16 19:20:12 +02:00
Alexander Orzechowski
568b1943b9
wlr_output: Nuke wlr_output_update_enabled
2023-08-16 18:37:55 +02:00
Alexander Orzechowski
63351cf81f
output: Schedule mode updates to happen with rest of output events
2023-08-16 18:37:55 +02:00
Alexander Orzechowski
f042de3f51
output: Inline wlr_output_update_{custom,}_mode
2023-08-16 18:37:55 +02:00
Alexander Orzechowski
f1ba70ffa6
wlr_output: Make wlr_output_update_{custom,}_mode private
...
Backends should be using wlr_output_send_request_state to request
modesets to the compositor. This will be inlined and removed next commit.
2023-08-16 18:37:55 +02:00
Alexander Orzechowski
8f0d4c9332
backend/drm: Use output state to set init mode
2023-08-16 18:37:40 +02:00
Alexander Orzechowski
a34d349963
backend/drm: Move output variable up in connect_drm_connector
2023-08-16 11:46:27 -04:00
Alexander Orzechowski
a60361050e
backend/headless: Use output state to set init custom mode
2023-08-16 11:46:27 -04:00
Alexander Orzechowski
83d9764ed8
backend/wayland: Use output state to set init custom mode
2023-08-16 11:46:27 -04:00
Alexander Orzechowski
869b0f14bc
backend/x11: Use output state to set init custom mode
2023-08-16 11:46:27 -04:00
Alexander Orzechowski
6cda3e251c
output: Add initialization state to wlr_output_init
2023-08-16 11:46:27 -04:00
Alexander Orzechowski
8f67446cc7
output: Extract common commit logic
2023-08-16 11:46:26 -04:00
Simon Ser
8836e12988
examples/embedded: new example
2023-08-16 16:39:53 +02:00
Simon Ser
8678633fc9
backend/wayland: add wlr_wl_output_create_from_surface()
...
By using this function, a compositor can display a wlroots
compositor in a sub-surface, for instance.
2023-08-16 16:39:52 +02:00
Simon Ser
4f88886199
backend/wayland: tag wl_surface
...
When integrating wlroots with another toolkit, wlroots may receive
wl_pointer.enter events for surfaces not backed by a wlr_output.
Ignore such surfaces by tagging the ones we're aware of with
wl_proxy_set_tag().
2023-08-16 16:38:53 +02:00
Simon Ser
dd24991c9e
backend/wayland: take existing wl_display in wlr_wl_backend_create()
...
This allows compositors to use an existing wl_display, to integrate
wlroots with an existing toolkit.
2023-08-16 16:29:09 +02:00
Alexander Orzechowski
664ec59095
renderer: Sanity check texture source bounds
2023-08-14 08:08:39 +00:00
Alexander Orzechowski
aee31edaad
screencopy_v1: Implement copy regions with gpu blit path
2023-08-12 10:16:51 +00:00