Mesa (main): venus: descriptor pool to track pool state
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Aug 26 18:03:34 UTC 2021
Module: Mesa
Branch: main
Commit: a1e91b1163c84b79a0dde87cb7286d5a96ed1866
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a1e91b1163c84b79a0dde87cb7286d5a96ed1866
Author: Yiwei Zhang <zzyiwei at chromium.org>
Date: Fri Aug 20 18:53:04 2021 +0000
venus: descriptor pool to track pool state
It also tracks whether async set allocation is enabled.
Signed-off-by: Yiwei Zhang <zzyiwei at chromium.org>
Reviewed-by: Chia-I Wu <olvaffe at gmail.com>
Reviewed-by: Ryan Neph <ryanneph at google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12501>
---
src/virtio/vulkan/vn_descriptor_set.c | 19 +++++++++++++++++++
src/virtio/vulkan/vn_descriptor_set.h | 14 ++++++++++++++
2 files changed, 33 insertions(+)
diff --git a/src/virtio/vulkan/vn_descriptor_set.c b/src/virtio/vulkan/vn_descriptor_set.c
index a892665b98f..4b104e1aaf4 100644
--- a/src/virtio/vulkan/vn_descriptor_set.c
+++ b/src/virtio/vulkan/vn_descriptor_set.c
@@ -213,6 +213,25 @@ vn_CreateDescriptorPool(VkDevice device,
&dev->base);
pool->allocator = *alloc;
+
+ /* Without VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, the set
+ * allocation must not fail due to a fragmented pool per spec. In this
+ * case, set allocation can be asynchronous with pool resource tracking.
+ */
+ pool->async_set_allocation = !(
+ pCreateInfo->flags & VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT);
+
+ pool->max.set_count = pCreateInfo->maxSets;
+
+ for (uint32_t i = 0; i < pCreateInfo->poolSizeCount; i++) {
+ const VkDescriptorPoolSize *pool_size = &pCreateInfo->pPoolSizes[i];
+
+ assert(pool_size->type < VN_NUM_DESCRIPTOR_TYPES);
+
+ pool->max.descriptor_counts[pool_size->type] +=
+ pool_size->descriptorCount;
+ }
+
list_inithead(&pool->descriptor_sets);
VkDescriptorPool pool_handle = vn_descriptor_pool_to_handle(pool);
diff --git a/src/virtio/vulkan/vn_descriptor_set.h b/src/virtio/vulkan/vn_descriptor_set.h
index 85e7d2108b3..31611f74116 100644
--- a/src/virtio/vulkan/vn_descriptor_set.h
+++ b/src/virtio/vulkan/vn_descriptor_set.h
@@ -13,6 +13,12 @@
#include "vn_common.h"
+/* TODO accommodate new discrete type enums by:
+ * 1. increase the number of types here
+ * 2. add a helper to map to continuous array index
+ */
+#define VN_NUM_DESCRIPTOR_TYPES (VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT + 1)
+
struct vn_descriptor_set_layout_binding {
VkDescriptorType type;
uint32_t count;
@@ -33,10 +39,18 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(vn_descriptor_set_layout,
VkDescriptorSetLayout,
VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)
+struct vn_descriptor_pool_state {
+ uint32_t set_count;
+ uint32_t descriptor_counts[VN_NUM_DESCRIPTOR_TYPES];
+};
+
struct vn_descriptor_pool {
struct vn_object_base base;
VkAllocationCallbacks allocator;
+ bool async_set_allocation;
+ struct vn_descriptor_pool_state max;
+
struct list_head descriptor_sets;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(vn_descriptor_pool,
More information about the mesa-commit
mailing list