Alexander Orzechowski
9613b3bc8a
wlr_scene: Wrap render_list nodes in struct
...
We will be able to add more state here
2023-07-01 09:48:25 +00:00
Alexander Orzechowski
ea3c6fde3a
wlr_scene: Add opaque region blend mode optimization
...
If we are only rendering within a region of the surface that is
advertised as opaque, we can choose no blending
2023-06-27 14:02:25 +00:00
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
Alexander Orzechowski
b5eaa47049
scene: Use wlr_output_state_copy for direct scanout path
2023-06-22 11:56:30 +02:00
Alexander Orzechowski
2ac31fc630
wlr_scene: Introduce wlr_scene_buffer_set_filter_mode
2023-06-20 09:04:35 +00:00
Alexander Orzechowski
58a2f8bd5c
wlr_scene: Clear damage ring on transform change
2023-06-15 14:57:51 +00:00
Alexander Orzechowski
61667404ce
wlr_scene: Clear damage ring on scale change
...
If we were trying to change the scale in wlr_scene_output_build_state,
we would be using incorrect damage
2023-06-15 14:57:51 +00:00
Alexander Orzechowski
96b95bf775
wlr_scene: Reset damage ring bounds every frame
...
This fixes damage issues when a output state attempts to change
the transformed size in some way
2023-06-15 14:57:51 +00:00
Alexander Orzechowski
4391845910
wlr_damage_ring_set_bounds: Ignore duplicate size requests
2023-06-15 14:57:51 +00:00
Alexander Orzechowski
3896b6b107
wlr_scene: Fix transforms with non 1 scale
...
wlr_region_transform / wlr_box_transform want unscaled coordinates here
2023-06-15 14:57:51 +00:00
Alexander Orzechowski
0925a500d1
wlr_scene: Don't use direct scanout if trying to commit a new render_format
...
Found by inspection.
2023-06-12 20:30:09 -04:00
Alexander Orzechowski
05dd08afe5
scene: introduce wlr_scene_output_build_state()
2023-06-12 14:13:09 +02:00
Alexander Orzechowski
7e67b8152b
scene: Don't rely on output current state during rendering
...
In the next commit, state such as scale, transform, width/height that
we gather from the output might be outdated and incorrect.
2023-06-12 14:13:02 +02: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
Alexander Orzechowski
95062904c7
wlr_scene: Introduce wlr_scene_buffer_set_opacity
2023-05-30 15:43:29 +00:00
Alexander Orzechowski
2346b90a9f
wlr_scene: Make scene_rect_from_node public
...
This is in an effort to be more consistent with both already public
getters: wlr_scene_buffer_from_node and wlr_scene_tree_from_node
2023-05-30 15:40:41 +00:00
Alexander Orzechowski
88f80c4a7c
wlr_scene: Make scene_tree_from_node public
...
This is to allow for compositors that want to be more implicit about
how their scene is organized. Such a compositor may want to walk up
at a certain scene node to find something such as a surface to focus on.
2023-05-30 15:40:41 +00:00
Alexander Orzechowski
d495fb8c04
wlr_{box, fbox}_equal: Consider empty boxes NULL
2023-05-23 17:57:16 +00:00
Simon Ser
d7fcc1e96f
scene: port to wlr_render_pass
2023-04-25 17:26:35 +02:00
Alexander Orzechowski
eac2eaa6a9
wlr_scene: Fix potential use-after-free in wlr_scene_buffer_set_buffer
...
Fixes : #3636
2023-04-16 14:01:54 +02:00
Alexander Orzechowski
39be67df46
wlr_scene: Send presentation event before direct scanout output commit
...
We were doing it too late before and surfaces were never getting
the presentation event.
2023-04-14 22:29:24 +02:00
Simon Ser
ec5135cb09
scene: check wlr_output_is_direct_scanout_allowed()
2023-04-06 21:43:43 +02:00
Alexander Orzechowski
9ac94516b8
wlr_scene: Skip direct scanout if there is no damage
2023-03-09 05:38:53 +01:00
Alexander Orzechowski
3ef9f91283
wlr_scene: Add dmabuf_feedback helper
2023-02-20 17:21:17 -05:00
Alexander Orzechowski
4ddc20e14c
wlr_scene: Extract considering logic for direct scanout
2023-02-20 16:53:59 -05:00
Alexander Orzechowski
5007e713b4
wlr_scene: Send intersecting list of scene outputs for outputs_update signal
2023-01-21 16:23:30 -05:00
Simon Ser
fecbaa2bd6
scene: stop listening for output enable/mode events
...
These will go away.
2022-12-01 20:05:04 +00:00
Alexander Orzechowski
32d00984e1
wlr_scene: Expand damage cull region with fractional scales
2022-11-29 07:43:39 +00:00
Alexander Orzechowski
fe21fc6920
wlr_scene: Don't cull the entire output when entering direct scanout
...
We don't need to.
2022-11-29 07:43:39 +00:00
Kirill Primak
5477ad7d90
scene: fix output damage expansion condition
...
Now, it is checked whether an output pixel corresponds to an integer
number of buffer pixels; if it doesn't, the region is altered to take
this into account.
2022-11-28 23:54:29 +00:00
Simon Ser
35a0d9c85d
scene: set output damage during direct scan-out
...
This allows the backend to have access to the frame damage, as
reported by the scanned-out client. Some KMS drivers can make use
of it (e.g. for PSR, or optimized USB transfers in the GUD driver),
and the Wayland/X11 backends forward it to the parent compositor.
2022-11-26 10:06:56 +01:00
Simon Ser
ce089498cc
scene: use wlr_output_state for direct scanout
...
Avoids polluting wlr_output.pending with temporary state. Removes
the need to call wlr_output_rollback() in error codepaths.
2022-11-26 09:52:49 +01:00
Kirill Primak
060df4c6c0
scene: introduce wlr_scene_buffer.events.outputs_update
...
This event is useful for e.g. sending the preferred buffer scale to the
client.
2022-11-24 22:28:13 +00:00
Simon Ser
48541d2f2e
scene: check wlr_renderer_begin return value
2022-11-15 15:50:19 +00:00
Simon Ser
2b22a10478
scene: constify region APIs
2022-11-11 23:11:17 +00:00
Alexander Orzechowski
c58ad0f171
wlr_scene: Remove duplicate buffer check when submitting a new buffer
...
wlr_buffer allows mutation during its lifetime. This happens for
wlr_client_buffer which fixes damage tracking issues.
2022-11-11 15:37:22 +00:00
Simon Ser
440d7fa072
scene: destroy addons before cleaning up internal state
...
This allows addons to access wlr_scene_node/wlr_scene_surface
fields to clean up themselves.
2022-11-08 16:47:59 +00:00
Simon Ser
24c149fefb
scene: fix whitespace
2022-11-08 16:47:59 +00:00
Kirill Primak
123a08b448
scene: fix output damage expansion
...
This fixes e.g. `weston-simple-damage --use-viewport` which technically
renders at the buffer scale of 0.5.
2022-11-08 06:37:42 +00:00
Kirill Primak
92e3c5b798
scene: fix buffer source box transforming
2022-11-05 14:44:57 +03:00
Alexander Orzechowski
c2d2773df5
wlr_scene: Handle fractional scaling better
...
Try to alleviate scaling inaccuracies by implementing a fudge factor.
2022-10-22 19:13:21 +00:00
Alexander Orzechowski
c07424411a
wlr_scene: Destroy the texture when setting a new buffer.
...
Fixes: https://github.com/labwc/labwc/issues/587
Fixes: f0e31e806f
(wlr_scene: Fix not updating the scene node when setting a new buffer)
2022-10-14 20:11:28 +00:00
Alexander Orzechowski
5ba6cf517b
wlr_scene: use wl_container_of() instead of casts
2022-10-13 16:36:05 +00:00
Alexander Orzechowski
99f55303aa
wlr_scene: Apply source box translation
2022-10-10 08:09:55 +00:00
Alexander Orzechowski
ceff381747
wlr_scene: Ignore disabled outputs
2022-10-10 08:09:55 +00:00
Alexander Orzechowski
f0e31e806f
wlr_scene: Fix not updating the scene node when setting a new buffer
...
If a new buffer is set for a buffer node, we must update the entire
node unconditionally if the buffer size changes, or the buffer is given
a buffer where it was previously NULL.
While we're here, let's avoid calling scene_node_update on just damage
updates. If the caller hasn't given us a damage region we just assume
the whole buffer.
2022-10-10 08:09:55 +00:00
Alexander Orzechowski
dd9cfd3e2f
wlr_scene: Be resilient against overflow conditions
...
If the area calculations for output overlap overflow a signed int, we
may not consider it to be a primary output. Turn this into an unsigned
type so this happens less frequently.
Additionally, it is possible the overflow would produce 0, we can handle
this by simply changing the comparison to more than or equal.
While we're here, let's assert that we always assign a primary output
if there are any intersecting outputs.
2022-10-10 08:09:55 +00:00
Alexander Orzechowski
35d94d779c
wlr_scene: Consider screen position when culling background
2022-09-03 18:42:17 -04:00
Alexander Orzechowski
78cf39b6bd
wlr_scene: Don't leak a region32 when texture failed to upload
2022-08-29 16:19:30 +00:00
Alexander Orzechowski
fe9e193ab5
wlr_scene: More sanity checking
...
The render list should neither contain scene trees or null buffers.
2022-08-29 16:19:30 +00:00