Commit Graph

2623 Commits

Author SHA1 Message Date
Simon Ser
be05097968 output: add wlr_output_state_init()
This changes the semantics of wlr_output_state. Instead of having
fields with uninitialized memory when missing from the committed
bitflag, all fields are always initialized (and maybe NULL/empty),
just like we do in wlr_surface_state. This reduces the chances of
footguns when reading a field, and removes the need to check for
the committed bitfield everywhere.

A new wlr_output_state_init() function takes care of initializing
the Pixman region.
2023-06-23 18:07:26 +00:00
Simon Ser
8a5b5e6f28 compositor: listen to role_resource destroy signal
Call wlr_surface_destroy_role_object() when the role_resource is
destroyed.
2023-06-23 14:33:26 +02:00
Simon Ser
89cb484220 compositor: replace role_data with role_resource
This increases type safety, makes it more obvious that role_data
must represent the role object, and will allow for automatic
cleanup when the resource is destroyed.
2023-06-23 14:23:27 +02:00
Kirill Primak
fc9b58e84d compositor: don't call role unmap hook without an object 2023-06-23 11:54:05 +00:00
Kirill Primak
0f67580aab compositor: introduce wlr_surface_set_role_object() 2023-06-23 11:54:05 +00:00
Alexander Orzechowski
4b7c526578 output: Introduce wlr_output_state_copy() 2023-06-22 11:56:20 +02:00
Simon Ser
b625a13156 output: attach buffer to state in output_ensure_buffer() 2023-06-20 16:33:41 +00:00
Alexander Orzechowski
2ac31fc630 wlr_scene: Introduce wlr_scene_buffer_set_filter_mode 2023-06-20 09:04:35 +00:00
Alexander Orzechowski
2044cc2311 render: Introduce wlr_render_texture_options.blend_mode 2023-06-19 13:16:34 -04:00
Alexander Orzechowski
6bd44c4fcd renderer: Introduce wlr_scale_filter_mode 2023-06-19 12:25:38 -04:00
Alexander Orzechowski
3ee0f52e09 render/vulkan: Dynamically create texture views
Now that we are dynamically creating pipeline layouts, we need separate
texture views for each pipeline layout we choose to use with a texture.
2023-06-17 21:21:35 -04:00
Alexander Orzechowski
8a387b5558 render/vulkan: Dynamically create pipeline layouts
These will happen lazily when pipelines get created.
2023-06-17 21:21:31 -04:00
Alexander Orzechowski
3623005858 render/vulkan/pipeline_key: Add blending
This will become necessary when we switch away from scissoring. For the
time being, this cleans things up a bit and allows for a trivial
blending implementation for textures when that comes.
2023-06-16 19:20:04 -04:00
Alexander Orzechowski
9d31372930 render/vulkan: Handle quad pipeline through generic pipeline path 2023-06-16 19:20:03 -04:00
Alexander Orzechowski
97fdd57eb2 render/vulkan: Dynamically handle pipeline creation for textures
If we ever wanted to handle dynamic state that requires new pipelines
such as using different texture filters those can be added here with more
ease.
2023-06-16 19:09:23 -04:00
Simon Ser
220402b717 cursor: add wlr_cursor_unset_image()
It's pretty awkward to call wlr_cursor_set_image() with 6 zeroes.
Hide that awkwardness in wlroots.
2023-06-15 18:40:33 +02:00
Simon Ser
da04b066ea cursor: add wlr_cursor_set_xcursor()
This keeps track of the last set XCursor. If it hasn't changed,
skip the texture upload.

In the future, support for animated XCursors can be added.

Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3436
2023-06-15 18:28:43 +02:00
Alexander Orzechowski
7ce9459715 output: add documentation for wlr_output_state 2023-06-15 12:57:36 +00:00
Kirill Primak
753f3cc4fa compositor: add wlr_surface_role.no_object
This commit allows to make a role as not represented by an object,
which fixes calling role commit handlers for roles like cursor
surfaces.

Fixes: 099b9de752
2023-06-14 14:06:28 +00:00
Simon Ser
670915eeea output: add wlr_output_state_set_layers() 2023-06-13 12:02:49 +00:00
Simon Ser
4339c37f99 backend/drm: clip FB damage
The kernel complains when the damage exceeds the FB bounds:

    [73850.448326] i915 0000:00:02.0: [drm:drm_atomic_check_only] [PLANE:31:plane 1A] invalid damage clip 0 0 2147483647 2147483647

Make the DRM backend behave like the Wayland one and allow compositors
to damage (0, 0, INT32_MAX, INT32_MAX) to repaint everything without
needing to know the exact buffer size.

