Commit Graph

789 Commits

Author SHA1 Message Date
Austin Shafer d368028bd5 allocator: remove backend parameter in allocator_autocreate_with_drm_fd
Since we only use the backend capabilities here we can simply pass
them in directly. This allows other locations to create an allocator
even if they don't have a backend. They can simply specify the caps
they want instead.
2024-02-02 16:36:31 -05:00
Leo Li 60af3b6b78 render/gles2: Fixup dropping has_alpha from pixel_format
Fixes: 71fb55f3 ("render/pixel-format: Move has_alpha into it's own array")
2024-01-31 20:27:22 +01:00
Leo Li 71fb55f3bf render/pixel-format: Move has_alpha into it's own array
Some opaque pixel formats (nv12, p010) require per-plane bytes_per_block
info. However, it doesn't make sense to store them in
wlr_pixel_format_info, as they will never be useful (currently, this
info is used for shm, which doesn't have a concept of multi-planar
buffers.)

Let's define a separate array and function for determining whether a
pixel format has alpha.
2024-01-31 13:47:17 -05:00
Félix Poisot 5ae8ce807a render/vulkan: correct sRBG gamma expansion in shader 2024-01-26 13:50:55 +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
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
Simon Ser 4635717d82 render/gles2: drop legacy rendering API 2023-11-22 11:33:10 +01:00
Simon Ser 40633ae7fd render: drop legacy render pass
All built-in renderers now implement the new API.
2023-11-22 00:55:56 +01:00
Manuel Stoeckl dbe7fb7027 render/vulkan: undo alpha premult for 8-bpc ARGB/ABGR
When a texel from the Vulkan format VK_FORMAT_B8G8R8A8_SRGB is read,
the sRGB to linear conversion is applied independently to the R, G,
and B channels; the A channel has no influence on this. However,
DRM_FORMAT_ARGB8888 buffers are, per Wayland protocol, not encoded
in this fashion; one must first unpremultiply the color channels
before doing sRGB to linear conversion. This commit switches to
handling ARGB8888 and ABGR8888 formats using the general fragment
shader conversion from electrical to optical values.
2023-11-21 11:08:55 +00:00