Simon Ser
9e53f89c1b
Merge branch 'vk-upload-thread' into 'master'
...
Draft: render/vulkan: add upload thread
See merge request wlroots/wlroots!4454
2024-01-25 11:00:38 +00:00
Kirill Primak
20b99ed854
render/drm_format_set: fix possible leak on realloc error
2024-01-17 15:44:37 +00:00
Kirill Primak
3eb89e5325
render/vulkan: fix possible double free
2024-01-17 15:44:37 +00:00
Simon Ser
a0b1329ee6
Fix bool return types
...
This makes wlroots build in C23 mode.
C23 is more strict and rejects implicit conversions from bool to a
pointer.
2024-01-04 22:24:06 +01:00
Simon Ser
2f2a55ebd3
render: stop auto-creating wl_drm
...
wl_drm is a legacy interface superseded by the linux-dmabuf
protocol. All clients should migrate.
As a first step, stop creating the wl_drm global by default.
This should let us discover any remaining issues in clients.
Compositors can still manually create the global if they want to.
As a second step, we can completely drop our implementation.
2024-01-03 20:52:34 +00:00
Roman Gilg
3531007b75
render/pixman: add wlr_pixman_renderer_get_buffer_image()
...
This is similar to wlr_pixman_texture_get_image and can be useful for
compositors to access the rendering data.
2023-12-11 19:47:55 +01:00
Simon Ser
1f64f3925c
render/gles2: add wlr_gles2_renderer_get_buffer_fbo()
...
Replacement for wlr_gles2_renderer_get_current_fbo(). Wayfire uses
it for instance.
2023-12-05 18:57:43 +01:00
Simon Ser
4ed8df9ab2
render: disable linux-dmabuf without DRM FD
...
linux-dmabuf used to not need a DRM FD, however since v4 a DRM FD
is required for the main_device event.
2023-12-04 15:28:18 +00:00
Manuel Stoeckl
d6859da3b4
render/vulkan: use _SRGB image view when possible
...
This is the last of a set of commits which ensures that both textures
and render buffers can be accessed through _UNORM and _SRGB image
views. While _UNORM image views are not yet used for 8-bpc image
formats, they will be needed in the future to support color transforms
for both textures and render buffers.
2023-12-04 15:13:31 +00:00
Manuel Stoeckl
566c413d8f
render/vulkan: constify vulkan_format_props_find_modifier
2023-12-04 15:13:31 +00:00
Manuel Stoeckl
88a4b9eefd
render/vulkan: create VkImage with option for _SRGB view, if possible
2023-12-04 15:13:31 +00:00
Manuel Stoeckl
fd4548bb93
render/vulkan: detect which _UNORM formats support _SRGB views
2023-12-04 15:13:31 +00:00
Manuel Stoeckl
acc70ee3a5
render/vulkan: extract shm texture format query into function
2023-12-04 15:13:31 +00:00
Manuel Stoeckl
eab89d6c76
render/vulkan: track and use _UNORM variants of _SRGB formats
...
Later commits will start using _SRGB image views again,
where appropriate.
2023-12-04 15:13:31 +00:00
Simon Ser
2c0fdb7e65
hack: measure timings
2023-12-04 11:37:10 +01:00
Simon Ser
fee8969955
render/vulkan: add upload thread
...
TODO:
- Update blocking stage submission as well
- Allow multiple data ptr accesses
- Stop abusing FDs for multi-thread queue
2023-12-04 11:37:09 +01:00
Simon Ser
79cbbfb366
render/vulkan: keep wlr_vk_shared_buffer mapped
2023-12-04 11:36:48 +01:00
Simon Ser
50b471e035
render/vulkan: extract pixel copy into separate function
2023-12-04 11:36:48 +01:00
Simon Ser
a59dd1d567
render/vulkan: add upload timeline semaphore
...
Doesn't do much at the moment, since it's always signalled when
we submit the stage buffer.
2023-12-04 11:36:47 +01:00
Simon Ser
7abb227617
render: take event loop as input when creating renderer
...
Some renderers will need access to the event loop for async GPU
uploads.
2023-12-04 11:36:20 +01:00
Alexander Orzechowski
6e03d3015e
swapchain: Add wlr_swapchain_has_buffer
2023-12-03 05:29:05 +00:00
Alexander Orzechowski
d3a339a03e
renderer: Drop buffer binding
2023-11-30 20:11:50 -05:00
Alexander Orzechowski
3ed1268f64
render: Nuke old read pixels API
...
Sadly, the new API is not backwards compatible with the old API. Since
we have already switched all users in wlroots to the new API compositors
are already practically mandated to implement the new API. Let's get rid
of the old one since there is no point.
2023-11-30 20:01:12 -05:00
Alexander Orzechowski
c5a3c5ca4c
render: Implement texture_preferred_read_format
2023-11-30 20:01:12 -05:00
Alexander Orzechowski
57b18d26d0
wlr_texture: Introduce wlr_texture_preferred_read_format
2023-11-30 19:56:54 -05:00
Alexander Orzechowski
09f16b2a9c
render/vulkan: Implement texture_read_pixels
2023-11-30 19:56:54 -05:00
Alexander Orzechowski
e7055b4840
render/gles2: Implement texture_read_pixels
...
Also get rid of gles2_texture.owns_texture. We only use the tex/fbo
2023-11-30 19:56:41 -05:00
Alexander Orzechowski
01bd098166
render/pixman: Implement texture_read_pixels
2023-11-30 19:56:17 -05:00
Alexander Orzechowski
e85e8bc324
wlr_texture: Introduce wlr_texture_read_pixels_options helpers
2023-11-30 19:55:51 -05:00
Alexander Orzechowski
4c6caa7c48
wlr_texture: Introduce wlr_texture_read_pixels
2023-11-30 19:55:12 -05:00
Simon Ser
e8b187cc92
render/gles2: save/restore context when creating/submitting a render pass
...
This is useful for e.g. lazily blitting a texture for readback
purposes while rendering.
2023-11-30 17:47:11 +01:00
Simon Ser
876d789ad5
render/gles2: reword wlr_gles2_texture comments
...
These comments were a bit misleading:
- "GL_TEXTURE_2D == mutable": not really, imported non-external-only
DMA-BUFs would also use this target, but are not mutable.
- "Only affects target == GL_TEXTURE_2D": same here.
- "If imported from a wlr_buffer": not really, would be NULL if
imported from a shm wlr_buffer.
Adjust these comments to better reflect reality and adjust the check
in gles2_texture_update_from_buffer().
2023-11-30 16:38:25 +01:00
Alexander Orzechowski
84bef5c0c2
render/gles2: Inline texture invalidation
...
Let's us share more code with the other code path
2023-11-30 10:13:18 -05:00
Alexander Orzechowski
9bf51e744e
render/gles2: Don't attach texture as buffer addon
...
Since wlr_gles2_buffer is now managing importing for us, there is
no reason for us to continue doing this.
2023-11-30 10:13:18 -05:00
Alexander Orzechowski
829e34b305
render/gles2: Don't track image in texture
...
We can get it from the buffer
2023-11-30 10:13:18 -05:00
Alexander Orzechowski
cb5f67431b
render/gles2: Don't double import dmabuf
...
We can double import a dmabuf if we use it as a texture target and
a render target. Instead, let's unify render targets and texture dmabuf
imports to use wlr_gles2_buffer which manages the EGLImageKHR
2023-11-30 10:13:18 -05:00
Alexander Orzechowski
665055a1a0
render/gles2: Destroy textures first
...
Since imported textures will be based off of gles2_buffer we have
to destroy textures first or else they will have an invalid reference
to the buffers they are imported from.
2023-11-30 10:13:18 -05:00
Alexander Orzechowski
484e248446
renderer/gles2: Bail rendering to external buffers when binding them
...
We can't do it while we're creating them because we'll want to use
gles2 buffers for textures soon.
2023-11-30 10:13:18 -05:00
Alexander Orzechowski
0d9cd6932a
render/gles2: Lazily create buffer fbo
2023-11-30 10:13:18 -05:00
Alexander Orzechowski
d7ecdad4e0
render: Drop rendering_with_buffer
...
This is always true now that we can only render with a buffer.
2023-11-29 16:00:24 -05:00
Alexander Orzechowski
3faf9883dc
renderer: Drop wlr_renderer_begin
2023-11-29 15:13:24 -05:00
Simon Ser
62b6c492d5
render/gles2: check external-only flag in get_or_create_buffer()
...
If the external-only flag is set, then the EGLImage is only
supported for use with GL_TEXTURE_EXTERNAL_OES texture targets.
In particular, the EGLImage cannot be bound to a RBO.
2023-11-29 15:28:50 +00:00
Alexander Orzechowski
9118226634
render/gles2: Don't track has_alpha in pixel_format
...
Why track the alpha here when we can already get that information
elsewhere?
2023-11-29 13:25:06 +01:00
Simon Ser
395a08f5d1
render/egl: fallback to GBM FD if EGLDevice is not available
...
It's possible that we don't have an EGLDevice if we created the
EGL context from a GBM device. Let's ensure all GPU-accelerated
renderers always have a DRM FD to return by falling back to GBM's
FD.
2023-11-28 13:12:43 +00:00
Simon Ser
9a0a4ce221
render/vulkan: drop current_command_buffer
...
This was used by the legacy rendering API. Since begin()/end()
only need to set current_render_buffer and nothing else, we can
drop all of these bits.
2023-11-28 12:56:30 +00:00
Simon Ser
56ec13596a
Cleanup wlr_matrix.h includes
...
Many files used to require wlr_matrix but no longer do.
2023-11-25 08:37:43 +01:00
Simon Ser
9e702e9cfe
util/transform: move over wl_output_transform helpers
...
These aren't really tied to wlr_output.
2023-11-23 11:03:57 +01:00
Simon Ser
41494244df
render: drop legacy rendering API
2023-11-22 11:43:05 +01:00
Simon Ser
b2aac3390d
render/vulkan: drop legacy rendering API
2023-11-22 11:36:17 +01:00
Simon Ser
514caea437
render/pixman: drop legacy rendering API
2023-11-22 11:34:32 +01:00