aboutsummaryrefslogtreecommitdiff
path: root/render/vulkan
AgeCommit message (Collapse)Author
2023-08-20renderer/vulkan: Defer device lost signal until end of passAlexander Orzechowski
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-07-27render/vulkan: use renamed glslang binary by defaultq234rty
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-11render: constify struct wlr_buffer_pass_optionsSimon Ser
Let's not allow renderer implementations to mutate the passed in options.
2023-07-11Use wl_container_of() instead of castsSimon Ser
This slightly improves type safety. The culprits were found with: git grep -E '\([a-z0-9_ ]+ \*\)\W?[a-z]'
2023-06-21render/vulkan: Don't compute texture.has_alpha until first...Alexander Orzechowski
...texture view is dynamically created
2023-06-19render/vulkan: Initialize to fix compilation errorAlexander Orzechowski
2023-06-19render: Introduce wlr_render_texture_options.blend_modeAlexander Orzechowski
2023-06-19renderer: Introduce wlr_scale_filter_modeAlexander Orzechowski
2023-06-17render/vulkan: Dynamically create texture viewsAlexander Orzechowski
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-17render/vulkan: Inline init_samplerAlexander Orzechowski
2023-06-17render/vulkan: Dynamically create pipeline layoutsAlexander Orzechowski
These will happen lazily when pipelines get created.
2023-06-16render/vulkan/pipeline_key: Add blendingAlexander Orzechowski
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-16render/vulkan: Handle quad pipeline through generic pipeline pathAlexander Orzechowski
2023-06-16render/vulkan: Dynamically handle pipeline creation for texturesAlexander Orzechowski
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-12render/vulkan: rename tex_usage to shm_tex_usageSimon Ser
Same motivation as fdb199a43c44 ("render/vulkan: rename tex_features to shm_tex_features").
2023-06-07render/vulkan: reset scissor before post-blend subpassSimon Ser
Otherwise only the last command's area will be copied over.
2023-06-07render/vulkan: fix blend subpass matrixSimon Ser
renderer->render_{width,height} are unused with the render pass API.
2023-06-07render/vulkan: fix bound pipeline check for output_pipeSimon Ser
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-07render/vulkan: require format info for shmSimon Ser
We use the format info to check the stride and need it to perform the texture upload.
2023-06-07render/vulkan: de-duplicate texture VkImageView initSimon Ser
The logic is the same for both shm and DMA-BUF.
2023-06-07render/vulkan: split off YCbCr texture featuresSimon Ser
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-07render/vulkan: rename tex_features to shm_tex_featuresSimon Ser
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-05add render timer APIRose Hudson
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-01render/vulkan: improve error handling in vulkan_begin_render_pass()Simon Ser
Release the command buffer if we end up not submitting it.
2023-06-01render/vulkan: improve error handling in render_pass_submit()Simon Ser
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3644
2023-05-31render/vulkan: handle vulkan_record_stage_cb() failuresSimon Ser
2023-05-30render/vulkan: implement render pass APISimon Ser
2023-05-28render/vulkan: add 10, 12, and 16-bit YCbCr formatsSimon Ser
2023-05-26render/vulkan: document TEXTURE_TRANSFORM_* in shaderSimon Ser
2023-05-26render/vulkan: drop unused vulkan_has_extension()Simon Ser
2023-05-26render/vulkan: drop unused vulkan_change_layout_queue()Simon Ser
2023-05-24render/vulkan: de-dup pipeline layout initializationSimon Ser
2023-05-24render/vulkan: add more YCbCr formatsSimon Ser
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-24render/vulkan: require support for linear filter for YCbCrSimon Ser
YCBCR_CONVERSION_LINEAR_FILTER is not enough: this one only covers chromaFilter. For magFilter/minFilter we need FILTER_LINEAR as well.
2023-05-24render/vulkan: check format support before creating YCbCr samplerSimon Ser
We need to check whether the format supports dma_tex_ycbcr_features before creating the YCbCr sampler.
2023-05-24render/vulkan: generalize YCbCr format supportSimon Ser
2023-05-24render/vulkan: add init_{default,ycbcr}_pipeline_layout()Simon Ser
2023-05-24render/vulkan: add vulkan_get_pipeline_layout()Simon Ser
Will make it easier to add more pipeline layouts for other YCbCr formats.
2023-05-24render/vulkan: introduce struct wlr_vk_pipeline_layoutSimon Ser
This will make it easier to create one pipeline layout (plus related objects) per YCbCr format.
2023-05-24render/vulkan: use same sampler params for RGBA and NV12Simon Ser
2023-05-24render/vulkan: use VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE for default samplerSimon Ser
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-24render/vulkan: use identity swizzle for YCbCr formatsSimon Ser
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-24render/vulkan: fix VkPipelineLayout when texturing NV12Simon Ser
The default pipeline layout was always passed. However, for NV12 we need to pass a different one.
2023-05-24render/vulkan: extract quad pipeline init to separate functionSimon Ser
Makes it clearer that all of these structs are for the quad pipeline.
2023-05-23render/vulkan: fix YCbCr format check in vulkan_texture_from_pixels()Simon Ser
2023-05-22render/vulkan: drop unnecessary commentsSimon Ser
Some comments in here are noise.
2023-05-21render/pixel-format: add support for block-based formatsSimon Ser
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-12render/vulkan: allow rendering to non-8-bit buffersManuel Stoeckl
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-12render/vulkan: wait for idle queue before destroying render bufferSimon Ser
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-11render/vulkan: enable NV12 on big-endianSimon Ser
This format doesn't change its layout on big endian because it's not packed and has 8-bit channels.