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
Alexander Orzechowski
ce615a44c0
egl: Don't assume display is owned when KHR_display_reference is unsupported
...
We could potentially leak a display here, but not really because the
display acts as a singleton that will be returned next time a renderer
of the same device is created.
2023-08-21 15:51:26 +00:00
Alexander Orzechowski
91a1797a96
egl: Remove dead code
...
Display is always NULL here since egl_init is always last to be called.
2023-08-21 15:51:26 +00:00
Alexander Orzechowski
5f6912595e
renderer/vulkan: Defer device lost signal until end of pass
...
If the compositor were to try to handle a GPU reset within the lost
signal (by recreating the renderer) we should avoid referencing renderer
resources after the lost signal. This prevents use after free for such
compositors.
2023-08-20 21:12:06 -04:00
Alexander Orzechowski
664ec59095
renderer: Sanity check texture source bounds
2023-08-14 08:08:39 +00:00
Simon Ser
c74f89d4f8
Avoid using memcpy() to copy structs
...
We can just use a regular assignment instead. This is more
type-safe since there is no need to provide the struct size.
The remaining memcpy() calls perform array copies or copies from
void pointers (which may be unaligned).
2023-08-03 14:40:28 +00:00
q234rty
061f5fafbd
render/vulkan: use renamed glslang binary by default
...
glslang 12.3.0 renamed glslangValidator to glslang,
use that by default and use the old name as a fallback.
References: https://github.com/KhronosGroup/glslang/blob/main/CHANGES.md?plain=1#L14
2023-07-27 16:06:49 +08:00
Simon Ser
1205f03ec9
render/gles2: wrap timer setup in push_gles2_debug()
...
With this, errors should be properly wrapped in the debug scope.
2023-07-12 06:38:02 +00:00
Simon Ser
b7dca21c2b
render: constify struct wlr_buffer_pass_options
...
Let's not allow renderer implementations to mutate the passed in
options.
2023-07-11 18:19:03 +00:00
Simon Ser
fe06e5f49a
Use wl_container_of() instead of casts
...
This slightly improves type safety.
The culprits were found with:
git grep -E '\([a-z0-9_ ]+ \*\)\W?[a-z]'
2023-07-11 20:16:17 +02:00
Simon Ser
c2c536de03
render/gles2: drop unnecessary cast
...
We can just refer to the struct field here.
2023-07-11 20:15:45 +02:00
Simon Ser
7a9f8d8d6b
Use struct initializers instead of memset()
...
This is a bit more type-safe.
2023-07-07 17:31:11 +02:00
Alexander Orzechowski
38d451bcb5
render/vulkan: Don't compute texture.has_alpha until first...
...
...texture view is dynamically created
2023-06-21 11:37:54 -04:00
Alexander Orzechowski
06c0b0a204
render/vulkan: Initialize to fix compilation error
2023-06-19 18:00:26 -04:00
Simon Ser
be73da28b2
allocator: only use DRM auth if we are master
...
Legacy DRM auth will only work if we are DRM master. Keep using an
unauthenticated DRM FD if we are not DRM master. This should be
enough for GBM.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3674
2023-06-19 19:36:17 +00:00
Alexander Orzechowski
2044cc2311
render: Introduce wlr_render_texture_options.blend_mode
2023-06-19 13:16:34 -04:00
Alexander Orzechowski
693005ac99
pixman: Remove dead code
2023-06-19 12:44:57 -04:00
Alexander Orzechowski
6bd44c4fcd
renderer: Introduce wlr_scale_filter_mode
2023-06-19 12:25:38 -04:00
Alexander Orzechowski
3ee0f52e09
render/vulkan: Dynamically create texture views
...
Now that we are dynamically creating pipeline layouts, we need separate
texture views for each pipeline layout we choose to use with a texture.
2023-06-17 21:21:35 -04:00
Alexander Orzechowski
7c5a3afd60
render/vulkan: Inline init_sampler
2023-06-17 21:21:35 -04:00
Alexander Orzechowski
8a387b5558
render/vulkan: Dynamically create pipeline layouts
...
These will happen lazily when pipelines get created.
2023-06-17 21:21:31 -04:00
Alexander Orzechowski
3623005858
render/vulkan/pipeline_key: Add blending
...
This will become necessary when we switch away from scissoring. For the
time being, this cleans things up a bit and allows for a trivial
blending implementation for textures when that comes.
2023-06-16 19:20:04 -04:00
Alexander Orzechowski
9d31372930
render/vulkan: Handle quad pipeline through generic pipeline path
2023-06-16 19:20:03 -04:00
Alexander Orzechowski
97fdd57eb2
render/vulkan: Dynamically handle pipeline creation for textures
...
If we ever wanted to handle dynamic state that requires new pipelines
such as using different texture filters those can be added here with more
ease.
2023-06-16 19:09:23 -04:00
Simon Ser
709c9dd287
render/vulkan: rename tex_usage to shm_tex_usage
...
Same motivation as fdb199a43c
("render/vulkan: rename
tex_features to shm_tex_features").
2023-06-12 12:02:22 +00:00
Simon Ser
30616bcf0c
render/vulkan: reset scissor before post-blend subpass
...
Otherwise only the last command's area will be copied over.
2023-06-07 21:46:08 +02:00
Simon Ser
150a88bd03
render/vulkan: fix blend subpass matrix
...
renderer->render_{width,height} are unused with the render pass
API.
2023-06-07 21:30:35 +02:00
Simon Ser
fd9e4b860f
render/vulkan: fix bound pipeline check for output_pipe
...
renderer->bound_pipe is legacy, pass->bound_pipeline is used for
the render pass API code-path.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3657
2023-06-07 20:46:33 +02:00
Simon Ser
1b947c08c6
render/vulkan: require format info for shm
...
We use the format info to check the stride and need it to perform
the texture upload.
2023-06-07 10:06:27 +00:00
Simon Ser
2a2f0772a9
render/vulkan: de-duplicate texture VkImageView init
...
The logic is the same for both shm and DMA-BUF.
2023-06-07 10:06:27 +00:00
Simon Ser
cebe991e95
render/vulkan: split off YCbCr texture features
...
Avoids repeating the common bits between dma_tex_features and
dma_tex_ycbcr_features, and we will need just the YCbCr-related
flags for shm YCbCr support soon.
2023-06-07 10:06:27 +00:00
Simon Ser
fdb199a43c
render/vulkan: rename tex_features to shm_tex_features
...
These features are required for shm only: the TRANSFER stuff is
for texture upload. We don't need these for DMA-BUFs. Make this
clearer by changing the name.
Also re-order the definitions to group all texture-related features
together.
2023-06-07 10:06:27 +00:00
Alexander Orzechowski
398c6b66c6
render/gles2: Handle NULL timer
2023-06-06 02:17:10 -04:00
Alexander Orzechowski
e0424b24f6
renderer: Don't pass NULL options
2023-06-06 02:14:47 -04:00
Rose Hudson
45ca284eee
render/gles2: implement timer API
2023-06-05 19:50:07 +00:00
Rose Hudson
9e8947e4d5
add render timer API
...
Based on five calls:
wlr_render_timer_create - creates a timer which can be reused across
frames on the same renderer
wlr_renderer_begin_buffer_pass - now takes a timer so that backends can
record when the rendering starts and finishes
wlr_render_timer_get_time - should be called as late as possible so that
queries can make their way back from the GPU
wlr_render_timer_destroy - self-explanatory
The timer is exposed as an opaque `struct wlr_render_timer` so that
backends can store whatever they want in there.
2023-06-05 19:50:07 +00:00
Simon Ser
beb820b573
render/vulkan: improve error handling in vulkan_begin_render_pass()
...
Release the command buffer if we end up not submitting it.
2023-06-01 10:42:56 +02:00
Simon Ser
0ba3ea3bcd
render/vulkan: improve error handling in render_pass_submit()
...
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3644
2023-06-01 10:42:56 +02:00
Simon Ser
ba276e5ac2
render/vulkan: handle vulkan_record_stage_cb() failures
2023-05-31 19:40:59 +00:00
Simon Ser
e07c77f846
render/vulkan: implement render pass API
2023-05-30 09:42:19 +00:00
Alexander Orzechowski
8af00d5534
renderer/gles2: Implement render pass interface
2023-05-28 14:53:34 -04:00
Alexander Orzechowski
b1d26ed47b
renderer/gles2: Compute texture coordinates based off of vertex positions
2023-05-28 14:53:34 -04:00
Alexander Orzechowski
45b2a8eee2
renderer/gles2: Merge get_buffer and create_buffer
2023-05-28 14:53:34 -04:00
Alexander Orzechowski
6f67bfe5ab
renderer/gles2: Interpret matrix as column major in shader
...
Avoids us needing to transpose.
2023-05-28 14:53:34 -04:00
Simon Ser
3de330ec85
render/vulkan: add 10, 12, and 16-bit YCbCr formats
2023-05-28 14:51:19 +00:00
Simon Ser
28e8d92263
render/vulkan: document TEXTURE_TRANSFORM_* in shader
2023-05-26 12:29:30 +00:00
Simon Ser
f60b367db7
render/vulkan: drop unused vulkan_has_extension()
2023-05-26 12:25:53 +00:00
Simon Ser
42eec38ab6
render/vulkan: drop unused vulkan_change_layout_queue()
2023-05-26 12:25:53 +00:00
Simon Ser
4d634276a4
render/egl: check for EGL_EXT_device_query in get_egl_device_from_drm_fd()
...
We use eglQueryDeviceStringEXT() later on, which is optional and
requires support for the EGL_EXT_device_query extension.
2023-05-24 13:06:19 +00:00
Simon Ser
7099fa2ea4
render/vulkan: de-dup pipeline layout initialization
2023-05-24 08:58:59 +00:00
Simon Ser
16dea12dae
render/vulkan: add more YCbCr formats
...
The Vulkan spec states:
> For the purposes of range expansion and Y′CBCR model conversion,
> the R and B components contain color difference (chroma) values
> and the G component contains luma.
The equations below that sentence also help understand the mapping.
2023-05-24 08:58:59 +00:00
Simon Ser
a682fa6c21
render/vulkan: require support for linear filter for YCbCr
...
YCBCR_CONVERSION_LINEAR_FILTER is not enough: this one only covers
chromaFilter. For magFilter/minFilter we need FILTER_LINEAR as well.
2023-05-24 08:58:59 +00:00
Simon Ser
91d469d8c0
render/vulkan: check format support before creating YCbCr sampler
...
We need to check whether the format supports dma_tex_ycbcr_features
before creating the YCbCr sampler.
2023-05-24 08:58:59 +00:00
Simon Ser
c7ae9dfaf8
render/vulkan: generalize YCbCr format support
2023-05-24 08:58:59 +00:00
Simon Ser
50b494d0f9
render/vulkan: add init_{default,ycbcr}_pipeline_layout()
2023-05-24 08:58:59 +00:00
Simon Ser
5ea0eb3468
render/vulkan: add vulkan_get_pipeline_layout()
...
Will make it easier to add more pipeline layouts for other YCbCr
formats.
2023-05-24 08:58:59 +00:00
Simon Ser
fd38761676
render/vulkan: introduce struct wlr_vk_pipeline_layout
...
This will make it easier to create one pipeline layout (plus related
objects) per YCbCr format.
2023-05-24 08:58:59 +00:00
Simon Ser
db619009dc
render/vulkan: use same sampler params for RGBA and NV12
2023-05-24 08:58:59 +00:00
Simon Ser
9755016422
render/vulkan: use VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE for default sampler
...
We don't actually need the REPEAT mode, and this makes things more
consistent with the YCbCr sampler (which requires CLAMP_TO_EDGE for
spec compliance).
Also drop borderColor which is unused for this mode.
2023-05-24 08:58:59 +00:00
Simon Ser
fe7c998666
render/vulkan: use identity swizzle for YCbCr formats
...
Fixes the following validation error:
[ VUID-VkImageViewCreateInfo-pNext-01970 ] Object 0: handle = 0x62e00003c400, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xf378e14b | vkCreateImageView(): If there is a VkSamplerYcbcrConversion, the imageView must be created with the identity swizzle.
2023-05-24 08:58:59 +00:00
Simon Ser
091aa5582a
render/vulkan: fix VkPipelineLayout when texturing NV12
...
The default pipeline layout was always passed. However, for NV12 we
need to pass a different one.
2023-05-24 08:58:59 +00:00
Simon Ser
fc3ad784e0
render/vulkan: extract quad pipeline init to separate function
...
Makes it clearer that all of these structs are for the quad pipeline.
2023-05-24 08:58:59 +00:00
Simon Ser
09f5a00585
render/vulkan: fix YCbCr format check in vulkan_texture_from_pixels()
2023-05-23 20:31:42 +02:00
Simon Ser
d7bebb0a4c
render/vulkan: drop unnecessary comments
...
Some comments in here are noise.
2023-05-22 18:53:15 +02:00
Simon Ser
17b10746b4
render/pixel-format: add YVYU and VYUY
2023-05-21 20:28:45 +00:00
Simon Ser
96f3f3c92e
render/pixel-format: add support for block-based formats
...
Some formats like sub-sampled YCbCr use a block of bytes to
store the color values for more than one pixel. Update our format
table to be able to handle such formats.
2023-05-21 20:28:45 +00:00
Tobias Predel
e449c1dec8
wlr_drm_format_set_copy: Do not allocate heap
...
Address Sanitizer reported two memory leaks because of
fmt not being freed in wlr_drm_format_set_copy.
This commit fixes the memory leak by removing the
allocation to the heap. The struct is allocated to the
stack anyway.
2023-05-14 17:50:08 +02:00
Manuel Stoeckl
10dd416694
render/vulkan: allow rendering to non-8-bit buffers
...
This is implemented by a two-subpass rendering scheme; the first
subpass draws (and blends) onto a linear R16G16B16A16_SFLOAT buffer,
while the second subpass performs linear->srgb conversion, writing
onto the actual output buffer.
2023-05-12 15:09:02 +00:00
Simon Ser
8cdc4b7a31
render/vulkan: wait for idle queue before destroying render buffer
...
This fixes the following validation errors when shutting down Sway:
00:00:01.263 [wlr] [render/vulkan/vulkan.c:65] Validation Error: [ VUID-vkDestroyFramebuffer-framebuffer-00892 ] Object 0: handle = 0x62e00003c400, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xdb308312 | Cannot call vkDestroyFramebuffer on VkFramebuffer 0x2e2cd000000002b[] that is currently in use by a command buffer. The Vulkan spec states: All submitted commands that refer to framebuffer must have completed execution (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkDestroyFramebuffer-framebuffer-00892 ) (VUID-vkDestroyFramebuffer-framebuffer-00892)
00:00:01.264 [wlr] [render/vulkan/vulkan.c:65] Validation Error: [ VUID-vkDestroyImage-image-01000 ] Object 0: handle = 0x62e00003c400, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xf2d29b5a | Cannot call vkDestroyImage on VkImage 0x3fbcd60000000028[] that is currently in use by a command buffer. The Vulkan spec states: All submitted commands that refer to image, either directly or via a VkImageView, must have completed execution (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkDestroyImage-image-01000 ) (VUID-vkDestroyImage-image-01000)
2023-05-12 16:13:24 +02:00
Alexander Orzechowski
47e175ae7f
wlr_drm_format_set_intersect: Clear destination before trying to write to it
2023-05-11 14:43:22 -04:00
Alexander Orzechowski
300bd80772
wlr_drm_format_set: Store formats on array
2023-05-11 18:25:52 +02:00
Alexander Orzechowski
90d08f8f1c
wlr_drm_format: Rework wlr_drm_format_intersect
...
Now it takes a reference to a destination format
2023-05-11 18:24:43 +02:00
Alexander Orzechowski
340700cb70
wlr_drm_format: Change wlr_drm_format_dup to copy
2023-05-11 18:24:43 +02:00
Alexander Orzechowski
099a147439
wlr_drm_format: Change wlr_drm_format_create to init
2023-05-11 18:24:40 +02:00
Alexander Orzechowski
e427e019c4
wlr_drm_format: Don't take double pointer in wlr_drm_format_add
2023-05-11 03:51:01 -04:00
Alexander Orzechowski
e6879616e7
wlr_drm_format: Make structure constant length
...
Don't store modifiers as part of the struct.
2023-05-11 03:51:01 -04:00
Alexander Orzechowski
b45396c790
wlr_drm_format: Introduce drm_format_finish
2023-05-11 03:51:01 -04:00
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.
2023-05-11 07:25:32 +00:00
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.
2023-05-09 12:39:20 +02:00
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.
2023-05-06 18:16:45 +00:00
Simon Ser
b03f71fe5f
render/vulkan: add support for NV12
2023-05-04 20:07:20 +00:00
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.
2023-05-04 18:19:33 +00:00
Alexander Orzechowski
1ee75786b4
drm_format_set_union: Require initialized dst and remove assert
2023-05-04 18:19:33 +00:00
Simon Ser
403eac51c4
render/vulkan: fix code style for function brackets
2023-05-04 13:31:29 +02:00
Austin Shafer
ec37d55a5e
Add union function for format sets
2023-05-03 12:06:48 -04:00
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.
2023-05-02 21:32:51 +02:00
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")
2023-05-02 15:49:17 +00:00
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.
2023-04-28 15:36:39 +00:00
Simon Ser
6830bfc17f
render/pixman: implement render pass API
2023-04-25 17:26:35 +02:00
Simon Ser
6ce371a317
render/pixman: add begin_pixman_data_ptr_access()
...
This logic is used twice.
2023-04-25 17:26:35 +02:00
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.
2023-04-25 17:25:10 +02:00
Simon Ser
4a1ad32534
render: add render pass helpers
2023-04-25 17:25:10 +02:00
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
2023-04-25 17:25:10 +02:00
Simon Ser
d795824346
render/vulkan: fix signedness of strcmp() return value
...
strcmp() returns a signed integer.
2023-04-19 15:29:53 +02:00
Simon Ser
62e60ba889
render/vulkan: use initializer in vulkan_change_layout_queue()
2023-04-19 15:29:26 +02:00
Simon Ser
74e8fd8a9a
render/vulkan: remove extra newline
2023-04-19 15:29:11 +02:00
Simon Ser
92b726ef67
render/vulkan: use full names for extension command fields
...
This makes grepping much easier.
2023-04-18 15:58:55 +00:00
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.
2023-04-12 14:04:25 +00:00
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