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