Mesa (main): venus: descriptor layout to track more binding infos

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Aug 26 18:03:34 UTC 2021


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

Author: Yiwei Zhang <zzyiwei at chromium.org>
Date:   Fri Aug 20 18:57:43 2021 +0000

venus: descriptor layout to track more binding infos

Rename existing max_binding to last_binding to be consistent.

1. layout to track last binding index
2. binding to track descriptor type
3. binding to track descriptor count

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 | 16 +++++++++++-----
 src/virtio/vulkan/vn_descriptor_set.h |  6 ++++++
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/virtio/vulkan/vn_descriptor_set.c b/src/virtio/vulkan/vn_descriptor_set.c
index 86bbd228635..6ca51d3f2ed 100644
--- a/src/virtio/vulkan/vn_descriptor_set.c
+++ b/src/virtio/vulkan/vn_descriptor_set.c
@@ -36,18 +36,24 @@ static void
 vn_descriptor_set_layout_init(
    struct vn_device *dev,
    const VkDescriptorSetLayoutCreateInfo *create_info,
+   uint32_t last_binding,
    struct vn_descriptor_set_layout *layout)
 {
    VkDevice dev_handle = vn_device_to_handle(dev);
    VkDescriptorSetLayout layout_handle =
       vn_descriptor_set_layout_to_handle(layout);
 
+   layout->last_binding = last_binding;
+
    for (uint32_t i = 0; i < create_info->bindingCount; i++) {
       const VkDescriptorSetLayoutBinding *binding_info =
          &create_info->pBindings[i];
       struct vn_descriptor_set_layout_binding *binding =
          &layout->bindings[binding_info->binding];
 
+      binding->type = binding_info->descriptorType;
+      binding->count = binding_info->descriptorCount;
+
       switch (binding_info->descriptorType) {
       case VK_DESCRIPTOR_TYPE_SAMPLER:
       case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
@@ -73,7 +79,7 @@ vn_CreateDescriptorSetLayout(
    const VkAllocationCallbacks *alloc =
       pAllocator ? pAllocator : &dev->base.base.alloc;
 
-   uint32_t max_binding = 0;
+   uint32_t last_binding = 0;
    VkDescriptorSetLayoutBinding *local_bindings = NULL;
    VkDescriptorSetLayoutCreateInfo local_create_info;
    if (pCreateInfo->bindingCount) {
@@ -91,8 +97,8 @@ vn_CreateDescriptorSetLayout(
       for (uint32_t i = 0; i < pCreateInfo->bindingCount; i++) {
          VkDescriptorSetLayoutBinding *binding = &local_bindings[i];
 
-         if (max_binding < binding->binding)
-            max_binding = binding->binding;
+         if (last_binding < binding->binding)
+            last_binding = binding->binding;
 
          switch (binding->descriptorType) {
          case VK_DESCRIPTOR_TYPE_SAMPLER:
@@ -110,7 +116,7 @@ vn_CreateDescriptorSetLayout(
    }
 
    const size_t layout_size =
-      offsetof(struct vn_descriptor_set_layout, bindings[max_binding + 1]);
+      offsetof(struct vn_descriptor_set_layout, bindings[last_binding + 1]);
    struct vn_descriptor_set_layout *layout =
       vk_zalloc(alloc, layout_size, VN_DEFAULT_ALIGN,
                 VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
@@ -122,7 +128,7 @@ vn_CreateDescriptorSetLayout(
    vn_object_base_init(&layout->base, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,
                        &dev->base);
 
-   vn_descriptor_set_layout_init(dev, pCreateInfo, layout);
+   vn_descriptor_set_layout_init(dev, pCreateInfo, last_binding, layout);
 
    vk_free(alloc, local_bindings);
 
diff --git a/src/virtio/vulkan/vn_descriptor_set.h b/src/virtio/vulkan/vn_descriptor_set.h
index 923a3cf1a3a..0eb53519e26 100644
--- a/src/virtio/vulkan/vn_descriptor_set.h
+++ b/src/virtio/vulkan/vn_descriptor_set.h
@@ -14,11 +14,17 @@
 #include "vn_common.h"
 
 struct vn_descriptor_set_layout_binding {
+   VkDescriptorType type;
+   uint32_t count;
    bool has_immutable_samplers;
 };
 
 struct vn_descriptor_set_layout {
    struct vn_object_base base;
+
+   uint32_t last_binding;
+
+   /* bindings must be the last field in the layout */
    struct vn_descriptor_set_layout_binding bindings[];
 };
 VK_DEFINE_NONDISP_HANDLE_CASTS(vn_descriptor_set_layout,



More information about the mesa-commit mailing list