Closes: https://github.com/swaywm/sway/issues/7632
2023-06-12 20:38:03 +00:00
Kirill Primak
96f1fdd113 seat: remove a TODO comment about simulating keyboard events 2023-06-12 20:54:53 +03:00
Alexander Orzechowski
05dd08afe5 scene: introduce wlr_scene_output_build_state() 2023-06-12 14:13:09 +02:00
Alexander Orzechowski
ae7bad86dd output: introduce wlr_output_state_set_damage() 2023-06-12 14:12:47 +02:00
Simon Ser
36376e2ddf gamma-control-v1: stop applying gamma LUTs implicitly
Make the compositor responsible for doing that, so that they can
properly integrate with their output commit sequence.
2023-06-08 18:47:46 +00:00
Simon Ser
ec9b79ef19 gamma-control-v1: add wlr_gamma_control_v1_send_failed_and_destroy() 2023-06-08 18:47:46 +00:00
Simon Ser
026fc6eda0 gamma-control-v1: add wlr_gamma_control_v1_apply() 2023-06-08 18:47:46 +00:00
Simon Ser
5d5cf34486 output: add wlr_output_state_set_gamma_lut() 2023-06-08 18:47:46 +00:00
Simon Ser
6e635d2fd3 gamma-control-v1: add wlr_gamma_control_manager_v1_get_control() 2023-06-08 18:47:46 +00:00
Simon Ser
70c1a57248 gamma-control-v1: introduce set_gamma event 2023-06-08 18:47:46 +00:00
Kirill Primak
1bf245e0fe compositor: improve role-specific documentation 2023-06-08 20:03:18 +02:00
Kirill Primak
24a479a501 drag: don't set icon's role_data
Currently, an icon surface's role_data is set manually to a struct
wlr_drag_icon, which is hacky, incorrect (as role_data is supposed
to be the surface's role object, and drag icons don't have them), and
will be disallowed by future changes.
2023-06-08 20:03:18 +02:00
Simon Ser
544c0622fa presentation-time: constify wlr_presentation_feedback_send_presented()
We don't need to mutate the event in this function.
2023-06-06 21:38:07 +00:00
Kirill Primak
4c9eb6839d compositor: add a note about ignored input regions 2023-06-06 13:27:11 +03:00
Kirill Primak
3dc646ea88 Add some missing includes/declarations 2023-06-05 21:06:19 +00:00
Rose Hudson
45ca284eee render/gles2: implement timer API 2023-06-05 19:50:07 +00:00
Rose Hudson
9e8947e4d5 add render timer API
Based on five calls:
wlr_render_timer_create - creates a timer which can be reused across
  frames on the same renderer
wlr_renderer_begin_buffer_pass - now takes a timer so that backends can
  record when the rendering starts and finishes
wlr_render_timer_get_time - should be called as late as possible so that
  queries can make their way back from the GPU
wlr_render_timer_destroy - self-explanatory

The timer is exposed as an opaque `struct wlr_render_timer` so that
backends can store whatever they want in there.
2023-06-05 19:50:07 +00:00
Rose Hudson
bd834fe8d1 util: add timespec_to_nsec 2023-06-05 19:50:07 +00:00
Simon Ser
4c5eadecce backend/wayland: add scaling support for output layers
Use the viewporter protocol to scale output layers.
2023-06-05 18:29:55 +00:00
Kirill Primak
49e9be62ae subcompositor: consider mapping on parent map
Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3654
2023-06-03 14:36:41 +00:00
Simon Ser
52b93f7eb4 output/cursor: fix scale and transform
Many issues here:

- wlr_output_cursor_set_buffer() takes a buffer already scaled for
  the output, not a buffer with scale=1.
- wlr_output_cursor.{width,height,hotspot_x,hotspot_y} are in output
  buffer coordinates.
- render_cursor_buffer() had hardcoded no-ops for scale and
  transform, instead of using the cursor surface's.

Fixes: b64e7e88bf ("output: add output_cursor_set_texture()")
2023-06-02 22:33:40 +00:00
Kirill Primak
e75407fd4d session-lock: remove unused wlr_session_lock_surface_v1.events.map 2023-06-02 23:20:05 +03:00
Kirill Primak
d086ee1b9e compositor: remove wlr_surface_role.precommit
It was previously used to handle unmapping properly but is obsolete now.
2023-06-02 21:04:16 +03:00
Kirill Primak
26676c8c07 xwm: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
af4181f388 drag: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
743da5c0ae input-method: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
229abfae0c session-lock: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
c63f3659c5 layer-shell: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
b0437fc416 xdg-shell: use unified map logic 2023-06-02 17:26:18 +00:00
Kirill Primak
c590bb600f subcompositor: use unified map logic 2023-06-02 17:26:18 +00:00