aboutsummaryrefslogtreecommitdiff
path: root/render/vulkan
AgeCommit message (Collapse)Author
2024-02-22render/vulkan: Avoid double-free on calloc errorKenny Levinsen
In query_modifier_support, the calloc for either or both of render_mods and texture_mods may fail, in which case both are freed for convenience. However, if one is non-NULL, vulkan_format_props_finish will try to free it again. NULL them to avoid double-free.
2024-02-15Define _POSIX_C_SOURCE globallySimon Ser
Stop trying to maintain a per-file _POSIX_C_SOURCE. Instead, require POSIX.1-2008 globally. A lot of core source files depend on that already. Some care must be taken on a few select files where we need a bit more than POSIX. Some files need XSI extensions (_XOPEN_SOURCE) and some files need BSD extensions (_DEFAULT_SOURCE). In both cases, these feature test macros imply _POSIX_C_SOURCE. Make sure to not define both these macros and _POSIX_C_SOURCE explicitly to avoid POSIX requirement conflicts (e.g. _POSIX_C_SOURCE says POSIX.1-2001 but _XOPEN_SOURCE says POSIX.1-2008). Additionally, there is one special case in render/vulkan/vulkan.c. That file needs major()/minor(), and these are system-specific. On FreeBSD, _POSIX_C_SOURCE hides system-specific symbols so we need to make sure it's not defined for this file. On Linux, we can explicitly include <sys/sysmacros.h> and ensure that apart from symbols defined there the file only uses POSIX toys.
2024-01-31render/pixel-format: Move has_alpha into it's own arrayLeo Li
Some opaque pixel formats (nv12, p010) require per-plane bytes_per_block info. However, it doesn't make sense to store them in wlr_pixel_format_info, as they will never be useful (currently, this info is used for shm, which doesn't have a concept of multi-planar buffers.) Let's define a separate array and function for determining whether a pixel format has alpha.
2024-01-26render/vulkan: correct sRBG gamma expansion in shaderFĂ©lix Poisot
2024-01-17render/vulkan: fix possible double freeKirill Primak
2024-01-04Fix bool return typesSimon Ser
This makes wlroots build in C23 mode. C23 is more strict and rejects implicit conversions from bool to a pointer.
2023-12-04render/vulkan: use _SRGB image view when possibleManuel Stoeckl
This is the last of a set of commits which ensures that both textures and render buffers can be accessed through _UNORM and _SRGB image views. While _UNORM image views are not yet used for 8-bpc image formats, they will be needed in the future to support color transforms for both textures and render buffers.
2023-12-04render/vulkan: constify vulkan_format_props_find_modifierManuel Stoeckl
2023-12-04render/vulkan: create VkImage with option for _SRGB view, if possibleManuel Stoeckl
2023-12-04render/vulkan: detect which _UNORM formats support _SRGB viewsManuel Stoeckl
2023-12-04render/vulkan: extract shm texture format query into functionManuel Stoeckl
2023-12-04render/vulkan: track and use _UNORM variants of _SRGB formatsManuel Stoeckl
Later commits will start using _SRGB image views again, where appropriate.
2023-11-30renderer: Drop buffer bindingAlexander Orzechowski
2023-11-30render: Nuke old read pixels APIAlexander Orzechowski
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-30render: Implement texture_preferred_read_formatAlexander Orzechowski
2023-11-30render/vulkan: Implement texture_read_pixelsAlexander Orzechowski
2023-11-28render/vulkan: drop current_command_bufferSimon Ser
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-22render/vulkan: drop legacy rendering APISimon Ser
2023-11-21render/vulkan: undo alpha premult for 8-bpc ARGB/ABGRManuel Stoeckl
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-10-26render/vulkan: use VK_KHR_global_priorityeri
References: #3386
2023-10-26render/vulkan: remove unused queue_props in rendererSimon Zeni
2023-10-21renderer/vulkan: don't add two alphas together in blend funcBrett Ernst
2023-10-17render/vulkan: undo alpha premult before sRGB encoding/decodingSimon Ser
sRGB encoding/decoding needs to happen with straight alpha, not pre-multiplied alpha.
2023-10-05render/vulkan: constrain blend to output subpass to redrawn regionManuel Stoeckl
This commit only applies to the render pass API.
2023-10-03treewide: Migrate from sizeof(struct) to sizeof(*pointer) where practicalAlexander Orzechowski
2023-09-21renderer: Use wlr_render_rect_options_get_boxAlexander Orzechowski
Fixes: #3697
2023-09-10render/vulkan: fix validation error with vkCmdBlitImageManuel Stoeckl
Specfically, VUID-vkCmdBlitImage-srcImage-00247.
2023-09-09render/vulkan: de-duplicate VkImageUsageFlagsSimon Ser
The flags passed to vkCreateImage() must match the flags used when querying formats. Make this clearer by using the same variable.
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.