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