Commit graph

170 commits

Author SHA1 Message Date
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
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
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
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
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
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
Simon Ser
403eac51c4 render/vulkan: fix code style for function brackets 2023-05-04 13:31:29 +02: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
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
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
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
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
Kirill Primak
faa31d123f render/vulkan: always finish buffer addon on texture destroy 2022-12-22 12:42:08 +03:00
Kirill Primak
0702eb9219 render/vulkan: remove NULL renderer check on texture destroy 2022-12-22 11:45:12 +03:00
Simon Ser
8456ac6fa9 render/vulkan: wait for DMA-BUF fences
The Vulkan spec doesn't guarantee that the driver will wait for
implicitly synchronized client buffers before texturing from them.
radv happens to perform the wait, but anv doesn't.

Fix this by extracting implicit fences from DMA-BUFs, importing
them into Vulkan as a VkSemaphore objects, and make the render pass
wait on these VkSemaphores.
2022-12-06 14:54:09 +00:00
Simon Ser
a37a22e344 render/vulkan: use initializers for VkSubmitInfo 2022-12-03 09:53:32 +01:00
Simon Ser
666c45bb29 render/vulkan: remove stage_cb conditional
We always have a stage_cb at this point.
2022-12-03 09:39:12 +01:00
Simon Ser
dd5be430b4 render/vulkan: remove pre_cb in vulkan_end()
pre_cb was an alias for stage_cb->vk. Let's just use a single
variable instead.

Additionally, early return when vulkan_record_stage_cb() fails.
We were crashing in vkCmdPipelineBarrier() if that happened.
2022-12-03 09:36:18 +01:00
Simon Ser
27e057319a render/vulkan: fix vkCmdClearAttachments validation error
Skip clears with an empty scissor.

Fixes the following validation error:

    00:00:09.734 [wlr] [render/vulkan/vulkan.c:61] Validation Error: [ VUID-vkCmdClearAttachments-rect-02682 ] Object 0: handle = 0x62600001b100, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0xadbd476f | CmdClearAttachments(): pRects[0].rect.extent.width is zero. The Vulkan spec states: The rect member of each element of pRects must have an extent.width greater than 0 (https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VUID-vkCmdClearAttachments-rect-02682) (VUID-vkCmdClearAttachments-rect-02682)
2022-12-03 09:30:30 +01:00
Simon Ser
d6ff20268b render/vulkan: fix comma 2022-12-02 23:26:34 +01:00
Simon Ser
56326c7998 render/vulkan: use initializers for VkImageMemoryBarrier 2022-12-02 23:26:01 +01:00
Simon Ser
79aea58834 render/vulkan: fix missing pSignalSemaphores for stage CB
We were filling VkTimelineSemaphoreSubmitInfoKHR.pSignalSemaphoreValues,
but we were missing VkSubmitInfo.pSignalSemaphores.

This was causing VkTimelineSemaphoreSubmitInfoKHR.pSignalSemaphoreValues
to be ignored. By chance, the render command buffer was using the
next timeline point, so we were waiting for that instead.
2022-12-02 19:28:13 +00:00
Simon Ser
47a038c90e render/vulkan: move VkDescriptorSetAllocateInfo down
Move it down, right before it's used.
2022-12-02 18:28:55 +00:00
Simon Ser
337ef33edc render/vulkan: make shm/dmabuf split clearer in wlr_vk_format_props
struct wlr_vk_format_props contains a mix of properties for shm
and dmabuf, and it's not immediately clear which fields are for
which kind of buffer. Use a nested struct to group the fields.
2022-12-02 15:18:59 +00:00
Simon Ser
db9d277614 render/vulkan: make vulkan_format_props_find_modifier() return value const 2022-12-02 15:18:59 +00:00
Simon Ser
b4ad4671dc render/vulkan: check for barrier array alloc failure 2022-12-02 15:14:27 +00:00
Simon Ser
bc7f8de842 render/vulkan: improve message on format prop error
Use a more appropriate message on
vkGetPhysicalDeviceImageFormatProperties2() error.
2022-12-02 16:10:42 +01:00
Simon Ser
338a9616bd render/vulkan: simplify vulkan_format_props_query() 2022-12-02 16:10:41 +01:00
Simon Ser
a3874cac6c render/vulkan: extract DMA-BUF format query to separate function 2022-12-02 16:09:58 +01:00
Simon Ser
21c4516838 render/vulkan: add 64-bit UNORM and SFLOAT formats 2022-12-02 10:36:36 +01:00
Simon Ser
9f938f7f2a render/vulkan: add more packed formats 2022-12-02 10:35:45 +01:00
Simon Ser
171c9081d1 render/vulkan: add more 8 bits per channel formats 2022-12-02 10:28:52 +01:00
Simon Ser
ad165f7daf render/vulkan: explain format mapping with DRM 2022-12-02 10:24:00 +01:00
Simon Ser
8b9a48c984 render/vulkan: drop "_format" in wlr_vk_format fields
"format" is already in the name, no need to repeat ourselves.
`format->vk_format` sounds a bit redundant.
2022-12-02 10:24:00 +01:00
Alexander Orzechowski
db0e962368 wlr_texture: Expose owning renderer 2022-12-01 04:41:43 -05:00
Simon Ser
d2238bf722 render/vulkan: import semaphore to DMA-BUF instead of blocking
Right now the Vulkan renderer blocks until the frame is complete
after rendering. This is necessary because Vulkan doesn't
interoperate well with implicit sync we use everywhere else.

