Simon Ser
8430a1922d
render/vulkan: add PQ inverse EOTF to output shader
2025-06-18 00:09:25 +02:00
Simon Ser
f3524de980
render, render/vulkan: add primaries to wlr_buffer_pass_options
2025-06-18 00:07:35 +02:00
Simon Ser
a5706e2fb9
render/vulkan: use array declaration in encode_proj_matrix()
...
This makes it more obvious what the final layout of the matrix will
be.
2025-06-17 19:41:29 +02:00
Simon Ser
1df2274f6c
render/vulkan: rename mat3_to_mat4() to encode_proj_matrix()
...
This function is specific to projection matrices.
2025-06-17 19:35:16 +02:00
Simon Ser
30c6efedf1
render/vulkan: use output_pipe_srgb for non-NULL sRGB color transform
2025-06-17 18:50:25 +02:00
Simon Ser
2ea0e386c4
render/vulkan: add color transformation matrix
2025-06-17 18:47:50 +02:00
Simon Ser
74217a4d93
render/color: introduce COLOR_TRANSFORM_LUT_3X1D
...
This will be useful to apply LUTs applied via wlr_gamma_control_v1,
and to add wlr_color_transform support to wlr_output.
2025-06-16 09:06:10 +00:00
Simon Ser
3665b53e29
render/color: replace COLOR_TRANSFORM_LUT_3D with COLOR_TRANSFORM_LCMS2
...
Converting the LCMS2 transform to a 3D LUT early causes issues:
- It's a lossy process, the consumer will not be able to pick a
3D LUT size on their own.
- It requires unnecessary conversions and allocations: an intermediate
3D LUT is allocated, but the renderer already allocates one.
- It makes it harder to support arbitrary color transforms in the
renderer, because each type needs to be handled differently.
Instead, expose a function to evaluate a color transform, and use
that to build the 3D LUT in the renderer.
2025-06-16 09:06:10 +00:00
Simon Ser
9b97e2607d
render/color: use variable instead of type in sizeof()
...
Conforms to the wlroots code style.
2025-06-16 09:06:10 +00:00
Simon Ser
d421538b4a
render/color: add wlr_color_transform_init()
2025-06-16 09:06:10 +00:00
Simon Ser
8fb4e4dabb
swapchain: assert that size is not empty at creation time
...
Failing later (at buffer allocation time) makes it more difficult
to track down where the issue comes from.
2025-06-16 07:54:00 +00:00
Simon Ser
bb50c7a5a4
render/allocator/gbm: require GBM 21.1
...
Mesa 21.1 was released back in 2021. Let's require it so that we
can simplify our build and remove the workaround.
2025-06-16 07:43:01 +00:00
DreamMaoMao
a08acfcee0
render/pass: Ensure the precision is consistent during comparison
2025-05-29 21:50:21 +08:00
YaoBing Xiao
70add22e74
render/pixman: null check on newly created image
2025-05-07 21:33:22 +08:00
YaoBing Xiao
f36f856cdb
render/drm_syncobj: fix return type mismatch
2025-05-06 17:48:54 +08:00
Simon Ser
e57dd9c5ef
render/vulkan: check binary semaphore in vulkan_sync_render_buffer()
...
Ensure the binary semaphore is available when we need it.
2025-05-05 22:17:11 +02:00
Simon Ser
d4e4c9f64b
render/vulkan: create binary semaphore when signal timeline is supplied
...
We were only creating the binary semaphore when implicit sync
interop was available. We also use the binary semaphore when
explicit sync is enabled.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3973
2025-05-05 22:17:04 +02:00
Kirill Primak
5fd43add1c
Fix/cleanup includes a bit
2025-04-15 20:13:29 +03:00
Simon Ser
10b8880fc7
render/color: add wlr_color_transfer_function_get_default_luminance()
2025-03-30 16:21:26 +02:00
Simon Ser
e11012a024
render/color: introduce wlr_color_primaries_from_named()
2025-03-30 16:21:26 +02:00
Simon Ser
156201fe71
render/color: add wlr_color_primaries_to_xyz()
2025-03-30 16:21:26 +02:00
Simon Ser
e83b06e732
render/vulkan: unify alpha pre-multiplication in output shader
...
Instead of handling alpha pre-multiplication in each branch, add
some common logic before and after handling OUTPUT_TRANSFORM.
2025-02-23 15:41:23 +01:00
Simon Ser
a818251aec
render/pixman: drop cast for pixman_image_set_clip_region32()
...
The new Pixman release has made this const.
2025-01-29 23:33:50 +01:00
Simon Ser
639ca05d35
matrix: move to util/
...
wlr_matrix is not a standalone type like other headers in types/,
it's more of an internal utility. Move it to the appropriate place.
2025-01-27 17:48:18 +01:00
Alexander Orzechowski
c1eb053f5e
render/drm_syncobj: Remove the ready signal from timeline_waiter
...
It's unused.
2025-01-26 18:02:14 -05:00
Alexander Orzechowski
82223e451a
render/drm_syncobj: Add a callback when ready
...
The old approach of using a signal is fundamentally broken for a common
usecase: When the waiter is ready, it's common to immediately finish and
free any resources associated with it.
Because of the semantics of wl_signal_emit_mutable() this is UB.
wl_signal_emit_mutable() always excepts that the waiter hasn't been freed
until the signal has finished being emitted.
Instead of over engineering the solution, let's just add a callback required
by wlr_drm_syncobj_timeline_waiter_init(). In this callback, the implementation
is free to finish() or free() any resource it likes.
2025-01-26 18:02:05 -05:00
Simon Ser
211eb9d60e
matrix: drop rotation
...
It's unused.
2025-01-26 17:56:04 +01:00
Simon Ser
9b55737cf5
Make wlr_matrix private API
...
36cc698bc5 ("matrix: deprecate") has deprecated wlr_matrix more
than one year ago. It's now time to drop it from our public API.
2025-01-26 17:46:50 +01:00
Kirill Primak
1c2cb4c802
drm-syncobj: return false instead of NULL
2025-01-24 21:57:28 +03:00
Kirill Primak
8f56f7ca43
Assert (almost all) signals have no attached listeners on destroy
2025-01-15 19:53:11 +03:00
Kirill Primak
7963ba6a0d
buffer: introduce wlr_buffer_finish()
2025-01-08 16:06:12 +00:00
Kirill Primak
38923826c3
xwayland,render/vulkan: fix some size assertions
2024-12-30 12:47:54 +03:00
liupeng
fa4d8bbad7
render/egl: attribs len could be equal to size
...
Exts.KHR_display_reference makes assert fail.
2024-12-30 17:34:02 +08:00
Simon Ser
b908d865b1
backend: replace get_buffer_caps hook with a struct field
...
Do the same as wlr_renderer: the supported buffer capabilities are
static for the lifetime of the backend.
2024-12-25 18:40:05 +00:00
Simon Ser
9fdffba170
render/allocator: use udmabuf allocator automatically
...
It makes sense to use udmabuf when the backend wants shm, the
renderer wants DMA-BUFs, and we don't have a DRM FD because we're
running with a software renderer (e.g. llvmpipe or lavapipe).
2024-12-22 21:37:57 +00:00
Simon Ser
cfcf06b8b0
render: add WLR_RENDERER_FORCE_SOFTWARE env var
...
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3693
2024-12-22 21:37:57 +00:00
Simon Ser
24232e8e98
render/vulkan: accept negative DRM FD to select software rendering
2024-12-22 21:37:57 +00:00
Simon Ser
b4ce0d8b39
render/egl: accept negative DRM FD to select software rendering
2024-12-22 21:37:57 +00:00
Simon Ser
7cf8e80ffe
render/allocator: add udmabuf allocator
...
udmabuf can create a DMA-BUF backed by a memfd. This is useful
when running with a software implementation of GL/Vulkan: the memfd
can be passed to the parent compositor via wl_shm and the DMA-BUF
can be imported via the usual APIs into GL/Vulkan.
2024-12-22 21:37:57 +00:00
Simon Ser
2b4f30dc1d
render/gles2: validate shaders at build time
...
Use glslang to validate GLSL shaders at build time. This is
optional: if glslang is not found, shader validation is skipped.
2024-12-15 13:59:42 +01:00
Simon Ser
9649fbe443
render/vulkan: fix crash on OOM
...
Closes: https://github.com/swaywm/sway/issues/8485
2024-12-06 14:28:40 +00:00
Simon Ser
2424b1ecdd
render/drm_format_set: fix corruption in wlr_drm_format_set_remove()
...
A single byte was moved instead of a full uint64_t. This results
in corrupted lists containing bogus modifiers.
2024-11-28 19:14:31 +00:00
Simon Ser
ca29f43a54
render/drm_syncobj: add addon set
2024-11-11 15:22:22 +00:00
Simon Ser
8e36040e88
render/drm_syncobj: de-duplicate drm_syncobj timeline init
2024-11-11 15:22:22 +00:00
Kenny Levinsen
70d3635985
drm_format_set: Add wlr_drm_format_set_remove
...
wlr_drm_format_set_remove lets you remove a modifier from the specified
format, useful for filtering implicit modifiers.
2024-11-08 13:45:05 +01:00
Simon Ser
c0945b6613
render/allocator: drop allocator_autocreate_with_drm_fd()
...
This is now unused.
2024-11-07 18:55:01 +01:00
Simon Ser
4ec1defb3e
all: use public <wlr/render/allocator.h>
...
We don't need to use the private header in these files.
2024-11-07 18:48:20 +01:00
Kenny Levinsen
1f13bc72fe
render/vulkan: Garbage collect unused buffers
...
Perform a primitive garbage collection of buffers that have not been
used in the past 10 seconds, an arbitrarily selected number.
As garbage collection also makes span buffer allocation happen much more
often, logging on allocation activity leads to a lot of log noise so get
rid of that while at it.
2024-11-07 09:49:29 +00:00
mmcomando
c5d8f6d187
Consider using vulkan renderer in default configuration
...
With this change vulkan renderer can be automatically chosen in two more cases:
GLES2 renderer is disabled at compile time
GLES2 renderer failed to be created
Main purpose of this change is to automatically choose vulkan as renderer when GLES2 renderer is not enabled.
2024-11-06 08:52:58 +01:00
Simon Ser
3bbfae73ae
render/vulkan: add support for explicit sync
2024-10-28 17:51:21 +00:00