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.
1 year ago
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).
1 year ago
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.
1 year ago
Alexander Orzechowski
91a1797a96
egl: Remove dead code
...
Display is always NULL here since egl_init is always last to be called.
1 year ago
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.
1 year ago
Alexander Orzechowski
664ec59095
renderer: Sanity check texture source bounds
1 year ago
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).
1 year ago
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
1 year ago
Simon Ser
1205f03ec9
render/gles2: wrap timer setup in push_gles2_debug()
...
With this, errors should be properly wrapped in the debug scope.
1 year ago
Simon Ser
b7dca21c2b
render: constify struct wlr_buffer_pass_options
...
Let's not allow renderer implementations to mutate the passed in
options.
1 year ago
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]'
1 year ago
Simon Ser
c2c536de03
render/gles2: drop unnecessary cast
...
We can just refer to the struct field here.
1 year ago
Simon Ser
7a9f8d8d6b
Use struct initializers instead of memset()
...
This is a bit more type-safe.
1 year ago
Alexander Orzechowski
38d451bcb5
render/vulkan: Don't compute texture.has_alpha until first...
...
...texture view is dynamically created
1 year ago
Alexander Orzechowski
06c0b0a204
render/vulkan: Initialize to fix compilation error
1 year ago
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
1 year ago
Alexander Orzechowski
2044cc2311
render: Introduce wlr_render_texture_options.blend_mode
1 year ago
Alexander Orzechowski
693005ac99
pixman: Remove dead code
1 year ago
Alexander Orzechowski
6bd44c4fcd
renderer: Introduce wlr_scale_filter_mode
1 year ago
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.
1 year ago
Alexander Orzechowski
7c5a3afd60
render/vulkan: Inline init_sampler
1 year ago
Alexander Orzechowski
8a387b5558
render/vulkan: Dynamically create pipeline layouts
...
These will happen lazily when pipelines get created.
1 year ago
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.
1 year ago
Alexander Orzechowski
9d31372930
render/vulkan: Handle quad pipeline through generic pipeline path
1 year ago
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.
1 year ago
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").
1 year ago
Simon Ser
30616bcf0c
render/vulkan: reset scissor before post-blend subpass
...
Otherwise only the last command's area will be copied over.
1 year ago
Simon Ser
150a88bd03
render/vulkan: fix blend subpass matrix
...
renderer->render_{width,height} are unused with the render pass
API.
1 year ago
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
1 year ago
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.
1 year ago
Simon Ser
2a2f0772a9
render/vulkan: de-duplicate texture VkImageView init
...
The logic is the same for both shm and DMA-BUF.
1 year ago
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.
1 year ago
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.
1 year ago
Alexander Orzechowski
398c6b66c6
render/gles2: Handle NULL timer
1 year ago
Alexander Orzechowski
e0424b24f6
renderer: Don't pass NULL options
1 year ago
Rose Hudson
45ca284eee
render/gles2: implement timer API
1 year ago
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.
1 year ago
Simon Ser
beb820b573
render/vulkan: improve error handling in vulkan_begin_render_pass()
...
Release the command buffer if we end up not submitting it.
2 years ago
Simon Ser
0ba3ea3bcd
render/vulkan: improve error handling in render_pass_submit()
...
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3644
2 years ago
Simon Ser
ba276e5ac2
render/vulkan: handle vulkan_record_stage_cb() failures
2 years ago
Simon Ser
e07c77f846
render/vulkan: implement render pass API
2 years ago
Alexander Orzechowski
8af00d5534
renderer/gles2: Implement render pass interface
2 years ago
Alexander Orzechowski
b1d26ed47b
renderer/gles2: Compute texture coordinates based off of vertex positions
2 years ago
Alexander Orzechowski
45b2a8eee2
renderer/gles2: Merge get_buffer and create_buffer
2 years ago
Alexander Orzechowski
6f67bfe5ab
renderer/gles2: Interpret matrix as column major in shader
...
Avoids us needing to transpose.
2 years ago
Simon Ser
3de330ec85
render/vulkan: add 10, 12, and 16-bit YCbCr formats
2 years ago
Simon Ser
28e8d92263
render/vulkan: document TEXTURE_TRANSFORM_* in shader
2 years ago
Simon Ser
f60b367db7
render/vulkan: drop unused vulkan_has_extension()
2 years ago
Simon Ser
42eec38ab6
render/vulkan: drop unused vulkan_change_layout_queue()
2 years ago
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.
2 years ago