Use the new kernel API to import a sync_file into a DMA-BUF to
avoid blocking.
2022-11-28 23:50:41 +00:00
Simon Ser
10f543d579 render/vulkan: release stage buffers after command buffer completes
We need to wait for the pending command buffer to complete before
re-using stage buffers. Otherwise we'll overwrite the stage buffer
with new contents before the texture is fully uploaded.
2022-11-28 23:50:41 +00:00
Simon Ser
2a414c896e render/vulkan: destroy textures after command buffer completes
We need to wait for any pending command buffer to complete before
we're able to fully destroy a struct wlr_vk_texture: the Vulkan
spec requires the VkDescriptorSet to be kept alive.

So far we've done this in vulkan_end(), after blocking until the
command buffer completes. We'll soon stop blocking, so move this
logic in get_command_buffer(), where we check which commands buffers
have completed in a non-blocking fashion.
2022-11-28 23:50:41 +00:00
Simon Ser
0730552e85 render/vulkan: drop unused fields from wlr_vk_format_modifier_props
export_imported is never used, and dmabuf_flags is already checked
in query_modifier_support().
2022-11-28 10:22:56 +01:00
Manuel Stoeckl
c02872e033 render/vulkan: align staging buffers for texture upload
vkCmdCopyBufferToImage requires that the buffer offset be a multiple
of the texel block size, which for single plane uncompressed formats
is the same as the number of bytes per pixel. This commit adds an
alignment parameter to vulkan_get_stage_span which ensures that the
provided span (and the sequence of image copy operations derived which
use it) have this alignment.
2022-11-25 12:29:02 -05:00
Manuel Stoeckl
3ed69b4946 render/vulkan: add support for RGB565 texture format
Since this does not have a matching _SRGB-type vulkan format, add a
new shader variant/pipeline to perform the sRGB->linear texture
conversion.
2022-11-25 14:19:27 +00:00
Simon Ser
99134c26b8 render: stop pulling <wlr/backend.h>
Let's just forward-declare struct wlr_backend instead.

We need to fixup the Vulkan renderer: it needs makedev(), which
got included by chance via <wlr/backend.h> → <wlr/backend/session.h>
→ <libudev.h>.
2022-11-24 21:50:28 +00:00
Manuel Stoeckl
b97ef59393 render/vulkan: update shm texture data in one batch 2022-11-21 17:55:46 -05:00
Simon Ser
d6e2ab5145 render/vulkan: detect device loss 2022-11-15 15:50:19 +00:00
Simon Ser
23540b5579 render: allow wlr_renderer_impl.begin to fail
Make it return a bool to indicate success/failure. Adapt the
various implementations to check errors.
2022-11-15 15:50:19 +00:00
zccrs
5b34fe5513 render/vulkan: add wlr_vk_texture_has_alpha
Allow to get whether has alpha channel of the VkImage, it can help an
optimization to disable blending when the texture doesn't have alpha.
Because the VkFormat isn't enough because it's always set to
VK_FORMAT_B8G8R8A8_SRGB or VK_FORMAT_R8G8B8A8_SRGB.
2022-11-15 10:58:45 +08:00
Simon Ser
6baf045590 render/texture: constify wlr_texture_update_from_buffer() 2022-11-11 23:11:17 +00:00
Simon Zeni
f3ba14e491 render/vulkan: remove hardcoded validation layers
Users should use the VK_INSTANCE_LAYERS env var to set layers at runtime
2022-11-11 22:56:37 +00:00
Simon Ser
e1ba64c4b7 render/vulkan: use initializer for VkBufferImageCopy
Missed that one it seems.
2022-11-11 19:26:48 +00:00
Simon Ser
d112c2d922 render/vulkan: wait for device to become idle in vulkan_destroy()
It's not safe to destroy any resources which might still be in-use
by the GPU. Wait for any asynchronous tasks to complete before
destroying everything.
2022-11-11 19:18:04 +00:00
Simon Ser
f4f3c15c1e render/vulkan: always wait for last stage to complete before rendering
When we have multiple command buffers in flight, we need to make
sure we don't start rendering before the previous texture uploads
are complete.
2022-11-11 19:18:04 +00:00
Simon Ser
7fdcb45e66 render/vulkan: use command buffer pool for stage 2022-11-11 19:18:04 +00:00
Simon Ser
f1eae0eeeb render/vulkan: add a command buffer pool
Before re-using a VkCommandBuffer, we need to wait for its
operations to complete. Right now we unconditionally wait for
rendering to complete in vulkan_end(), however we have plans to
fix this [1]. To fully avoid blocking, we need to handle multiple
command buffers in flight at the same time (e.g. for multi-output,
or for rendering followed by texture uploads).

