Alexander Orzechowski
300bd80772
wlr_drm_format_set: Store formats on array
2 years ago
Alexander Orzechowski
90d08f8f1c
wlr_drm_format: Rework wlr_drm_format_intersect
...
Now it takes a reference to a destination format
2 years ago
Alexander Orzechowski
340700cb70
wlr_drm_format: Change wlr_drm_format_dup to copy
2 years ago
Alexander Orzechowski
099a147439
wlr_drm_format: Change wlr_drm_format_create to init
2 years ago
Alexander Orzechowski
e427e019c4
wlr_drm_format: Don't take double pointer in wlr_drm_format_add
2 years ago
Alexander Orzechowski
e6879616e7
wlr_drm_format: Make structure constant length
...
Don't store modifiers as part of the struct.
2 years ago
Alexander Orzechowski
b45396c790
wlr_drm_format: Introduce drm_format_finish
2 years ago
Simon Ser
e353c5c631
render/vulkan: enable NV12 on big-endian
...
This format doesn't change its layout on big endian because it's
not packed and has 8-bit channels.
2 years ago
Simon Ser
095a63a11c
render/vulkan: improve logging when creating texture
...
Remove debug logs when a texture is created, since this happens
pretty often. Use drmGetFormatName() and drmGetFormatModifierName()
to log DRM formats and modifiers.
2 years ago
Manuel Stoeckl
e6fc5d1e49
render/vulkan: increase next descriptor pool size
...
This ensures that the pool sizes grow exponentially, making the number
of pools needed logarithmic in the number of descriptors, instead of
linear. Since the first pool's size is 256, this change only has an
effect when the compositor creates a large number of textures.
2 years ago
Simon Ser
b03f71fe5f
render/vulkan: add support for NV12
2 years ago
Alexander Orzechowski
5adb1be3a7
drm_format_set_intersect: Require initialized dst and remove assert
...
The usages in linux_dmabuf zero out the dst before passing it so this
change should be fine.
2 years ago
Alexander Orzechowski
1ee75786b4
drm_format_set_union: Require initialized dst and remove assert
2 years ago
Simon Ser
403eac51c4
render/vulkan: fix code style for function brackets
2 years ago
Austin Shafer
ec37d55a5e
Add union function for format sets
2 years ago
Simon Ser
a93fc8afd6
render: introduce blend mode
...
Allow callers to pick the blend mode when rendering a rect. The
"none" mode can be used to disable blending and clear rects.
2 years ago
Simon Ser
6b7d1d732a
render/pixman: fix scaling in render_pass_add_texture()
...
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3642
Fixes: 6830bfc17f
("render/pixman: implement render pass API")
2 years ago
Simon Ser
f5a5712a02
render/vulkan: use VK_KHR_synchronization2
...
This simplifies the vkQueueSubmit call, removing the need to pass
timeline semaphore point values as separate arrays.
2 years ago
Simon Ser
6830bfc17f
render/pixman: implement render pass API
2 years ago
Simon Ser
6ce371a317
render/pixman: add begin_pixman_data_ptr_access()
...
This logic is used twice.
2 years ago
Simon Ser
471249ae4f
render/pass: add legacy render pass implementation
...
Add a render pass implementation which leverages the legacy
rendering API. This is helpful during the migration.
2 years ago
Simon Ser
4a1ad32534
render: add render pass helpers
2 years ago
Simon Ser
756dedae20
Add a new renderer API
...
Goals:
- Extensibility: we need to be able to add new params to the calls
to render a texture/rect. For instance we'll need to add fences to
the render texture operation for explicit sync purposes.
- No implicit state: no more bind_buffer, begin, end.
- No matrices: these hurt Pixman and we don't need them.
- Clip regions for optimized damage repainting.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3188
2 years ago
Simon Ser
d795824346
render/vulkan: fix signedness of strcmp() return value
...
strcmp() returns a signed integer.
2 years ago
Simon Ser
62e60ba889
render/vulkan: use initializer in vulkan_change_layout_queue()
2 years ago
Simon Ser
74e8fd8a9a
render/vulkan: remove extra newline
2 years ago
Simon Ser
92b726ef67
render/vulkan: use full names for extension command fields
...
This makes grepping much easier.
2 years ago
Manuel Stoeckl
40dde59475
render/gles2: use byte-aligned rows for glReadPixels
...
Setting the GLESv2 parameter GL_PACK_ALIGNMENT to 1 ensures that the
stride of the glReadPixels output matches the value computed in
`pack_stride`. Since the default value of GL_PACK_ALIGNMENT is 4, this
does not make a difference under normal use; but without this patch
the stride can be incorrect; for example, with RGB565 buffers and
screenshots of regions with odd width.
2 years ago
Simon Ser
59d2743c0c
render/vulkan: avoid double-close on sync_file FD after semaphore import
...
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3610
2 years ago
Brett Ernst
7d9938c957
drm_format_set: fix realloc size
2 years ago
Simon Ser
40117e1e0d
render/vulkan: prefer render node for wlr_renderer_get_drm_fd()
...
Instead of returning a primary node from wlr_renderer_get_drm_fd(),
prefer to return a render node if any.
2 years ago
Jan Beich
59acc69737
vulkan: silence -Wint-conversion on 32-bit architectures
...
render/vulkan/renderer.c:388:70: error: incompatible pointer to integer conversion passing 'void *' to parameter of type 'VkFence' (aka 'unsigned long long') [-Werror,-Wint-conversion]
VkResult res = vkQueueSubmit(renderer->dev->queue, 1, &submit_info, NULL);
^~~~
render/vulkan/renderer.c:1141:81: error: incompatible pointer to integer conversion passing 'void *' to parameter of type 'VkFence' (aka 'unsigned long long') [-Werror,-Wint-conversion]
VkResult res = vkQueueSubmit(renderer->dev->queue, submit_count, submit_infos, NULL);
^~~~
/usr/include/sys/_null.h:34:14: note: expanded from macro 'NULL'
#define NULL ((void *)0)
^~~~~~~~~~~
/usr/local/include/vulkan/vulkan_core.h:4054:49: note: passing argument to parameter 'fence' here
VkFence fence);
^
Fixes: a8a194d695
("render/vulkan: switch to timeline semaphores")
2 years ago
Simon Ser
8619ffab21
swapchain: remove allocator listener on destroy
...
Past that point the wlr_allocator is gone and the listeners are
invalidated.
2 years ago
Simon Ser
b33ab26fe7
render/swapchain: make public
...
We've had this struct for a while. It'd be useful for compositors
if they want to manage the swap chains themselves instead of being
forced to use wlr_output's. Some compositors might also want to use
a swapchain without an output.
2 years ago
Simon Zeni
782b5e6565
Revert "render/egl: skip incompatible EGL devices"
...
Reverts commit c73e20628a
.
This caused a regression in the GLES2 renderer because `egl->exts.EXT_device_drm` is set in
`egl_init_display()`, which is invoked after `get_egl_device_from_drm_fd()`. So the function will
always return `EGL_NO_DEVICE_EXT`.
2 years ago
Eric Engestrom
c73e20628a
render/egl: skip incompatible EGL devices
...
Without EGL_EXT_device_drm, eglQueryDeviceStringEXT(EGL_DRM_DEVICE_FILE_EXT) further below is invalid.
2 years ago
Simon Ser
677a3f2f88
render/gles2: default to highp if available
...
The spec [1] says that the maximum value for a mediump float
is at least 2¹⁴ in section 4.5.2. However, when using a 4k
resolution texture coordinates will exceed this value. This causes
issues on drivers which implement mediump as a 16-bit [2].
Switch to highp. There's a twist: on GLES2, support for highp is
optional. So we need to guard it with cute GL_FRAGMENT_PRECISION_HIGH
ifdefs.
[1]: https://registry.khronos.org/OpenGL/specs/es/2.0/GLSL_ES_Specification_1.00.pdf
[2]: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21082
2 years ago
Simon Ser
0534d12b28
render/gles2: use correct type for shader type
...
Doesn't matter a lot, but let's try to be consistent with the
GL headers.
2 years ago
Simon Ser
377668aaf6
render/vulkan: check that requested size is smaller than max
...
Fail with a clearer error when the requested size is too large.
Without this, we allocate a buffer with a size smaller than what
was requested.
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3975
2 years ago
Brett Ernst
1ba322e9ff
vulkan: increase max stage size to support large buffers
2 years ago
llyyr
10e16db738
render/vulkan: use correct source offset in read_pixels
2 years ago
Kirill Primak
faa31d123f
render/vulkan: always finish buffer addon on texture destroy
2 years ago
Kirill Primak
0702eb9219
render/vulkan: remove NULL renderer check on texture destroy
2 years ago
Simon Ser
f12cdc53f3
render/egl: stop advertising render support for external-only formats
...
Some formats like YUV are only supported by Mesa for sampling, not
for rendering. However we always unconditionally added the INVALID
modifier to the list of render formats.
Check whether all modifiers are external-only, in that case, don't
add INVALID to the list of render formats.
2 years ago
Simon Ser
80074d95fb
egl: consistently use EGLint for DMA-BUF format
...
EGL_EXT_image_dma_buf_import_modifiers [1] uses EGLint to carry
formats. We were casting it to int (which may not be the same
width) and uint32_t (which may change the value).
Instead, use EGLint everywhere.
[1]: https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt
2 years ago
Simon Ser
32fc23a383
render/pixman: skip mask for opaque texture rendering
2 years ago
Simon Ser
86fc2199f8
build: unify naming for HAVE_* defines
...
We sometimes used HAS_, sometimes polluted the LIBINPUT_ namespace,
etc.
2 years ago
Simon Ser
cb6b1193c8
render/allocator/gbm: use internal_config
...
Removes a project argument.
2 years ago
Simon Ser
1bd0ba3949
render: simplify renderer_autocreate_with_drm_fd()
...
Use early returns to remove the !renderer checks.
2 years ago
Simon Ser
8456ac6fa9
render/vulkan: wait for DMA-BUF fences
...
The Vulkan spec doesn't guarantee that the driver will wait for
implicitly synchronized client buffers before texturing from them.
radv happens to perform the wait, but anv doesn't.
Fix this by extracting implicit fences from DMA-BUFs, importing
them into Vulkan as a VkSemaphore objects, and make the render pass
wait on these VkSemaphores.
2 years ago