Simon Ser
59d2743c0c
render/vulkan: avoid double-close on sync_file FD after semaphore import
...
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3610
2023-03-26 07:19:01 +00:00
Brett Ernst
7d9938c957
drm_format_set: fix realloc size
2023-03-16 18:13:11 -07:00
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.
2023-02-28 14:25:21 +00:00
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")
2023-02-24 16:41:40 +00:00
Simon Ser
8619ffab21
swapchain: remove allocator listener on destroy
...
Past that point the wlr_allocator is gone and the listeners are
invalidated.
2023-02-24 00:07:41 +01:00
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.
2023-02-21 17:14:31 +01:00
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`.
2023-02-18 11:49:51 -05:00
Eric Engestrom
c73e20628a
render/egl: skip incompatible EGL devices
...
Without EGL_EXT_device_drm, eglQueryDeviceStringEXT(EGL_DRM_DEVICE_FILE_EXT) further below is invalid.
2023-02-16 19:43:06 +00:00
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
2023-02-02 22:54:13 +01:00
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.
2023-02-02 22:42:42 +01:00
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
2023-01-19 18:50:59 +00:00
Brett Ernst
1ba322e9ff
vulkan: increase max stage size to support large buffers
2023-01-18 19:45:26 -08:00
llyyr
10e16db738
render/vulkan: use correct source offset in read_pixels
2023-01-18 06:56:49 +05:30
Kirill Primak
faa31d123f
render/vulkan: always finish buffer addon on texture destroy
2022-12-22 12:42:08 +03:00
Kirill Primak
0702eb9219
render/vulkan: remove NULL renderer check on texture destroy
2022-12-22 11:45:12 +03:00
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.
2022-12-13 16:43:22 +00:00
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
2022-12-12 23:08:48 +01:00
Simon Ser
32fc23a383
render/pixman: skip mask for opaque texture rendering
2022-12-08 16:53:14 +01:00
Simon Ser
86fc2199f8
build: unify naming for HAVE_* defines
...
We sometimes used HAS_, sometimes polluted the LIBINPUT_ namespace,
etc.
2022-12-06 22:39:45 +00:00
Simon Ser
cb6b1193c8
render/allocator/gbm: use internal_config
...
Removes a project argument.
2022-12-06 22:39:45 +00:00
Simon Ser
1bd0ba3949
render: simplify renderer_autocreate_with_drm_fd()
...
Use early returns to remove the !renderer checks.
2022-12-06 14:58:30 +00:00
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.
2022-12-06 14:54:09 +00:00
Simon Ser
30219cf76b
render/dmabuf: add dmabuf_export_sync_file()
2022-12-06 14:54:09 +00:00
Simon Ser
a37a22e344
render/vulkan: use initializers for VkSubmitInfo
2022-12-03 09:53:32 +01:00
Simon Ser
666c45bb29
render/vulkan: remove stage_cb conditional
...
We always have a stage_cb at this point.
2022-12-03 09:39:12 +01:00
Simon Ser
dd5be430b4
render/vulkan: remove pre_cb in vulkan_end()
...
pre_cb was an alias for stage_cb->vk. Let's just use a single
variable instead.
Additionally, early return when vulkan_record_stage_cb() fails.
We were crashing in vkCmdPipelineBarrier() if that happened.
2022-12-03 09:36:18 +01:00
Simon Ser
27e057319a
render/vulkan: fix vkCmdClearAttachments validation error
...
Skip clears with an empty scissor.
Fixes the following validation error:
00:00:09.734 [wlr] [render/vulkan/vulkan.c:61] Validation Error: [ VUID-vkCmdClearAttachments-rect-02682 ] Object 0: handle = 0x62600001b100, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0xadbd476f | CmdClearAttachments(): pRects[0].rect.extent.width is zero. The Vulkan spec states: The rect member of each element of pRects must have an extent.width greater than 0 (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdClearAttachments-rect-02682 ) (VUID-vkCmdClearAttachments-rect-02682)
2022-12-03 09:30:30 +01:00
Simon Ser
d6ff20268b
render/vulkan: fix comma
2022-12-02 23:26:34 +01:00
Simon Ser
56326c7998
render/vulkan: use initializers for VkImageMemoryBarrier
2022-12-02 23:26:01 +01:00
Simon Ser
79aea58834
render/vulkan: fix missing pSignalSemaphores for stage CB
...
We were filling VkTimelineSemaphoreSubmitInfoKHR.pSignalSemaphoreValues,
but we were missing VkSubmitInfo.pSignalSemaphores.
This was causing VkTimelineSemaphoreSubmitInfoKHR.pSignalSemaphoreValues
to be ignored. By chance, the render command buffer was using the
next timeline point, so we were waiting for that instead.
2022-12-02 19:28:13 +00:00
Simon Ser
47a038c90e
render/vulkan: move VkDescriptorSetAllocateInfo down
...
Move it down, right before it's used.
2022-12-02 18:28:55 +00:00
Simon Zeni
4b3bbb0c4f
render/drm_format_set: fill dst in wlr_drm_format_set_copy
2022-12-02 11:47:47 -05:00
Simon Ser
337ef33edc
render/vulkan: make shm/dmabuf split clearer in wlr_vk_format_props
...
struct wlr_vk_format_props contains a mix of properties for shm
and dmabuf, and it's not immediately clear which fields are for
which kind of buffer. Use a nested struct to group the fields.
2022-12-02 15:18:59 +00:00
Simon Ser
db9d277614
render/vulkan: make vulkan_format_props_find_modifier() return value const
2022-12-02 15:18:59 +00:00
Simon Ser
b4ad4671dc
render/vulkan: check for barrier array alloc failure
2022-12-02 15:14:27 +00:00
Simon Ser
bc7f8de842
render/vulkan: improve message on format prop error
...
Use a more appropriate message on
vkGetPhysicalDeviceImageFormatProperties2() error.
2022-12-02 16:10:42 +01:00
Simon Ser
338a9616bd
render/vulkan: simplify vulkan_format_props_query()
2022-12-02 16:10:41 +01:00
Simon Ser
a3874cac6c
render/vulkan: extract DMA-BUF format query to separate function
2022-12-02 16:09:58 +01:00
Simon Ser
c9b378d21a
render/drm-format-set: add wlr_drm_format_set_copy()
2022-12-02 14:27:07 +00:00
Simon Ser
21c4516838
render/vulkan: add 64-bit UNORM and SFLOAT formats
2022-12-02 10:36:36 +01:00
Simon Ser
9f938f7f2a
render/vulkan: add more packed formats
2022-12-02 10:35:45 +01:00
Simon Ser
171c9081d1
render/vulkan: add more 8 bits per channel formats
2022-12-02 10:28:52 +01:00
Simon Ser
e31c741d2a
render/pixel-format: drop unnecessary fields in the table
...
DRM_FORMAT_INVALID is zero. Let's just omit the fields to make the
table more readable.
2022-12-02 10:28:52 +01:00
Simon Ser
e97ce5f459
render/pixel-format: add various new formats
2022-12-02 10:24:00 +01:00
Simon Ser
ad165f7daf
render/vulkan: explain format mapping with DRM
2022-12-02 10:24:00 +01:00
Simon Ser
8b9a48c984
render/vulkan: drop "_format" in wlr_vk_format fields
...
"format" is already in the name, no need to repeat ourselves.
`format->vk_format` sounds a bit redundant.
2022-12-02 10:24:00 +01:00
Alexander Orzechowski
db0e962368
wlr_texture: Expose owning renderer
2022-12-01 04:41:43 -05:00
Simon Ser
c99c60090c
linux-dmabuf-v1: add version arg to create()
...
To be able to add support for newer versions without breaking
changes.
2022-11-30 14:14:04 +01:00
Simon Ser
444d94ef89
linux-dmabuf-v1: add "_with_renderer" suffix to create() function
...
Make it clear this is a helper consuming a wlr_renderer. We'll
add a lower-level create() function which doesn't take it in the
next commit.
2022-11-30 14:14:02 +01:00
Simon Ser
d2238bf722
render/vulkan: import semaphore to DMA-BUF instead of blocking
...
Right now the Vulkan renderer blocks until the frame is complete
after rendering. This is necessary because Vulkan doesn't
interoperate well with implicit sync we use everywhere else.
Use the new kernel API to import a sync_file into a DMA-BUF to
avoid blocking.
2022-11-28 23:50:41 +00:00