Implement a pool of command buffers. When we need to render, we
pick a command buffer from the pool which has completed its
operations. If we don't find one, try to allocate a new command
buffer. If we don't have slots in the pool anymore, block like we
did before.

[1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3574
2022-11-11 19:18:04 +00:00
Simon Ser
a8a194d695 render/vulkan: switch to timeline semaphores
Up until now we were using a VkFence for GPU-to-CPU
synchronization. This has some limitations that become a blocker
when trying to have multiple command buffers in flight at once
(e.g. for multi-output). It's desirable to implement a command
buffer pool [1], but VkFence cannot be used to track command buffer
completion for individual subpasses.

Let's just switch to timeline semaphores [2], which fix this issue,
make synchronization a lot more ergonomic and are a core Vulkan 1.2
feature.

[1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3802
[2]: https://www.khronos.org/blog/vulkan-timeline-semaphores
2022-11-11 19:18:04 +00:00
Simon Ser
f92d1499cd render/vulkan: add helper to load command function pointer
If NULL is returned by vkGetDeviceProcAddr(), either the driver
is buggy, either the wlroots code is buggy. For a valid device and
command name, drivers are not allowed to return NULL per the spec.

This mirrors what the GLES2 renderer does in load_gl_proc().
2022-11-11 19:18:04 +00:00
zccrs
270914d379 render/vulkan: add some interfaces to allow compositors to integrate
Added wlr_vk_renderer_get_* functions to allow get the VkInstance,
VkPhysicalDevice, VkDevice, queue family of a wlr_vk_renderer.

Added wlr_vk_renderer_get_current_image_attribs function to allow get
the VkImage of current renderer buffer to use on compositors.

Added wlr_renderer_is_vk function, it's like the wlr_renderer_is_gles2,
returns true if the wlr_renderer is a wlr_vk_renderer.

Added wlr_vk_image_get_attribs function to get a VkImage and it's
extras information (e.g. a VkImageLayout and VkImageFormat of the
VkImage) from a wlr_texture.
2022-11-08 12:56:38 +01:00
Simon Ser
6c31f3b078 render/vulkan: use wl_array for wlr_vk_shared_buffer.allocs
Avoids the need to open-code the realloc() logic.
2022-11-07 21:22:33 +00:00
Simon Ser
9a5cc36818 render/vulkan: simplify texture VkPipelineShaderStageCreateInfo
I simplified the quad VkPipelineShaderStageCreateInfo in [1], but
missed the one for texture.

[1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3823
2022-11-07 14:24:39 +01:00
Simon Ser
cfb768aab9 render/vulkan: use struct initializers
Instead of filling the fields one by one, use a struct initializer.
This avoids repeating the name of the variable and is more
consistent with the wlroots code style.
2022-11-06 14:20:34 +00:00
Simon Ser
7f5180af77 render/vulkan: simplify extension checks
find_extensions() is clunky to use when checking only a single
extension, and it's surprising that it returns NULL on success.

Simplify by replacing it with a check_extension() function which
just checks whether a single extension is in the list.
2022-11-06 14:18:13 +00:00
Simon Ser
2ac2835a1f render/vulkan: remove exts arg from vulkan_instance_create() 2022-11-04 14:12:38 +01:00
David96
7a42392da2 render/vulkan: add caching to vulkan_read_pixels 2022-11-04 09:13:48 +00:00
Simon Ser
9e5ad7a845 render/vulkan: add missing entries in vulkan_strerror()
And update the sort order to follow Khronos' <vulkan/vulkan_core.h>.
2022-10-18 16:57:00 +02:00
Gentaiii
11192e6930 Fixed false allocation failed 2022-10-11 09:36:36 +00:00
Simon Ser
221ee83d44 render/vulkan: drop wlr_vk_instance.extensions
This was unused. Even if it was, it'd be better to have bool fields
instead.
2022-10-10 14:39:47 +02:00
John Lindgren
ab8341975e render/vulkan: Fix type-punned pointer warning/error 2022-10-09 12:07:57 -04:00
David96
f885aa0fbe render/vulkan: implement vulkan_preferred_read_format 2022-10-07 15:59:39 +00:00
David96
dce1372e35 render/vulkan: Implement vulkan_read_pixels 2022-10-07 15:59:39 +00:00
Simon Ser
6832ae14aa render: drop wlr_renderer_read_pixels() flags
These are unused.
2022-10-04 09:15:19 +02:00
Simon Ser
e4efb6b601 render/vulkan: use addon for wlr_vk_texture
Avoids having to walk the list of all textures.
2022-09-30 14:02:51 +00:00
Simon Ser
7899b97d20 render/vulkan: use addon for wlr_vk_render_buffer
Avoids having to walk the list containing all of the render buffers.
2022-09-30 14:02:51 +00:00
Simon Ser
8d6d2101bc render/vulkan: add error handling for vulkan_find_mem_type()
The function returns -1 if it doesn't find a suitable memory type.
2022-09-19 10:33:29 +00:00