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
JiDe Zhang
8ebfeffdc8
Remove unnecessary code
...
Not needs set GL_DEPTH_TEST, Because when rendering to a framebuffer
that has no depth buffer, depth testing always behaves as though
the test is disabled, The initial value for each capability with
the exception of GL_DITHER is GL_FALSE.
2023-10-31 15:59:38 +00:00
eri
3232697252
render/vulkan: use VK_KHR_global_priority
...
References: #3386
2023-10-26 16:17:57 +00:00
Simon Zeni
1c2f608331
render/vulkan: remove unused queue_props in renderer
2023-10-26 15:12:58 +00:00
Brett Ernst
47bf87ade2
renderer/vulkan: don't add two alphas together in blend func
2023-10-21 17:25:46 +00:00
Simon Ser
5adf325333
render/vulkan: undo alpha premult before sRGB encoding/decoding
...
sRGB encoding/decoding needs to happen with straight alpha, not
pre-multiplied alpha.
2023-10-17 17:28:56 +02:00
Simon Ser
0b15b4a6ae
render/allocator: log message when GBM is disabled
...
When the backend and renderer would need GBM but it's disabled at
compile-time, log a message to make this situation easier to debug.
2023-10-06 09:10:31 +00:00
Simon Ser
db7751f39e
render: log error when requested renderer is compile-time disabled
...
It can be a bit confusing to debug when the user requests an
explicit renderer but it's disabled at build-time. Log an error
when that happens.
2023-10-06 09:10:31 +00:00
Manuel Stoeckl
e0adaaffb6
render/vulkan: constrain blend to output subpass to redrawn region
...
This commit only applies to the render pass API.
2023-10-05 11:45:32 +00:00
Alexander Orzechowski
d817ebb80f
renderer: Don't crash when trying to fallback to pixman
...
Pixman won't be chosen by default if the system has a valid render node
but gles2 and vulkan creation failed.
2023-10-05 05:14:54 -04:00
Alexander Orzechowski
4f92ecde82
renderer_autocreate_with_drm_fd: Ensure fd isn't bogus
2023-10-05 05:00:44 -04:00
Alexander Orzechowski
1b0694b794
treewide: Migrate from sizeof(struct) to sizeof(*pointer) where practical
2023-10-03 01:51:07 -04:00
Alexander Orzechowski
98a745d926
render/pass: Remove empty box early return
2023-09-21 02:25:34 -04:00
Alexander Orzechowski
e9706e62f5
renderer: Use wlr_render_rect_options_get_box
...
Fixes : #3697
2023-09-21 02:25:34 -04:00
Alexander Orzechowski
5299d973d5
render/pass: Introduce wlr_render_rect_options_get_box
2023-09-21 02:25:34 -04:00
Manuel Stoeckl
5aea90264f
render/vulkan: fix validation error with vkCmdBlitImage
...
Specfically, VUID-vkCmdBlitImage-srcImage-00247.
2023-09-10 15:28:57 -04:00
Simon Ser
65bbbbbf0c
render/vulkan: de-duplicate VkImageUsageFlags
...
The flags passed to vkCreateImage() must match the flags used when
querying formats. Make this clearer by using the same variable.
2023-09-09 23:32:28 +00:00
Simon Ser
7bf6c1fc6c
render/pass: ensure rect has positive size
...
Ported from wlr_render_rect().
2023-08-24 03:54:36 +00:00
Manuel Stoeckl
a94168b5fe
render: ensure wlr_render_rect_options->box is nonempty
...
This optimization also fixes an validation error with the Vulkan
renderer by ensuring vkCmdClearAttachments does not receive empty
regions.
2023-08-23 18:28:58 +00:00
Simon Ser
11aba53ead
render: only open DRM render node if necessary
...
Only open a render node if we actually need one (ie, if we're about
to attempt GLES2 or Vulkan).
2023-08-23 13:42:07 +02:00