Mesa (main): venus: remember framebuffer attachments

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 3 06:13:17 UTC 2021


Module: Mesa
Branch: main
Commit: c85aa41046351e7352d5fb6dc936f46ee03d3b50
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c85aa41046351e7352d5fb6dc936f46ee03d3b50

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Wed May  5 10:42:50 2021 -0700

venus: remember framebuffer attachments

We need them for wsi queue ownership transfer.

Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
Reviewed-by: Yiwei Zhang <zzyiwei at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10709>

---

 src/virtio/vulkan/vn_render_pass.c | 16 ++++++++++++++--
 src/virtio/vulkan/vn_render_pass.h |  3 +++
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/virtio/vulkan/vn_render_pass.c b/src/virtio/vulkan/vn_render_pass.c
index afba80d4b9c..777b893112a 100644
--- a/src/virtio/vulkan/vn_render_pass.c
+++ b/src/virtio/vulkan/vn_render_pass.c
@@ -285,13 +285,25 @@ vn_CreateFramebuffer(VkDevice device,
    const VkAllocationCallbacks *alloc =
       pAllocator ? pAllocator : &dev->base.base.alloc;
 
-   struct vn_framebuffer *fb = vk_zalloc(alloc, sizeof(*fb), VN_DEFAULT_ALIGN,
-                                         VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+   /* Two render passes differ only in attachment image layouts are considered
+    * compatible.  We must not use pCreateInfo->renderPass here.
+    */
+   const bool imageless =
+      pCreateInfo->flags & VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT;
+   const uint32_t view_count = imageless ? 0 : pCreateInfo->attachmentCount;
+
+   struct vn_framebuffer *fb =
+      vk_zalloc(alloc, sizeof(*fb) + sizeof(*fb->image_views) * view_count,
+                VN_DEFAULT_ALIGN, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
    if (!fb)
       return vn_error(dev->instance, VK_ERROR_OUT_OF_HOST_MEMORY);
 
    vn_object_base_init(&fb->base, VK_OBJECT_TYPE_FRAMEBUFFER, &dev->base);
 
+   fb->image_view_count = view_count;
+   memcpy(fb->image_views, pCreateInfo->pAttachments,
+          sizeof(*pCreateInfo->pAttachments) * view_count);
+
    VkFramebuffer fb_handle = vn_framebuffer_to_handle(fb);
    vn_async_vkCreateFramebuffer(dev->instance, device, pCreateInfo, NULL,
                                 &fb_handle);
diff --git a/src/virtio/vulkan/vn_render_pass.h b/src/virtio/vulkan/vn_render_pass.h
index 9590ad43095..f96ae502346 100644
--- a/src/virtio/vulkan/vn_render_pass.h
+++ b/src/virtio/vulkan/vn_render_pass.h
@@ -44,6 +44,9 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(vn_render_pass,
 
 struct vn_framebuffer {
    struct vn_object_base base;
+
+   uint32_t image_view_count;
+   VkImageView image_views[];
 };
 VK_DEFINE_NONDISP_HANDLE_CASTS(vn_framebuffer,
                                base.base,



More information about the mesa-commit mailing list